A robot designed for control from anywhere in the world

I’ve spent the last week on-and-off building a robot so I could remotely watch my house when on vacation. What I’ve built is hugely overkill, but it works great and it’ll be easy to repurpose in the future. It has a massive LED on the front, way too much torque, a Linksys WRT54G for transmitting and receiving data, and an Arduino Mega 2560 as a brain.

IMG_0101 IMG_0102 IMG_0103 IMG_0104 IMG_0105

Let’s start with the motors. I am using two drill motors. I bought the drills at Value Village, a local thrift store, for roughly $5 a piece. They weren’t the same voltage, so I have to use software so the robot doesn’t drift. They are extremely powerful; The robot was able to pull around a cart with a very heavy marine battery on it. I could probably pull more, but the limitation was that there wasn’t enough weight above the wheels, so the wheels would spin. I have the motors software limited to roughly 40% of their maximum power, because at 100% they’re incredibly fast.

For the motor drivers, I’m using a pair of BTS7960’s. With a maximum current of 43A, they are massively overkill for the drill motors. Both motors together, when stalled, draw around 10 amps. I imagine if the put the throttle at 100% I might get closer to that 43 amp limit. When driving the robot, the heat sinks don’t even get hot. Because of my frugality, I previously tried to use relays, in an H-Bridge, to drive around. It would have worked, if it wasn’t for the motors being way too fast at 100% power.

On previous robots, I’ve always had a problem with traction. This was due to using wheels from things that were designed to be pushed, for example, the wheels off a stroller. I’ve solved that problem – About a year ago, I saw a very hefty R/C car at the side of the road. I’ve kept the wheels, the motor, and the servo, but threw out the chassis. The wheels are also very hefty, and have no problem getting a grip. One slight problem I have is there isn’t enough weight above them, so they have a tendency to spin.

To mount the wheels to the motor shaft, I had to use a 3D printed part. At first, I just had the shaft screw into the part, but they kept shattering, so I found locknuts to go on the end of the motors, and I designed a part that could fit the lockut. The other end of the part has a few mounting holes – extras, even – and the wheels mount with two screws(which is a lot more secure than it sounds)

The robot also has a flashlight. I used a 30W LED and driver, which is way overkill, but it’s just what I had lying around. (I used it on my bike at night once, with a lead acid battery strapped to the side, and I lit up the entire width of the street and then some!) The driver is just an adjustable step-up converter, rated at 150W. It’s controlled by a 2 channel relay, giving me an extra channel for later.

Oh, and this robot actually has a proper fuse box, which is better than what I used to do, which was to just not mess up. Each motor has its own fuse, the LED has its own fuse, and the final fuse is for all electronics. I probably should have added another fuse between the battery and the power distribution screws, which provide power to the fuses.

For power, I have chosen to use a modest 12V 7AH lead acid battery. I put it right above one of the motors, which helps greatly with traction. I might upgrade to 2x 18AH 12V batteries, one above each motor, but for now, I still get about 2 hours of battery life. I also have a trailer with a marine battery, which should give me a lot more battery life once I add some weight above the wheels.

Power management is interesting. There are two very thick wires between the battery and two screw terminals – One negative, and one positive. There are 4 wires coming off the positive screw. Each goes to a different fuse. There are 6 wires coming off the negative screw, since some fuses have more than one device attached to them. There’s also a USB battery on top of the robot. This is to power the IP camera. While there’s no reason not to get a 12V to 5V converter and connect it to the same source, there’s also no reason to change. The battery is basically weightless, since it’s lithium based, and it runs longer than the lead acid. I had a 12V to 9V switching regulator laying around, so I used it to power the Arduino, to raise its efficiency slightly higher than it would be if I just fed it 12V.

What I’m sure you’ve noticed is that there are two layers. I actually physically ran out of space on the first layer, so I had to add a second layer. They are separated by 4 3D printed parts. I could have used wood, and it would have been stronger, but I have to cut all wood with a handsaw and it was a lot easier just to design and print instead.

I wrote all software myself, from scratch. Actually, that’s a lie, I borrowed some code from previous robots, but I improved upon it a lot for this version. First of all, the software was originally designed to run on a much smaller robot, which meant there were no safeguards. For example, if the robot was going forward and the connection dropped, it would keep going forever. I was able to fix that in this revision, so if no command is received for 250ms it cuts the motors and the light. It’s also able to gracefully recover from an unclean disconnect, instead of requiring a reset, which wouldn’t have been good if I was 1000 miles away. If no command is received for 2500ms, it terminates the client, allowing for it to start looking for another. Oh – and if one person is driving the robot, it doesn’t allow any other connections.

The software is up on git: here

In conclusion, this robot will easily serve its purpose, and then some. I spent around $100 CAD on it in total, which is a very modest price for such a powerful machine. If I had a chance to redo it, I would have given it some slightly bigger batteries, and I would have positioned them above the motors to give me more torque. After attaching a blade to its bottom, it should make a very good autonomous lawnmower.

Here’s a video of it in operation:

Leave a Reply

Your email address will not be published. Required fields are marked *