- Project
Omni-Bot 3x3(ESP32)- Multi-directional Robot
Given the success of my previous BallBot projects, I decided to design and build a 3-wheeled vehicle, using omni wheels. This project would also aim to included light sensors, able to search for bright lights and torches. Added to that three acoustic range finders and a motion sensor, to make the coding more challenging. This turned out to be highly successful, as seen in the video below.
The robot is powered from two 18650 Lithium batteries, delivering 7.4v to the system. An On/OFF switch is mounted on the top plate, which gives you the ability to select power sources. The ESP32 micro constantly monitors battery health, and automatically shuts down the robot, to prevent battery deep discharge. The two push buttons, on the top, are for selecting different operating modes, like light detection and tracking, or acoustic ranging and detection modes..
RGB LEDs are mounted within a ring, which provide moving patterns of light to indicate what the robot is doing, and its direction of travel. For example, when in ranging mode, the LEDs work like a bar graph, to give a sense of measured distance. The Omni-Bot can detect and automatically back away from approaching objects; then after a pause, return to the start point, once the coast is clear.
The circuit diagram for the Omni-Bot is shown here on the left, with the ESP32 connected to the three H-bridge drivers, providing high current PWM for the motors, the ICM-42607-P 3-axis gyroscope and the 15 RGB LEDs, which are connected in a daisy chain fashion. As the motors are only rated up to 6v, I measure the battery voltage and adjust power accordingly. A simple resistor network is used to subdivide the supply voltage so that the ESP32 can measure the voltage remaining in the batteries, which should not be allowed to fall below 3 volts per battery, to avoid damage from deep discharge.
The small display presents status information, and values, depending on the mode of operation. That’s always useful during demonstrations. But much more information is available, when using the Monitor+ app over the Wi-Fi link.
I developed the Monitor+ display and graphing tool app, using a coding system known as Processing. The features of this app have been further extended whilst developing this project. You can use it to present information on screens, select different screens, and even click on blue text to change values as you go. Your robot can now upload data to the app, which can then be copied within the Windows environment.
You can switch back and forth between controller adjustment and the graphing tool, so you can also see the effect on data sent from the robot. The Scope tool allows you to access different sets of data from the ESP32, just by clicking on a number field. The graph can be dynamically adjusted automatically, showing min/max values or set to specific ranges, and if the graph is paused you can inspect the data points simply by moving the mouse pointer over the graph, to draw on the underlying data.
Design Files
The following files can be downloaded to help you complete this project. Each has a hyper-link and an associated description. Depending on how your web browser is configured the links will either open the files directly into your browser or offer them as downloads.
Circuit Diagram - a .pdf file of drawings and photos, of the build process. Use it as a guide to wiring up your project. Updated: 28/11/2025.
Wii WEMOS D1 Transceiver - you will need a wireless transceiver to control this project. Also see this low cost alternative: Wii ESP32-C3 Transceiver.
Parts List - the things you will need to buy, and budget prices.
3-D Parts - images showing you what the 3-D parts look like, and the associated hole and tap sizes.
3-D Models - a zip file containing all of the STL files, which you can use with a slicer application.
Software Code - Arduino .ino files. Two folders, one for the robot, and one for the Monitor+ application. Updated: vR1. 28/11/2025.
Demo Functions - pdf explaining the functions available with the button switch, and when using the Wii controller. Updated: 14/05/2025.
Calibration - diagrams and notes created in support of calibrating the robots drive system. Updated: 28/11/2025.
Libraries
This project relies on the use of these libraries, Adafruit_GFX.h, SSD1306Wire.h, FastLED.h, esp_now.h and WiFi.h which need to be included in the IDE set-up. The Adafruit libraries provide a convenient means of creating text and graphics on the round display. The FastLED library if for controlling the WS2812B RGB LEDs. The esp_now.h and WiFi.h libraries provides the interface for the Wi-Fi.
Design Notes:
The following notes will help you understand how the files in this project work or can be used in principle. Each note has a bold heading for quick reference and they are listed in alphabetical order.
.ino Files - the zip file contains several folders, which in turn contain the source code files. Therefore you will need to unzip it to use them. Note, as I use the tabbed interface of the IDE, there are multiple .ino files, one for each tab. All of these must be included for the code to compile correctly.
3-D Models - to be printed at 0.3mm layer height, or smaller. The construction of this design is based on the use of 3 mm and 4 mm nylon countersink screws, with the exception of the metal screws used to house the motors. This leads to a very clean shake-proof solution. You will need to use drills and taps to thread some of the holes.
Demo - as the role of this robot is to act as a demonstrator, it its main purpose is to show the use of omni wheels under driver control, how the front light tracking sensor controls behaviour, and how the three acoustic range sensors detect objects. It also shows how controller actions can be recorded on the fly and replayed at any time..
Need more?
If you feel that I haven’t included enough information to allow you to tackle a project of this type then send me an email explaining what you need. Or if you just want to give me some general feedback on this site, or to suggest projects what I might include which would be interesting to you, I’d be pleased to hear from you. I can only respond to questions relating to the work I have published, and the use of components outside of scope can not be considered.
Page updated: 28/11/2025