Skip to main content
Version: FILS English

DriveSight

A mobile robot project with a camera for visual tracking, based on a Raspberry Pi Pico 2W and ESP32-S3.

info

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.

Architecture Block Diagram

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

DeviceUsagePrice
2x Raspberry Pi Pico 2WMain control board 39.66 lei
ESP32-S3Camera and Wi-Fi 56.71 lei
L298N Motor DriverControls motor power 10.99 lei
ST7735s DisplayDisplays sensor data 27.99 lei
2x JGA25-370 MotorsRobot movement 49.00 lei
2x INA219 Current SensorCurrent monitoring 29.99 lei
3x HC-SR04 Ultrasonic SensorObstacle detection 14.99 lei
Li-ion 3x Battery HolderPower source 20.13 lei
Wires, Connectors, Breadboard, ResistorsWiringAlready had them

Software

ESP32-S3 (C)

LibraryDescriptionUsage
ESP-IDFOfficial Espressif IoT Development FrameworkBase SDK for Wi-Fi, networking, etc.
esp_cameraCamera driver for OV3660Captures and streams MJPEG frames
Bluepad32Bluetooth game controller libraryReceives input from Bluetooth controller

Raspberry Pi Pico 2W (Rust)

LibraryDescriptionUsage
embassyAsync embedded runtime for embedded systemsTask scheduling and async infrastructure
embassy-executorAsynchronous task executorSchedules and runs tasks in a no_std async environment
embassy-rpRP2040-specific HAL for EmbassyGPIO, SPI, PWM, ADC, and other peripherals
embassy-timeTimer and delay handlingNon-blocking frame-rate control, delays, timeouts
embassy-syncSynchronization primitivesUsed for async channels and mutexes
embassy-gpioGPIO abstraction for EmbassyManages input/output pins for buttons, sensors, and motor control
cyw43Wi-Fi driver for the CYW43 chipConnecting the Pico 2W to Wi-FI
cyw43-pioPIO-based driver for the CYW43 chipEnables Wi-Fi using the RP2350's PIO peripheral
embassy-netTCP/IP networking stackHosts server or client for sending/receiving data
hcsr04-asyncAsync driver for ultrasonic distance sensor (if used)Obstacle detection
defmtLightweight logging framework for embedded systemsEnables efficient, structured logging
defmt-rttRTT (Real-Time Transfer) backend for defmtOutputs logs via RTT for real-time debugging
embedded-graphics2D graphics library for embedded systemsDrawing text, shapes, and UI elements on the display
mipidsiDisplay driver for MIPI-compatible SPI LCDsDriving the ST7735s display via SPI
randRandom number generationUsed internally by the TCP stack for port/sequence numbers
  1. Personal Project Repo