Hello. I have a duck. His name is Goose. Goose is just not like any other duck. He likes to walk along the shore early in the morning, work out his calves at his local gym and lip sync, especially to Rick Astley's Never Gonna Give You Up. This plastic duck has 3 individual motors, but after the critical surgery, only two motors are active. The motor that is not connected is the neck motor. it is a bi-directional motor and I have yet to find a solution to wire up a transistor/relay to invert the polarity of the electricity flow. As of now, he can only wiggle his tail and open and close his mouth like a dying fish gasping for air. During the days of modifying and coding this toy, I've learned quite a bit about the toy itself, as well as my own level of expertise. first of all, immediately after opening the toy, I've noticed that this duck from Toy's "R" us is definitely not worth 30 dollars. The materials and the physical construction could've been hacked together by a drunk 8 year old. parts were glued and slapped together in a low level fashion. Making the toy move upon command should, in theory, be easy, since it is more mechanical than electrical. However, I was amazed by what I am able to do with this toy. Turns out, not much actually.
as you can clearly see, wiring up those motors require quite a bit of extensive wiring and surgeon-like hands. (Figure 1b. 200 miles of colorful wires rule the surface of this bread board.)
The Two transistors control the two motors independently. Through using the TI120 and the 3904 transistors, both NPN, I was able to have the Arduino control those motors on command.
Here is a video of the duck in action. Please excuse the poor quality of the video. I tried to capture what it can offer within a short amount of time.
Here is the code that brings this duck to life.
#define motorPin6 6
#define motorPin11 11
void setup()
{
pinMode(motorPin6, OUTPUT);
pinMode(motorPin11, OUTPUT);
}
void loop()
{
for(int counter = 0; counter < 31; counter=counter+1)
{
digitalWrite(motorPin6,HIGH);
delay(300);
digitalWrite(motorPin6,LOW);
delay(300);
}
for(int counter = 0; counter < 523; counter=counter+1)
{
digitalWrite(motorPin11,HIGH);
delay(100);
digitalWrite(motorPin11,LOW);
delay(300);
digitalWrite(motorPin6,HIGH);
delay(100);
digitalWrite(motorPin6,LOW);
delay(300);
}
for(int counter = 0; counter < 40; counter=counter+1)
{
digitalWrite(motorPin6,HIGH);
delay(300);
digitalWrite(motorPin6,LOW);
delay(300);
}
for(int counter = 0; counter < 454; counter=counter+1)
{
digitalWrite(motorPin6,HIGH);
delay(300);
digitalWrite(motorPin6,LOW);
delay(300);
}
for(int counter = 0; counter < 50; counter=counter+1)
{
digitalWrite(motorPin6,HIGH);
delay(300);
digitalWrite(motorPin6,LOW);
delay(300);
}
for(int counter = 0; counter < 378; counter=counter+1)
{
digitalWrite(motorPin6,HIGH);
delay(300);
digitalWrite(motorPin6,LOW);
delay(300);
}
while (true);
}
#define motorPin11 11
void setup()
{
pinMode(motorPin6, OUTPUT);
pinMode(motorPin11, OUTPUT);
}
void loop()
{
for(int counter = 0; counter < 31; counter=counter+1)
{
digitalWrite(motorPin6,HIGH);
delay(300);
digitalWrite(motorPin6,LOW);
delay(300);
}
for(int counter = 0; counter < 523; counter=counter+1)
{
digitalWrite(motorPin11,HIGH);
delay(100);
digitalWrite(motorPin11,LOW);
delay(300);
digitalWrite(motorPin6,HIGH);
delay(100);
digitalWrite(motorPin6,LOW);
delay(300);
}
for(int counter = 0; counter < 40; counter=counter+1)
{
digitalWrite(motorPin6,HIGH);
delay(300);
digitalWrite(motorPin6,LOW);
delay(300);
}
for(int counter = 0; counter < 454; counter=counter+1)
{
digitalWrite(motorPin6,HIGH);
delay(300);
digitalWrite(motorPin6,LOW);
delay(300);
}
for(int counter = 0; counter < 50; counter=counter+1)
{
digitalWrite(motorPin6,HIGH);
delay(300);
digitalWrite(motorPin6,LOW);
delay(300);
}
for(int counter = 0; counter < 378; counter=counter+1)
{
digitalWrite(motorPin6,HIGH);
delay(300);
digitalWrite(motorPin6,LOW);
delay(300);
}
while (true);
}

