Over-Engineered Stick (ESP32-S3 Gimbal)
A high-performance, open-source 3-axis smartphone gimbal built from scratch using a custom PCB and the SimpleFOC library. It features real-time stabilization, native USB-C programming, and custom motion modes.
Created by
Visage
Tier 2
8 views
0 followers
Visage
submitted Over-Engineered Stick (ESP32-S3 Gimbal) for review ago
zsharpminor
requested changes for Over-Engineered Stick (ESP32-S3 Gimbal) ago
Heyo, while this is really cool, you ARE missing a few things outlined in our https://blueprint.hackclub.com/about/submission-guidelines - to start off with, if possible, please include a render of your exported .step PCB inside your CAD. Additionally, your BOM.csv and requested grant total to $140 USD, but your cart screenshots only show $57.88 - your cart screenshots, BOM.csv total, and requested grant MUST match. Additionally, you're requesting a ESP32-S3-WROOM-1-N8R2 module separate from your PCB assembly, and you're using an SMD footprint for it - be aware that this will be incredibly painful to solder if you do not have a SMD soldering setup (I.e. hot plate / hot air reflow station & solder paste). If you do not own this and are not experienced with SMD soldering, I'd highly recommend having your entire PCB be assembled by JLCPCB to the entire extent possible. otherwise, this looks pretty good, keep up the good work!
straight up autisumning
gave kudos to Over-Engineered Stick (ESP32-S3 Gimbal) ago
amazing name lmao
Visage
added to the journal ago
Error in motor drivers
While working on my other project, I noticed I made a fatal error in the schematics for the motor drivers.
- I did not connect
CPLandCPHthrough a capacitor, due to which the motors wouldn't get the initial boost needed to work. - I left
V3P3unconnected, which otherwise could have been used as a snubber for noise when connected to capacitors, leaving a lot of high frequency noise unfiltered, which would cause problems in the smooth functioning of the motors.
This came to my notice when I was designing the motor drivers for the drone in the other project using a completely different datasheet.
Rectification
I corrected it by:
- Installing 2 capacitors for
V3P3 - Including 1 capacitor through
CPLandCPH
Updated Schematic:
Updated PCB Layout:
Visage
submitted Over-Engineered Stick (ESP32-S3 Gimbal) for review ago
Visage
added to the journal ago
Closing Tabs and Crossing Fingers

Fancy picture for the cover. O_o
Okay so, I have completed my "to-do" list.
Insignia/Logo
"Vi" as in "Visage".
Final PCB Schematics and Layout
Finalised the firmware
Apart from the basic structure, I have added 3 modes:
- Mode 1 (Stabilize): Standard horizon levelling and pan following.
- Mode 2 (Teaching Mode): Motors disengage for 5 seconds, allowing the user to manually pose the camera before auto-locking the new angle.
- Mode 3 (Selfie): A dedicated 6 second setup window to lock the gimbal in arbitrary static positions.
The PID values for motors are not accurate as of now. I'll configure them when I actually receive them.
Readme and Bill of Material
I actually tried something different with the README file on GitHub (it was my friend's idea, I swear). You might actually have a good time reading it. You might relate to a few lines yourself. O_O
I have included:
- A short description (The funny part)
- External wiring diagrams
- PCB Schematics and Layout
- Animated GIF(s) of the body that will be 3D printed
- Bill of Material
- Future enhancements
Overall, I had quite a lot of fun building this project from scratch. I did hit a few dead ends but it was a good learning experience for a person who's completely new to this stuff.
Visage
added to the journal ago
Completed design for the tripod & Started working on code
Tripod
Alright, so I finished the design for the tripod. I decided to make it more of a stand than a tripod because of the weight it'll have to bear. A standard tripod with expandable legs won't be able to handle the entire weight of the tripod (I think).
The legs will connect to the holes below the hub using M3 screws. It will be foldable as there is a teensy gap between the hole structure on the leg and the hub. In simple words, yeah, it's not a tight fit.
Changes and advancements
- I had to make some changes to the handle structure and schematic itself as I forgot to add a ON/OFF switch. (Yeah, I lost a lot of aura here).
- Completed a basic structure of the firmware code; will implement further changes and refinements as I progress.
To-do
- Add an insignia/logo on the body of the gimbal.
- Finalise the PCB schematic and layout.
- Finalise the firmware, implement any features I can think of, and fix any errors.
- Prepare the
BOMandREADME.md.
Visage
added to the journal ago
Completed the design for the body of the Gimbal
I really thought designing the body would be the easiest part but oh my my...
Initially, I had no design in mind except the handle, so I looked up on thingiverse to get some idea of what I can make and found a lot of designs, but they were not what I was looking for. However, I did get an idea of what I wanted to make. This is what I ended up with:
The threads at the bottom can either be used to attach an enclosure or a tripod/stand.
Why a tripod?
Well, when I started working on this gimbal, I had plans to make it act like a gimbal and a steady cam with adjustable axes for time-lapse, etc.
The main handle frame has a third button that locks the motors in a specific position to achieve this.
With this entry, the body design is complete and I'll move on to firmware.
Visage
added to the journal ago
Redesigned and Rerouted the PCB & 3D Design for body
After failing to adjust the bottom half of the PCB with the new module, I decided to completely redesign it. This is how it looks now:
I also started working on the 3D model for the body of the gimbal. So far, I have designed the handle (the grip) and the top of the handle where the motor for panning (Yaw) will be.
Handle
The threads at the very bottom will be used to attach either a simple enclosure or a tripod, which is yet to be designed.
Handle top

Visage
added to the journal ago
Redesigning the Battery Module
Okay, so I was designing the handle for the gimbal. I was creating a holder for the batteries when I noticed that the PCB I designed would only support 2 batteries (8.4V peak), and the motor drivers I am using require at least 8.4V. Initially, this wouldn't be a problem, but after a few minutes of usage, the voltage would start to drop and that would cause the motors to stutter and eventually shut down. I researched if I could include a small module along with my PCB to fix this, but that would increase the cost. So.....
Yeah, I redesigned the entire battery module to support 3 LiPo or Li-Ion batteries which would give me a voltage of 12.6V at peak and 8.4V as it drains out, which is perfect for my gimbal.
Now, I have used CN3303, which supports boosting up to 12.6V (which is what I need). Along with this, I am using a MOSFET (AO3400), which acts like a switch for the boost converter.
Although this might cost me some more time on designing and finalising the PCB, this surprisingly reduces the cost of the PCB as JLCPCB charges $3 extra for each external assembly, and redesigning the charging module with CN3303 reduces the number of components.
Visage
added to the journal ago
Comparing prices for PCB and replacing the IMU
I compared prices from all the possible PCBA manufacturing websites, and JLCPCB was the cheapest.
Unfortunately, the BMI270, the IMU I was using, was out of stock on JLCPCB. Hand soldering the bare chip on my IMU board is not possible, as it has pads below the chip, and I don't have a hot air gun. Instead, I am sourcing a BMI270 breakout board from a website within India. The bare chip was costing me around $5.54, and the breakout board costs me around $3.12. This actually cuts down the price significantly, as now I won't be needing a second board, reducing around $10 to $15 (PCB + Price of other components + BMI270 bare chip), and also the trouble of using a hot air gun.
I will also be sourcing the ESP32-S3-WROOM-1-N8R2 and hand soldering it, as getting it from JLCPCB requires me to switch to standard PCBA, which adds an additional $25, which is senseless, as the chip itself is quite easy to solder by hand.
With the PCB being done, I'll move on to the 3D-printed body of the gimbal and the firmware for the MCU.
Visage
added to the journal ago
Finished Routing the PCB
Took me a lot of research and tutorials, but after repeated failed attempts, I have made this:
Instead of using wires of a greater thickness, I have used a zone fill to support the load of the 8.4V wire that goes directly to the motor drivers. I have the zone fill to flood the board with copper as it made the wiring significantly easier for me and also acts like a heatsink, which obviously, is good.
I didn't think routing the PCB would be this hard; had to start from zero like three times after spending an hour on each try, when I finally decided that I am going to watch more tutorials and try my hand on less complex PCB(s).
I decided that I will not attach the IMU board with the mainboard and instead make it a separate order to avoid panel fees, which makes it a little cheaper.
I also made a few changes to the schematic (yes, again). Since I used zone fill, I replaced the old wiring on the IMU unit to make it simpler. Now it connects to the GND on the main board, and the rest of the ground pins are connected with the copper on the board, as it acts like ground.
Took me quite a while to fix all the errors on the DRC, but I ended up with this,
Visage
added to the journal ago
Started making the layout for PCB
Was my first time setting the layout for a PCB of this scale (I only made the Hackpad prior to this) and.....

After making the layout an absolute mess, I decided on placing the IMU unit on the camera cradle instead of the mainboard, as it simplifies a lot of things for me and removes the need for a separate unit to calibrate the gyroscopic data, which also reduces the cost. I replaced direct connections from the mainboard with pin connectors, which I can manually connect later.
I also made a few other changes to the schematic, replacing the push buttons and LED(s) with pin connectors with which I can have the buttons and LED(s) on the gimbal handle instead of the board, which would not have been visible, rendering them unusable.
The new schematic looks like this:
After hours of tutorials and head-banging, I finally made this:
I might change a few things later as this design isn't as pleasing as I thought it would be, but for now, I think I have done a pretty good job, not to mention I still have to route all this stuff :skull:
Visage
added to the journal ago
Completed the schematic
This is what the schematic looks like right now. I have completed all the modules I thought of initially.
Replaced the 2-pin connector for the battery with a 3-pin connector as I plan to add a BMS protector board later.
I have used hierarchical sheets for the driver motor as I didn't want to make the schematic messy. The schematic for the motor driver looks like this:
This was my first time making a PCB of a scale this large, although I almost lost my brain figuring out the battery module, it was quite fun.
This schematic isn't final (I think), I will probably make changes as I plan ahead.
Visage
added to the journal ago
Started making the PCB schematic
So far, I have completed the battery charging and regulator module. I had to make some changes from the components I had in mind initially, as they were kind of hard to source, but that's okay. I ended up using components that are even more efficient for the gimbal.

Initially, I had planned to use the MPU-6050 or ICM-42688-P as an IMU, but both were quite expensive. I researched and found the BMI270 to be the cheapest and most cost-effective IMU for my gimbal.
The battery module and regulatory circuit are where I lost my mind. Initially, I was using TP5100 as the charger and TPS54331 as the regulator, but I couldn't figure out the setup for like 2 hours. I got back to researching and found that even if I did set it up correctly, it wouldn't work because of low voltage, and I would have to configure a buck booster. Later, I found an alternative, the AMS1117. The setup for it was quite easy, but I would have to trade off efficiency as it would start heating up quickly. I found that there was a pre-built charging module that wouldn't require much effort, but at this point, I wanted to learn how to actually build it. So, sticking to this plan, I found I could replace the USB-C with a DC Barrel Jack, which would actually reduce the complexity, but I was adamant about building this with USB-C. As I was trying to figure out alternatives, I stumbled upon CS5080E, which is a buck-boost charger, but it was hard to source and expensive. Finally, I came across the MT3608 + TP5100 combo, which actually fit best for my project in every way.
For now, I have decided I'll be using the following components (which again are not finalised):
ESP32-S3-WROOM-1
MT3608 & TP5100 (Both these combined act like a buck boost converter)
TPS563200 (Voltage Regulator)
DRV8313(x3) (Motor Drivers)
BMI270 (IMU)
USB-C receptacle
Visage
added to the journal ago
Research and components
I did some research about which microcontroller and components to use, matched the pros and cons for the alternatives, and finalised what I'll use.
For now, I've decided on using ESP32-S3-WROOM-1; it makes what I have in mind for this gimbal easier.

Visage
started Over-Engineered Stick (ESP32-S3 Gimbal) ago
1/12/2026 3 AM - Research and components
I did some research about which microcontroller and components to use, matched the pros and cons for the alternatives, and finalised what I'll use.
For now, I've decided on using ESP32-S3-WROOM-1; it makes what I have in mind for this gimbal easier.

1/12/2026 6 PM - Started making the PCB schematic
So far, I have completed the battery charging and regulator module. I had to make some changes from the components I had in mind initially, as they were kind of hard to source, but that's okay. I ended up using components that are even more efficient for the gimbal.

Initially, I had planned to use the MPU-6050 or ICM-42688-P as an IMU, but both were quite expensive. I researched and found the BMI270 to be the cheapest and most cost-effective IMU for my gimbal.
The battery module and regulatory circuit are where I lost my mind. Initially, I was using TP5100 as the charger and TPS54331 as the regulator, but I couldn't figure out the setup for like 2 hours. I got back to researching and found that even if I did set it up correctly, it wouldn't work because of low voltage, and I would have to configure a buck booster. Later, I found an alternative, the AMS1117. The setup for it was quite easy, but I would have to trade off efficiency as it would start heating up quickly. I found that there was a pre-built charging module that wouldn't require much effort, but at this point, I wanted to learn how to actually build it. So, sticking to this plan, I found I could replace the USB-C with a DC Barrel Jack, which would actually reduce the complexity, but I was adamant about building this with USB-C. As I was trying to figure out alternatives, I stumbled upon CS5080E, which is a buck-boost charger, but it was hard to source and expensive. Finally, I came across the MT3608 + TP5100 combo, which actually fit best for my project in every way.
For now, I have decided I'll be using the following components (which again are not finalised):
ESP32-S3-WROOM-1
MT3608 & TP5100 (Both these combined act like a buck boost converter)
TPS563200 (Voltage Regulator)
DRV8313(x3) (Motor Drivers)
BMI270 (IMU)
USB-C receptacle
1/12/2026 9 PM - Completed the schematic
This is what the schematic looks like right now. I have completed all the modules I thought of initially.
Replaced the 2-pin connector for the battery with a 3-pin connector as I plan to add a BMS protector board later.
I have used hierarchical sheets for the driver motor as I didn't want to make the schematic messy. The schematic for the motor driver looks like this:
This was my first time making a PCB of a scale this large, although I almost lost my brain figuring out the battery module, it was quite fun.
This schematic isn't final (I think), I will probably make changes as I plan ahead.
1/13/2026 - Started making the layout for PCB
Was my first time setting the layout for a PCB of this scale (I only made the Hackpad prior to this) and.....

After making the layout an absolute mess, I decided on placing the IMU unit on the camera cradle instead of the mainboard, as it simplifies a lot of things for me and removes the need for a separate unit to calibrate the gyroscopic data, which also reduces the cost. I replaced direct connections from the mainboard with pin connectors, which I can manually connect later.
I also made a few other changes to the schematic, replacing the push buttons and LED(s) with pin connectors with which I can have the buttons and LED(s) on the gimbal handle instead of the board, which would not have been visible, rendering them unusable.
The new schematic looks like this:
After hours of tutorials and head-banging, I finally made this:
I might change a few things later as this design isn't as pleasing as I thought it would be, but for now, I think I have done a pretty good job, not to mention I still have to route all this stuff :skull:
1/14/2026 3 AM - Finished Routing the PCB
Took me a lot of research and tutorials, but after repeated failed attempts, I have made this:
Instead of using wires of a greater thickness, I have used a zone fill to support the load of the 8.4V wire that goes directly to the motor drivers. I have the zone fill to flood the board with copper as it made the wiring significantly easier for me and also acts like a heatsink, which obviously, is good.
I didn't think routing the PCB would be this hard; had to start from zero like three times after spending an hour on each try, when I finally decided that I am going to watch more tutorials and try my hand on less complex PCB(s).
I decided that I will not attach the IMU board with the mainboard and instead make it a separate order to avoid panel fees, which makes it a little cheaper.
I also made a few changes to the schematic (yes, again). Since I used zone fill, I replaced the old wiring on the IMU unit to make it simpler. Now it connects to the GND on the main board, and the rest of the ground pins are connected with the copper on the board, as it acts like ground.
Took me quite a while to fix all the errors on the DRC, but I ended up with this,
1/14/2026 9 PM - Comparing prices for PCB and replacing the IMU
I compared prices from all the possible PCBA manufacturing websites, and JLCPCB was the cheapest.
Unfortunately, the BMI270, the IMU I was using, was out of stock on JLCPCB. Hand soldering the bare chip on my IMU board is not possible, as it has pads below the chip, and I don't have a hot air gun. Instead, I am sourcing a BMI270 breakout board from a website within India. The bare chip was costing me around $5.54, and the breakout board costs me around $3.12. This actually cuts down the price significantly, as now I won't be needing a second board, reducing around $10 to $15 (PCB + Price of other components + BMI270 bare chip), and also the trouble of using a hot air gun.
I will also be sourcing the ESP32-S3-WROOM-1-N8R2 and hand soldering it, as getting it from JLCPCB requires me to switch to standard PCBA, which adds an additional $25, which is senseless, as the chip itself is quite easy to solder by hand.
With the PCB being done, I'll move on to the 3D-printed body of the gimbal and the firmware for the MCU.
1/16/2026 - Redesigning the Battery Module
Okay, so I was designing the handle for the gimbal. I was creating a holder for the batteries when I noticed that the PCB I designed would only support 2 batteries (8.4V peak), and the motor drivers I am using require at least 8.4V. Initially, this wouldn't be a problem, but after a few minutes of usage, the voltage would start to drop and that would cause the motors to stutter and eventually shut down. I researched if I could include a small module along with my PCB to fix this, but that would increase the cost. So.....
Yeah, I redesigned the entire battery module to support 3 LiPo or Li-Ion batteries which would give me a voltage of 12.6V at peak and 8.4V as it drains out, which is perfect for my gimbal.
Now, I have used CN3303, which supports boosting up to 12.6V (which is what I need). Along with this, I am using a MOSFET (AO3400), which acts like a switch for the boost converter.
Although this might cost me some more time on designing and finalising the PCB, this surprisingly reduces the cost of the PCB as JLCPCB charges $3 extra for each external assembly, and redesigning the charging module with CN3303 reduces the number of components.
1/17/2026 - Redesigned and Rerouted the PCB & 3D Design for body
After failing to adjust the bottom half of the PCB with the new module, I decided to completely redesign it. This is how it looks now:
I also started working on the 3D model for the body of the gimbal. So far, I have designed the handle (the grip) and the top of the handle where the motor for panning (Yaw) will be.
Handle
The threads at the very bottom will be used to attach either a simple enclosure or a tripod, which is yet to be designed.
Handle top

1/18/2026 - Completed the design for the body of the Gimbal
I really thought designing the body would be the easiest part but oh my my...
Initially, I had no design in mind except the handle, so I looked up on thingiverse to get some idea of what I can make and found a lot of designs, but they were not what I was looking for. However, I did get an idea of what I wanted to make. This is what I ended up with:
The threads at the bottom can either be used to attach an enclosure or a tripod/stand.
Why a tripod?
Well, when I started working on this gimbal, I had plans to make it act like a gimbal and a steady cam with adjustable axes for time-lapse, etc.
The main handle frame has a third button that locks the motors in a specific position to achieve this.
With this entry, the body design is complete and I'll move on to firmware.
1/19/2026 - Completed design for the tripod & Started working on code
Tripod
Alright, so I finished the design for the tripod. I decided to make it more of a stand than a tripod because of the weight it'll have to bear. A standard tripod with expandable legs won't be able to handle the entire weight of the tripod (I think).
The legs will connect to the holes below the hub using M3 screws. It will be foldable as there is a teensy gap between the hole structure on the leg and the hub. In simple words, yeah, it's not a tight fit.
Changes and advancements
- I had to make some changes to the handle structure and schematic itself as I forgot to add a ON/OFF switch. (Yeah, I lost a lot of aura here).
- Completed a basic structure of the firmware code; will implement further changes and refinements as I progress.
To-do
- Add an insignia/logo on the body of the gimbal.
- Finalise the PCB schematic and layout.
- Finalise the firmware, implement any features I can think of, and fix any errors.
- Prepare the
BOMandREADME.md.
1/21/2026 - Closing Tabs and Crossing Fingers

Fancy picture for the cover. O_o
Okay so, I have completed my "to-do" list.
Insignia/Logo
"Vi" as in "Visage".
Final PCB Schematics and Layout
Finalised the firmware
Apart from the basic structure, I have added 3 modes:
- Mode 1 (Stabilize): Standard horizon levelling and pan following.
- Mode 2 (Teaching Mode): Motors disengage for 5 seconds, allowing the user to manually pose the camera before auto-locking the new angle.
- Mode 3 (Selfie): A dedicated 6 second setup window to lock the gimbal in arbitrary static positions.
The PID values for motors are not accurate as of now. I'll configure them when I actually receive them.
Readme and Bill of Material
I actually tried something different with the README file on GitHub (it was my friend's idea, I swear). You might actually have a good time reading it. You might relate to a few lines yourself. O_O
I have included:
- A short description (The funny part)
- External wiring diagrams
- PCB Schematics and Layout
- Animated GIF(s) of the body that will be 3D printed
- Bill of Material
- Future enhancements
Overall, I had quite a lot of fun building this project from scratch. I did hit a few dead ends but it was a good learning experience for a person who's completely new to this stuff.
1/25/2026 - Error in motor drivers
While working on my other project, I noticed I made a fatal error in the schematics for the motor drivers.
- I did not connect
CPLandCPHthrough a capacitor, due to which the motors wouldn't get the initial boost needed to work. - I left
V3P3unconnected, which otherwise could have been used as a snubber for noise when connected to capacitors, leaving a lot of high frequency noise unfiltered, which would cause problems in the smooth functioning of the motors.
This came to my notice when I was designing the motor drivers for the drone in the other project using a completely different datasheet.
Rectification
I corrected it by:
- Installing 2 capacitors for
V3P3 - Including 1 capacitor through
CPLandCPH
Updated Schematic:
Updated PCB Layout:




















