Final course project for ELEC3300 (Introduction to Embedded Systems) in HKUST where we created a Mini-Robot Cleaner with STM32 as the MCU. The robot has 2 modes which are manual mode where the user can control the robot wirelessly through UDP transmissions (via Python script) and also a automatic mode where the robot card will move freely and avoid obstacles using the "bubble rebound algorithm" described by this paper. Robot car can also send temperature sensor data to a UDP server.
Here is a demo video: Youtube Link
Project Presentation: Link
- LCD Display with GUI. GUI menu shows robot information, allows user to choose between manual and automatic mode through touch screen, and also has section to print debugging information such as sensor readings.
- STM32 connected with LCD Display through FSMC, uses LVGL library for GUI, driver function uses DMA to improve performance of display
- STM32 communicates with ESP8266 through UART to connect to Wi-fi, create UDP server, and send UDP transmissions with AT commands
- GUI for sending robot controls through UDP tranmission. Written in Python and used PyQt5 for creating a GUI on PC
- Uses three ultrasonic sensor (HR-S04) data covering 90 degrees FOV to make decision to avoid obstacle when in automatic mode
- Reads temperature sensor from LM35 with ADC conversion, user remotely request and view the sensor data with Python GUI where data is sent through UDP to a UDP server
- STM32F103VET6 Mini V3 Development Board
- ESP8266 (Built-in with Mini V3 board)
- LM35 Temperature Sensor
- HR-S04 Ultra-sonic sensor
- ILI9341 TFT LCD Display
- L298N Motor Driver
- DC Gear TT Motor
-
Main Board: 野火 STM32F103VET6 Mini V3 Development Board
-
Development Platform for STM32: CubeIDE
-
Connections:
-
STM32 connects to LCD through FSMC for display and touch screen, communicates to ESP8266 through UART, connects to motor driver and ultrasonic sensors through GPIO, LM35 with ADC.
-
Also used compiler optimization and removed certain parts of library (otherwise LVGL library is too large)
- Project contains the main project code that was used in CubeIDE
- udp_server contains the Python scripts for creating UDP server to receive robot data and also the GUI for controlling the robot
- cubemx_workspace is my CubeIDE workspace folder, not needed
- website_files contains some html files that we tested when hosting a TCP server instead
- STM32F103VET6 Mini V3 Development Board Schematics
- LM35 Temperature Sensor Documentation
- HR-S04 Ultra-sonic sensor Documentation
- ILI9341 TFT LCD Display Documentation
- LVGL Embedded Graphics Library Documentation
- ESP8266 AT Commands Documentation
- L298N Motor Driver Documentation
- DC Gear TT Motor Documentation
- Simple, real-time obstacle avoidance algorithm for mobile robots

