An Arduino Uno R4 Minima–based CPR feedback system designed to monitor chest compression rate and provide real-time feedback during automated cardiopulmonary resuscitation (CPR).
The system uses an LM393 infrared speed sensor to measure compression frequency, a BTS7960 43A motor driver to control a reciprocating linear actuator, and a 16×2 I2C LCD to display compression status. Visual feedback is provided using three LEDs, while an emergency stop feature allows immediate interruption of operation.
The wiring diagram illustrates the electrical connections between the Arduino Uno R4 Minima, BTS7960 motor driver, LM393 IR sensor, 16×2 I2C LCD, DC-DC buck converter, 12V battery, and reciprocating linear actuator.
- Adult CPR mode
- Real-time compression rate monitoring
- IR sensor–based stroke detection
- Compression rate calculation (CPM)
- LCD feedback display
- LED status indicators
- Emergency stop functionality
- BTS7960 motor control
- Closed-loop monitoring of compression frequency
- Arduino Uno R4 Minima
- LM393 IR Speed Sensor
- BTS7960 43A Motor Driver
- 12V Reciprocating Linear Actuator
- 16×2 LCD with I2C Backpack
- 12V 7Ah Sealed Lead Acid (SLA) Battery
- DC-DC Buck Converter
- Push Buttons
- LEDs
- Breadboard
- Jumper Wires
| Component | Arduino Pin |
|---|---|
| IR Sensor OUT | D2 |
| Adult Mode Input | D3 |
| Emergency Stop | D5 |
| Green LED | D6 |
| Yellow LED | D7 |
| Red LED | D8 |
| BTS7960 RPWM | D9 |
| BTS7960 LPWM | D10 |
| BTS7960 R_EN | D11 |
| BTS7960 L_EN | D12 |
| LCD SDA | A4 |
| LCD SCL | A5 |
- Power on the system.
- Select Adult Mode.
- The Arduino controls the BTS7960 motor driver to operate the reciprocating linear actuator.
- The LM393 IR sensor detects every compression stroke.
- The Arduino calculates the compression rate in compressions per minute (CPM).
- The LCD displays the measured compression rate.
- LED indicators provide real-time feedback:
- Green: Correct compression rate (120–140 CPM)
- Yellow: Compression rate below the target range
- Red: Compression rate above the target range
- Activating the emergency stop immediately halts the actuator.
| Compression Rate | LCD Message | LED |
|---|---|---|
| 0 CPM | Compressing... | Off |
| Below 120 CPM | Too Slow! | Yellow |
| 120–140 CPM | Good Pace! | Green |
| Above 140 CPM | Too Fast! | Red |
cpr-feedback-device/
├── firmware/
│ └── cpr_feedback_device.ino
├── circuit/
│ └── wiring_diagram.png
├── images/
│ └── prototype.png
├── README.md
├── LICENSE
└── .gitignore
- Wire (included with Arduino IDE)
- LiquidCrystal_I2C
Install the LiquidCrystal_I2C library through the Arduino Library Manager before uploading the firmware.
- Open
firmware/cpr_feedback_device.inoin the Arduino IDE. - Select Arduino Uno R4 Minima.
- Install the required libraries.
- Connect the board through USB.
- Compile and upload the firmware.
- Connect the hardware according to the wiring diagram.
- Power the system and begin operation.
- Compression depth sensing
- PID-based motor control
- Wireless monitoring
- Battery health monitoring
- Data logging
- Load-cell-based compression force feedback
This project is licensed under the MIT License. See the LICENSE file for details.

