Welcome to Hackster!
Hackster is a community dedicated to learning hardware, from beginner to pro. Join us, it's free!
TIMOTHY MWALA
Published © LGPL

Real-Time Radar Visualization by Carenuity C3-Mini & OLED

Experience real-time radar data visualization with the Carenuity C3-Mini, LD2410C radar sensor, & OLED display via I2C - ideal for security.

IntermediateFull instructions provided1 hour229
Real-Time Radar Visualization by Carenuity C3-Mini & OLED

Things used in this project

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Code

LD2410C Arduino code

C9Search
Install the LD2410 Library from the library manager
#define MONITOR_SERIAL Serial
#define RADAR_SERIAL Serial1
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSans9pt7b.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define RADAR_RX_PIN 5
#define RADAR_TX_PIN 4

#include <ld2410.h>

ld2410 radar;

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

uint32_t lastReading = 0;
bool radarConnected = false;

void setup(void) {
    MONITOR_SERIAL.begin(115200); // Feedback over Serial Monitor

    // radar.debug(MONITOR_SERIAL); // Uncomment to show debug information from the library on the Serial Monitor. By default this does not show sensor reads as they are very frequent.
    #if defined(ESP32)
    RADAR_SERIAL.begin(256000, SERIAL_8N1, RADAR_RX_PIN, RADAR_TX_PIN); // UART for monitoring the radar
    #elif defined(__AVR_ATmega32U4__)
    RADAR_SERIAL.begin(256000); // UART for monitoring the radar
    #endif
    delay(500);
    MONITOR_SERIAL.print(F("\nConnect LD2410 radar TX to GPIO:"));
    MONITOR_SERIAL.println(RADAR_RX_PIN);
    MONITOR_SERIAL.print(F("Connect LD2410 radar RX to GPIO:"));
    MONITOR_SERIAL.println(RADAR_TX_PIN);
    MONITOR_SERIAL.print(F("LD2410 radar sensor initialising: "));
    if (radar.begin(RADAR_SERIAL)) {
        MONITOR_SERIAL.println(F("OK"));
        MONITOR_SERIAL.print(F("LD2410 firmware version: "));
        MONITOR_SERIAL.print(radar.firmware_major_version);
        MONITOR_SERIAL.print('.');
        MONITOR_SERIAL.print(radar.firmware_minor_version);
        MONITOR_SERIAL.print('.');
        MONITOR_SERIAL.println(radar.firmware_bugfix_version, HEX);
    } else {
        MONITOR_SERIAL.println(F("not connected"));
    }

    // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
    if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
        Serial.println(F("SSD1306 allocation failed"));
        for (;;); // Don't proceed, loop forever
    }
    // Clear the buffer
    display.clearDisplay();
    display.display();
    delay(1500);
}

void loop() {
    radar.read();
    if (radar.isConnected() && millis() - lastReading > 1000) { // Report every 1000ms
        lastReading = millis();
        if (radar.presenceDetected()) {
            if (radar.stationaryTargetDetected()) {
                Serial.print(F("Stationary target: "));
                Serial.print(radar.stationaryTargetDistance());
                Serial.print(F("cm energy:"));
                Serial.print(radar.stationaryTargetEnergy());
                Serial.print(' ');

                // Display on OLED
                display.clearDisplay();
                display.setFont(&FreeSans9pt7b);
                display.setTextSize(1);
                display.setTextColor(SSD1306_WHITE); // Draw white text
                display.setCursor(0, 15); // Start at top-left corner
                display.print(F("S.target: "));
                display.print(radar.stationaryTargetDistance());
                display.print(F("cm energy:"));
                display.print(radar.stationaryTargetEnergy());
                display.display();
            }
            if (radar.movingTargetDetected()) {
                Serial.print(F("M.target: "));
                Serial.print(radar.movingTargetDistance());
                Serial.print(F("cm energy:"));
                Serial.print(radar.movingTargetEnergy());

                //Display on OLED
                display.print(F("M.target: "));
                display.print(radar.movingTargetDistance());
                display.print(F("cm energy:"));
                display.print(radar.movingTargetEnergy());
                display.display();
            }
            Serial.println();
        } else {
            Serial.println(F("No target"));
        }
    }
}

Credits

TIMOTHY MWALA
30 projects • 17 followers
I am an Embedded engineer who like prototyping
Contact

Comments

Please log in or sign up to comment.