A wearable assistive device that combines obstacle detection with text-to-speech capabilities, helping visually impaired users navigate safely and read text from their environment.
Features β’ Hardware β’ Installation β’ Usage β’ Documentation
VisionAssist is an assistive eyewear system designed for visually impaired individuals. The system consists of two main components:
- Smart Eyewear: Equipped with a TOF laser sensor for obstacle detection and a camera for text recognition (OCR)
- Haptic Handband: Provides tactile feedback through vibration patterns, making it suitable for deaf-blind users
π This project was selected for the Annual University Exhibition among 105+ projects.
Traditional assistive devices use buzzers or audio alerts. VisionAssist uses haptic feedback (vibration) because:
- Works for deaf-blind users
- Non-disturbing in public spaces
- Intuitive distance perception through vibration patterns
- Audio channel remains free for text-to-speech
- Audio output plays through any speaker connected to the device running the web interface
| Zone | Distance | Vibration Pattern |
|---|---|---|
| π’ Clear | > 2.0m | No vibration |
| π‘ Caution | 1.6m - 2.0m | Slow pulse (300ms ON / 600ms OFF) |
| π Warning | 1.3m - 1.6m | Fast pulse (400ms ON / 150ms OFF) |
| π΄ Critical | < 1.3m | Continuous vibration |
- Touch-triggered image capture
- Google Cloud Vision API integration
- Text-to-Speech output via web interface
- Automatic vibration pause during reading
- Real-time distance monitoring
- Manual OCR trigger
- TTS controls (speak/stop)
- Mobile-friendly responsive design
| Component | Model | Purpose |
|---|---|---|
| Eyewear MCU | Seeed Studio XIAO ESP32S3 Sense | Camera, TOF sensor, processing |
| Handband MCU | ESP32-C3 Super Mini | Vibration motor control |
| Camera | OV2640 (built-in on XIAO) | Image capture for OCR |
| Distance Sensor | VL53L1X TOF Laser | Obstacle detection (up to 4m) |
| Feedback | Vibration Motor Module | Haptic alerts |
| Touch Sensor | Capacitive Touch | Trigger OCR |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EYEWEAR (ESP32-S3) β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββββββββββ β
β β OV2640 β β VL53L1X β β Touch β β WiFi + β β
β β Camera β β TOF β β Sensor β β ESP-NOW β β
β ββββββ¬ββββββ ββββββ¬ββββββ ββββββ¬ββββββ ββββββββββ¬ββββββββββ β
β β β β β β
β ββββββββββββββ΄βββββββββββββ΄βββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββ
β ESP-NOW
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β HANDBAND (ESP32-C3) β
β ββββββββββββββββ ββββββββββββββββ β
β β Vibration β β Status β β
β β Motor β β LED β β
β ββββββββββββββββ ββββββββββββββββ β
ββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SMARTPHONE (Browser) β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β Web Interface + Text-to-Speech (TTS) β β
β βββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The system can be powered in two ways:
| Method | Details |
|---|---|
| USB-C Cable | Direct connection to power bank (used in prototype) |
| Battery | LiPo battery connection to battery pins (for portable use) |
Recommended for portable use:
- ESP32-S3: 3.7V LiPo (1000-2000mAh) via BAT+/BAT- pads
- ESP32-C3: 3.7V LiPo (500-1000mAh) via 3.3V/GND pins
β οΈ Known Limitation: Battery life varies based on usage. TOF sensor and WiFi are power-intensive. Detailed power analysis available in the project report.
| Function | GPIO Pin |
|---|---|
| I2C SDA (TOF) | GPIO 5 |
| I2C SCL (TOF) | GPIO 6 |
| Touch Sensor | GPIO 7 |
| Camera | Internal (see code) |
| Function | GPIO Pin |
|---|---|
| Vibration Motor | GPIO 4 |
| Status LED | GPIO 8 |
- VS Code with PlatformIO Extension
- Google Cloud Vision API Key
- WiFi Network (both devices must connect to the same network)
git clone https://github.com/Ravindu-S/VisionAssist.git
cd VisionAssistOpen firmware/eyewear-s3/ in PlatformIO Edit src/main.cpp:
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
const char* apiKey = "YOUR_GOOGLE_CLOUD_VISION_API_KEY";Get the MAC address of your ESP32-C3 or use Broadcast Address (upload C3 code first, check Serial Monitor) Update the broadcast address:
uint8_t broadcastAddress[] = {0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX};or Broadcast Address
uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};Open firmware/handband-c3/ in PlatformIO Edit src/main.cpp:
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";- Connect ESP32-S3 β Upload eyewear firmware
- Connect ESP32-C3 β Upload handband firmware
- Open Serial Monitor for both devices (115200 baud)
- Both should show β WiFi Connected and β ESP-NOW OK
- Access web interface at the IP shown in S3's Serial Monitor
β οΈ Important: ESP-NOW requires both devices to operate on the same WiFi channel. Connecting both to the same WiFi network ensures automatic channel alignment.
- Power on both devices
- Connect your smartphone to the same WiFi network
- Open the web interface URL (shown in Serial Monitor)
- Tap the camera image to enable voice output
- Navigate - feel vibration patterns for obstacles
- Touch the sensor on eyewear to read text
| Button | Function |
|---|---|
| π Read Text | Capture image and perform OCR |
| π Speak | Read detected text aloud |
| βΉοΈ Stop | Stop current speech |
When text is being read:
- Vibration motor pauses automatically
- Distance indicator shows "READING π"
- Normal navigation resumes after speech ends
VisionAssist/
βββ README.md # This file
βββ LICENSE # MIT License
βββ .gitignore # Git ignore rules
β
βββ firmware/
β βββ eyewear-s3/ # ESP32-S3 Eyewear Code
β β βββ platformio.ini
β β βββ src/
β β βββ main.cpp
β β
β βββ handband-c3/ # ESP32-C3 Handband Code
β βββ platformio.ini
β βββ src/
β βββ main.cpp
β
βββ docs/ # Documentation
β βββ Project_Report.pdf # Detailed project report
β
βββ hardware/ # Hardware documentation
βββ pin-mapping.md # Detailed pin connections
Detailed project documentation including:
- Complete circuit analysis
- Power consumption measurements
- Battery recommendations
- Testing results
- Future improvements
π See: docs/Project_Report.pdf
| Limitation | Details |
|---|---|
| Battery Life | Continuous WiFi and TOF sensing consumes significant power |
| TOF Range | VL53L1X effective range is ~4m max, recommended <2m for accuracy |
| WiFi Dependency | Both devices must be on same WiFi channel for ESP-NOW (same network is easiest method) |
| OCR Requires Internet | Google Cloud Vision API needs active internet connection |
- Microcontrollers: ESP32-S3, ESP32-C3
- Communication: ESP-NOW, WiFi, HTTP
- APIs: Google Cloud Vision (OCR)
- Frontend: HTML5, CSS3, JavaScript, Web Speech API
- IDE: PlatformIO (VS Code)
- Framework: Arduino
Special thanks to Kusal Hettiarachchi for funding support and making this project possible.
This project is licensed under the MIT License - see the LICENSE file for details.
Copyright (c) 2026 Ravindu Senanayake and Kusal Hettiarachchi
GitHub: @Ravindu-S
If this project helps someone, please consider giving it a β