Posted on

How would I create a robot arm from scratch Part 2: 3D modelling

This is part 2 of How I would create a robot arm from scratch.  In part one I talked about high-level approach and used a computer model to work out some of the design constraints to meet my goals.  In this part I applied my design skills to plan a model that should fit within those constraints.   Pictures inside! Continue reading How would I create a robot arm from scratch Part 2: 3D modelling

Posted on

How would I create a robot arm from scratch?

Reddit user singdawg asked a great question:

I’m currently starting a project to [create a robot arm]. Anybody know good resources? I’m a capable programmer, have experience with microelectronics and microcontrollers. Have some advanced maths to understand the depth of material (jacobian matrices etc) but I’ve limited experience with servo motors.

If your goal is specifically to DIY a robot arm from scratch, I’d start by figuring out what are my design constraints. I’d choose a carrying weight limit, a reach distance, the number of DOF, and the maximum mass of each joint. from that I could build a kinematic chain to find my torque limits, and match those to available motors & gearboxes. Personally, I choose stepper motors. In Fusion360 I’d create models of those motors, then start placing them at their desired locations. The gaps between parts would be filled with my custom designs, which would then have to be manufactured. The custom design part is very iterative and very slow (for me). Some of the things I ask myself are: where do the bearings and fasteners fit? how do i plan to make this custom part and how does that affect the design? where do i run the wiring so it doesn’t catch and break? have i remembered to put in *every* part, not just waved my hand and said “figure it out later”? Can i design this in smaller pieces for easier testing of each piece?

I should mention here that a robot built with stepper motors can’t tell where it is from moment to moment the way you or I can. Mostly they are built by having limit switches. The robot moves to touch the switches at startup. Since it knows where the switches are it can count steps as it moves from then on. It is crucial from that point on to never miss a step. One day we’ll have better encoders for DIY robot arms, but not yet!

Once I’ve reached a design I like, it’s time to use the bill of materials from F360 to place my order for the parts, and get to making the custom bits while the orders are in the mail. Once they arrive I can put it together and figure out what I did wrong, then go back to the fusion custom part step 🙂

Once I get something that doesn’t fail on assembly, I take each major section of the arm in F360 and save them out as STL files. I bring those into Robot Overlord and make it move virtually. I can then modify some Arduino CNC firmware to follow the same kinematic model that I used in RO, and now I have a GUI to drive it. There are several arms already in RO, feel free to branch it and add your own.

Robot arm torque calculator

I find calculating forces boring and I love to code. So I wrote a Processing sketch that can simulate a robot arm enough to calculate some masses and torque values. My thinking is that I can use this to set an upper limit on the weight of each joint, then see the torque values and find the motors that will be under-weight and over-torque.

Robot arm torque calculator

The arm can be moved by clicking on a joint and pressing Q/E.  The values at the bottom are the joint number, the direction of rotation, the maximum weight, the distance from the previous joint, the current angle, and the current torque.  In a 6DOF arm there are joints 0-5 and joint 6 represents the weight of the tool or the payload carried by the arm.

Get and run the Arm torque calculator.

Final thoughts

I’ve done this with 3dof and 5dof arms. I’m currently working on a 6dof robot arm.  I like to design from the wrist backwards, because the payload is the most important part, and each motion after that depends on the ones that come before it.

I’m constantly distracted by the work of assembling my other machines. Ironic! If I had the arms they would do the work for me. Soon, soon!

Next in part 2 I will show some of my work designing the arm based on the calculated constraints.

Posted on

Animated Carnival Light Arrow Upgrade

Paul came to the shop with a 2′ carnival light arrow sign that had five LED light bulbs inside. He asked if I could make them light one at a time to animate the pointing effect. Read on to see how it was done.

Continue reading Animated Carnival Light Arrow Upgrade

Posted on

Build your own falling block game like Tetris

I’ve shown you how to use shift registers to drive an LED grid, including how to draw pictures on the screen from memory. Now we’re going to use those tools to make a game similar to the classic Tetris.  I’ll show you the circuit, how to draw pieces, how to create animations, respond to user input, and more.  Learning how to build complex behavior from simple parts is a great start to thinking about how robots behave.

Continue reading Build your own falling block game like Tetris

Posted on

How to use an 8×8 LED grid with Arduino

In recent posts I’ve covered how to use LEDs and how to use shift registers and even how to combine shift registers and LEDs to control numeric displays.  In this post we’re going to use 64 LEDs in an 8×8 LED grid.

ELEC-0082 LED grid red

Continue reading How to use an 8×8 LED grid with Arduino

Posted on

Shift registers and seven segment displays in Arduino

In previous tutorials I showed how to use seven segment displays, how to use shift registers and how to daisy chain shift registers, and talked a bit about persistence of vision.  In this tutorial we’re going to combine shift registers and seven segment displays to make an Arduino control two four-character seven-segment displays, a task that (at first glance) might not seem possible.

Continue reading Shift registers and seven segment displays in Arduino

Posted on

How to setup NodeMCU drivers and Arduino IDE

The first time using a new microcontroller is what I call funstrating, especially if you don’t have clear instructions.  We’ve done the hard work of figuring out the NodeMCU drivers and NodeMCU Arduino IDE setup for you.  Read on for the two steps that have to be done only once.  More helpful info at the end, too.ELEC-0108 nodemcu Continue reading How to setup NodeMCU drivers and Arduino IDE

Posted on

Shared Anodes and Cathodes

shared anodes and cathodes preview

Shared anodes and cathodes are a common technique used to control lots of LEDs with a small number of microcontroller pins.  I’m going to talk about why share anodes and/or cathodes.  Then I’ll show an example of shared anodes, an example of shared cathodes, and finally combine the two for some more impressive results.

Continue reading Shared Anodes and Cathodes

Posted on

How to daisy chain 74hc595n shift registers

ELEC-0116 shift register

In the previous post we learned how to use a 74hc595n shift register.  I mentioned briefly that shift registers could be daisy chained – connected end to end – to increase the number of available connections without using extra resources on the Arduino.  In this post we’ll cover why daisy chain shift registers, how to plug them together, what changes in the code, and show some examples in a video at the end. Continue reading How to daisy chain 74hc595n shift registers