"Melty B" - Antweight (1 lbs) Open Melt Combat Robot (click to enlarge)
This system uses an accelerometer to calculate the rate of rotation based on G-forces around a given radius.
That data is then used to light up an LED once per rotation - giving the appearance of the "front" of the robot. The user can adjust the heading beacon by moving the remote control left or right.
To move - the system turns a motor on when that motor is in the correct position to result in a net movement the direction the robot is intended to go.
For example - if the heading beacon is on approximately between 10 o-clock and 2 o-clock it indicates movement will be towards 12 o-clock. Pushing "forward" on the remote then causes the robot to turn on the motor(s) between 6 and 12 o-clock each rotation - the net direction of travel being towards 12 o-clock (this is a simplification - see the 2nd demo video for details).
This project uses an Atmel Atmega328 (or 168) and is coded in C using WinAVR.
- Much additional documentation for this project can be found at the beginning of the code
- If you are developing a project using this code - you are invited to let the author know about it
- Code is licensed as Creative Commons Attribution-Noncommercial-Share Alike
- This system is potentially quite dangerous - especially if implented in a larger (over 3lbs) robot
- If you're foolish enough to compile this code - you must read and agree to the included disclaimer first
Demo Video 2 - 1 vs 2 Motors / More on Translational Drift
Hardware List (major items)
- Pololu Baby Orangutan B-328 (B-168 is also fine - see notes in code on earlier non-"B" versions)
- Other Atmel 168 / 328 boards should work - however may require additional hardware / code changes
- Starting with a naked Atmega chip isn't recommended unless you really know what you are doing
- Project compiles to about 9k - so get a 16k or better chip.
NPN Darlington transistor(s) to drive motor(s):
- MJ11032G has been tested extensively in smaller robots
- Solid state relays may be a good option for larger robots - but will require minor wiring changes
Some kind of motor(s) / wheel(s)
- Project works fine with either 1 or 2 motors
- Hard rubber doesn't work that well
- Foam wheels seem to work best (see wheel comparison video)
A heading LED
- Use the correct size limiting resistor
- Be careful not to overload your voltage regulator or the Orangutan's motor controller
Brushless Motor / Controller Option:
- Open Melt now supports brushless motors / controllers via high update rate PWM
- Any brushless motor controller supporting input PWM frequencies over 305 hz should work (although this specification is usually not listed)
- Testing was specifically done with a Hobbywing Pentium-18a
- Openpilot.org lists other ESCs that support high refresh rates which will likely work (but haven't been tested)
- All wiring is the same - except that motor control pins (PD2 and PD4) are connected directly to the signal pin of the ESC
- See code for additional documentation / notes (thanks to Richard Wong for his research on this)