Roni Bandini β Buenos Aires, Argentina β April 2023
Furby Borges transforms a 1998 Furby into an animatronic version of Argentine writer Jorge Luis Borges.
An Arduino Nano controls the original Furby mechanical system through an H-bridge. A DFPlayer Mini plays Borges recordings while the Arduino moves the mouth in synchronization with the audio.
A PIR sensor detects someone nearby and wakes the machine, which selects a random quotation and recites it while moving its mouth and eyes.
- ποΈ Original 1998 Furby mechanical system
- βΎοΈ Jorge Luis Borges voice recordings
- ποΈ Arduino Nano control
- βοΈ Original single-motor Furby mechanism
- π H-bridge bidirectional motor control
- π Gear-home sensor for mechanical positioning
- π DFPlayer Mini MP3 playback
- π Synchronized mouth movement
- π² Randomized mouth timing
- π€ Eye-closing posture
- πΆ PIR motion activation
- π§± Custom 3D-printed electronics stand
The first version was built in 2018.
That version preserved most of the original Furby electronics and intercepted the audio output, replacing Furbish speech with recordings related to Borges.
π Original 2018 Furby Borges project β Hackster.io
Five years later, the machine was rebuilt with direct control over the Furby's mechanics.
The 2023 version uses:
Arduino Nano
β
H-Bridge
β
Original Furby DC motor
and:
Arduino Nano
β
DFPlayer Mini
β
Borges recordings
The result is a standalone animatronic where audio, mouth movement, eye position and presence detection are coordinated by the Arduino.
flowchart LR
PIR["πΆ PIR Sensor"]
NANO["βΎοΈ Arduino Nano"]
DF["π DFPlayer Mini"]
SD["πΎ microSD<br/>Borges recordings"]
AMP["π 3 W Speaker"]
BRIDGE["βοΈ HW094 H-Bridge"]
MOTOR["π Original Furby Motor"]
CAM["π Gear Home Sensor"]
MECH["ποΈ Furby Mechanical System"]
PIR --> NANO
SD --> DF
NANO --> DF
DF --> AMP
CAM --> NANO
NANO --> BRIDGE
BRIDGE --> MOTOR
MOTOR --> MECH
The original 1998 Furby uses a surprisingly compact mechanism.
A single DC motor drives a system of cams and gears responsible for:
- mouth movement
- eyelids
- ears
- different body positions
The Arduino does not need an individual servo for every movement.
Instead, it controls the original motor direction and duration.
The system also exposes a gear-home position sensor, which provides a known mechanical reference.
Arduino's official feature about the project explains the mechanism in more detail:
π Furby modified to recite the wisdom of Jorge Luis Borges β Arduino Blog
Before speaking, the Arduino searches for the Furby's mechanical home position.
The firmware uses:
const int pinCamHome = 5;and moves the motor until the sensor changes state.
Conceptually:
flowchart TD
START["Start motor"]
READ["Read Gear Home"]
HOME{"Home detected?"}
MOVE["Continue rotation"]
STOP["Stop motor"]
READY["Known mechanical position"]
START --> READ
READ --> HOME
HOME -->|"No"| MOVE
MOVE --> READ
HOME -->|"Yes"| STOP
STOP --> READY
This gives the Arduino a reference position before performing mouth or eye movements.
Audio playback is handled by the DFPlayer Mini MP3 module.
The firmware uses the DFPlayerMini_Fast library because it provides an isPlaying() function.
After selecting a random recording:
myMP3.play(myRandom);the Arduino moves the mouth while the audio is still playing:
while (myMP3.isPlaying()) {
speak();
}The speak() routine repeatedly moves the original motor forward and backward.
To make the motion less repetitive, mouth timing is randomized around:
openMouthDelay = 300 ms
openMouthRandom = 50 ms
speakOffset = 20 msSo every movement is slightly different.
A PIR sensor is connected to:
const int pinPir = 6;The main loop continuously checks for movement.
flowchart TD
WAIT["π€ Wait"]
PIR{"πΆ Movement?"}
HOME["Find Home"]
TRACK["π² Select Random Recording"]
PLAY["π Play Borges"]
SPEAK["π Move Mouth"]
DONE{"Audio finished?"}
REST["ποΈ Close Eyes"]
WAIT --> PIR
PIR -->|"No"| WAIT
PIR -->|"Yes"| HOME
HOME --> TRACK
TRACK --> PLAY
PLAY --> SPEAK
SPEAK --> DONE
DONE -->|"No"| SPEAK
DONE -->|"Yes"| REST
REST --> WAIT
This lets Furby Borges remain inactive until someone approaches.
| Component | Function |
|---|---|
| 1998 Furby | Original animatronic mechanism |
| Arduino Nano | Main controller |
| HW094 H-Bridge | Drives original DC motor |
| DFPlayer Mini | MP3 playback |
| microSD card | Stores Borges recordings |
| PIR sensor | Detects nearby movement |
| 3 W / 8 Ξ© speaker | Audio output |
| DC connector | Power input |
| 5 V / 2 A power supply | System power |
| 3D-printed stand | Holds electronics and speaker |
| Arduino Nano | HW094 |
|---|---|
| D9 | Enable / PWM |
| D8 | IN1 |
| D7 | IN2 |
Firmware:
const int enA = 9;
const int in1 = 8;
const int in2 = 7;| Arduino | Function |
|---|---|
| D5 | Furby Gear Home |
| D6 | PIR motion sensor |
The firmware uses SoftwareSerial:
SoftwareSerial mySerial(10, 11);Connection:
Arduino D10 β DFPlayer TX
Arduino D11 β DFPlayer RX
The source specifies a 1 kΞ© resistor on the serial connection to the DFPlayer.
The DFPlayer communicates at:
9600 baud
DFPlayer technical information:
π DFPlayer Mini documentation β DFRobot
The repository contains sample MP3 files:
200.mp3
201.mp3
202.mp3
203.mp3
204.mp3
205.mp3
206.mp3
207.mp3
208.mp3
209.mp3
210.mp3
π Browse the audio files in the repository
The firmware is configured with:
const int howManyAudios = 250;so a larger library of recordings can be stored on the microSD card.
Adjust this value to match the audio collection used in your build.
DFPlayer track playback depends on how files are stored and copied to the microSD card. See:
π DFPlayer Mini file and playback documentation
Important parameters are located near the beginning of furby7.ino:
const int howManyAudios = 250;
const int motorSpeed = 254;
const int speakOffset = 20;
const int closeDelay = 600;
const int openMouthDelay = 300;
const int openMouthRandom = 50;
const int loopDelay = 250;
const int endTalkDelay = 1500;These values control:
- number of available recordings
- motor speed
- mouth movement timing
- eye movement timing
- PIR polling interval
- delay after finishing a quotation
Install:
π PowerBroker2/DFPlayerMini_Fast β GitHub
The firmware includes:
#include <DFPlayerMini_Fast.h>SoftwareSerial is included with the classic Arduino AVR environment used by the Nano.
Arduino Nano documentation:
π Arduino Nano β Official Documentation
π Download Arduino IDE
Download or clone:
π DFPlayerMini_Fast
Install it through Arduino IDE.
git clone https://github.com/ronibandini/furby.git
cd furbyOpen:
π furby7.ino
Copy the Borges MP3 recordings to the card.
The repository includes several example audio files:
Select the classic Arduino Nano in Arduino IDE, choose the corresponding serial port and upload the sketch.
Open Serial Monitor at:
115200 baud
At startup:
Furby Borges 2.0 - Roni Bandini
The Arduino then searches for the mechanical home position and closes the eyes.
furby/
β
βββ furby7.ino
β
βββ 200.mp3
βββ 201.mp3
βββ 202.mp3
βββ ...
βββ 210.mp3
βββ README.md
βββ LICENSE
- βΎοΈ
furby7.inoβ Arduino firmware - π MP3 recordings β sample Borges audio
- βοΈ MIT License
A custom stand holds the electronics and speaker below the Furby while leaving the circuitry visible.
π Furby HW094 stand with speaker support β Thingiverse
The stand was designed specifically around this version of the project.
See Furby Borges speaking and moving:
Arduino featured the 2023 version and explains the one-motor Furby mechanism, H-bridge control, DFPlayer synchronization and PIR activation.
π Furby modified to recite the wisdom of Jorge Luis Borges β Arduino Blog
Furby Borges appeared in HackSpace magazine #67, June 2023 and is now archived by Raspberry Pi Official Magazine.
π Furby Borges β Raspberry Pi Official Magazine
π HackSpace Magazine Issue #67
The complete 2023 rebuild, including the original mechanism, home sensor, mouth synchronization and 3D stand:
π Furby Borges Reborned β Hackaday.io
The first Borgy / Furby Borges build preserved the Furby's original electronics and replaced its speech with Borges recordings.
π Furby Turns into a Writer's Animatronics Bot β Hackster.io
A Raspberry Pi machine that calculates Ο and generates automatic poetry based on its decimal digits.
π github.com/ronibandini/piemPi
Generative literature inspired by the I Remember format of Joe Brainard and Georges Perec.
π github.com/ronibandini/AIRemember
A physical machine that virtually walks through Buenos Aires and generates a travel journal using geolocation, weather data and generative AI.
π github.com/ronibandini/TheWalk
Contracultura Maker is a book by Roni Bandini about maker culture, experimental electronics, AI, physical computing and technological autonomy.
π Contracultura Maker β GitHub repository
π Download Contracultura Maker PDF
Roni Bandini Maker Β· AI Developer Β· Writer Buenos Aires, Argentina
- π GitHub β @ronibandini
- π Medium β @ronibandini
- π X / Twitter β @RoniBandini
- πΈ Instagram β @ronibandini
βΆοΈ YouTube β @RoniBandini- πΌ LinkedIn β Roni Bandini
Built with βΎοΈ Borges + Furby + Arduino.