Blueprint

Robot Arm

This robot arm will be powered using stepper motors, a variety of sensors, and an ESP32 on a custom PCB. I plan to design a custom UI to control the arm wirelessly from a laptop and create different types of grabbers that can attach to the end of this arm. The goal of this project is to learn how to design a custom PCB and create a project that integrates motors, robotic design, CAD and programming.

Created by Parth Dhingra Parth Dhingra

Tier 1

90 views

1 follower

alexren alexren ⚡🚀 approved Robot Arm ago

Tickets awarded: 1000 tickets

Tier: 1

awesome job with this!!

Parth Dhingra Parth Dhingra submitted Robot Arm for review ago

Parth Dhingra Parth Dhingra added to the journal ago

Updates to Journal

So I went back and split up the big journal into different journals for each week I worked on this project. I basically worked on it every day during Winter Break, so I tried to include all the details in the new journals, and I also added more details and more pictures that I took when I was working on it.

I deleted most of the posts and redid them, so that's why they are all published on the same day.

image

Parth Dhingra Parth Dhingra added to the journal ago

Finished V1, Shipped Project

Today, I pretty much finished this version of the robot arm and tested it. I attached the motor for the last DOF at the top and tested it, and it worked. I also got the belt for the tilt axis and that worked as well but I had to add tensioners to it since the belts were slightly big. I then edited the code to make those two joints closed-loop as well. This meant adding code that sent encoder data via websockets to the website. This worked well and both those joints also have step correction in case the belt slips due to torque. I'm not adding a grabber to this arm since I want to make a new version with a lot of improvements.

I learned a lot from this arm.

1) The belts on 3d printed pullets don't work the best. Even though I used GT2 profiles in the prints, the belt doesn't bite well into the plastic, which means it's really easy for it to slip. This reduces accuracy as well as the amount of weight you can apply to the end of the arm.

2) Pulleys take up too much space and weight. The better way to have designed this would have been to use gearboxes. This eliminates having to use belts, which eliminates most of the backdriving due to weight.

3) The AS5600 encoders worked really well. The data is sent smoothly to the UI using websockets with no issue. The step correction worked well when I manually moved the joints while the motors were engaged. It saw that the encoder slipped and immediately step corrected, which is how a closed-loop system should work.

4) This design used a lot of plastic because of how big the pulleys needed to be. Using cycloidal gearboxes could have eliminated all of that since the amount of area needed to add a higher amount of torque is less than large printed pulleys and belts.

5) The NEMA 23 motor is loud and probably unnecessary. I'll eliminate it in my new design for simplicity.

6) I also learned various things electronics-wise. How hard through hole modules are to desolder. I forgot to add ports for the sensors so I had to solder directly to the PCB. SMD parts are hard to hand solder. Many of the ports I added were extra and not needed.

In my V2 design, I plan to use cycloidal gearboxes, no pulleys, and just NEMA 17 motors with AS5600 encoders. I plan to simplify the PCB, eliminating the I2C multiplexer since I don't really need that many I2C ports. I'll add ports for the encoders and simplify the overall design. I'll reuse the same web UI since it worked very well.

This is how the final version of the web ui looks. The 3d visual looks great and moves based on encoder data. Step correction works. Speed control works as well. And I added home buttons to send individual joints to zero and the whole robot to zero at the same time. All of this worked really well.

IMG_2818

Here's the finished arm. Again, I didn't add the grabber since I want to design a better V2 arm before focusing on end effectors. My main goal with this project was to create a UI that wirelessly connects to a robot, learn electronics design, and physical robotics design.

IMG_2817

Parth Dhingra Parth Dhingra added to the journal ago

Added closed loop functionality

Today I worked on the control software again while I wait for the belt to arrive so that I can finish the rest of the robot.

I was able to add closed-loop functionality, which means that the user sets a target angle and then the robot goes to that target angle based on the encoder reading, improving accuracy. If it overshoots, it goes back slightly until it's within range of the target angle based on what the encoder reads. I did this by adding loops that constantly check encoder data while the joint is moving. I tested this and it works well.

I also added code that flashes the zero position into the ESP. This allows the zero position to be saved even when the robot is turned off. This allows the AS5600's to act as absolute encoders and removes the need for limit switches for homing. It will also allow me to now add soft limits to make sure the joints can't move past a certain point.

My next steps are to finish the rest of the physical arm and make minor tweaks in the software. Then I want to make a V2 arm that uses cyloidal drives instead of pulleys to improve its looks, make it smaller, and make it faster.

This is what the website looks like so far:

image

Parth Dhingra Parth Dhingra added to the journal ago

Worked on control software

Today I worked on incorporating encoder data in the control software. The idea is that the 3d visualization is based on the actual encoder data. There should also be a button to set a home position in the software. This allows the robot to start at 0, and then you can set a target angle and it'll move to that angle. It's not closed loop yet, so it doesn't do motion correction. It just allows you to set a home position and base the degrees off of that reference value. I plan to make it closed loop later.

It took a while to get the code working to set a home position that worked correctly. I got it working for the base and the shoulder joints. The software also prevents you from going past max now. I also fixed some other issues in the software like getting the emergency stop button and the acceleration data changer working.

This is what the software looks like now. It has an actual next to the target degree value.

image

Parth Dhingra Parth Dhingra added to the journal ago

Continued working on encoder feedback

Journal from December Week 4

So basically, at this point, I have all the motors working with open-loop control, and I'm experimenting with closed-loop encoder feedback. I added code to the ESP that prints encoder data using Serial Print. This allows me to test the encoder on the joints. I glued one onto the main tilt joint.

image

This is an example of the feedback I got in Serial Print. It seems to work well.

image
image

This means that I'm getting encoder data on at least the ESP. So at this point, I started working on code to send that data back to the UI using Web Sockets. This allows the encoder data to be displayed on the UI while the joint is moving to ensure the joint is actually where it's supposed to be. So in this photo, the number under "actual" is the encoder data. It still doesn't have step correction right now, so it's just seeing the encoder data, not really doing anything about this. Now that I had this data, I did some testing and saw that the UI degree was always around 1 degree off from where the encoder data actually was. This proves that closed-loop step correction is needed.

At this point, I started researching how to add code that will basically see if encoder data is above or below the target value from the user, how to make the joint go where it actually needs to go.

I also worked on code that basically makes the 3d model on the right side of the UI reflect encoder data. This means as the joint moves in real life, the 3d model in the UI moves at the same speed at the same time. This was pretty cool and works well.

Parth Dhingra Parth Dhingra added to the journal ago

Continued Arm Assembly, Motor Control Code

Journal from December Week 3

So this week, I continued on the physical assembly of the arm. I figured out how to connect the TB6600 driver, which powers the Nema 23 motor. This worked on the first try, which was nice. I got basic code from AccelStepper again, which worked, so then I added backend code to make it work from the sliders in the UI, which also worked. Then I printed more parts for the arm and basically assembled the main tilt joint. The belt size I ordered was a bit too small, so I had to drill holes in the plastic and make my own tensioners, which worked decently.

This is the TB6600 wired:

image

I cut a steel shaft and printed a coupler to connect that shaft to the Nema 23 motor. This worked well. So the tilt joint works now. I went back to working on the UI. I did some research on how AS5600 encoders work. I found out how to wire then so I tried one out, connecting it to the I2C multiplexer on the PCB. I hovered the magnet over the sensor, and the values seemed to increase and decrease, which means that it works. I started experimenting with some code that sends fake encoder data to the UI and seeing if the UI can display that. I got it kinda working, but there are still some glitches.

This is the current arm:

image

Parth Dhingra Parth Dhingra added to the journal ago

Continued PCB testing, continued working on UI + code

Journal from December Week 3

Now that I had a new PCB, I started to test the three NEMA 17 motors. I connected them to the JST-XH connectors on the PCB. I wrote some basic code to test a basic movement using the AccelStepper library in Arduino IDE. That worked really well. So at this point, I knew the motors work with the normal TMC2209 drivers. I still need to test the big motor with the bigger external driver.

I also started working on the physical arm. I just printed the base so far, so I added bearings to the base and I added the Nema 17 to the left. I attached a pulley and belt to that and to the base so the base rotation works. I also tried that with some basic code, and it works.

image

Most of the time this week was spent on the UI. My first goal is to get the steppers working with the sliders with no encoder feedback, so open-loop control to keep it simple. I did this by basically having the UI send commands using WebSockets. The UI doesn't actually control the motors directly; it just sends commands. Then the code on the ESP locally is able to read those WebSocket commands and then control the motors from there. So basically, the Web UI sends a command like move some amount of degrees at some speed, and then the code on the ESP does that. This works decently well for all three motors using the sliders in the Web UI. The one flaw with this is that when torque is applied to the joints, the steps can slip. So the UI thinks the arm moved a certain number of steps when it didn't really, because there are external forces. That's why a closed-loop system is needed with encoder feedback. That's one issue, and then another issue is that the Estop in the UI doesn't work for some reason. I can't figure this out, so I just left it for some reason. I also need to add a console log in the UI so that it shows what error occurred in the websocket communication and when. The websocket backend code I implemented works really well. It basically uses my Wifi username and password to connect locally and sends packets with little to no delay. This is some of the ESP code:

image

Parth Dhingra Parth Dhingra added to the journal ago

Worked on PCB, Started working on Web UI

Journal from December Week 2

So at this point, I had a PCB with an ESP that was connected using a bunch of jumper cables. The motors still didn't really work correctly. I spent a while going over the schematics, trying to figure out what the issue could be. It ended up being the drivers being wired wrong in the PCB. This basically meant that I had to make a new PCB and cut the driver pins that were wired wrong. That's mainly what I worked on this week. I took the ESP off and soldered it onto the new PCB along with all the JST-XH connectors, screw terminals, capacitors, drivers, and diodes. This took me another day to do since it's a pretty big PCB. I spent a while trying to desolder the drivers from the old PCB, but it was just too difficult since I had to heat up 16 pins at the same time and try to pull the driver off. I tried this for a while and even bought ChipQuick solder, which is an alloy that stays liquid for longer. In the end, even that didn't solve the problem, probably because my PCB has a copper ground plane all over it, which sucks away all the heat, drying the solder really fast. After working on this for a few days, I just bought new drivers myself for the new PCB. I soldered the new drivers on and tried to test out the motors with some basic code. That ended up working. I also made sure to cut off the MS1 and MS2 pins on the drivers. I also faced another issue here when one of the drivers didnt work. One of the EN pins on the drivers was connected to D12 on the ESP. This is not a good pin to use, which I later found out. I had to then desolder it again and cut that pin.

This is the new PCB: image

This week, I also worked on the Web UI. I used Lovable to create a nice frontend, and then I manually coded the backend. The frontend shows the robot arm 3d model on the right and then on the left, it has sliders to wirelessly control the robot arm. Right now, it's open loop. No encoders or anything. I decided that the backend, it could connect wirelessly using websockets since it's not too complicated to implement. I started researching how to do that and started a basic backend code.

This is the UI so far:

image

m0.hid m0.hid requested changes for Robot Arm ago

Hey! This looks like a seriously cool project. Theres some amazing hardware here and i love the frontend website you made. The only issue I see here before we can approve the build tickets is that one of your journal entries is 60 hours, which is a lot higher than our recommended maximum of 4-5 hours per entry. If you could just split this up into multiple entries and add more photos of your progress this will help us greatly to verify your hours. Thanks!

Tier: 1

Parth Dhingra Parth Dhingra submitted Robot Arm for review ago

Parth Dhingra Parth Dhingra added to the journal ago

December Week 1

This is the progress I made in the past week. I've been working on this project pretty much every day. I ran into a bunch of different issues, and I'll try to detail them all here. I've pretty much fixed all of them now, though.

After I got the new ESP, I soldered it onto the PCB using wires instead of soldering it directly because I couldn't remove the solder in the holes of the PCB from the old ESP perfectly. This took a while, but it worked in the end. I then went on to make a basic code and try to test the drivers. The motors wouldn't run, and I spent a bunch of time trying to figure out if something was wired wrong using my multimeter. I finally figured out that I had designed my PCB so that the 3.3V from the ESP was going to MS1 and MS2 on the TMC2209 drivers. This took me hours to figure out. Once I did that, I tried to use a knife to cut the trace in the copper on the PCB that was going to the MS1 and MS2 pins on the driver. This didn't solve the problem. The drivers were also heating up a bunch, which made me think there was a short somewhere. I spent a couple of days trying to figure out where, but in the en,d I decided to just redo the whole PCB on a new board.

This is the old PCB with the jumper cabled ESP: image

I also started researching how to make a Web UI that reflects the robot arm in real life and has sliders to control the arm movement. I also researched how to make code that allows the motors to move. I learned that theres libraries alreasdy made to do this like AccelStepper.

Parth Dhingra Parth Dhingra added to the journal ago

Fixing PCB Issues

I connected the 24V to the PCB to test it and start working on the code to make the motors work. However, the power supply kept turning off after a few seconds when I turned the power on. It seems like the Buck Converter didn't work properly, or it wasn't set to the correct voltage, so it sent too much voltage to the Esp and fried the onboard regulator. This meant I had to desolder the whole ESP and buck converter module. I bought a new ESP, and I'm now waiting for that to arrive. This time, I'll check the output voltage on the buck converter and make sure it's 5V before soldering it to the PCB, and hopefully it'll all work.

This took a while since I had to learn how to desolder, and the ESP has 30+ pins, but I got it off eventually.

image

Parth Dhingra Parth Dhingra added to the journal ago

Soldered PCB

Today I learned how to solder and practiced on one of the spare PCBs. After doing that for a while, I soldered all the parts onto the PCB that I will be using. I soldered the ESP, I2C multiplexer, buck converter, and all of the ports and capacitors. The small SMD capacitors took a while to install since they're so small.

This is the PCB so far:

IMG_791E42EB-6E79-468A-A0E7-1BAF41F6BE03

IMG_2397

My next steps are to connect the motors and get all the motion working before 3d printing the parts and assembling the physical arm.

Parth Dhingra Parth Dhingra added to the journal ago

Ordered Parts, Fixed Issues with PCB and Ordered It

I ordered all the parts I needed from AliExpress, Amazon, and DigiKey. I went over the PCB schematics and design again and found some errors. For some reason, the footprints for the Servo motors were JST connectors when they just needed to be standard 2.54mm pin headers. I changed that, edited some of the tracing rules. The ESP was also facing the wrong way so I fixed that. I added a screw connector for a 24V output and a ground output. This will be useful for the bionic hand I build later, which will need power. I think this is easier than trying to get another power source since I can just use the same 24V power supply for the arm and the bionic hand PCB. After that, I added all the silkscreen labels for all the connectors, so I know in which order to put the wires. This took a little bit since there are a bunch of connectors. After that, I ordered the PCB from JLCPCB. I also added a polyfuse to protect the whole thing from a short circuit.

My next steps are to continue working on and refining the CAD until my parts arrive in a week or two.

This is the completed 3D view of the PCB.
image

CAN CAN ⚡🚀 approved Robot Arm ago

Tier approved: 1

Grant approved: $233.00

Insane!

Parth Dhingra Parth Dhingra submitted Robot Arm for review ago

1mon 1mon requested changes for Robot Arm ago

please try to optimize your bom by buying more stuff from aliexpress rather than amazon. amazon tends to be way more expensive

Parth Dhingra Parth Dhingra submitted Robot Arm for review ago

1mon 1mon requested changes for Robot Arm ago

please show the full checkout price for each store, including prices for each part from aliexpress/amazon etc.

Parth Dhingra Parth Dhingra submitted Robot Arm for review ago

1mon 1mon requested changes for Robot Arm ago

Really cool project! We use JLCPCB for PCBs, as it's cheaper. Also, filament for blueprint gets reimbursed, rounded to the nearest 250g, so please remove the filament from the BOM. Additionally, please try to find the bolts and bearings from AliExpress instead of Amazon.

Parth Dhingra Parth Dhingra submitted Robot Arm for review ago

Parth Dhingra Parth Dhingra added to the journal ago

Finished Code, Finished GitHub, Shipped Project

Today I finally decided the CAD is finished. I have decided not to design an end-effector for now since I want to make a custom robot hand that will later attach to the end of this Robot Arm. I want to get the arm working with a fully custom UI before worrying about the end-effector.

This is the finished GitHub README:

image

I also wrote a basic code and uploaded it to GitHub and shipped my project.

Parth Dhingra Parth Dhingra added to the journal ago

Finished CAD and Worked on Github

Spent some more time today on the CAD, adding all the smaller details. I added the rest of the hardware to the CAD, mainly, and made sure the dimensioning for all the parts that were being mounted together was correct based on the hardware that I added to the BOM. I also started the GitHub page, and it should be finished tomorrow so that I can ship it.

I added another encoder to the bottom axle to get rotation values.

image

image

image

I added holes to make it easy to tighten the screws that will be in tight spots. I also added holes for heat-sunk inserts in the pictures above.

image

Parth Dhingra Parth Dhingra added to the journal ago

Almost done with CAD and finished BOM

I finished adding all the fasteners to the CAD and I made sure all the hole sizes are right for the M3 screws and threaded inserts. I have a finalized design for the arm and I calculated how much filament I need to print it. I added that to the BOM. I also worked on a little cost optimization trying to find electronics on DigiKey for cheaper, since I'm already paying for shipping there. I added the AS5600 sensors into the CAD.

My next steps are:

  • Double-check BOM accuracy
  • Start making a basic code for the motors and controlling the arm using a custom UI
  • Work on the GitHub repository - make the Readme and upload all the needed files.
  • Finish cost optimization
  • Maybe make a wiring diagram if needed for the GitHub?

Here's how the CAD looks right now:

image

Here's my updated BOM:

https://docs.google.com/spreadsheets/d/1jZwi7d67DiPdZLEvy5LfeC6HyOPPZ9pO3xaRMX1j6oo/edit?gid=0#gid=0

I also calculated how much filament I need roughly. These are the sliced parts.

image

image

image

image

image

So, roughly adding all of that, I got 1370g of filament. Rounding up to 1500g because I didn't include the smaller parts like the shaft and the parts for the end effector. I added filament to my BOM and changed the price so it only accounts for 1500g and I will pay the rest of the 500g myself since I would need to buy 2kg of filament.

(FYI: Made this journal over 3 different days.)

Parth Dhingra Parth Dhingra added to the journal ago

Worked on improving CAD

I chose to use M3 fasteners for everything and sourced the heat sink inserts and hardware. I started adding holes for those and I also started adding filets and more parts to the CAD to make it look better and more finished. My next steps are to finish adding all the remaining hardware (heated inserts, fastners, sensors) to the CAD and then finalizing how much filament I need so that I can add it to the BOM. Once that is done, I can create sample code and then ship the project.

image

Parth Dhingra Parth Dhingra added to the journal ago

Finished PCB

I finished the PCB and the BOM and started working on the CAD. This is a picture of the finished PCB. I made a copper fill for the GND on both the top and bottom layers and also added VIA's to connect them. I fixed the layout and made sure the capacitors are near the drivers to make sure they work properly, since that was one of the problems pointed out with my last design. I also changed a lot of the connectors to header pins to make it easier to solder and work with. I still need to add mounting holes on it to mount to a bracket later on. I previously had a XT60 connector soldered onto the PCB but I changed that to just a screw terminal which will connect onto a XT60 connector with wires. I thought this will be stronger than connecting the XT60 connector directly to the PCB every time. I added a banana-plug to XT60 adapter to the BOM since this is what will connect the bench power supply to the PCB. It will supply 24v.

image

I also worked on improving the CAD model to make it look better, and I worked on designing mounts for the magnet sensors.

Parth Dhingra Parth Dhingra added to the journal ago

Finished Schematic, worked on PCB and BOM

I finished fixing and double-checking all the footprints on the schematic for the PCB. I also finished adding all the PCB parts to the BOM. I generated a PCB from the schematic and started the layout and tracing again. My next steps are to finish the BOM and PCB and make the CAD look better. I also need to make mounts for the magnet sensors in the CAD and tweak some things. I also need to make it look better overall, with filets, chamfers, etc. I had to get some of the electronics, like the little diodes and capacitors from DigiKey because I couldn't find the exact ones I wanted on Aliexpress with free shipping. I will move some of the other electronics to DigiKey before shipping this project because the electronics are a little cheaper on there and it doesn't force you to get 100 packs of everything. I also need to work on optimizing the BOM to bring the cost down since it's around $230 now and I still need to add filament once the CAD is finalized.

image

This is my current BOM: https://docs.google.com/spreadsheets/d/1jZwi7d67DiPdZLEvy5LfeC6HyOPPZ9pO3xaRMX1j6oo/edit?usp=sharing

This journal is from 11/3 just forgot to post it.

Parth Dhingra Parth Dhingra added to the journal ago

Worked on Schematics

Apparently, all the driver footprints were wrong, so I had to redo that and all the tracing for that. I was using the wrong drivers so I replaced all of those with TMC2209's. I also worked on the BOM, and I'm almost done with that. My next steps are to make the arm look better and finalize all the details to make sure all the electronics that are on the BOM will work with the PCB. I also need to get the cost down as close to $200.

image

Parth Dhingra Parth Dhingra added to the journal ago

Worked on BOM and PCB

A bunch of the footprints on the PCB ended up being wrong so I had to edit them. I also added most of the tiny electronics for the PCB onto the BOM. The total cost right now is $205 so I'll see if there's a way to bring that down. I retraced the PCB, replaced a couple of the connectors, and redid some of the wiring. The BOM is mostly done and the PCB should be done now. It took a while today because EasyEDA wouldn't let me update footprints without retracing the whole PCB and it also kept giving me errors. It also took a while finding each tiny component on AliExpress for the PCB that would fit the footprint.

image

image

image

Parth Dhingra Parth Dhingra added to the journal ago

Worked on the BOM

I made my BOM spreadsheet and started adding parts to it, and also researched where to get parts. I looked into the types of Nema motors and how much torque they have, and the difference between sellers. I also looked into what type of hardware to use since I don't have any.

image

Parth Dhingra Parth Dhingra added to the journal ago

Finished PCB Pretty Much

I pretty much finished the PCB routing. I just need to do a GND copper fill later, which wasn't working correctly.

image

image

image

The price came out to $12 with shipping for five pcb's. My next steps are to finalize the CAD and make sure everything works, finish the BOM, and verify everything is good with the PCB and then I'll ship the project.

Parth Dhingra Parth Dhingra added to the journal ago

Worked on fixing PCB schematic issues

I had some issues with the footprints for the PCB schematic so I worked to fix those. I used a lot of user contributed footprints so that probably led to the issue. I just had to go in and replace a bunch of them.

image.png

Parth Dhingra Parth Dhingra added to the journal ago

Finished PCB Schematics, Worked on BOM

I finished the PCB schematics. It has three stepper motor drivers integrated for the three NEMA 17 Stepper Motors. The board I am using is an ESP32. I also have one bigger driver for the NEMA 23 stepper motor, which will be connected to the PCB with wires, not soldered on. I have three connectors for servos and six magnetic hall sensor connectors. I also have some LEDs that show when power is on, and when data is being transmitted. I also have a connection for an E-Stop button.

image.png

Parth Dhingra Parth Dhingra added to the journal ago

Started PCB Schematics, Worked on BOM, Made a List of Parts

I did a bunch of research on how to design a PCB. I made a list of components I need and worked on the BOM. I also completed a lot of the schematics for the PCB. I decided on what drivers to use for each stepper as well as how it would be powered. Here's how far I got on the schmetatics for the PCB on EasyEDA.

image.png

Parth Dhingra Parth Dhingra added to the journal ago

Finished CAD for now, researched PCB design

I finished the CAD for now. I'll come back to it later and edit the tiny things that need to be fixed. But it's done for the most part. I still need to make a grabber for the end of it as well. I'll edit the holes and clearances and wire openings once I have a BOM and an exact list of parts I want to get.

image.png

I started watching tutorials online on how to design PCB's since I have never done it before. My current plan is to have one big PCB that intakes power and has the stepper drivers and then a couple tiny PCB's for encoders and limit switches.

image.png

I spent basically 2 hours this session. My next steps are to start working on the electronics design and PCB and also think about and CAD a grabber design.

Parth Dhingra Parth Dhingra added to the journal ago

Continued CAD

I worked on the arm part of it and calculated torque and pulley ratios based on the weight of the arm. The CAD is almost done, and after this, I'll start drawing out the wiring and designing a PCB as well as start some basic coding.

image.png

image.png

Parth Dhingra Parth Dhingra added to the journal ago

Continued CAD

Today I continued working on the CAD, and I finished most of the rotation part and created the mounting holes for the rest of the arm to mount onto the rotation part. I decided to use heat-sunk inserts for all the holes that need to be threaded.

image.png

image.png

Parth Dhingra Parth Dhingra added to the journal ago

Continued CAD

I worked on the CAD for another hour. I figured out how to make the shaft longer on the stepper motor and how to fit all the bearings and pulleys. I also started working on the piece that will rotate the rest of the arm.

image.png

image.png

I worked for around an hour tonight.

image.png

Parth Dhingra Parth Dhingra added to the journal ago

Worked on CAD

I completed the base of the robot and added bearings, calculated the right distance between the motor pully and the big base pulley to make sure a 200mm belt will fit. I also added mounting brackets on the sides to mount onto a piece of plywood.

image.png

I also started working on the rotation assembly and the Nema 23 motor mounting.

image.png

This is how much time I spent on OnShape:

image.png

Next session, my goal is to finish the rotation part of it with all the motor mounts and pullys.

Parth Dhingra Parth Dhingra added to the journal ago

Created requirements, started design and CAD

After doing some more research and thinking, I decided:

Goals:

  • Should be able to carry at least 0.5kg of weight.
  • Should be able to have a reach of at least 15 inches.
  • Parts should be < $150.

Motor and Gearboxes:

  • The base will use one Nema 17 and a pulley system to rotate the robot arm
  • The tilt function will use one Nema 17 motor with a pulley system and no gearbox for now. If it's needed later, I'll just 3d print a planetary gearbox.
  • The 2 other joints will just use Nema 17 steppers and small pulley systems if needed.
  • The grabber will use an MG996R Servo motor.
  • If any joints need gearboxes, I can design planetary 3d printed gearboxes instead of buying metal ones to save on cost
  • I will use a benchtop power supply to power it instead of buying a sepearte dedicated power supply.

I started making a CAD for the base rotation part and the tilt function in OnShape. I also started making a basic BOM of parts I might need.

This is the base of the robot arm where the electronics should fit. It has some holes on the side to mount onto a piece of plywood for added stability. The Nema 17 stepper motor mounts to the side without a gearbox. It will have a 20t pulley attatched to it with a GT2 timing belt that connects to the base of the robot onto a 280t pulley. The whole thing will rotate on tiny bearings on the edge of the base and then one bigger bearing in the middle.

image.png

image.png

That's how far I got during this CAD session. I still need to add the tiny bearings under the big pulley and finalize the distance between the centeres of the pully's to make sure there's a standard timing belt length I can by that's closed loop.

Parth Dhingra Parth Dhingra added to the journal ago

Researched current robot arm designs

RESEARCH

I researched a bunch of robot arm designs (10/18 and 10/19) that have already been made. I looked into what type of motors they use, which joints use what type of gearboxes, and what type of grabbers can be made.

Most of the arms were either made using a bunch of MG996R servos, but these arms were much smaller. The bigger arms were made using Nema 17 and Nema 23 stepper motors with planetary or cycloidal gearboxes attached. I want my design not to be too expensive to make, so I'm leaning towards using mainly Nema 17 motors and maybe 1 Nema 23 motor with either metal planetary gearboxes or printed plastic ones that I make myself. Most designs use ESP 32 since it is easier to connect to Wifi, which is what I am leaning towards as well.

The main costs for the project would be motors, gearboxes, motor drivers, the ESP32s, and the power supply, since I already have a 3d printer and filament. Most of the arm will be plastic except the motors and gearboxes. I haven't decided how many degrees of freedom it will have, as it will probably be dependent on what the total cost comes out to.

image.png

This is one of the arms I liked as it used mainly Nema 17's and isn't overcomplicated. The motors are connected to a small gear, which is connected to a larger gear using a belt. So it doesn't need complex gearboxes. The base uses one Nema 17 to turn the whole arm, but the part that tilts the arm uses two big Nema 23's both connected with a belt on either side. This seems a little excessive to me, so I would probably play around with what type of gearbox to use there instead and if it's possible, just to use one motor.

For the grabber, I want to start with just basic claws but I want it to have a easy mounting system so I can play around with pneumatics and a robot hand in the future.

Parth Dhingra Parth Dhingra started Robot Arm ago

10/19/2025 - Researched current robot arm designs

RESEARCH

I researched a bunch of robot arm designs (10/18 and 10/19) that have already been made. I looked into what type of motors they use, which joints use what type of gearboxes, and what type of grabbers can be made.

Most of the arms were either made using a bunch of MG996R servos, but these arms were much smaller. The bigger arms were made using Nema 17 and Nema 23 stepper motors with planetary or cycloidal gearboxes attached. I want my design not to be too expensive to make, so I'm leaning towards using mainly Nema 17 motors and maybe 1 Nema 23 motor with either metal planetary gearboxes or printed plastic ones that I make myself. Most designs use ESP 32 since it is easier to connect to Wifi, which is what I am leaning towards as well.

The main costs for the project would be motors, gearboxes, motor drivers, the ESP32s, and the power supply, since I already have a 3d printer and filament. Most of the arm will be plastic except the motors and gearboxes. I haven't decided how many degrees of freedom it will have, as it will probably be dependent on what the total cost comes out to.

image.png

This is one of the arms I liked as it used mainly Nema 17's and isn't overcomplicated. The motors are connected to a small gear, which is connected to a larger gear using a belt. So it doesn't need complex gearboxes. The base uses one Nema 17 to turn the whole arm, but the part that tilts the arm uses two big Nema 23's both connected with a belt on either side. This seems a little excessive to me, so I would probably play around with what type of gearbox to use there instead and if it's possible, just to use one motor.

For the grabber, I want to start with just basic claws but I want it to have a easy mounting system so I can play around with pneumatics and a robot hand in the future.

10/20/2025 4 PM - Created requirements, started design and CAD

After doing some more research and thinking, I decided:

Goals:

  • Should be able to carry at least 0.5kg of weight.
  • Should be able to have a reach of at least 15 inches.
  • Parts should be < $150.

Motor and Gearboxes:

  • The base will use one Nema 17 and a pulley system to rotate the robot arm
  • The tilt function will use one Nema 17 motor with a pulley system and no gearbox for now. If it's needed later, I'll just 3d print a planetary gearbox.
  • The 2 other joints will just use Nema 17 steppers and small pulley systems if needed.
  • The grabber will use an MG996R Servo motor.
  • If any joints need gearboxes, I can design planetary 3d printed gearboxes instead of buying metal ones to save on cost
  • I will use a benchtop power supply to power it instead of buying a sepearte dedicated power supply.

I started making a CAD for the base rotation part and the tilt function in OnShape. I also started making a basic BOM of parts I might need.

This is the base of the robot arm where the electronics should fit. It has some holes on the side to mount onto a piece of plywood for added stability. The Nema 17 stepper motor mounts to the side without a gearbox. It will have a 20t pulley attatched to it with a GT2 timing belt that connects to the base of the robot onto a 280t pulley. The whole thing will rotate on tiny bearings on the edge of the base and then one bigger bearing in the middle.

image.png

image.png

That's how far I got during this CAD session. I still need to add the tiny bearings under the big pulley and finalize the distance between the centeres of the pully's to make sure there's a standard timing belt length I can by that's closed loop.

10/20/2025 8 PM - Worked on CAD

I completed the base of the robot and added bearings, calculated the right distance between the motor pully and the big base pulley to make sure a 200mm belt will fit. I also added mounting brackets on the sides to mount onto a piece of plywood.

image.png

I also started working on the rotation assembly and the Nema 23 motor mounting.

image.png

This is how much time I spent on OnShape:

image.png

Next session, my goal is to finish the rotation part of it with all the motor mounts and pullys.

10/21/2025 12 AM - Continued CAD

I worked on the CAD for another hour. I figured out how to make the shaft longer on the stepper motor and how to fit all the bearings and pulleys. I also started working on the piece that will rotate the rest of the arm.

image.png

image.png

I worked for around an hour tonight.

image.png

10/21/2025 12 PM - Continued CAD

Today I continued working on the CAD, and I finished most of the rotation part and created the mounting holes for the rest of the arm to mount onto the rotation part. I decided to use heat-sunk inserts for all the holes that need to be threaded.

image.png

image.png

10/21/2025 7 PM - Continued CAD

I worked on the arm part of it and calculated torque and pulley ratios based on the weight of the arm. The CAD is almost done, and after this, I'll start drawing out the wiring and designing a PCB as well as start some basic coding.

image.png

image.png

10/21/2025 10 PM - Finished CAD for now, researched PCB design

I finished the CAD for now. I'll come back to it later and edit the tiny things that need to be fixed. But it's done for the most part. I still need to make a grabber for the end of it as well. I'll edit the holes and clearances and wire openings once I have a BOM and an exact list of parts I want to get.

image.png

I started watching tutorials online on how to design PCB's since I have never done it before. My current plan is to have one big PCB that intakes power and has the stepper drivers and then a couple tiny PCB's for encoders and limit switches.

image.png

I spent basically 2 hours this session. My next steps are to start working on the electronics design and PCB and also think about and CAD a grabber design.

10/22/2025 - Started PCB Schematics, Worked on BOM, Made a List of Parts

I did a bunch of research on how to design a PCB. I made a list of components I need and worked on the BOM. I also completed a lot of the schematics for the PCB. I decided on what drivers to use for each stepper as well as how it would be powered. Here's how far I got on the schmetatics for the PCB on EasyEDA.

image.png

10/23/2025 - Finished PCB Schematics, Worked on BOM

I finished the PCB schematics. It has three stepper motor drivers integrated for the three NEMA 17 Stepper Motors. The board I am using is an ESP32. I also have one bigger driver for the NEMA 23 stepper motor, which will be connected to the PCB with wires, not soldered on. I have three connectors for servos and six magnetic hall sensor connectors. I also have some LEDs that show when power is on, and when data is being transmitted. I also have a connection for an E-Stop button.

image.png

10/24/2025 - Worked on fixing PCB schematic issues

I had some issues with the footprints for the PCB schematic so I worked to fix those. I used a lot of user contributed footprints so that probably led to the issue. I just had to go in and replace a bunch of them.

image.png

10/25/2025 5 PM - Finished PCB Pretty Much

I pretty much finished the PCB routing. I just need to do a GND copper fill later, which wasn't working correctly.

image

image

image

The price came out to $12 with shipping for five pcb's. My next steps are to finalize the CAD and make sure everything works, finish the BOM, and verify everything is good with the PCB and then I'll ship the project.

10/25/2025 6 PM - Worked on the BOM

I made my BOM spreadsheet and started adding parts to it, and also researched where to get parts. I looked into the types of Nema motors and how much torque they have, and the difference between sellers. I also looked into what type of hardware to use since I don't have any.

image

10/27/2025 - Worked on BOM and PCB

A bunch of the footprints on the PCB ended up being wrong so I had to edit them. I also added most of the tiny electronics for the PCB onto the BOM. The total cost right now is $205 so I'll see if there's a way to bring that down. I retraced the PCB, replaced a couple of the connectors, and redid some of the wiring. The BOM is mostly done and the PCB should be done now. It took a while today because EasyEDA wouldn't let me update footprints without retracing the whole PCB and it also kept giving me errors. It also took a while finding each tiny component on AliExpress for the PCB that would fit the footprint.

image

image

image

10/28/2025 - Worked on Schematics

Apparently, all the driver footprints were wrong, so I had to redo that and all the tracing for that. I was using the wrong drivers so I replaced all of those with TMC2209's. I also worked on the BOM, and I'm almost done with that. My next steps are to make the arm look better and finalize all the details to make sure all the electronics that are on the BOM will work with the PCB. I also need to get the cost down as close to $200.

image

11/4/2025 3 PM - Finished Schematic, worked on PCB and BOM

I finished fixing and double-checking all the footprints on the schematic for the PCB. I also finished adding all the PCB parts to the BOM. I generated a PCB from the schematic and started the layout and tracing again. My next steps are to finish the BOM and PCB and make the CAD look better. I also need to make mounts for the magnet sensors in the CAD and tweak some things. I also need to make it look better overall, with filets, chamfers, etc. I had to get some of the electronics, like the little diodes and capacitors from DigiKey because I couldn't find the exact ones I wanted on Aliexpress with free shipping. I will move some of the other electronics to DigiKey before shipping this project because the electronics are a little cheaper on there and it doesn't force you to get 100 packs of everything. I also need to work on optimizing the BOM to bring the cost down since it's around $230 now and I still need to add filament once the CAD is finalized.

image

This is my current BOM: https://docs.google.com/spreadsheets/d/1jZwi7d67DiPdZLEvy5LfeC6HyOPPZ9pO3xaRMX1j6oo/edit?usp=sharing

This journal is from 11/3 just forgot to post it.

11/4/2025 7 PM - Finished PCB

I finished the PCB and the BOM and started working on the CAD. This is a picture of the finished PCB. I made a copper fill for the GND on both the top and bottom layers and also added VIA's to connect them. I fixed the layout and made sure the capacitors are near the drivers to make sure they work properly, since that was one of the problems pointed out with my last design. I also changed a lot of the connectors to header pins to make it easier to solder and work with. I still need to add mounting holes on it to mount to a bracket later on. I previously had a XT60 connector soldered onto the PCB but I changed that to just a screw terminal which will connect onto a XT60 connector with wires. I thought this will be stronger than connecting the XT60 connector directly to the PCB every time. I added a banana-plug to XT60 adapter to the BOM since this is what will connect the bench power supply to the PCB. It will supply 24v.

image

I also worked on improving the CAD model to make it look better, and I worked on designing mounts for the magnet sensors.

11/5/2025 - Worked on improving CAD

I chose to use M3 fasteners for everything and sourced the heat sink inserts and hardware. I started adding holes for those and I also started adding filets and more parts to the CAD to make it look better and more finished. My next steps are to finish adding all the remaining hardware (heated inserts, fastners, sensors) to the CAD and then finalizing how much filament I need so that I can add it to the BOM. Once that is done, I can create sample code and then ship the project.

image

11/8/2025 - Almost done with CAD and finished BOM

I finished adding all the fasteners to the CAD and I made sure all the hole sizes are right for the M3 screws and threaded inserts. I have a finalized design for the arm and I calculated how much filament I need to print it. I added that to the BOM. I also worked on a little cost optimization trying to find electronics on DigiKey for cheaper, since I'm already paying for shipping there. I added the AS5600 sensors into the CAD.

My next steps are:

  • Double-check BOM accuracy
  • Start making a basic code for the motors and controlling the arm using a custom UI
  • Work on the GitHub repository - make the Readme and upload all the needed files.
  • Finish cost optimization
  • Maybe make a wiring diagram if needed for the GitHub?

Here's how the CAD looks right now:

image

Here's my updated BOM:

https://docs.google.com/spreadsheets/d/1jZwi7d67DiPdZLEvy5LfeC6HyOPPZ9pO3xaRMX1j6oo/edit?gid=0#gid=0

I also calculated how much filament I need roughly. These are the sliced parts.

image

image

image

image

image

So, roughly adding all of that, I got 1370g of filament. Rounding up to 1500g because I didn't include the smaller parts like the shaft and the parts for the end effector. I added filament to my BOM and changed the price so it only accounts for 1500g and I will pay the rest of the 500g myself since I would need to buy 2kg of filament.

(FYI: Made this journal over 3 different days.)

11/9/2025 2 AM - Finished CAD and Worked on Github

Spent some more time today on the CAD, adding all the smaller details. I added the rest of the hardware to the CAD, mainly, and made sure the dimensioning for all the parts that were being mounted together was correct based on the hardware that I added to the BOM. I also started the GitHub page, and it should be finished tomorrow so that I can ship it.

I added another encoder to the bottom axle to get rotation values.

image

image

image

I added holes to make it easy to tighten the screws that will be in tight spots. I also added holes for heat-sunk inserts in the pictures above.

image

11/9/2025 6 PM - Finished Code, Finished GitHub, Shipped Project

Today I finally decided the CAD is finished. I have decided not to design an end-effector for now since I want to make a custom robot hand that will later attach to the end of this Robot Arm. I want to get the arm working with a fully custom UI before worrying about the end-effector.

This is the finished GitHub README:

image

I also wrote a basic code and uploaded it to GitHub and shipped my project.

11/15/2025 - Ordered Parts, Fixed Issues with PCB and Ordered It

I ordered all the parts I needed from AliExpress, Amazon, and DigiKey. I went over the PCB schematics and design again and found some errors. For some reason, the footprints for the Servo motors were JST connectors when they just needed to be standard 2.54mm pin headers. I changed that, edited some of the tracing rules. The ESP was also facing the wrong way so I fixed that. I added a screw connector for a 24V output and a ground output. This will be useful for the bionic hand I build later, which will need power. I think this is easier than trying to get another power source since I can just use the same 24V power supply for the arm and the bionic hand PCB. After that, I added all the silkscreen labels for all the connectors, so I know in which order to put the wires. This took a little bit since there are a bunch of connectors. After that, I ordered the PCB from JLCPCB. I also added a polyfuse to protect the whole thing from a short circuit.

My next steps are to continue working on and refining the CAD until my parts arrive in a week or two.

This is the completed 3D view of the PCB.
image

12/2/2025 - Soldered PCB

Today I learned how to solder and practiced on one of the spare PCBs. After doing that for a while, I soldered all the parts onto the PCB that I will be using. I soldered the ESP, I2C multiplexer, buck converter, and all of the ports and capacitors. The small SMD capacitors took a while to install since they're so small.

This is the PCB so far:

IMG_791E42EB-6E79-468A-A0E7-1BAF41F6BE03

IMG_2397

My next steps are to connect the motors and get all the motion working before 3d printing the parts and assembling the physical arm.

12/11/2025 - Fixing PCB Issues

I connected the 24V to the PCB to test it and start working on the code to make the motors work. However, the power supply kept turning off after a few seconds when I turned the power on. It seems like the Buck Converter didn't work properly, or it wasn't set to the correct voltage, so it sent too much voltage to the Esp and fried the onboard regulator. This meant I had to desolder the whole ESP and buck converter module. I bought a new ESP, and I'm now waiting for that to arrive. This time, I'll check the output voltage on the buck converter and make sure it's 5V before soldering it to the PCB, and hopefully it'll all work.

This took a while since I had to learn how to desolder, and the ESP has 30+ pins, but I got it off eventually.

image

1/12/2026 - December Week 1

This is the progress I made in the past week. I've been working on this project pretty much every day. I ran into a bunch of different issues, and I'll try to detail them all here. I've pretty much fixed all of them now, though.

After I got the new ESP, I soldered it onto the PCB using wires instead of soldering it directly because I couldn't remove the solder in the holes of the PCB from the old ESP perfectly. This took a while, but it worked in the end. I then went on to make a basic code and try to test the drivers. The motors wouldn't run, and I spent a bunch of time trying to figure out if something was wired wrong using my multimeter. I finally figured out that I had designed my PCB so that the 3.3V from the ESP was going to MS1 and MS2 on the TMC2209 drivers. This took me hours to figure out. Once I did that, I tried to use a knife to cut the trace in the copper on the PCB that was going to the MS1 and MS2 pins on the driver. This didn't solve the problem. The drivers were also heating up a bunch, which made me think there was a short somewhere. I spent a couple of days trying to figure out where, but in the en,d I decided to just redo the whole PCB on a new board.

This is the old PCB with the jumper cabled ESP: image

I also started researching how to make a Web UI that reflects the robot arm in real life and has sliders to control the arm movement. I also researched how to make code that allows the motors to move. I learned that theres libraries alreasdy made to do this like AccelStepper.

2/9/2026 5:45 PM - Worked on PCB, Started working on Web UI

Journal from December Week 2

So at this point, I had a PCB with an ESP that was connected using a bunch of jumper cables. The motors still didn't really work correctly. I spent a while going over the schematics, trying to figure out what the issue could be. It ended up being the drivers being wired wrong in the PCB. This basically meant that I had to make a new PCB and cut the driver pins that were wired wrong. That's mainly what I worked on this week. I took the ESP off and soldered it onto the new PCB along with all the JST-XH connectors, screw terminals, capacitors, drivers, and diodes. This took me another day to do since it's a pretty big PCB. I spent a while trying to desolder the drivers from the old PCB, but it was just too difficult since I had to heat up 16 pins at the same time and try to pull the driver off. I tried this for a while and even bought ChipQuick solder, which is an alloy that stays liquid for longer. In the end, even that didn't solve the problem, probably because my PCB has a copper ground plane all over it, which sucks away all the heat, drying the solder really fast. After working on this for a few days, I just bought new drivers myself for the new PCB. I soldered the new drivers on and tried to test out the motors with some basic code. That ended up working. I also made sure to cut off the MS1 and MS2 pins on the drivers. I also faced another issue here when one of the drivers didnt work. One of the EN pins on the drivers was connected to D12 on the ESP. This is not a good pin to use, which I later found out. I had to then desolder it again and cut that pin.

This is the new PCB: image

This week, I also worked on the Web UI. I used Lovable to create a nice frontend, and then I manually coded the backend. The frontend shows the robot arm 3d model on the right and then on the left, it has sliders to wirelessly control the robot arm. Right now, it's open loop. No encoders or anything. I decided that the backend, it could connect wirelessly using websockets since it's not too complicated to implement. I started researching how to do that and started a basic backend code.

This is the UI so far:

image

2/9/2026 5:57 PM - Continued PCB testing, continued working on UI + code

Journal from December Week 3

Now that I had a new PCB, I started to test the three NEMA 17 motors. I connected them to the JST-XH connectors on the PCB. I wrote some basic code to test a basic movement using the AccelStepper library in Arduino IDE. That worked really well. So at this point, I knew the motors work with the normal TMC2209 drivers. I still need to test the big motor with the bigger external driver.

I also started working on the physical arm. I just printed the base so far, so I added bearings to the base and I added the Nema 17 to the left. I attached a pulley and belt to that and to the base so the base rotation works. I also tried that with some basic code, and it works.

image

Most of the time this week was spent on the UI. My first goal is to get the steppers working with the sliders with no encoder feedback, so open-loop control to keep it simple. I did this by basically having the UI send commands using WebSockets. The UI doesn't actually control the motors directly; it just sends commands. Then the code on the ESP locally is able to read those WebSocket commands and then control the motors from there. So basically, the Web UI sends a command like move some amount of degrees at some speed, and then the code on the ESP does that. This works decently well for all three motors using the sliders in the Web UI. The one flaw with this is that when torque is applied to the joints, the steps can slip. So the UI thinks the arm moved a certain number of steps when it didn't really, because there are external forces. That's why a closed-loop system is needed with encoder feedback. That's one issue, and then another issue is that the Estop in the UI doesn't work for some reason. I can't figure this out, so I just left it for some reason. I also need to add a console log in the UI so that it shows what error occurred in the websocket communication and when. The websocket backend code I implemented works really well. It basically uses my Wifi username and password to connect locally and sends packets with little to no delay. This is some of the ESP code:

image

2/9/2026 6:09 PM - Continued Arm Assembly, Motor Control Code

Journal from December Week 3

So this week, I continued on the physical assembly of the arm. I figured out how to connect the TB6600 driver, which powers the Nema 23 motor. This worked on the first try, which was nice. I got basic code from AccelStepper again, which worked, so then I added backend code to make it work from the sliders in the UI, which also worked. Then I printed more parts for the arm and basically assembled the main tilt joint. The belt size I ordered was a bit too small, so I had to drill holes in the plastic and make my own tensioners, which worked decently.

This is the TB6600 wired:

image

I cut a steel shaft and printed a coupler to connect that shaft to the Nema 23 motor. This worked well. So the tilt joint works now. I went back to working on the UI. I did some research on how AS5600 encoders work. I found out how to wire then so I tried one out, connecting it to the I2C multiplexer on the PCB. I hovered the magnet over the sensor, and the values seemed to increase and decrease, which means that it works. I started experimenting with some code that sends fake encoder data to the UI and seeing if the UI can display that. I got it kinda working, but there are still some glitches.

This is the current arm:

image

2/9/2026 6:19 PM - Continued working on encoder feedback

Journal from December Week 4

So basically, at this point, I have all the motors working with open-loop control, and I'm experimenting with closed-loop encoder feedback. I added code to the ESP that prints encoder data using Serial Print. This allows me to test the encoder on the joints. I glued one onto the main tilt joint.

image

This is an example of the feedback I got in Serial Print. It seems to work well.

image
image

This means that I'm getting encoder data on at least the ESP. So at this point, I started working on code to send that data back to the UI using Web Sockets. This allows the encoder data to be displayed on the UI while the joint is moving to ensure the joint is actually where it's supposed to be. So in this photo, the number under "actual" is the encoder data. It still doesn't have step correction right now, so it's just seeing the encoder data, not really doing anything about this. Now that I had this data, I did some testing and saw that the UI degree was always around 1 degree off from where the encoder data actually was. This proves that closed-loop step correction is needed.

At this point, I started researching how to add code that will basically see if encoder data is above or below the target value from the user, how to make the joint go where it actually needs to go.

I also worked on code that basically makes the 3d model on the right side of the UI reflect encoder data. This means as the joint moves in real life, the 3d model in the UI moves at the same speed at the same time. This was pretty cool and works well.

2/9/2026 6:26 PM - Worked on control software

Today I worked on incorporating encoder data in the control software. The idea is that the 3d visualization is based on the actual encoder data. There should also be a button to set a home position in the software. This allows the robot to start at 0, and then you can set a target angle and it'll move to that angle. It's not closed loop yet, so it doesn't do motion correction. It just allows you to set a home position and base the degrees off of that reference value. I plan to make it closed loop later.

It took a while to get the code working to set a home position that worked correctly. I got it working for the base and the shoulder joints. The software also prevents you from going past max now. I also fixed some other issues in the software like getting the emergency stop button and the acceleration data changer working.

This is what the software looks like now. It has an actual next to the target degree value.

image

2/9/2026 6:27 PM - Added closed loop functionality

Today I worked on the control software again while I wait for the belt to arrive so that I can finish the rest of the robot.

I was able to add closed-loop functionality, which means that the user sets a target angle and then the robot goes to that target angle based on the encoder reading, improving accuracy. If it overshoots, it goes back slightly until it's within range of the target angle based on what the encoder reads. I did this by adding loops that constantly check encoder data while the joint is moving. I tested this and it works well.

I also added code that flashes the zero position into the ESP. This allows the zero position to be saved even when the robot is turned off. This allows the AS5600's to act as absolute encoders and removes the need for limit switches for homing. It will also allow me to now add soft limits to make sure the joints can't move past a certain point.

My next steps are to finish the rest of the physical arm and make minor tweaks in the software. Then I want to make a V2 arm that uses cyloidal drives instead of pulleys to improve its looks, make it smaller, and make it faster.

This is what the website looks like so far:

image

2/9/2026 6:28 PM - Finished V1, Shipped Project

Today, I pretty much finished this version of the robot arm and tested it. I attached the motor for the last DOF at the top and tested it, and it worked. I also got the belt for the tilt axis and that worked as well but I had to add tensioners to it since the belts were slightly big. I then edited the code to make those two joints closed-loop as well. This meant adding code that sent encoder data via websockets to the website. This worked well and both those joints also have step correction in case the belt slips due to torque. I'm not adding a grabber to this arm since I want to make a new version with a lot of improvements.

I learned a lot from this arm.

1) The belts on 3d printed pullets don't work the best. Even though I used GT2 profiles in the prints, the belt doesn't bite well into the plastic, which means it's really easy for it to slip. This reduces accuracy as well as the amount of weight you can apply to the end of the arm.

2) Pulleys take up too much space and weight. The better way to have designed this would have been to use gearboxes. This eliminates having to use belts, which eliminates most of the backdriving due to weight.

3) The AS5600 encoders worked really well. The data is sent smoothly to the UI using websockets with no issue. The step correction worked well when I manually moved the joints while the motors were engaged. It saw that the encoder slipped and immediately step corrected, which is how a closed-loop system should work.

4) This design used a lot of plastic because of how big the pulleys needed to be. Using cycloidal gearboxes could have eliminated all of that since the amount of area needed to add a higher amount of torque is less than large printed pulleys and belts.

5) The NEMA 23 motor is loud and probably unnecessary. I'll eliminate it in my new design for simplicity.

6) I also learned various things electronics-wise. How hard through hole modules are to desolder. I forgot to add ports for the sensors so I had to solder directly to the PCB. SMD parts are hard to hand solder. Many of the ports I added were extra and not needed.

In my V2 design, I plan to use cycloidal gearboxes, no pulleys, and just NEMA 17 motors with AS5600 encoders. I plan to simplify the PCB, eliminating the I2C multiplexer since I don't really need that many I2C ports. I'll add ports for the encoders and simplify the overall design. I'll reuse the same web UI since it worked very well.

This is how the final version of the web ui looks. The 3d visual looks great and moves based on encoder data. Step correction works. Speed control works as well. And I added home buttons to send individual joints to zero and the whole robot to zero at the same time. All of this worked really well.

IMG_2818

Here's the finished arm. Again, I didn't add the grabber since I want to design a better V2 arm before focusing on end effectors. My main goal with this project was to create a UI that wirelessly connects to a robot, learn electronics design, and physical robotics design.

IMG_2817

2/9/2026 6:31 PM - Updates to Journal

So I went back and split up the big journal into different journals for each week I worked on this project. I basically worked on it every day during Winter Break, so I tried to include all the details in the new journals, and I also added more details and more pictures that I took when I was working on it.

I deleted most of the posts and redid them, so that's why they are all published on the same day.

image