

The MAX30105, manufactured by Pimoroni (Part ID: PIM438), is a highly versatile optical sensor designed for heart rate and SpO2 (blood oxygen saturation) monitoring. It integrates a photodetector, LED drivers, and ambient light rejection circuitry, making it ideal for wearable health devices and other optical sensing applications. Additionally, the MAX30105 can be used for particle detection in applications such as smoke detection and environmental monitoring.








The MAX30105 is a compact and powerful sensor with the following key specifications:
| Parameter | Value | 
|---|---|
| Operating Voltage | 1.8V (logic) and 3.3V (LEDs) | 
| Current Consumption | 600 µA (typical, during operation) | 
| LED Wavelengths | Red: 660 nm, Infrared: 880 nm, Green: 537 nm | 
| Communication Interface | I2C (7-bit address: 0x57) | 
| Operating Temperature Range | -40°C to +85°C | 
| Dimensions | 5.6 mm x 3.3 mm x 1.55 mm | 
The MAX30105 module typically comes with the following pinout:
| Pin Name | Description | 
|---|---|
| VIN | Power supply input (3.3V or 5V, depending on the breakout board configuration). | 
| GND | Ground connection. | 
| SDA | I2C data line for communication. | 
| SCL | I2C clock line for communication. | 
| INT | Interrupt pin (active low, optional for event-driven applications). | 
0x57. Ensure no other devices on the I2C bus share this address.Below is an example of how to interface the MAX30105 with an Arduino UNO to read basic data:
#include <Wire.h>
#include "SparkFun_MAX30105.h" // Include the MAX30105 library
MAX30105 particleSensor; // Create an instance of the MAX30105 class
void setup() {
  Serial.begin(9600); // Initialize serial communication
  Serial.println("Initializing MAX30105...");
  // Initialize the sensor
  if (!particleSensor.begin()) {
    Serial.println("MAX30105 was not found. Please check wiring/power.");
    while (1); // Halt the program if the sensor is not detected
  }
  // Configure the sensor for heart rate and SpO2 monitoring
  particleSensor.setup(); // Use default settings
  particleSensor.setPulseAmplitudeRed(0x0A); // Set red LED to low power
  particleSensor.setPulseAmplitudeIR(0x0A);  // Set IR LED to low power
}
void loop() {
  // Read and print the IR value
  long irValue = particleSensor.getIR(); // Get the IR data
  Serial.print("IR Value: ");
  Serial.println(irValue);
  delay(100); // Wait 100ms before the next reading
}
SparkFun_MAX30105.h library is required for this example. Install it via the Arduino Library Manager.setPulseAmplitudeRed and setPulseAmplitudeIR) based on your application requirements.Sensor Not Detected
0x57).Inaccurate Readings
High Power Consumption
setPulseAmplitude functions.Interrupt Pin Not Working
Q: Can the MAX30105 be used for smoke detection?
A: Yes, the MAX30105 can detect particles in the air, making it suitable for smoke detection applications.
Q: What is the maximum I2C speed supported?
A: The MAX30105 supports I2C speeds up to 400 kHz (Fast Mode).
Q: Can I use the MAX30105 with a 5V microcontroller?
A: Yes, but ensure the breakout board includes level-shifting circuitry for I2C communication.
Q: How do I improve SpO2 accuracy?
A: Ensure the sensor is in direct contact with the skin and minimize motion during measurements.