For small robotic and other projects you can pick up small 28BYJ-48 stepper motors and gearbox with driver boards quite cheaply. These motors are used in comercial projects like washing machines etc hence are made in very large quantities and are cheap. The gearbox means that they have a decent torque and can move a small robot ok. Because these have a gearbox I'll need to include a "home" sensor to work out when they are pointing at the top as my application I need to know the absolute position of the motor. I'm hoping to use a to do this and have made some disks to attach to the motor gears and will add a stripe to these so that I can detect an abosolute position.
I initially had issues with the standard Arduino stepper library but Yuan Liu @LiuYuanster mentioned on twitter that the default Arduino Stepper library only works with cross-wire pin sequence e.g. 8,10,9,11 and sent me the following link for information about Small Steppers. I tried the cross wired approach and that worked just fine with the motors turning in both directions.
The small steppers article had a link to an alternative library AccelStepper which appears to have all of the features I need. It already has a "setposition" which I'll need when I wire up the optical sensor to detect the home position. I found another potential library via the Arduino playground called CustomStepper. This library works in a similar manner to the AccelStepper but has less features, I may need to switch to this if I run into memory issues with the AccelStepper library or even cut into that.