Five years ago, I modified a 1998 Furby into a Jorge Luis Borges animatronic. At that time all Furby hacks butchered the original toy, so my approach was to leave intact all the parts and electronics hijacking the audio. That “zen” hack had limitations: speech sync was far from perfect and the 20 year old toy not always worked as expected, so Furby Borges was asking for a reborn...
Fast forward to 2023, I disassembled Furby Borges and read technical information in order to have a better control of the animatronic. As it is well known, Furby has just one DC motor to be controlled. There is also a Gear home position, a Gear Led and a motor step counter. Accessing the cables to control the motor is easy, reading Gear Home is easy but the Led and motor steps counter adds complexity to electronics (PCB soldering) and coding (interruptions).
Can I still
sync the mouth and also produce some postures without the LED and
step counter?
Parts used for Furby Borges
- 1998 Furby
- HW094 Bridge
- Arduino Nano
- DFPlayer Mini
- microSD card
- PIR sensor
- 3w 8 ohm speaker
- DC female connector
- 5v 2Am Power Supply
Note motor cables in the picture below
First of all, the gear home position is just a matter of reading a digital pin like a push button. Motor is sent forward or backward until the digital pin reads True. Then motor is stopped.
void findHome(){
Serial.println("Finding home");
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
analogWrite(enA, motorSpeed);
int f=0;
while (f==0){
int camHomeValue=digitalRead(pinCamHome);
Serial.println("Cam home value: " + String(camHomeValue));
if (camHomeValue==0){
f=1;
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
}
delay(15);
}
Serial.println("Found it!");
delay(2000);
}
At this
point, moving the mouth is just a matter of sending forward and
backward the motor with a little delay. I have measured that delay
with a test script but it still looked a little bit artificial, so I
have added a random function, so the time the mouth is opened and
closed is not always the same.
void speak(){
myRandom=random(openMouthDelay,openMouthDelay+openMouthRandom);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
analogWrite(enA, motorSpeed);
delay(myRandom);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(enA, motorSpeed);
delay(myRandom+speakOffset);
}
Note Gear Home cables in the picture below
The other important part to make a good mouth sync is knowing exactly when the mp3 stops, so I have found a new library for DFRobot Mini with that feature working.
myMP3.play(myRandom);
while (myMP3.isPlaying()){
Serial.println("Track is playing");
speak();
}
I do appreciate Jorge Luis Borges wisdom but not permanently, so I
have added a PIR sensor. Now Borges Furby talks only when there is
movement in the room.
I have also designed a 3d printed part to hold (and still reveals) all the electronics.
Last but not least, the Furby PCB was there at my desk and I did not
want to trow it away. What can be done with that PCB that has a
Sunplus SPC81A microcontroller, Texas Instruments TSP50C04 speech
synth, an H bridge motor controller and several inputs: push buttons,
mic, IR, etc? I’m thinking about making something called Furby Computer, so do not throw your Furby PCB away yet.