DriveSight
A mobile robot project with a camera for visual tracking, based on a Raspberry Pi Pico 2W and ESP32-S3.
Author: Neagu Andrei-Cristian
GitHub Project Link: https://github.com/UPB-PMRust-Students/project-mohgTheOmen.git
Description
DriveSight is a manually controlled robotic platform equipped with real-time video streaming. It integrates a camera module for live feed monitoring and a wireless controller interface for direct motor control, providing precise, remote navigation and situational awareness.
Motivation
I started this project to challenge myself and explore how far I could push the capabilities of embedded hardware, combining real-time control, wireless communication, and camera streaming on constrained systems.
Architecture
Main Components:
- Raspberry Pi Pico 2W (Motor Controller): Controls motors, ultrasonic sensors, and receives movement commands via UART.
- ESP32-S3: Captures a live camera feed and sends control commands from a connected Bluetooth controller.
- Raspberry Pi Pico 2W (Display Host): Hosts a Wi-Fi access point and receives data from the motor controller to display real-time sensor values or system status on a small screen.
Feedback Mechanisms:
- Current sensors (INA219): Monitor motor current to help maintain consistent speed across varying surface conditions.
- Ultrasonic sensors: Provide obstacle detection and distance feedback for navigation and collision avoidance.
User Interface:
- Web-based interface: Hosted by the ESP32-S3 for viewing the live camera feed.
- Bluetooth controller: Used for manual driving input.
- Onboard display: Connected to Pico #2, shows live telemetry from the motor controller over Wi-Fi.
Connections Between Components:
- UART: Used for communication between the ESP32-S3 and motor controller Pico.
- Wi-Fi: Motor controller Pico connects to the display host Pico (AP mode) for data transmission.
- I2C: Used by the motor controller Pico for reading data from INA219 current sensors and ultrasonic sensors.
- GPIO: Used to control the L298N motor driver from the motor controller Pico.
Log
Week 21 - 27 April
- Tested components individually.
Week 28 April - 4 May
- Set up the ESP32-S3 to stream the webserver.
- Assembled the second Pico to display data received through TCP from the first Pico.
Week 5 - 11 May
Week 12 - 18 May
Week 19 - 25 May
Hardware
- Raspberry Pi Pico 2W: Main controller handling sensors and motor control.
- ESP32-S3: Provides camera feed for object tracking and sends control commands.
- Raspberry Pi Pico 2W (Display Unit): Hosts an access point and displays telemetry data.
- ST7735s: Display the telemetry data.
- L298N Motor Driver: Drives the two DC motors.
- 2 × DC Motors: Provide movement for the robot.
- 2 × INA219 Current Sensors: Monitor motor currents to detect stalls or resistance changes.
- 3 × HC-SR04 Ultrasonic Sensors: Detect obstacles in front of the robot.
- Power Bank or Li-ion Batteries: Powers the system.
- Wires, Breadboard, and Connectors: For interconnecting all the components.
Schematics
(to be added)
Bill of Materials
Device | Usage | Price |
---|---|---|
2x Raspberry Pi Pico 2W | Main control board | 39.66 lei |
ESP32-S3 | Camera and Wi-Fi | 56.71 lei |
L298N Motor Driver | Controls motor power | 10.99 lei |
ST7735s Display | Displays sensor data | 27.99 lei |
2x JGA25-370 Motors | Robot movement | 49.00 lei |
2x INA219 Current Sensor | Current monitoring | 29.99 lei |
3x HC-SR04 Ultrasonic Sensor | Obstacle detection | 14.99 lei |
Li-ion 3x Battery Holder | Power source | 20.13 lei |
Wires, Connectors, Breadboard, Resistors | Wiring | Already had them |
Software
ESP32-S3 (C)
Library | Description | Usage |
---|---|---|
ESP-IDF | Official Espressif IoT Development Framework | Base SDK for Wi-Fi, networking, etc. |
esp_camera | Camera driver for OV3660 | Captures and streams MJPEG frames |
Bluepad32 | Bluetooth game controller library | Receives input from Bluetooth controller |
Raspberry Pi Pico 2W (Rust)
Library | Description | Usage |
---|---|---|
embassy | Async embedded runtime for embedded systems | Task scheduling and async infrastructure |
embassy-executor | Asynchronous task executor | Schedules and runs tasks in a no_std async environment |
embassy-rp | RP2040-specific HAL for Embassy | GPIO, SPI, PWM, ADC, and other peripherals |
embassy-time | Timer and delay handling | Non-blocking frame-rate control, delays, timeouts |
embassy-sync | Synchronization primitives | Used for async channels and mutexes |
embassy-gpio | GPIO abstraction for Embassy | Manages input/output pins for buttons, sensors, and motor control |
cyw43 | Wi-Fi driver for the CYW43 chip | Connecting the Pico 2W to Wi-FI |
cyw43-pio | PIO-based driver for the CYW43 chip | Enables Wi-Fi using the RP2350's PIO peripheral |
embassy-net | TCP/IP networking stack | Hosts server or client for sending/receiving data |
hcsr04-async | Async driver for ultrasonic distance sensor (if used) | Obstacle detection |
defmt | Lightweight logging framework for embedded systems | Enables efficient, structured logging |
defmt-rtt | RTT (Real-Time Transfer) backend for defmt | Outputs logs via RTT for real-time debugging |
embedded-graphics | 2D graphics library for embedded systems | Drawing text, shapes, and UI elements on the display |
mipidsi | Display driver for MIPI-compatible SPI LCDs | Driving the ST7735s display via SPI |
rand | Random number generation | Used internally by the TCP stack for port/sequence numbers |