I always thought these old timey split flap displays looked really cool so I set out to build my own keeping things as simple as possible. The flaps home themselves using a latch, so no hall sensors or limit switches are needed. And each motor is controlled by a A4988 stepper driver so each additional module only takes up one pin on the Arduino!
Here's what you'll need:
- Arduino UNO
- 28byj 48 Uln2003 5v Stepper Motor
- A4988 stepper driver
- Breadboard
- 12" DIN rail
- 3D printer (I used Bambulabs P1S AMS for multicolored prints for the flaps)
- 5V DC power supply (for the motors)
- 1 transistor
- Hookup wires
- M3 screws and nuts
*Note: I realized I was using the HR4988 instead of the A4988. A4988 doesn't seem to work at 5V V-motor, but it works at a higher voltage ~7V.
To assemble a split flap module, first remove the support materials on the wheel and the motor housing.
Clip the ring onto the wheel, matching the notches.
Slot the flaps in the order
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789?!&.:+-=/$%#<SPACE>
I printed the flaps using a Bambulabs P1S with an AMS to print multicolored
Secure the motor and homing latch with two M3 nuts and screws
Slide the assembled wheel onto the motor shaft
And finally clip the module onto a DIN rail. Here I have a 12" rail which fits 5 modules
Connect the motors to the A4988 driver like below
- Driver Enable => Arduino Pin 14 (Analog 0)
- Driver Direction => Arduino Pin 2
- Driver MS1 => +5V
- Driver Step => Arduino Pin 7, 6, 5... (depends how many you want to connect)
- Driver Sleep => Driver Reset
- Driver VMOT => 5V power (External power supply i.e. not Arduino 5V pin lol)
- Driver VDD => 5V power
- Driver GND => GND
- Driver 2B => Motor orange
- Driver 2A => Motor pink
- Driver 1A => Motor yellow
- Driver 1B => Motor blue
The enable and direction pins can be shared with the motor drivers so if you want to add more modules just connect them in parallel.
Upload the code using the Arduino IDE, make sure to edit this section to match your configuration
const int enablePin = 14;
const int dirPin = 2;
MotorController motors[] = {
MotorController(7, dirPin, enablePin, 3.8), // Motor objects MotorController(step pin, direction pin (shared), enable pin (shared), inital offset (flaps))
MotorController(6, dirPin, enablePin, 3),
MotorController(4, dirPin, enablePin, 3.8),
MotorController(5, dirPin, enablePin, 3.5),
MotorController(3, dirPin, enablePin, 3),
};
int numMotors = 5; // Number of motors available
After uploading the code and powering it on, the wheels should start spinning backwards until the latch catches and it gets stuck. It'll come back forward and (hopefully) land on the first character 'A'. If not you can change number of the initial offset in the MotorController initialization in the code depending on how far off each module is from 'A'.
Once all that is done you can start typing in the serial monitor and the enjoy the flapping noises!
Comments