oF: Arduino+openFrameworks에서 심박수 얻기

11536 단어 ArduinoopenFrameworks
2014년 11월에 심박수의 비주얼라이저를 만들었습니다.
3,000명에게 체험해 주셨습니다. 그 절은 감사합니다.
h tp // 뿌루세 p하세. pfq. jp/

그렇다면 그 때 사용한 심박 센서와 oF에서 값을 얻는 방법에 대해 써 갑니다.
기본적으로 Arduino로 센서를 연결하고 그것을 oF로 픽업하는 간단한 방법입니다.

[01] 사용한 심박 센서





Pulse Sensor
heart-rate beats per minute for arduino
ht tp // 푸 1 전선 r. 코m/

Arduino에 연결하여 사용할 수 있는 심플한 심박 센서입니다. (이 기사를 쓰고 있을 때 알았는데, 킥스타터 에서 나온 것 같네요)

일본에서의 경우는 이쪽에서 구입할 수 있습니다.

스위치 과학
htps //w w. 슈 tch-s 시엔세. 코 m/타타 g/1135/

내용은 위의 사진대로 센서 본체와 손가락에 감는 테이프와 벨크로 등이 들어 있습니다.
또, 그대로라면 기판이 노출되어 있으므로, 접착제 총으로 표면을 덮을 필요가 있습니다.
아래의 비디오를 참고로 공작을 해 주세요.
ht tp // 푸 l 전선 r. 이 m / b ぉ gs / 네 ws / 7406 100

제 경우에는 아교 총의 심에 투명도가 높은 것을 사용했습니다. (아래 링크 참조)
반투명의 것으로 덮어 버리면, LED의 빛이 차단되어 버리기 때문에 정밀도가 떨어집니다.
h tp // w w. 아마존. 이. jp/dp/B006JZC레2/

또한 작업은 주방 종이에 수행 할 때 깔끔하게 코팅 할 수 있습니다.

[02] 심박 센서를 Arduino에 연결



아래 그림에서 Arduino에 Pulse Sensor를 연결합니다.
Arduino는 UNO (Rev3)를 사용했습니다.
  • 레드 라인: 5V
  • 블랙 라인: GND
  • 보라색 라인: A0



  • 그리고 아래 페이지에서 Latest Arduino code version 1.2를 DL합니다.
    ht tp // 푸 l 전선 r. 코 m / Page s / Kode-an d-gui

    이 안에 있는 PulseSensorAmped_Arduino_1dot2.ino 를 Arduino에 씁니다.
    레코딩에 성공하면 Pulse Sensor에 손가락을 밉니다. (제1 관절의 사이 당이 상당히 잡히기 쉽습니다)
    그러면 Arduino의 'L'LED가 심박수에 따라 깜박입니다. ('L'LED는 Arduino에 붙어 있는 Digital Pin 측의 작은 LED)

    여기까지 Arduino 측의 세팅은 완료입니다.

    [03] oF로 값 획득



    우선, Arduino측의 처리와 oF에서의 처리의 분리의 설명.
    방금 전의 PulseSensorAmped_Arduino_1dot2.ino와 같은 폴더에 Interrupt.ino라는 파일이 있다고 생각합니다만, 이 2개의 파일중에서 심박수(BPM)와 IBI(인터벌)를 계산하고 있습니다.

    이하의 장소에서 시리얼에 데이터를 날리고 있으므로, oF에서는 이 데이터를 취득하는 것만으로 OK입니다.

    PulseSensorAmped_Arduino_1dot2.ino
    void loop(){
      sendDataToProcessing('S', Signal);     // send Processing the raw Pulse Sensor data
      if (QS == true){                       // Quantified Self flag is true when arduino finds a heartbeat
            fadeRate = 255;                  // Set 'fadeRate' Variable to 255 to fade LED with pulse
            sendDataToProcessing('B',BPM);   // send heart rate with a 'B' prefix
            sendDataToProcessing('Q',IBI);   // send time between beats with a 'Q' prefix
            QS = false;                      // reset the Quantified Self flag for next time    
         }
    
      ledFadeToBeat();
    
      delay(20);                             //  take a break
    }
    
    ...
    
    void sendDataToProcessing(char symbol, int data ){
        Serial.print(symbol);                // symbol prefix tells Processing what type of data is coming
        Serial.println(data);                // the data to send culminating in a carriage return
    }
    

    oF의 코드는 Addon화했으므로 발췌하지만,
  • 1) 직렬 연결
  • 2) Arduino에서 날아온 바이트 데이터를 파싱하고 취득
  • 3) 2 반복

  • 라고 하는 순서로 oF로부터 심박(BPM)이나 IBI(인터벌)를 취득할 수 있습니다.

    Addon은 여기에서 부탁드립니다. ( 이상한 곳 있으면 이쪽으로 연락을 htps : // 라고 해서 r. 이 m/h_하야시 )
    htps : // 기주 b. 코 m / 히사하야시 / 오 f rd 푸 l 선글라스 r

    위의 Addon을 읽은 후 아래 설명을 추가하면 값을 얻을 수 있다고 생각합니다.
    다만 Mac에서 밖에 확인하고 있지 않기 때문에, 시리얼의 포트 취득등 편이 Windows라고 이끼 가능성이 있습니다.

    ofApp.h
    #include "ofxArdPulseSensor.h"
    
    ...
    
    public:
        ofxArdPulseSensor pSensor;
        PulseData pData;
    
    

    ofApp.cpp
    //--------------------------------------------------------------
    void ofApp::setup(){
        ofSetFrameRate(60);
        ofBackground(0,0,0);
    
        pSensor.setup();
    }
    
    //--------------------------------------------------------------
    void ofApp::update(){
        pSensor.update();
        pData = pSensor.getSensor();
    }
    
    //--------------------------------------------------------------
    void ofApp::draw(){
    
        bool bSetupArduino = pData.bSetupArduino;
        int pulseVal = pData.pulseVal;
        int bpm = pData.BPM;
        int ibi = pData.IBI;
    
        string msg = "";
        msg += "FPS: " + ofToString(ofGetFrameRate()) + "\n";
        msg += "bSetupArduino: " + ofToString(bSetupArduino) + "\n";
        msg += "pulseVal: " + ofToString(pulseVal) + "\n";
        msg += "BPM: " + ofToString(bpm) + "\n";
        msg += "IBI: " + ofToString(ibi) + "\n";
        ofSetColor( 255, 255 );
        ofDrawBitmapString(msg, 20, 20);
    }
    

    좋은 웹페이지 즐겨찾기