Introduction: Wing Flapper

About: I am an American teaching English at Shangluo University, Shaanxi. I like making machines that do interesting but fairly useless things - I call them Quixotic Machines.

Here is another easy one servo plus Arduino project. It is a spring suspended flapping wing mechanism. Can be used for Christmas angel (but we all know angels don't really have wings) or clip in bat wings for a cool Halloween prop. I used a slip ring to power the arduino but that is not necessary. Probably cannot power with battery as it would not last very long so really thin wires from a wall-wart would be good. Mine is kind of proto-typey.

Step 1: Build Wing Hinges and Servo Linkage

Used a piece of wood for chassis. Two door hinges for the wing hinges. I epoxied some paper clamps to the hinges as they will hold the wings. Then epoxied two airplane horns to the hinges to connect control rods to servo arm.

Step 2: Mount Arduino to Chassis and Add Wings

I put a piece of foam between the Arduino and wood chassis.

Then cut out foam wings and hotglue strips of wood to be held by paper clamps.

Wired up servo to Arduino (vcc,gnd and signal to digital pin 11.

Step 3: Suspend Wing Flapper From Ceiling With a Long Weak Spring

You need a long spring that has lots of flex to get any up and down motion from the flapper. Too strong and spring and it wont move much.

It is surprising how little thrust it takes to get a good foot of movement. Larger wings would give a little more movement and using a standard size servo would give it even more.

Step 4: Code...

#include <Servo>

servo1,servo2,servo3; //int potPin = 2; // select the input pin for the potentiometer int servangle = 0; // servo angle variable int potPin = 4; // select the input pin for the potentiometer int soundPin = 4; // select the input pin for the potentiometer int ledPin = 13; // select the pin for the LED int val = 0; // variable to store the value coming from the sensor int valPot2 = 0;

int valInc = 4; int currAngle = 0; int newAngle = 0; int delayTime = 0; //Analog read pins const int buttonPin = 2; int buttonState = 0; // variable for reading the pushbutton status

void setup() {


pinMode(ledPin, OUTPUT); // declare the ledPin as an OUTPUT

servo1.attach(11); delay(10);

servo1.write(90); delay(20); }

void loop() {



servo1.write(180); delay(950);

servo1.write(30); delay(900);


//cli(); //delay(1000); }

Step 5:

Move It

Participated in the
Move It