Spot Micro ESP32 quadruped - easy print & assembly
Print Profile(1)

Description
After i was dissappointed about the existing spotMicro projects here on makerworld, i now publish my own. It offers:
- all parts sorted by build step on the printing plate
- no support nor AMS needed
- full assembly guide with images and fitting fully to the printed parts
-------------
Bill of Material
The following Section will describe in detail the different parts needed for your own SpotMicroESP32 build, with at least some rough estimate of the price.
Electronics
The SpotMicroESP32 ist still a Work-in-Progress and as such the BOM might change as well - check the "deprecated" section for changes. There are still some parts missing and some others are not tested yet - those status will be marked as such. I will give a rough price estimate, which may or may not work for you and might be out of date at some point.
| part or module | number | short description | status | estimated price |
|---|---|---|---|---|
| ESP32-DevKitC | 1x | the core MCU for the build with WIFI + BLE capabilities. | tested | 7€ |
| ESP32-CAM | 1x | Tested with the ESP32-Module with OV2640 Camera (version 2). There are also cameras with a version 1 OV2640, where the sensor is in landscape orientation and not in portrait. Also the flexcable seems to be some millimeters shorter than the one from Version 2. You can distinguish them by the imprint on the flexcable, stating TY-OV2640-V2.0. Both OV2640 Cameras should work in theory, as the part is designed to fit both models. Definetly dont go with the one with an fisheye-lens or other variations - the field of view would be hindered and most likely the lens would not fit through the hole anyway. | tested | 10€ |
| FT232RL USB-TTL-Adapter | 1x | USB-to-Serial Adapter for ESP32-CAM flashing | tested | 2€ |
| (MG996R Servo) | 12x | The bare minimum... but with flaws like jittering and much play... 10Kg servos with metal gears and ball bearings. With these the robot is capable to stand up/change his pose but they are most likely too weak for smooth and reliable walking. (Update 2020-11-19: It can be affirmed, that walking is possible not great, but also not horrible) Go with these only if you can accept these limitations and if more expensive servos would mean not to try this project in the first place. | tested | 5€ each |
| better go with DS3218MG Servo | up to 12x | 20Kg servos with metal gears and ball bearings. Much less play and in my tests no jittering, but also very strong. With these your robot should be able to walk significantly better. Maybe only 4 of these are enough, when used in the lower legs - the most stressed parts. Maybe you would need also 4 additional ones for the upper legs - but maybe MG996R are enough here. The shoulders should be comfortable with MG996R, as these dont do much heavy work. | partially tested | 15€-20€ each |
| FSH6S Servohorn | 12x | servohorn used for this build (should be already shipped with your servos) otherwie use model from 3D parts | tested | n.n. |
| Rubber Dampeners for your Servos | 48x | servo rubber dampeners, so you could use M3 screws (should be already shipped with your servos) | tested | n.n. |
| Servocable Extension | 4x | extending the servocables of the lower legs about 10cm to 15cm | tested | 10€ |
| 625ZZ Ball Bearing | 8x | miniature ball bearing without a flange | tested | 1€ each |
| WS2812b 12 LED Ring (50mm outer diameter) | 1x | Neopixel-Clone-Ring with an outer diameter of 50mm used to signal status/mood | tested | 6€ |
| 0.96" OLED I2C Display | 1x | small OLED screen with SSD1306 IC for status informations | tested | 4€ |
| HC-SR04 Ultrasonic Sensor | 2x | ultrasonic sensor module for distance measuring | tested | 3€ each |
| GY-521 Gyroscope and Accelerometer | 1x | a module to measure accelaration and spatial orientation, which can be extented with magnetometers | tested | 3€ |
| PCA9685 16Channel 12Bit PWM Board | 1x | PWM driver board used for your servos and LEDs, which can power your parts from an external source | tested | 5€ |
| HW-482 / KY-019 5V 10A Relais | 1x | relais module to cut the power to your servos completely | tested | 3€ |
| 19mm Push Button with LED | 1x | illuminated latching pushbutton | tested | 10€ |
| Micro-USB to DIP Adapter | 2x | USB-Ports used for extending the USB-Ports of the ESP32 DevKitC and ESP32-CAM (TTL-Adapter) | tested | 2€ |
| XL4016 DC-DC 9A Stepdown Converter | 1x | big step-down converter to lower your LiPo 2S voltage to 6,5V (minimum for MG996R) | tested | 8€ |
| or SZBK07 DC-DC 20A Stepdown Converter | 1x | even bigger step-down converter to lower your LiPo 2S voltage to 6,5V (minimum for DS3218) | tested | 12€ |
| LM2596 DC-DC or similar Stepdown Module | 1x | small step-down converter to lower your LiPo 2S voltage 5V for ESP32's VIN and Modules | tested | 2€ each |
| ACS712 30A current sensor module | 1x | current sensor module capable of max. 30A for e.g. emergency shutdown | tested | 2€ |
| 25V voltage sensor module | 1x | simple voltage divider module for up to 25V used as a voltage sensor to determin battery charge | tested | 2€ |
| 5200mAh - 6200mAh LiPo 30C+ 2S Tamiya/XH | 1x | beefy LiPo as your main power source (this is actually your individual choice) | tested | 40€ |
Miscellaneous
| part or module | number | short description | status | estimated price |
|---|---|---|---|---|
| M2x8 cylinderhead screws + M2 nuts | 84x each | screws + nuts to mount your servohorns (you could glue the servohorns in place instead and save yourself 72x M2x8 screws and nuts, but i have not tested it), also used to mount the 1,77" TFT and the pins for the ball bearings | tested | 8€ |
| M3x8 cylinderhead screws + M3 nuts | 80x each | screws + nuts for the whole assembly (i hope i have not forgotten some, better buy in bulk as these are usefull for other projects as well) | tested | 8€ |
| M3x20 cylinderhead screws + M3 nuts | 64x each | screws + nuts to mount your servos and assemble the upper legs | tested | 12€ |
| lots of cables and connectors and stuff | it's up to you which cables or wires and connectors you want to use, or if you would like to solder everything into place, and if you use heat shrinks, fabric hoses | up to you | 20€ | |
| PLA + TPU (?) | you will need about 1Kg of PLA + some grams of TPU (eg. my Black/White design: 500g for the covers + upper legs, 500g for the chassis + lower legs + shoulder joints, some small grams for the grey sensorplate in the head) + some grams of TPU for the foottips | tested | 30€+ |
-------------
Assembly Guide
Prequisites
The single most important thing is to test and to calibrate your servos. By calibration i mean to determin the minimum and maximum positions, and what dutycicle results in what actual angle. Don't use any servos, that behave weird in any way, such as: stuttering, grinding noises, clicking noises or which wont turn at least full 180° - you would regret it afterwards and will have to do a lot of disassembling stuff to get it straight. At last it is important, that you position each servo into a specific position, which will be named in the parts-list in each major step. Depending on where it should be mounted, it results in 2x 0° 2x 60°, 2x 120°, 2x 180° and 4x 90°. Make sure you add all the rubber dampeners to your servos, so you could fit the M3 through the mounting holes. If you wish to use fabric hoses, make sure you use the smallest and thinest possible. There is just not enough space in these parts to use thick ones. Or simply go with the standard servocable, which could look pretty nice, depending on your color theme.
Wrist
You need to make two identical wrists each for both sides - this means, that you need two mirrored pieces for the wrist and wrist counterpiece. Its important that you extend the servo cable and if you use fabric hoses, to guide it through.
Parts
| Total Amount | Part |
|---|---|
| 4x | MG996R (2x at 0° and 2x at 180°) |
| 16x | Servo rubber dampeners (should be shipped with your servo) |
| 4x | Wrist (2x right-handed, 2x left-handed) |
| 4x | Wrist counterpiece (2x right-handed, 2x left-handed) |
| 4x | Shoulder Joint Ball Bearing Pin |
| 4x | Foot Tip |
| 24x | M3 nuts |
| 16x | M3x20 |
| 8x | M3x8 |
| 4x | M2 nuts |
| 4x | M2x8 |
Wrist and foot tip
Insert 2x M3 nuts into their spaces in the wrist. Hold the foot tip at position and screw with 2x M3x8 the foot tip into place.
Wrist counterpiece and ball bearing pin
Insert 1x M2 nut into the small space in the wrist counterpiece. Screw 1x M2x8 through the ball bearing pin and attach it to the wrist counterpiece.
Wrist counterpiece and ball bearing pin
Insert 4x M3 nuts into the small spaces in the wrist counterpiece. Insert now from above the servo into its pocket in the wrist counterpiece. Now push both the wrist counterpiece with the servo and the wrist with the foot tip together, closing all gaps. Be careful not to loose any M3 nuts and screw both parts together with 4x M3x20 screws.
Wrist completed
Your assembled wrist should look like this one. Repeat it once again for the second left wrist and assemble the two mirrored (right-handed) right wrists.
Upper Leg
You need to make two identical upper legs each for both sides - this means, that you need two mirrored pieces for the upper leg bottom shell, upper leg top shell, servohorn mount and ball bearing mount.
Parts
you might use only two M2x8 on each leg to screw the servohorn into place and thus reducing the amount of M2x8 screws and M2 nuts by 2/3
if you have M2x6 then use these instead of the M2x8 which are only in use, because it was easier to buy the screws and nuts in bulk
use the long version of the servohorn & ballbearing mount for improved resting position of the legs or stick to the normal version true to KDY-0523's design for the legs being at an angle when resting
| Total Amount | Part |
|---|---|
| 4x | MG996R at 2x 60° and 2x 120° |
| 16x | Servo rubber dampeners (should be shipped with your servo) |
| 4x | FSH6S Servohorn |
| 4x | 625zz ball bearings without flange |
| 4x | Limb Top Shell (2x right-handed, 2x left-handed) |
| 4x | Limb Bottom Shell (2x right-handed, 2x left-handed) |
| 4x | Limb Servohorn Mount long version! (2x right-handed, 2x left-handed) |
| 4x | Limb Ball Bearing Mount long version! (2x right-handed, 2x left-handed) |
| 32x | M3 nuts |
| 32x | M3x20 |
| 4x | M3x8 |
| 24x | M2 nuts |
| 24x | M2x8 |
Servohorn mount
You need to screw the M2 nuts on the M2x8 first, otherwise it would hinder the mounting of the servohorn. You can't use the bare M2x8 screws without the nuts in this step, because they would stick out from the other side and touch the servo unavoidably, which would result in blocking the servo movement or other damage. You might consider using M2x6 instead and ditch the need for M2 nuts here completly. Screw the servohorn into place, using the middle hole on each little arm. Make sure that the two arms of the servohorn are perfectly perpendicular to the wrist, when mounted to the servogear at 0° resp 180° (depending which leg) and which arm was on top then. This is because the teeth are not an even number and by this not symmetrical which would either result in a gap between the lower and upper leg when resting or in the worst case, the servo could not rest in 0° or 180° position and always stutter thus pulling more current.
Attach Servohorn mount
Position the assembled servohorn mount to the wrist and make sure that the right arm ist on top. Otherwise remove the servohorn and turn it around as long as it sits perfectly perpendicular and attach it again. Screw the whole servohornmount with a M3x8 to the servo gear.
Attach Ballbearing mount
Push your 625ZZ Ball Bearing into the Ballbearing Mount (it should be are really tight fit). Afterwards push the ballbearing mount on the ballbearing pin of the wrist.
Upper Leg Bottom Shell preparation
Put four M3 nuts in the holes by the servo-pocket and push the servo into place. The two inner nuts are secured by the servo, the two out nuts might fall out so be careful not to lose them.
Route Cables through Upper Leg Top Shell
This part is a bit tricky, especialy when using fabric hoses for the servocables, since the space between the shells is very limited. Route your extended servocable from the wrist through the front hole of the top shell. Pull after that the servocable of the bottom shell servo through the hole as well.
Then push both shells toghether and at the same time pull the cables carfully further through the hole. Make sure the servocable from the wrist goes into both shells through the gap between both shells and is further guided underneath the top shell in the groove specially made for it (marked green). You have also to watch out not to lose the two M3 nuts next to the servo.
Screw both shells together
When both shells are closed you might either move your cables freely back and forth through the hole, in the case you do not use fabric hoses. When using fabric hoses it might be to tight, so you must open the shells slightly, when you want to pull the cables further through.
Use now four M3x20 to screw the servo into place and with it both the top and bottom shell, so they cant come apart without unscrewing them.
Complete Upper Leg
Now with both shell attached to each other and the servocables of the lower and upper leg routet through, place four M3 nuts in the four rear-facing pockets.
Place then both shells on the wrist so that the screwholes in the servohorn and ballbearing mounts align with those in the shells. Use four M3x20 screws, to screw everything together to complete the upper leg.
This is also the robots legs resting position, which results in the legs laying flat.
For the robots normal standing position the wrists servo is at 90° while the upper legs servo is at 120° or 60°, depending which leg.
Shoulder Joint
You need to make two identical Shoulder Joints for both sides - this means, that you need two mirrored pieces for the Shoulder Joint Servomount. This time instead of mounting both on the right or left, each the left and right side will have one of the mirrored pieces.
Parts
you might use only two M2x8 on each servohorn cap to screw the servohorn into place and thus reducing the amount of M2x8 screws and M2 nuts by 2/3
if you have M2x6 then use these instead of the M2x8 which are only in use, because it was easier to buy the screws and nuts in bulk
| Total Amount | Part |
|---|---|
| 4x | MG996R at 90° |
| 16x | Servo rubber dampeners (should be shipped with your servo) |
| 4x | FSH6S Servohorn |
| 4x | Shoulder Joint Servomount (2x right-handed, 2x left-handed) |
| 4x | Shoulder Joint Servohorn Cap |
| 4x | Shoulder Joint Ball Bearing Pin |
| 36x | M3 nuts |
| 16x | M3x20 |
| 20x | M3x8 |
| 24x | M2 nuts |
| 24x | M2x8 |
Servohorn Cap Preparation
You need to screw the M2 nuts on the M2x8 first, otherwise it would hinder the mounting of the servohorn. You can't use the bare M2x8 screws without the nuts in this step, because they would stick out from the other side and touch the servo unavoidably, which would result in blocking the servo movement or other damage. You might consider using M2x6 instead and ditch the need for M2 nuts here completly. Screw the servohorn into place, using the middle hole on each little arm.
Attach Ballbearing Pin to Servomount
Insert 1x M2 nut into the small space in the Shoulderjoint Servomount. Screw 1x M2x8 through the ball bearing pin and attach it to the Shoulderjoint Servomount.
Attach Servohorn Cap to Servomount
Now insert 4x M3 nuts into to pockets in the base of the Servomount and screw the Servohorn Cap with 4x M3x8 into place.
Attach Shoulder Joint to upper Leg
For the robots normal standing position the wrists servo is at 90° while the upper legs servo is at 120° (left legs) or 60° (right legs), depending which leg. Make sure you have actually positioned your servos correctly before, otherwise you should do the movement befor assembling further. When mounting the Shoulder Joint you wont align it to the upper leg along the upper star, but along the first to the right (left legs) resp. first to the left (right legs). Since the servohorn has six arms, each arm means an increase of 60°. For the left legs use this picture as an orientation.
The assembly is straight forward. Take an M3x8 screw and screw the assembled shoulder joint into place, as mentioned above. It is intentional, that the upper leg wont move between both horizontal endpoints, but instead could retract the leg further to the back than to the front.
Attach Servo to Shoulder Joint
Make sure the servos you want to place are at 90°. Place 4x M3 nuts into the pockets for mounting the servo. Place the servo now into its pocket and screw it into place with 4x M3x20.
Shoulder Joint Completed
You have now succesfully attached the Shoulder Joint to the upper leg. With this you have now completed the front left leg. Repeat the steps for the other 3 legs and make sure you use the mirrored parts when building the right legs and the left legs. And keep in mind, that the shoulder joint uses the mirrored parts for the front or rear leg on both sides!
Overview of all of the four legs
With the front left (FL) leg finished, rebuild the rear left (RL) leg with the same steps. But this time use the mirrored shoulder joint piece instead. The picture below shows both legs, where the only difference is the direction the servo in the shoulder joint is facing. Both gears should face outwards towards the nose or back of the robot.
The same applies to the front right (FR) and rear right (RR) leg, with both servo gears facing outwards. Use for the right sided legs also the mirrored copies of the lower and upper leg parts. Keep in mind, that you have set the right angles for your servos prior to assembly, with the servos in the shoulder joint being at 90°, the servos in the upper legs at 60° and the servos in the wrists at 0°.
When all of your legs are assembled the should look like this, with the front legs shoulder servos gears facing to the front of the robot and the rear shoulder servos facing backwards.
Connecting to the Shoulders
you might use only two M2x8 on each servohorn cap to screw the servohorn into place and thus reducing the amount of M2x8 screws and M2 nuts by 2/3
if you have M2x6 then use these instead of the M2x8 which are only in use, because it was easier to buy the screws and nuts in bulk
| Total Amount | Part |
|---|---|
| 4x | FSH6S Servohorn |
| 2x | Outer Shoulder |
| 4x | M3x8 |
| 24x | M2 nuts |
| 24x | M2x8 |
Screw the servohorns to the outer shoulder piece with twelve M2x8 screws and nuts.
Front & Rear Legs
Screw the front legs to the outer shoulder using two M3x8 screws. Make sure the servos in the shoulder joints are at 90° and that the arms of the servohorn are perfectly perpendicular.
Repeat this for the rear legs as well, so that both outer shoulder pieces face outwards.
The front and rear legs with the shoulder should look like this.
Body
| Total Amount | Part |
|---|---|
| 4x | 625zz ball bearings without flange |
| 2x | Inner Shoulder |
| 2x | Top Shoulder |
| 2x | Bottom Shoulder |
| 2x | Chassis Side |
| 1x | Circuitry Mountingplate (choose either the XL4016 or SZBK07 type, depending on your chosen larger buck-converter) |
| 24x | M3 nuts |
| 24x | M3x8 |
Inner Shoulders
Add into each the top and bottom shoulder block two M3 nuts. Make sure you have oriented the blocks the right way, so that the pockets for the nuts that will be used to hold the covers are facing into the body.
Screw the inner shoulder with four M3x8 screws into place, so that the screwsheads will sink into their pockets.
Chassis
Take the chassis side piece and place four M3 nuts into their pockets - the flat side should face outwards and the long cutout for the circuitry mountingplate should be at the bottom. Chose the mountingplate corresponding to your bigger buck converter - the XL4016 or SZBK07 https://github.com/michaelkubina/SpotMicroESP32/tree/master/electronics
Put your (pre-populated ???) circuitry mountingplate between both sides.
Now attach both inner shoulders to it with each four M3x8 screws and the bigger blocks being at the top.
The assembled chassis should look like this.
Mount legs to chassis
Attach now the ball bearings to your shoulder joints. Put into the front of the top and bottom shoulder block M3 nuts. Screw the front legs assembly to the shoulder block with four M3x8 screws.
Repeat the steps for the rear legs as well.
When finished, your SpotMicroESP32 should look like this.
Head with ESP32-CAM
| Total Amount | Part |
|---|---|
| 1x | ESP32-CAM with OV2640 (Version 2! with slightly longer cable) |
| 2x | HC-SR04 Ultrasonic Sensor |
| 1x | Front Cover Optimized |
| 1x | Sensormount for the ESP32-CAM |
| 1x | Cameramount for the ESP32-CAM |
| 1x | Cameramount Counterpiece for the ESP32-CAM |
| 4x | M3 nuts |
| 6x | M3x8 |
Place the ESP32-CAM into the designated place of the Cameramount. Screw the counterpiece with two M3x8 screws into place, with the small pads facing towards the ESP32-CAM thus preventing the PCB from lifting. Place now the two HC-SR04 into their spaces in the sensormount-piece, but dont push them all way down yet. Instead leave some half centimeter space.. Push now the Cameramount-piece on top of if, so that the wedges slide on top of the HC-SR04 PCBs, thus preventing them from slipping back out again. It might be necessare to hone down a small portion of the lower ends of the wedges.
Place now four M3 nuts into the spaces in the front cover, push the sensor- & cameramount into place and screw all of it with four M3x8 screws into place. The head is now assembled.
Tail
The following section needs to be redone as the referenced piece is currently deprecated 😅
| Total Amount | Part |
|---|---|
| 1x | 1,8" TFT with ST7735 with SD-Card |
| 1x | Push Button (latching, not momentary) |
| 1x | Rear Cover Shell Longer Version |
| 4x | M3 Nuts |
| 4x | M3x8 |
Mount TFT Screen and Pushbutton
Place the 1,8" TFT with SD-Card into its designated pocket and screw it with four M3x8 screws into place - counter it with four M3 nuts from behind.
Remove the nut from your pushbutton and slide it through the hole - counter it with the nut again from behind.
Your rear cover is complete.
Top and bottom Cover
| Total Amount | Part |
|---|---|
| 1x | Bottom Cover Split Front do not use yet! See note above! |
| 1x | Bottom Cover Split Rear do not use yet! See note above! |
| 1x | Top Cover Split Front |
| 1x | Top Cover Split Rear with OLED |
| 8x | M3 Nuts |
| 8x | M3x8 |
Connect both cover halves
Take the front and rear half of the top cover. Use four M3x8 screws to screw both pieces together - counter them with four M3 nuts.
Repeat this for the bottom cover halves as well.
Mount covers
| Total Amount | Part |
|---|---|
| 16x | M3 nuts |
| 16x | M3x8 |
In order to mount the head-unit, the tail and the top and bottom cover to the body, you need to add the M3 nuts into the top and bottom blocks in the front and rear shoulders (highlighed green).
Mount Head
Slide the assembled head-unit onto the front shoulder-plate.
Screw it from the top and from the bottom with four M3x8 screws into place.
Mount Tail
Slide the tail onto the body as well and screw it with four M3x8 nuts into place.
Mount top and bottom covers
Place the bottom cover beneath the body and screw it with four M3x8 into place.
Place the top cover over the body and screw it with four M3x8 screws into place.
Assembly Finished!
Congratulations, you have now succesfully assembled your SpotMicroESP32.
--------
Electronics
Wiring
When wiring your own robot, think of some kind of color coding for your wires, so its easier to distuingish them - for example:
- 5V with violett wires
- 3.3V with red wires
- I2C Clock white
- I2C Data grey
- Analog Signals ocker
- etc...
SERVO DRIVER - PCA9685
Manufacturer Homepage: https://www.nxp.com/products/power-management/lighting-driver-and-controller-ics/ic-led-controllers/16-channel-12-bit-pwm-fm-plus-ic-bus-led-controller:PCA9685 Datasheet: https://www.nxp.com/docs/en/data-sheet/PCA9685.pdf
The PCA9685 is capable of FastMode+ (I2C clock at 1Mhz) - it should have its own I2C bus - which gives us more update cycles on the servos. The MG996R even though most tutorials and sellers claim their working frequency to be 50Hz, we can actually go to even 333Hz and beyond. The limit is only the 12Bit resolution and the maximum value for your servo for the max-angle. The pulsewidth of about 2ms + about 0.3ms is whats relevant for the IC in these digital servos.
Do not use Standard Mode - 100KHz Do not use FastMode - 400KHz Go with FastMode+ - 1MHz
| Channel | Servo | Abbreviation |
|---|---|---|
| CH0 | Front Left Shoulder | FLS |
| CH1 | Front Left Upper Leg | FLU |
| CH2 | Front Left Lower Leg | FLL |
| CH3 | Front Right Shoulder | FRS |
| CH4 | Front Right Upper Leg | FRU |
| CH5 | Front Right Lower Leg | FRL |
| CH6 | Rear Left Shoulder | RLS |
| CH7 | Rear Left Upper Leg | RLU |
| CH8 | Rear Left Lower Leg | RLL |
| CH9 | Rear Right Shoulder | RRS |
| CH10 | Rear Right Upper Leg | RRU |
| CH11 | Rear Right Lower Leg | RRL |
| CH12 | x | x |
| CH13 | x | x |
| CH14 | x | x |
| CH15 | x | x |
------------
Code
https://github.com/Blacksheep909/SpotMicroESP32-Nitro-Fork/tree/master/code
-----------
Source
https://github.com/michaelkubina/SpotMicroESP32
credits to: https://github.com/michaelkubina
Boost Me (for free)
If you followed the guide until there, please leave a boost.


































































































Comment & Rating (1)