# CheapStepper v0.2 #
## An Arduino library for the 28BYJ-48 stepper motor using ULN2003 driver board ##
#### created by Tyler Henry, 6/2016 ####
You can read some more info on the cheap yet worthy 28BYJ-48 stepper motor [here](https://arduino-info.wikispaces.com/SmallSteppers).
## Wiring example
## Library Info
### Half-stepping
CheapStepper uses an 8 mini-step sequence to perform all moves
([a.k.a half-stepping](https://www.youtube.com/watch?v=B86nqDRskVU&feature=youtu.be&t=11m0s)): A-AB-B-BC-C-CD-D-DA
### Gear Ratio
Depending on whom you ask, the 28BYJ-48 motor has an internal gear ratio of either:
- 64:1 (per manufacturer specs) or
- 63.68395:1 (measured... see this [Arduino Forum topic](http://forum.arduino.cc/index.php?topic=71964.15) for more info)
### Total Steps
64:1 gear ratio **\*** 64 steps (1 step = 8 mini-steps) per internal motor revolution =
4096 total mini-steps / revolution
or ~4076 (4075.7728) if the gear ratio is 63.68395:1
CheapStepper library defaults to 4096 mini-steps but you can call:
`CheapStepper::set4076StepMode()` to use 4076 steps
or `CheapStepper::setTotalSteps(int numSteps)` to use a custom amount
### Power
CheapStepper assumes a 5v power source for RPM calculations.
It's best to use an external power supply like [this](https://www.adafruit.com/products/276), wired directly to the ULN2003 driver board, rather than draw from the Arduino's onboard power, which may have insufficient amperage (>100mA needed).
----
## Blocking Moves
_The Arduino sketch "pauses" during move()_
- move (boolean clockwise, int numSteps);
- moveTo (boolean clockwise, int toStep);
- moveDegrees (boolean clockwise, int degrees);
- moveToDegree (boolean clockwise, int toDegree);
----
## Non-blocking Moves
_The Arduino sketch will continue running during the move.
You must call run() on your stepper during loop()_
- newMove (boolean clockwise, int numSteps);
- newMoveTo (boolean clockwise, int toStep);
- newMoveDegrees (boolean clockwise, int degrees);
- newMoveToDegree (boolean clockwise, int toDegree);
### Note
* must call run() during loop to continue move
* call stop() to cancel/end move
----
### Move a Single Mini-Step
(1/8 of 8 Step Sequence)
- step (boolean clockwise);
- or stepCW(); or stepCCW();
----
#### All move functions have ...CW() or ...CCW() variants:
e.g.
- move 8 steps clockwise:
`move (true, 8);` is the same as
`moveCW (8);`
- create new move of 90 degrees counter-clockwise
`newMoveDegrees (false, 90);` is the same as
`newMoveDegreesCCW (90);`