

VEML3328
ELEC 391 : Design Studio Final Project
- Size
- 26.5 × 21.9 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 8
- Nets
- 4
- Pads
- 16
- Tracks, vias
- 25, 2
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 8.0 (file 20240108)
- Created
- 28 Jan 2025
- Updated
- 17 Apr 2025
Overview
VEML3328 is an open-source printed circuit board by Dipto9999, from the Dipto9999/Self_Balancing_Robot repository on GitHub. It is a 2-layer board of 26.5 × 21.9 mm with 8 parts on 4 nets, routed with 25 tracks and 2 vias.
It is built around the VEML3328. Its parts include 3 connectors and 1 IC. It belongs with the radio and wireless and robots and motor control boards and the STM32 boards of this library.
Main components
1README
README.mdWALL-E (Self Balancing Robot)
Contents
Overview
We designed WALL-E, an autonomously balancing two-wheel robot driven wirelessly via Bluetooth.
Features
WALL-E prioritizes safe navigation and secure access.
- Detects the nearby environment (i.e. obstacles, color recognition)
- Prevents unauthorized control with RFID authentication and BLE pairing code.
- Generates live camera feed and uploads to AWS S3 cloud storage.
Components
-
Microcontrollers:
- Arduino Nano 33 BLE Sense Rev2 (Balancing & BLE)
- STM32L051K8T6 (Environmental Sensors, Auth)
- Raspberry Pi Zero 2 W (Camera Feed)
-
Sensors and Modules:
- BMM150 IMU
- HC-SR04 Ultrasonic Distance Sensor
- TCS34725 Color Sensor
- RC522 RFID Module
- CEM-1302 Buzzer
- Freenove 5MP Camera
-
Actuation:
- DRV8833 Motor Drivers
- Pololu 37D DC Motors
System Design
Functional Diagram
Architecture Diagram
Robot Firmware
Arduino
- Autonomously balances robot with closed-loop control system (i.e. PID controller).
- Uses complementary filter to measure angular input from accelerometer and gyroscope sensors.
- Drives motors by generating PWM (slow decay) output to DRV8833 chip.
- Uses statemachine to prioritize balancing / movement functionality.
- Injects noise (i.e. angular offset, PWM signals) to induce movement along axis / turning.
Source Code in Arduino_Firmware directory.
STM32
- Handles auxiliary features to reduce computational load on Arduino.
- Distance Sensing: Toggles GPIO signal-low when object detected within 30cm.
- Color Detection: Toggles GPIO signal-low when red is detected. WALL-E avoids red-lights at all costs.
- RFID Authentication: Verifies UID and signals Arduino on success.
- Buzzer: Alerts user on successful auth, errors, or warnings via PWM tone generation.
Source Code in STM32_Firmware directory.
User Software
Robot Driver App
- Flask web application hosted via ngrok for mobile access
- Uses GET/POST requests to update server with UI updates and perform Bluetooth operations.
- Handles BLE pairing authentication in backend (i.e. without affecting user experience).
Source Code in Driver_App directory.
Dashboard App
- Python application with live camera stream on Tkinter GUI.
- Camera runs at ~20 FPS with reduced resolution for performance on Pi Zero 2 W.
- Snapshot and recording functionality with automatic upload to AWS S3 bucket.
Source Code in Dashboard_App directory.
Demonstration
Watch our final robot demonstration here: 📽️ YouTube Demo
Report
Read our final project report here: 📝 Project Report
Credit
This was completed as part of the ELEC 391 - Design Studio project course in The University of British Columbia Electrical and Computer Engineering undergraduate program.
Team B-17
- Muntakim Rahman
- Tomaz Zlindra
- Xianyao Li
Special thanks to Dr. Joseph Yan for tremendous support and guidance.
Parts
8| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | MountingHole | MountingHole:MountingHole_3.2mm_M3 | H1, H2, H3, H4 |
| 2 | Conn_01x02_Pin | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J2, J3 |
| 1 | Conn_01x04_Pin | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J1 |
| 1 | VEML3328 | Custom:VEML3328 | U1 |
Questions
How big is the VEML3328 PCB?
It measures 26.5 × 21.9 mm and has 2 copper layers, 1.6 mm thick.
What parts does the VEML3328 use?
8 parts, built around the VEML3328. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the VEML3328 KiCad files?
From the Dipto9999/Self_Balancing_Robot repository on GitHub, at the commit this page was made from: the board is ColorSensor_PCB/VEML3328/VEML3328.kicad_pcb and its schematic ColorSensor_PCB/VEML3328/VEML3328.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the VEML3328 design in my own project?
Its repository states no licence, so its author keeps all rights: ask Dipto9999 before reusing the design.
Similar boards
- 2 layers60 × 30 mm

- 2 layers90 × 40 mm

- 2 layers74.9 × 40.6 mm

- 4 layers102.8 × 23.1 mm

- 2 layers100 × 34.5 mm

Sk561-light2cv
mirdej/synkie
The Synkie is a modular open source analog video processor, developed by Michael Egger, Max Egger and Flo Kaufmann
41 parts47 - 2 layers25.3 × 6.1 mm

- 2 layers32 × 21.5 mm

Capteur couleur
Groupe-Projet-ESE/BeerRobot
Chelsea COMLAN - Alix HAVRET - Loïcia KOEHL - Quentin SIMON
18 parts - 2 layers24.1 × 43 mm
