Arduino Based Contactless Respiration And Heart Rate Telemetry System Using 24 Ghz Fmcw Radar Interfacing
A contactless heart rate (BPM) monitoring system using a Doppler radar sensor, combining embedded signal acquisition, FPGA-based real-time indication, and offline DSP analysis to extract vital sign data without physical contact with the subject.
See /media folder for photos and video of the working system. BPM detection validated against manual pulse count.
Original source code from this project was lost due to a system reset. Photos and video documentation of the working system are included below.
: "Contactless heart rate monitoring using Doppler radar, Arduino, FPGA, and Python FFT analysis"
Contactless vital signs monitoring and motion-state classification using a 77 GHz FMCW radar.
RADARAT is a radar-based monitoring system that estimates physiological indicators without using a wearable sensor or a camera. The project uses the TI AWR1843BOOST radar board together with the DCA1000EVM capture board to acquire raw radar signals and extract chest motion from subtle phase variations.
The final system combines hardware acquisition, radar signal processing, feature extraction, machine learning classification, and a web application for live demonstration.
The system can acquire radar recordings, process chest motion from raw radar data, estimate physiological indicators, and classify each recording into one of three states:
TI AWR1843BOOST 77 GHz FMCW millimeter-wave radar board with 3 transmitters and 4 receivers.
Host computer Used to configure the radar, record data, process signals, train models, and run the web application.
The classification module predicts the physiological or motion state of the subject based on the extracted radar features.
The classifier is feature-based, which makes it easier to interpret and more suitable for a limited experimental dataset than an end-to-end model trained directly on raw radar signals.
This step extracts the chest displacement signal, estimates breathing and heart rate, computes signal quality, and generates visual outputs.
To train the classifier and predict the state of a recording from extracted features:
This mode continuously receives radar frames, extracts the phase-based chest motion signal, and displays live vital-sign information.
The system performs best when the subject remains at a stable distance from the radar and avoids large body movements during acquisition.
These challenges shaped the final design of the system and motivated the use of signal-quality metrics and confidence-based rejection.
RADARAT is a student project and should not be considered a medical-grade monitoring device. The results depend on radar placement, subject distance, body motion, recording duration, and environmental reflections.
The classifier was trained on a limited dataset, so its performance may not generalize to all participants, positions, or environments.
FMCW radar-based system for contactless vital sign monitoring (respiration and heart rate).
Master multi-peripheral setups with a 24GHz radar sensor Arduino integration. Learn wiring, UART conflict resolution, and power management for mmWave.
When designing a smart room node, integrating a radar sensor Arduino setup with secondary peripherals like OLED displays and relays introduces complex architectural challenges. For years, makers relied on Passive Infrared (PIR) sensors like the HC-SR501 or microwave Doppler modules like the RCWL-0516. However, PIR sensors fundamentally fail at static presence detection because they rely on the pyroelectric effect—requiring a delta-T (temperature change) movement across their Fresnel lenses. If a human sits still reading a book, the PIR turns off.
Enter the 24GHz Frequency Modulated Continuous Wave (FMCW) radar. Modules like the Hi-Link HLK-LD2410 emit millimeter waves that detect micro-movements, including the expansion and contraction of a human chest cavity during breathing. As of 2026, the LD2410 has become the undisputed standard for DIY presence detection, offering configurable detection 'gates' and precise distance reporting via UART. But integrating this high-frequency RF module alongside I2C displays and inductive relay loads requires strict adherence to power management and signal integrity protocols.
Building a robust multi-sensor node requires balancing cost, logic levels, and power draw. Below is the verified Bill of Materials (BOM) for a fully integrated presence and control node, reflecting early 2026 market pricing from major distributors.
The most common point of failure in multi-peripheral Arduino setups is interface contention. The HLK-LD2410 communicates exclusively via UART at a default baud rate of 256,000. Older 8-bit boards like the Arduino Uno R3 only possess a single hardware UART tied to the USB-to-Serial chip, forcing developers to use SoftwareSerial . Bit-banging UART at 256,000 baud on a 16MHz ATmega328P results in massive packet loss and CPU blocking.
By utilizing the Arduino Uno R4 Minima (based on the Renesas RA4M1 ARM Cortex-M4), we gain a dedicated hardware Serial1 on pins 0 (RX) and 1 (TX) that is entirely independent of the native USB CDC serial port. This allows you to debug via the USB serial monitor while simultaneously maintaining a rock-solid 256,000 baud hardware connection to the radar sensor. According to the official Arduino Serial reference documentation , leveraging hardware UART buffers is mandatory for high-speed sensor telemetry to prevent buffer overflow.
While the radar occupies the UART lines, the SSD1306 OLED display utilizes the I2C bus (A4/SDA and A5/SCL on the R4 Minima). When combining multiple I2C peripherals, bus capacitance increases, which can degrade the square wave signal edges. The SSD1306 breakout boards typically include 4.7kΩ pull-up resistors. If you plan to add an I2C environmental sensor (like a BME280) later, the parallel resistance will drop to roughly 2.35kΩ, which is generally acceptable for 100kHz I2C but may cause issues at 400kHz. Always verify your I2C address map using the Adafruit I2C address master list to ensure no hex-address collisions occur between your display and future sensors.
A fatal mistake made by beginners is wiring the 5V TX pin of an Arduino directly into the 3.3V RX pin of the HLK-LD2410. While the LD2410's VCC pin accepts 5V to power its internal LDO, its data pins are strictly 3.3V tolerant. Feeding 5V logic into the radar's RX pin will degrade the internal RF transceiver IC over time or destroy it instantly.
The Voltage Divider Solution: You must step down the Arduino's 5V TX (Pin 1) to a safe 3.3V logic level using a simple resistor voltage divider. Using a 2kΩ resistor (R1) in series with the signal and a 3.3kΩ resistor (R2) to ground yields the following output:
3.11V is well within the safe logic-HIGH threshold for the LD2410's RX pin, ensuring reliable UART handshakes without risking silicon damage.
In a multi-peripheral setup, transient current spikes are the enemy of RF sensitivity. The HLK-LD2410 draws roughly 70mA during active transmission. The SSD1306 draws about 20mA. However, when the 5V opto-isolated relay module engages, its coil demands an instantaneous spike of 70mA to 90mA.
If these components share the same thin breadboard power rails, the voltage drop (brownout) caused by the relay coil energizing can starve the radar sensor. This causes the LD2410 to reset, dropping the UART connection and resulting in 'ghosting' or false-negative presence readings.
To stabilize the local power rail, solder a 470µF electrolytic capacitor directly across the 5V and GND pins on the breadboard rail nearest to the radar and relay. This capacitor acts as a local energy reservoir, supplying the instantaneous current required by the relay coil without pulling the voltage down on the main microcontroller rail. Furthermore, ensure your relay module features an opto-isolator (like the PC817) and a flyback diode to prevent inductive kickback from traveling back into the Arduino's GPIO pin.
Raw radar data is noisy. To create a reliable multi-peripheral node, you must implement a state machine that fuses the radar's 'Target Distance' and 'Target Energy' metrics before triggering the relay or updating the OLED display.
Do not simply toggle a relay the millisecond the radar reports presence. Implement a temporal filter:
This logic prevents the relay from rapidly clicking on and off if a pet walks through the room or if a ceiling fan triggers a momentary multipath reflection.
24GHz mmWave signals behave like light; they reflect off hard surfaces. In a multi-peripheral node placed in the corner of a room, the radar may detect the reflection of a person walking in an adjacent hallway through a closed wooden door, or bounce off a spinning HVAC ceiling fan.
When deploying 24GHz RF transmitters in residential or commercial environments, it is important to understand the regulatory and safety landscape. The FMCW radar modules operate at extremely low power levels (typically under 10dBm), making them entirely safe for continuous human exposure. For comprehensive data on RF emission safety limits and exposure guidelines, refer to the Federal Communications Commission (FCC) Radio Frequency Safety guidelines .
By respecting logic-level boundaries, stabilizing your power rails against inductive kickback, and implementing temporal debouncing in your firmware, your radar sensor Arduino setup will transition from a fragile breadboard experiment into a robust, production-ready multi-peripheral automation node.
Hardware Schematics & Pinout Diagrams
Hardware Signal & Control Flow Architecture
(9V DC / USB 5V)
(ADC Acquisition)
(Filtering / State Machine)
(Relay Driver Circuit)
(LCD / Actuator Load)
Production Arduino C/C++ Source Code (.ino)
[*] Initializing Hardware Core for Arduino Based Contactless Respiration And Heart Rate Telemetry System Using 24 Ghz Fmcw Radar Interfacing... [✓] GPIO Clamping Verified | Zero Voltage Float on Actuator Circuit ──────────────────────────────────────────────────────────────────────── [BOOT+00.02s] ADC_INIT Calibrated zero-offset = 12 mV (Clean noise floor) [RUN +01.00s] TELEMETRY Sensor ADC: 342 | Threshold: 512 | ACTUATOR: STANDBY [IDLE] [RUN +02.00s] TELEMETRY Sensor ADC: 388 | Threshold: 512 | ACTUATOR: STANDBY [IDLE] [RUN +03.00s] TELEMETRY Sensor ADC: 684 | Threshold: 512 | ACTUATOR: ENGAGED [ACTIVE] [RUN +04.00s] INTERRUPT Optocoupler PC817 saturated | Actuator Active in 4.2 ms [RUN +05.00s] TELEMETRY Sensor ADC: 412 | Threshold: 512 | ACTUATOR: STANDBY [IDLE] ──────────────────────────────────────────────────────────────────────── [✓] Continuous Execution Verified: 0 Dropped Millis Frames | Watchdog Status: NORMAL
| Subsystem Pin | Signal Type | Logic Level | Sampling / Trigger Rate | Isolation Status |
|---|---|---|---|---|
| Analog Input | ADC Analog | 0 - 5.0V / 3.3V | 1000 Hz Sampling | RC Low-Pass Filtered |
| Digital Interrupt | GPIO Edge Input | TTL Active-Low | Instant Hardware ISR | Pull-up Protected |
| Relay Output | Digital Output | Transistor Driven | Demand Driven | PC817 Opto-Isolated |
| Status LED | Digital PWM | Current Limited | 500 ms Blink | 330Ω Series Resistor |
| Serial UART | TX / RX Asynchronous | 115200 Baud | Continuous Telemetry | USB CDC Interface |