I would have liked to have this on the site a long time ago but I never really got around to posting it. This project was realized in my last year of high school, in which we all needed to make a project related to the courses we were following. This was mine, it’s basically an exploration type robot on tracks, with plenty of possibilities to add new capabilities. It uses a modified router to establish a connection with my laptop and can be controlled by an xbox controller using audio and video feedback.
This write-up consists of several parts, each describing a different aspect of the robot. When you have some knowledge of electronics it shouldn’t be too hard to understand. I’m also sure that things could have been done better, but bear in mind that I had hardly any knowledge of electronics back then compared to what I know now. I should also mention that this project is based on the project found on the jbprojects.com website, the “wifi robot”.
Router and microcontroller
The way to send and receive data from the robot relies on an modified Linksys router (WRT54G). It has been modified so that it can receive serial data over its wifi connection with my laptop and outputs this to one of its serial ports (which I added). Information on how to do this can be found here: http://www.jbprojects.net/articles/wrt54gl_mods/
For this project really only one serial port was needed, but while I was at it I figured I’d just add both.
The microcontroller I used is an 18f4550, which is overkill for what it’s used for, but I had one laying around at the time. It is connected to the serial port using a max232 converter. There really isn’t a lot of other hardware connected to the microcontroller, apart from the motor driver and two transistors that can be used later on to allow the microcontroller to control add-ons.
When I started this project I was determined to build my own motor driver and so I did. But I turned out that this was harder than it seemed in the first place. I based my design on a H-bridge type schematic I found but my lack of knowledge made that the timing of the switch from one direction to the other using the NPN and PNP transistor (which have slightly characteristics, apart from one being NPN and one being PNP) was off. This meant that fast switching of directions caused a partial shortcut and thus burned out transistors. Not having much time left I decided to buy a driver from ebay.
The one I bought can be seen below, but I wasn’t completely convinced by its power ratings considering that there were no heat sinks present.
So I added my own heat sinks to every mosfet, using a copper coated plate (an un-etched pcb basically) to support them. It might have been unneeded though, since no heat can be felt at all now.
Tracks and frame
The tracks are handmade, and really took a lot of time (and where damn boring to make). They are made using a pvc pipe cut in half across its length, then chopped op into appropriate sized pieces. These are bolted using self-locking bolds (they need to have some slack) onto a bicycle chain. The track runs on some plastic wheels on one end that I bought that are normally used under industrial type carts (for moving pallets for example). They were not the exact width that I needed, but a friend of my father, who had a mill, was so kind as to trim them for me. The other end uses roller skating wheels, the plastic wheels could not be used here since they didn’t provide enough traction.
Just like the track the frame is handmade as well, using squared aluminium tubes. I might have been a bit to enthusiastic with them, since a few less would have been fine and the robot ended up really heavy. But it is at least incredibly sturdy. The white plate on the back mostly covering the motors and underside of the electronics is a cut down pc panel, hand bent around the frame.
The pc software is just an example program if found that uses the xna framework to connect to an xbox 360 controller. I added an option to connect to the router via a socket, after which it will send the commands every time the controller state is read (which is based on a timer). This command consists of two bytes, the first one telling what the second one (the actual value) will mean. So the first byte can be used to tell the robot that the next byte is the intended speed for the left motor, or the direction of the right motor for example. The first byte is always between 240 and 255, the value byte is below 240, this means that any isolated byte loss cannot cause a misinterpretation of the pair of bytes (the whole pair will get lost, which is ease to remedy be regularly sending even if nothing has changed).
|Type (first byte)||Meaning|
|241||Left motor speed|
|242||Right motor speed|
|243||Left motor direction|
|244||Right motor direction|
The values above 244 can be used to create new types of commands (for add-ons for example).
The power for the router and the camera is supplied by a 12V linear regulator (which I should really replace witch a switching supply), the microcontroller is powered by a 5V linear regulator. The motors used are from two hand drills, as well as the two 18V batteries.
Even though this project was a bit over my head at the time I really like the way it turned out. It also taught me a lot of new things, both in the field of electronics and mechanics. And if I may say so myself, the end result does look quite impressive.
I will post the software and a video of it working soon!
Some more pictures: