As per the question, I ask because when I use either the MAX30100 or MAX30102 and power up the Ardiono Nano, there is no indication of the sensor actually working or detected.
I'm not sure if there should be an led or something.
This is the code I am using to detect a pulse etc., which just almost immediately says MAX30105 was not found. Please check wiring/power.
Err, is it specifically looking for the MAX30105 sensor, or just any.
I've checked the wiring which consists of x2 +v and x2 -v plus the the sda and scl connections.
SCL from the sensor -> A5 on the nano
SDA from the sensor -> A4 on the nano
The sensor I am using is a GY-MAX30100, and also have the MAX30102 which I tried but still no led lit up.I have checked the voltage to the sensor, and it is 3.15v.
I uploaded a I2C scanner sketch and it found 1 device at 87 (0x57), which is the GY-30100 sensor. As that is found , but I'm still getting the MAX30105 was not found. Please check wiring/power. and no led showing, or should there be one.
#include <Wire.h>
#include "MAX30105.h"
#include <LiquidCrystal.h>
#include "heartRate.h"
MAX30105 particleSensor;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
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(9600);
lcd.begin(16, 2);
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();
lcd.setCursor(0, 0);
lcd.print("BPM: ");
lcd.print(beatAvg);
lcd.setCursor(0, 1);
lcd.print(" IR: ");
lcd.print(irValue);
}
