Iot/Arduino
아두이노 생체신호 센서 Data 파이썬으로 받아서 .csv 저장하기
잉_민
2024. 2. 16. 13:39
728x90
반응형
아두이노 생체신호 센서 Data 파이썬으로 받아서 .csv 저장하기
0.센서
gsr, pulse sensor
https://ing-min.tistory.com/204
아두이노 SEN-11574 심박 센서
https://surtrtech.com/2018/12/28/interfacing-1-heart-pulse-beat-sensor-amped-sen-11574-with-arduino/ Interfacing 1$ Heart Pulse / Beat sensor AMPED SEN 11574 with Arduino Hello, and welcome to this tutorial where we try to use a 1$ Heart pulse sensor, whic
ing-min.tistory.com
1. 아두이노 코드
const int GSR = A2; // GSR 센서 연결 핀
const int PulseSensorPin = A0; // 펄스 센서 연결 핀
int gsr_average = 0; // GSR 신호 평균값
int pulse_value = 0; // 펄스 센서 값
void setup() {
Serial.begin(9600); // 시리얼 통신 시작
}
void loop() {
long sum_gsr = 0; // GSR 신호의 합계를 저장할 변수
long sum_pulse = 0; // 펄스 신호의 합계를 저장할 변수
// GSR 신호를 1초에 24번 받아옴
for(int i = 0; i < 24; i++) {
int sensorValue = analogRead(GSR); // GSR 센서 값 읽기
sum_gsr += sensorValue; // 합계에 추가
delay(42); // 약 1/24초 (1000ms / 24 = 41.67ms)
}
gsr_average = sum_gsr / 24; // GSR 신호의 평균값 계산
// 펄스 신호 읽기
for(int i = 0; i < 24; i++) {
int pulseValue = analogRead(PulseSensorPin); // 펄스 센서 값 읽기
sum_pulse += pulseValue; // 합계에 추가
delay(42); // 약 1/24초 (1000ms / 24 = 41.67ms)
}
pulse_value = sum_pulse / 24; // 펄스 신호의 평균값 계산
// 결과 출력
Serial.print("GSR: ");
Serial.print(gsr_average);
Serial.print(", Pulse: ");
Serial.println(pulse_value);
}
2.py 코드 (visual code 환경에서 작업)
import serial
import csv
import time
import msvcrt
import os # 파일 및 디렉토리 관리를 위한 os 모듈
# 데이터 폴더 생성
data_folder = 'data'
if not os.path.exists(data_folder):
os.makedirs(data_folder)
# 아두이노와의 시리얼 통신 설정
arduino_port = 'COM3'
baud_rate = 9600
ser = serial.Serial(arduino_port, baud_rate)
time.sleep(2)
# 실험자 번호 입력 받기
participant_number = input("Enter participant number: ").zfill(2) # 실험자 번호를 두 자리로 지정하고 앞에 0을 채움
# 데이터 기록을 위한 변수
data = []
record = False
print("Press spacebar to start recording. Press enter to stop.")
while True:
# 사용자 입력 처리
if msvcrt.kbhit():
key = msvcrt.getch()
if key == b' ':
record = True
print("Recording started.")
elif key == b'\r':
record = False
print("Recording stopped.")
break
if record:
# 아두이노로부터 데이터 읽기
arduino_data = ser.readline().decode('ascii').strip()
gsr, pulse = arduino_data.split(",")
timestamp = time.strftime('%Y-%m-%d %H:%M:%S')
# 데이터를 리스트에 추가
data.append([timestamp, gsr, pulse])
# CSV 파일로 데이터 저장
filename = f"{data_folder}/recorded_data_{participant_number}.csv" # 파일 이름 생성
with open(filename, mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(["Timestamp", "GSR", "Pulse"])
writer.writerows(data)
print(f"Data saved to {filename}")
4.
1. cmd 실행
2. activate ---가상환경
3. cd C:\Users\------\Desktop\폴더이름
4. python ---파일이름.py
5_0. 실험자 번호 입력 (두자리수)
5. 스페이스바 누르면 레코딩 실행됨
6.엔터누르면 리코딩 종료
7. data 폴더에 csv 파일 생성됨.
5.오류
serial.serialutil.SerialException: could not open port 'COM3': PermissionError(13, '액세스가 거부되었습니다.', None, 5)
>>>>아두이노 시리얼 모니터 끄면됨
728x90
반응형