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.

View other literature machines

Follow me on Instagram

TikTok All about Furby