|
各位大佬,我最近在搞毕业设计,想通过arduino,max30102,gy906实现脉搏体温测量,但效果并不好,无法读取数据(但两个传感器单独使用时能正常读取显示数据)
求教各位大佬如何解决!!!!谢谢!!!!
以下是代码:
gy906单独使用时代码:
//温度
#include <Wire.h> //IIC头文件
void setup() {
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin(9600); // 波特率
}
uint16_t result;
float temp;
void loop() {
Wire.beginTransmission(0x5A);
Wire.write(0x07); // sends instruction byte
Wire.endTransmission(false); // stop transmitting
Wire.requestFrom(0x5A, 3); //Send data n-bytes read
result = Wire.read(); //Receive DATA
result |= Wire.read() << 8; //Receive DATA
uint8_t pec = Wire.read();
delay(1000);
temp = result*0.02-273.15; //温度数值转换
Serial.print(F("temp="));
Serial.println(temp);
}
max30102单独使用测量脉搏时代码:
/*
Optical Heart Rate Detection (PBA Algorithm) using the MAX30105 Breakout
By: Bennu @ MH-ET LIVE
Date: October 2nd, 2017
https://github.com/MHEtLive/MH-ET-LIVE-max30102
This is a demo to show the reading of heart rate or beats per minute (BPM) using
a Penpheral Beat Amplitude (PBA) algorithm.
It is best to attach the sensor to your finger using a rubber band or other tightening
device. Humans are generally bad at applying constant pressure to a thing. When you
press your finger against the sensor it varies enough to cause the blood in your
finger to flow differently which causes the sensor readings to go wonky.
Hardware Connections (Breakoutboard to Arduino):
-5V = 5V (3.3V is allowed)
-GND = GND
-SDA = A4 (or SDA)
-SCL = A5 (or SCL)
-INT = Not connected
The MAX30105 Breakout can handle 5V or 3.3V I2C logic. We recommend powering the board with 5V
but it will also run at 3.3V.
*/
#include <Wire.h>
#include "MAX30105.h"
#include "heartRate.h"
MAX30105 particleSensor;
const byte RATE_SIZE = 4; //Increase this for more averaging. 4 is good.
byte rates[RATE_SIZE]; //Array of heart rates
byte rateSpot = 0;
long lastBeat = 0; //Time at which the last beat occurred
float beatsPerMinute;
int beatAvg;
void setup()
{
Serial.begin(115200);
Serial.println("Initializing...");
// Initialize sensor
if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //Use default I2C port, 400kHz speed
{
Serial.println("MAX30105 was not found. Please check wiring/power. ");
while (1);
}
Serial.println("Place your index finger on the sensor with steady pressure.");
particleSensor.setup(); //Configure sensor with default settings
particleSensor.setPulseAmplitudeRed(0x0A); //Turn Red LED to low to indicate sensor is running
particleSensor.setPulseAmplitudeGreen(0); //Turn off Green LED
}
void loop()
{
long irValue = particleSensor.getIR();
if (checkForBeat(irValue) == true)
{
//We sensed a beat!
long delta = millis() - lastBeat;
lastBeat = millis();
beatsPerMinute = 60 / (delta / 1000.0);
if (beatsPerMinute < 255 && beatsPerMinute > 20)
{
rates[rateSpot++] = (byte)beatsPerMinute; //Store this reading in the array
rateSpot %= RATE_SIZE; //Wrap variable
//Take average of readings
beatAvg = 0;
for (byte x = 0 ; x < RATE_SIZE ; x++)
beatAvg += rates[x];
beatAvg /= RATE_SIZE;
}
}
Serial.print("IR=");
Serial.print(irValue);
Serial.print(", BPM=");
Serial.print(beatsPerMinute);
Serial.print(", Avg BPM=");
Serial.print(beatAvg);
if (irValue < 50000)
Serial.print(" No finger?");
Serial.println();
}
gy906与max30102一起使用代码:
/*
shili5+gy906
*/
#include <Wire.h>
#include "MAX30105.h"
#include "heartRate.h"
MAX30105 particleSensor;
const byte RATE_SIZE = 4; //Increase this for more averaging. 4 is good.
byte rates[RATE_SIZE]; //Array of heart rates
byte rateSpot = 0;
long lastBeat = 0; //Time at which the last beat occurred
float beatsPerMinute;
int beatAvg;
void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
//Serial.begin(9600); // 波特率
Serial.begin(115200);
Serial.println("Initializing...");
// Initialize sensor
if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //Use default I2C port, 400kHz speed
{
Serial.println("MAX30105 was not found. Please check wiring/power. ");
while (1);
}
Serial.println("Place your index finger on the sensor with steady pressure.");
particleSensor.setup(); //Configure sensor with default settings
particleSensor.setPulseAmplitudeRed(0x0A); //Turn Red LED to low to indicate sensor is running
particleSensor.setPulseAmplitudeGreen(0); //Turn off Green LED
}
uint16_t result;
float temp;
void loop()
{
long irValue = particleSensor.getIR();
Wire.beginTransmission(0x5A);
Wire.write(0x07); // sends instruction byte
Wire.endTransmission(false); // stop transmitting
Wire.requestFrom(0x5A, 3); //Send data n-bytes read
result = Wire.read(); //Receive DATA
result |= Wire.read() << 8; //Receive DATA
uint8_t pec = Wire.read();
delay(1000);
temp = result*0.02-273.15; //温度数值转换
Serial.print(F("temp="));
Serial.println(temp);
if (checkForBeat(irValue) == true)
{
//We sensed a beat!
long delta = millis() - lastBeat;
lastBeat = millis();
beatsPerMinute = 60 / (delta / 1000.0);
if (beatsPerMinute < 255 && beatsPerMinute > 20)
{
rates[rateSpot++] = (byte)beatsPerMinute; //Store this reading in the array
rateSpot %= RATE_SIZE; //Wrap variable
//Take average of readings
beatAvg = 0;
for (byte x = 0 ; x < RATE_SIZE ; x++)
beatAvg += rates[x];
beatAvg /= RATE_SIZE;
}
}
Serial.print("IR=");
Serial.print(irValue);
Serial.print(", BPM=");
Serial.print(beatsPerMinute);
Serial.print(", Avg BPM=");
Serial.print(beatAvg);
// Serial.print(F("temp="));
Serial.println(temp);
if (irValue < 50000)
Serial.print(" No finger?");
Serial.println();
}
求教各位大佬如何解决!!!!谢谢!!!!
|
-
gy906单独使用效果
-
max30102单独使用效果
-
两传感器同时使用效果
|