An assistive vision & navigation device built using ESP32-CAM, TF-Luna LiDAR, and HC-SR04 Ultrasonic sensors.
Runs an on-device Edge Impulse model for real-time Indian currency detection with haptics and buzzer feedback.
-
👣 Navigation:
LiDAR as primary + ultrasonic as backup → vibration intensity scales with distance.
Uses SSE-based web hosting for low-latency updates. -
💵 Currency Detection:
On-device Edge Impulse model detects and identifies Indian banknotes via the ESP32-CAM.
Provides voice output feedback for blind or visually impaired users. -
🔀 Modes:
- Short press: toggle between Navigation ↔ Currency
-
🌐 Camera Server:
Built-in web interface for live streaming, capture, and remote configuration.
📦 Semicolon-Embedded-C-Project
├── 📂 currencydetection_c
│ ├── currency_detector_wrapper.cpp # Wrapper for currency detection logic
│ ├── currency_detector_wrapper.o # Compiled object file
│ ├── main.c # Main application entry for currency detection
│
├── 📂 lidar
│ ├── lidar_realtime_working_appupdated.c # Real-time LiDAR data acquisition and processing
│ ├── lidar_with_ui.c # LiDAR integration with web/UI interface
│
├── 📂 CameraWebServer1
│ ├── CameraWebServer1.ino # Main ESP32-CAM web server sketch
│ ├── app_httpd.cpp # HTTP server application for streaming
│ ├── board_config.h # Board configuration and pin definitions
│ ├── camera_index.h # HTML page template for camera streaming
│ ├── camera_pins.h # Camera pin mapping for various ESP32 boards
│ ├── cl.json # Configuration or class label file
│ ├── partitions.csv # ESP32 partition layout file
│
├── EdgeImpulseModel.c # Embedded Edge Impulse model for ML inference
│
├── README.md # Documentation for setup and usage
└── LICENSE # License file (if applicable)
| Component | Description / Notes |
|---|---|
| ESP32-CAM (AI-Thinker) | PSRAM enabled, main controller |
| TF-Luna LiDAR (UART) | For distance sensing |
| HC-SR04 Ultrasonic | Backup sensor (TRIG/ECHO; ECHO via 5V→3.3V divider) |
| Vibration Motor (ERM) | Controlled via NPN transistor (2N2222) with 1 kΩ base resistor |
| Active Buzzer / I²S Speaker | Audio or vibration feedback |
| Li-ion / LiPo (3.7 V) | Power source with TP4056 + boost converter |
| Momentary Push Button | Mode selector (short = toggle / long = mute) |
| Signal | ESP32-CAM Pin | Function / Notes |
|---|---|---|
| TF-Luna TX/RX | GPIO14 (UART) / GPIO15 (RX2) | Serial2 for LiDAR |
| HC-SR04 TRIG/ECHO | GPIO14 / GPIO15 | ECHO via voltage divider |
| Vibration Motor | GPIO12 → transistor | 1 kΩ base resistor, diode across motor |
| Buzzer | GPIO13 | Active buzzer output |
| Button | GPIO2 | INPUT_PULLUP |
| Power | 5 V / GND | From boost converter, common ground |
- Install ESP32 board support via Board Manager.
- Select board: AI Thinker ESP32-CAM
- PSRAM: Enabled
- Partition: Huge APP or
partitions.csv
- Open and upload
CameraWebServer1/CameraWebServer1.ino - Monitor serial output (
115200 baud) to find the device IP. - Access web UI via:
[env:esp32cam]
platform = espressif32
board = esp32cam
framework = arduino
board_build.partitions = partitions.csv
build_flags =
-DEI_CLASSIFIER_TFLITE_ENABLE_ESP_NN=1
-DEI_CLASSIFIER_ALLOCATION_STATIC=1
monitor_speed = 115200