Build a Servo-Powered Flip-Dot Display That Goes "Clack!"
Make your own mini wall of physical pixels — tiny flaps flip back and forth with a satisfying click to draw shapes and letters, all controlled by an Arduino Mega.
1How Does a Flip-Dot Display Work?
A real flip-dot display (you may have seen them on old buses!) is made of tiny discs that are dark on one side and light on the other. A magnet flips each disc to show one color or the other, building up letters and pictures out of physical pixels.
Our DIY version uses something every young maker already understands: tiny servo motors. Each "pixel" is a small flap glued to a servo arm. When the servo rotates one way, the dark side of the flap shows. Rotate it the other way, and the light side flips into view — with a little mechanical clack each time!
A 5×5 grid of flip-dots can already draw simple shapes like this "X" pattern!
2Materials You'll Need
This example builds a small 3×3 flip-dot grid (9 pixels) — enough to form simple shapes and a few letters. You can scale it up later with the same idea.
3Wiring the Circuit
Servo Power (important!)
Nine servos moving together can pull more current than the Arduino's onboard 5V pin can safely supply. Power the servos from an external 5V supply, and connect its ground to the Arduino's GND so they share a common reference.
Servo Signal Pins
| Pixel (Row,Col) | Arduino Mega Pin |
|---|---|
| 1,1 / 1,2 / 1,3 | 22, 23, 24 |
| 2,1 / 2,2 / 2,3 | 25, 26, 27 |
| 3,1 / 3,2 / 3,3 | 28, 29, 30 |
Push Button
| Button Pin | Connects To |
|---|---|
| Leg 1 | Arduino Pin 2 |
| Leg 2 | Arduino GND |
4Step-by-Step Build Instructions
5The Arduino Mega Code
This code controls all nine servos as a 3×3 grid. Each pattern is stored as a simple list of on/off values, so you can design your own shapes by editing the array. Pressing the button moves to the next pattern.
// Servo-Powered Flip-Dot Display (3x3 grid) // Each servo flips a flap between "off" (light) and "on" (dark) #include <Servo.h> const int ROWS = 3; const int COLS = 3; const int NUM_PIXELS = ROWS * COLS; Servo pixels[NUM_PIXELS]; const int servoPins[NUM_PIXELS] = {22, 23, 24, 25, 26, 27, 28, 29, 30}; const int OFF_ANGLE = 0; // light side shows const int ON_ANGLE = 90; // dark side shows const int buttonPin = 2; // Patterns: 1 = flap ON (dark), 0 = flap OFF (light) const int patterns[][NUM_PIXELS] = { {1,0,1, 0,1,0, 1,0,1}, // X shape {1,1,1, 1,0,1, 1,1,1}, // O shape (box) {0,1,0, 0,1,0, 0,1,0}, // I shape (line) {0,0,0, 0,0,0, 0,0,0} // all clear }; const int numPatterns = 4; int currentPattern = 0; void setup() { for (int i = 0; i < NUM_PIXELS; i++) { pixels[i].attach(servoPins[i]); } pinMode(buttonPin, INPUT_PULLUP); showPattern(0); } void loop() { if (digitalRead(buttonPin) == LOW) { currentPattern = (currentPattern + 1) % numPatterns; showPattern(currentPattern); delay(400); // simple debounce } } void showPattern(int patternIndex) { for (int i = 0; i < NUM_PIXELS; i++) { int targetAngle = patterns[patternIndex][i] == 1 ? ON_ANGLE : OFF_ANGLE; pixels[i].write(targetAngle); delay(60); // stagger the flips for a nice ripple "clack" effect } }
6Drawing Your First Shape
- Upload the code to your Arduino Mega.
- Watch the grid flip into its first pattern automatically.
- Press the button to ripple-flip into the next shape.
- Listen closely for the clack-clack-clack as each pixel flips!
- Open the code and edit the
patterns[]array to design your own pictures, like a heart, a smiley face, or your initials.
7Cool Upgrades to Try Next
- Go bigger: Scale up to a 5×5 or 8×8 grid using all the extra pins on the Mega.
- Add scrolling text: Write code that flips through letter patterns to spell out messages.
- Add a microphone: Make the display react and flip in rhythm to sound or music.
- Bluetooth control: Add a Bluetooth module so you can send new patterns from a phone app.

Comments
Post a Comment