정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

소스 새로올립니다 맞는지 봐주세요...
김근호 | 2016-11-18
#include <SoftwareSerial.h> //블루투스 통신 헤더파일
#include <Wire.h>
#include <SPI.h>    //SPI통신   헤더파일
#include <ADXL362.h>  //가속도센서 헤더파일
#include <BH1750.h>       //조도센서 헤더파일


SoftwareSerial mySerial(4,7); // RX, TX  //블루투스 핀 정의
BH1750 lightMeter;      //조도센서 lightMeter으로 정의
ADXL362 xl;             //가속도센서 xl로 정의

//가속도 16비트로 받기
int16_t temp;
int16_t X, Y, Z, Temperature;

unsigned long previousMillis = 0; //마지막으로 측정된 시간
const long interval = 10000; //10초간 시간 간격

//  VARIABLES(심박센서 변수)
int pulsePin = 0;                 // Pulse Sensor purple wire connected to analog pin 0
int blinkPin = 13;                // pin to blink led at each beat
int fadePin = 5;                  // pin to do fancy classy fading blink at each beat
int fadeRate = 0;                 // used to fade LED on with PWM on fadePin

// these variables are volatile because they are used during the interrupt service routine!
volatile int BPM;                   // used to hold the pulse rate
volatile int Signal;                // holds the incoming raw data
volatile int IBI = 600;             // holds the time between beats, the Inter-Beat Interval
volatile boolean Pulse = false;     // true when pulse wave is high, false when it's low
volatile boolean QS = false;        // becomes true when Arduoino finds a beat.

void setup() {
  
  
  pinMode(blinkPin,OUTPUT);         // pin that will blink to your heartbeat!
  pinMode(fadePin,OUTPUT);          // pin that will fade to your heartbeat!
  
  //스마트폰 블루투스
  Serial.begin(115200);
  while(!Serial){
    ;
  }
  interruptSetup();                 // sets up to read Pulse Sensor signal every 2mS 
   // UN-COMMENT THE NEXT LINE IF YOU ARE POWERING The Pulse Sensor AT LOW VOLTAGE, 
   // AND APPLY THAT VOLTAGE TO THE A-REF PIN
   //analogReference(EXTERNAL);
  //아두이노 블루투스
  mySerial.begin(115200);
  while (!mySerial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
 
  //조도센서 시리얼 begin
  lightMeter.begin();
  //가속도 시리얼 begin
  xl.begin(10);                   // Setup SPI protocol, issue device soft reset
  xl.beginMeasure();              // Switch ADXL362 to measure mode  
}


void loop() { 
  unsigned long currentMillis = millis(); //현재 시간
  int count=0;      //count변수 선언
  uint16_t ADXL362_sum=0;
  uint16_t BH1750_sum=0;

  
  
 //===========================심박센서============================================================
  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    
     }
  
  delay(20);                             //  take a break(0.02초 마다 센서읽음)
//=============================가속도센서 값 보여주기==============================================
 /*
  xl.readXYZTData(X, Y, Z, Temperature);  
 
  Serial.print("XVALUE=");
  Serial.print(X);   
  Serial.print("\tYVALUE=");
  Serial.print(Y);  
  Serial.print("\tZVALUE=");
  Serial.print(Z);  
  Serial.print("\tTEMPERATURE=");
  Serial.println(Temperature);   
  delay(100);                // Arbitrary delay to make serial monitor easier to observe
  */
  //====================================================================================================
  //===========조도센서,가속도센서 5분동안 값 저장시켜 저장시킨 값을 평균으로 환산하여 값 보내기====================

    if(currentMillis - previousMillis >= interval){   
    uint16_t lux = lightMeter.readLightLevel();
    xl.readXYZTData(X, Y, Z, Temperature);
    
    ADXL362_sum+=X,Y,Z,Temperature;
    BH1750_sum+=lux;
   
    count++;
    if(count == 30){
     float ADXL362_avg = ADXL362_sum / count;
     float BH1750_avg = BH1750_sum / count;
      
     count = 0;
     ADXL362_sum=0;
     BH1750_sum=0;
     
     Serial.print("Light: ");
     Serial.print(BH1750_avg);
    }
    previousMillis = currentMillis;
  }  
}
//=============================================================================================


//======================심박센서=================================================================

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
  }

 

이 소스는 일단 조도센서값과 가속도센서값을 10초마다 값을받아 누적시켜 평균을구하여 5분마다 블루투스로 전송하는 소스를 짰습니다..주석처리한 조도,가속도센서 5분마다 평균내서 값보내기 쪽봐주세요... 보시고 조언부탁드립니다...  그리고 제가 심박,조도,가속도 값을 이렇게 10초마다 평균을 환산하여 5분마다 통신을할려는데요 한번에 스마트기기로 전송하는 방법을 알고싶습니다... 스마트워치를 만들고있는데요 조금 도와주세요 여러분..

이전글   |    닷두이노가 머죠? 2016-11-17
다음글   |    라인트레이서 센서값 저장 및 불러오기 2016-11-18