TechKnowTone_Text

- Project

STEM_Banner_Text

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.

Omni-Bot-Video

Project Overview
The three Omni-wheels are connected to powerful 130 rpm DC motors, which in turn are connected to efficient H-bridge drivers. Control is via a Wii Classic controller, connected over WiFi. This link supports the transfer of data, which can be presented on a Windows Monitor+ app; enabling the tuning of key features. The light sensors at the front, enable the Omni-Bot to detect and track light sources. Three acoustic range finders, mounted around its body, enable it to detect the presence of objects. A small OLED display provides information, like battery health monitoring, and there are 15 RGB LEDs mounted inside the chassis circular body, to provide interesting patterns. Click the image on the right to watch a video of this BallBot in action-->

All of the robot chassis components were produced on my 3-D printer and modelled using 3-D design package. For this design I constructed an assembly of the complete robot, to ensure that all of the parts aligned. This included simple models of all bought components like the motors and H-bridge driver pcb’s, and the omni-wheels. Given the limitations of 3-D printing, the chassis consists of a number of parts screwed together. The top micro plate mounts the majority of electronic components, with easy access to the ESP32 micro for coding updates, and battery removal for charging..

The lower body chassis plate provides a strong platform on which to mount the three motors, and H-bridge driver pcb’s. You will need small drills, and metric taps, to be able to put threads in some of the holes in this design. The LED ring requires good quality 3-D printer settings. There are also jigs and fixtures to aid with the construction process.

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