George Orwheel (Stepper Motors)
Two wheel differential drive balancing robot. Because four wheels are baaaad.

Why?

why

Because it is the 'hello world!' of modern robotics.

Videos

Testing with training wheels
medium small

Just standin' 'round
medium small

Components

Arduino Nano EBay Lightweight, 5V tolerant, easy to program, cheap as silicon chips, and no tears when clumsy roboticists fry them
Bluetooth receiver EBay If you want to control it remotely from the PC or a phone
BNO055 EBay IMU which does the orientation calculation on-chip.
Stepper Motors EBay An odd choice for this kind of robot
Stepper Motor Controllers AliExpress The ZD-M42s work well with an Arduino, but will not work well with a 3V3 source like a Raspberry Pi.
Robot Wheels EBay These wheels are designed for a RC model car. There are many types of fittings. They have to fit onto the shaft of the steppers - an adaptor might be needed.
Aluminium Bar Bunnings Easy to bend, drill and fashion - for the frame.
Mini Caster. Bunnings These are just for the training wheels. Actually you don't even need the wheels on the ends of the ruler - just a ruler to stop the robot falling over. Maybe some soft buffers or something.
7.4 Li-ion battery EBay or local hobby shop Should try out an 11.1V one of these.

Why Steppers

Because they can be controlled easily, and don't have unpredictable torque issues.
Because it's winter, and indoor robots can be built next to the fireplace.

Circuit diagram

Notes:
The TX from the HC-06 is 3.3V, but it's high enough to trigger Arduino RX without a level converter. It ain't MILSPEC but it works.
7.4V (from two Li-Pos) is a good voltage to run the Nano from. A 6V SLA was tried, and it sagged when the motors started, crashing the Arduino. SLAs are fine for wheelchair robots, but lithium has so many advantages.

Software libraries

    BNO055 Arduino library from Adafruit

Software

There really isn't much software to make this go. This is a pretty simple program.

Unfortunately, it's kind of tricky to do the timing on an Arduino to do this well - reliably pulsing a stepper motor controller faster than 1ms is a bit messy on the Arduino when you want to do other things along the way (like interrogate the IMU via I2C). DC motors would seem to be a better match for this, but the torque seems to be unpredictable.

The future

    DC Motor Version.
    Write a interrupt/timing Arduino program to control the steppers, and get around the 1ms issues.

Leave a comment

Something I'm doing wrong? Solved my problems? Got a better idea? Got a similar problem?
Think I might have solved your problem? Ninety-nine problems, but your robot ain't one? Say so ..