Heart Rate Monitor Kit with AD8232 ECG sensor module

AD8232 ECG Heart Rate Monitor Kit
Professional-Grade Biopotential Measurement for Arduino and Medical Applications
Introduction
The AD8232 ECG Sensor Module is a compact board that measures electrical activity of the heart. This single-lead ECG front end is designed for portable, low-power applications and works perfectly with Arduino for heart rate monitoring projects.
Key Features
Medical Grade
Single-lead ECG monitoring
High Precision
Integrated signal conditioning
Low Power
170μA typical current consumption
Lead-Off Detection
Built-in electrode contact monitoring
Technical Specifications
Input Range | ±1.5mV to ±100mV |
---|---|
Bandwidth | 0.5Hz to 40Hz |
Gain | 100 V/V (adjustable) |
Supply Voltage | 3.0V to 5.5V |
Output Type | Analog (ECG signal) + Digital (LO+/LO-) |
Electrodes | 3x Snap-on (RA, LA, RL) |
Pin Configuration
Pin | Label | Description | Arduino Connection |
---|---|---|---|
1 | 3.3V | Power (3.3V recommended) | 3.3V |
2 | GND | Ground | GND |
3 | OUTPUT | ECG Analog Output | A0 |
4 | LO+ | Lead-Off Detect Positive | D11 (Digital Input) |
5 | LO- | Lead-Off Detect Negative | D10(Digital Input) |
6 | SDN | Shutdown Control | D4 (Optional) |
Important: Proper electrode placement is crucial for accurate readings
Electrode Placement

Standard Lead I Configuration:
- RA (Right Arm): Right side of chest
- LA (Left Arm): Left side of chest
- RL (Right Leg): Ground reference
For best results, clean skin and use conductive gel
Basic ECG Monitoring
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// AD8232 ECG Basic Monitoring const int ecgPin = A0; const int loPlus = 2; const int loMinus = 3; void setup() { Serial.begin(9600); pinMode(loPlus, INPUT); pinMode(loMinus, INPUT); } void loop() { if((digitalRead(loPlus) == 1 || (digitalRead(loMinus) == 1)){ Serial.println("Electrode disconnected!"); } else { int ecgValue = analogRead(ecgPin); Serial.println(ecgValue); } delay(10); } |
Processing Visualization: Use Serial Plotter or Processing IDE for ECG waveform display
Advanced Features
Heart Rate Calculation
1 2 3 4 5 6 7 8 9 10 |
// Detect R-peaks and calculate BPM unsigned long lastBeat = 0; float threshold = 520; // Adjust based on signal float bpm = 0; if(ecgValue > threshold && millis() > lastBeat + 200){ bpm = 60000 / (millis() - lastBeat); lastBeat = millis(); Serial.print("BPM: "); Serial.println(bpm); } |
Signal Filtering
1 2 3 4 5 6 7 8 9 10 11 12 |
// Simple moving average filter #define FILTER_SIZE 5 int filterBuffer[FILTER_SIZE]; int filterIndex = 0; int filteredValue = 0; filterBuffer[filterIndex] = ecgValue; filterIndex = (filterIndex + 1) % FILTER_SIZE; for(int i=0; i<FILTER_SIZE; i++){ filteredValue += filterBuffer[i]; } filteredValue /= FILTER_SIZE; |
SD Card Logging
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Log ECG data to SD card #include #include File ecgFile; void setup(){ SD.begin(4); // CS pin ecgFile = SD.open("ecg.csv", FILE_WRITE); } void loop(){ ecgFile.print(millis()); ecgFile.print(","); ecgFile.println(ecgValue); } |
Bluetooth Streaming
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Stream ECG via Bluetooth #include SoftwareSerial btSerial(10, 11); // RX, TX void setup(){ btSerial.begin(9600); } void loop(){ btSerial.println(ecgValue); delay(10); } |
Troubleshooting
Noisy Signal
- Ensure proper electrode contact
- Keep away from power cables
- Add RC low-pass filter (10kΩ + 0.1μF)
Flatline Reading
- Check electrode connections
- Verify power supply (3.3V recommended)
- Test with different electrode positions
False Alarms
- Adjust detection threshold
- Implement software debouncing
- Check for muscle movement artifacts