A full-scale ESP8266-controlled tribute to Westinghouse's legendary Elektro robot, built from recycled metal for Nerdearla 2025.
Elektro is a large-scale animatronic robot built for the Nerdearla 2025 technology conference in Buenos Aires, Argentina.
Inspired by the humanoid robot created by Westinghouse in the late 1930s, this version combines traditional metal fabrication, salvaged components, an ESP8266 NodeMCU, a DFPlayer Mini, a high-torque servo, amplified audio, Wi-Fi remote control, and a motorized smoke effect.
The robot can:
- 🗣️ deliver prerecorded announcements
- 😮 move its jaw while speaking
- 💨 perform a coordinated smoking sequence
- 😷 cough
- 📡 create its own Wi-Fi Access Point
- 📱 accept commands through a browser
- 🔄 operate autonomously between remote interactions
The body was built by Mauro de Giuseppe and students from EPS School No. 1 in General Las Heras, Buenos Aires, while the electronics and software were developed by Roni Bandini.
- 🤖 Full-scale humanoid robot
- ♻️ Body fabricated primarily from recycled metal
- 📡 ESP8266 NodeMCU controller
- 🌐 Self-hosted Wi-Fi Access Point
- 📱 Browser-based remote control
- 🗣️ Prerecorded speech and event announcements
- 🎵 DFPlayer Mini audio playback
- 🔊 Stereo audio amplification
- 😮 Servo-controlled jaw synchronized with speech
- 💨 Motorized smoke mechanism
- 😷 Coordinated cough routine
- 🔇 Remote mute/unmute
- 🔄 Autonomous announcements
- 🎲 Randomized speech selection
- 🖼️ Embedded vintage Elektro artwork in the control interface
- 📜 MIT licensed
The original Elektro was developed by Westinghouse in Mansfield, Ohio, during the late 1930s and became one of the best-known attractions at the 1939 New York World's Fair.
At approximately 2.1 meters tall, Elektro could perform numerous demonstrations including:
- walking
- talking
- responding to voice commands
- counting
- moving its head and arms
- distinguishing colored light
- inflating balloons
- smoking cigarettes
Its speech used prerecorded audio, while its control system relied on relays, motors, gears, and other electromechanical technology.
The surviving original Elektro is preserved at the Mansfield Memorial Museum in Ohio.
- Mansfield Memorial Museum — Elektro the Westinghouse Robot
- IEEE Spectrum — Elektro the Moto-Man Had the Biggest Brain at the 1939 World's Fair
- El Robot Elektro de Westinghouse — Medium
The modern Elektro was built for Nerdearla 2025.
The finished robot stands approximately two meters tall, weighs around 176 lb / 80 kg, and was constructed largely from discarded machinery and household equipment.
Recycled components used for the body included:
- 25-liter air compressor tanks
- refrigeration tanks
- refrigerator drums
- steel curtain tubes
- shock absorbers
- bearings
- stove parts
- washing-machine parts
- other salvaged steel components
The pieces were cut, welded, assembled, and polished using conventional metalworking techniques.
The structural work was led by Mauro de Giuseppe, together with students from EPS School No. 1 in General Las Heras.
┌────────────────────┐
│ Smartphone │
│ Browser │
└─────────┬──────────┘
│
│ Wi-Fi
▼
┌────────────────────┐
│ ESP8266 NodeMCU │
│ │
│ Access Point │
│ HTTP server │
│ Automation logic │
└───┬────┬─────┬────┘
│ │ │
┌────────┘ │ └─────────┐
▼ ▼ ▼
┌─────────────┐ ┌──────────┐ ┌─────────────┐
│ DFPlayer │ │ Servo │ │ Motor Driver│
│ Mini │ │ │ │ │
└──────┬──────┘ └────┬─────┘ └──────┬──────┘
│ │ │
▼ ▼ ▼
┌─────────────┐ Steel Jaw 5 V Fan
│ NS4110 Amp │ / Smoker
└──────┬──────┘
│
┌────┴────┐
▼ ▼
Speaker Speaker
| Component | Purpose |
|---|---|
| ESP8266 NodeMCU Amica | Main controller and Wi-Fi server |
| DFPlayer Mini | MP3 playback |
| microSD card | Audio storage |
| NS4110 stereo amplifier | Audio amplification |
| 2 × 20 W / 4 Ω speakers | Robot voice |
| High-torque metal-gear servo | Jaw movement |
| Motor driver / H-bridge | Smoke fan control |
| 5 V fan | Airflow for smoke effect |
| Dual 5 V / 12 V power supply | Electronics and amplifier |
| Jumper wires / terminals | Interconnection |
Library:
Several components in the original build were reused from previous equipment.
These included:
- speakers from a home-theater system
- an ESP8266 development board
- a metal-gear servo
- a 5 V cooling fan
- a dual-voltage power supply from an old Iomega Zip Drive
The reused Iomega supply provides:
5 V → ESP8266, DFPlayer, fan
12 V → NS4110 amplifier
The current firmware defines:
| Function | ESP8266 pin |
|---|---|
| Jaw servo | D5 |
| Motor driver A1A | D3 |
| Motor driver A1B | D4 |
| DFPlayer RX | D2 |
| DFPlayer TX | D1 |
From the source:
const int servoPin = D5;
const int A1A = D3;
const int A1B = D4;
const int playerRxPin = D2;
const int playerTxPin = D1;The audio path is:
microSD
│
▼
DFPlayer Mini
│
│ DAC
▼
NS4110 stereo amplifier
│
├──────────────┐
▼ ▼
20 W speaker 20 W speaker
The DFPlayer communicates with the ESP8266 through SoftwareSerial at:
9600 baud
The player starts at maximum library volume:
player.volume(30);Audio files used by the project are stored under:
audios/
Examples include:
01BienvenidoANerdearla.mp3
02MiNombreEsElektro.mp3
03Ley2.mp3
04Ley1.mp3
05Ley3.mp3
06bostezo.mp3
...
Copy the audio files to the DFPlayer microSD card while preserving their numeric ordering.
The project audio was generated using the Josh voice from ElevenLabs and later processed in Audacity to improve intelligibility and output level in a noisy conference environment.
The firmware currently defines:
const int howManyAudios = 33;and selects different groups of audio tracks for generic speech, event announcements, coughing, and the smoking routine.
The jaw is driven by a metal-gear servo attached to:
D5
The normal speech movement range is:
const int minPos = 20;
const int maxPos = 70;While an audio track is playing, the firmware repeatedly chooses a random jaw position:
int pos = random(minPos, maxPos + 1);
myservo.write(pos);The interval between movements also varies:
const int minDelay = 150;
const int maxDelay = 300;This creates an approximate speech synchronization without requiring phoneme or waveform analysis.
When playback finishes, the jaw returns to:
myservo.write(90);A small 5 V fan is connected through the motor driver.
The fan is mechanically coupled to a custom funnel designed in Autodesk Fusion 360 and 3D printed.
The smoke routine coordinates:
Open jaw
↓
Preparation pause
↓
Fan ON
↓
Jaw movement
↓
Fan OFF
↓
Pause
↓
Repeat
↓
Occasional cough
The firmware currently performs:
const int smokingRounds = 10;cycles.
During the sequence, the robot coughs automatically after selected rounds.
🔥 The original installation used a cigarette as part of the historical Elektro reference. Any reproduction involving heat, flame, smoke, or combustible materials requires suitable fire precautions and compliance with venue rules. A theatrical smoke source can be substituted for exhibition use.
The cough command:
- changes the jaw position
- plays audio track
11 - waits briefly
- returns control to the caller
void cough() {
myservo.write(0);
speak(11);
delay(1000);
}The routine is also called automatically during the smoke sequence.
Elektro creates its own Wi-Fi network using:
WiFi.softAP(ssid, password);The current defaults are:
const char* ssid = "Elektro";
const char* password = "AAAAAAAAAAAAAAAA";Change the password before using the robot at an event or public location.
The web server runs on:
port 80
After startup, the ESP8266 prints the Access Point IP address to the Serial Monitor.
A common ESP8266 SoftAP address is:
192.168.4.1
Use the address printed by your board.
Open the Elektro IP address from a phone or computer connected to its Wi-Fi network.
The embedded control interface provides four commands:
┌──────────┐ ┌──────────┐
│ Speak │ │ Mute │
└──────────┘ └──────────┘
┌──────────┐ ┌──────────┐
│ Smoke │ │ Cough │
└──────────┘ └──────────┘
The entire HTML application is embedded directly inside:
elektro.ino
including a vintage Elektro image stored as Base64 data.
No separate web server or Internet connection is required.
The browser interface calls four simple HTTP endpoints.
| Endpoint | Action |
|---|---|
/api/speak |
Play a random speech track |
/api/mute |
Toggle mute state |
/api/smoke |
Start the smoke routine |
/api/cough |
Trigger cough |
Example:
GET /api/speak
Response:
...Elektro spoke!
The API also makes it possible to control Elektro from another application rather than using the included web interface.
Remote control is optional.
The main loop continues running when nobody is connected:
void loop() {
server.handleClient();
...
}After an idle interval, Elektro alternates between:
- generic phrases
- Nerdearla announcements
Tracks are selected randomly.
Conceptually:
Idle
↓
Random phrase
↓
Idle
↓
Random announcement
↓
Idle
↓
Repeat
This allowed Elektro to continue functioning as an autonomous conference installation while still accepting manual commands.
The project documentation also describes an easter egg in which Elektro occasionally broadcasts an encoded message using ggwave, an audio-based data transmission format.
ggwave:
git clone https://github.com/ronibandini/elektro.git
cd elektroRepository structure:
elektro/
├── audios/
│ ├── 01BienvenidoANerdearla.mp3
│ ├── 02MiNombreEsElektro.mp3
│ └── ...
├── LICENSE
├── README.md
└── elektro.ino
Install the ESP8266 Arduino core:
The original controller is an:
ESP8266 NodeMCU Amica
Install:
The sketch includes:
#include "DFRobotDFPlayerMini.h"The other required libraries are provided by the ESP8266/Arduino environment:
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <Servo.h>
#include <SoftwareSerial.h>Copy the contents of:
audios/
to the DFPlayer Mini microSD card.
Preserve the numeric order of the tracks because the firmware addresses them by track number.
Change:
const char* ssid = "Elektro";
const char* password = "AAAAAAAAAAAAAAAA";to the credentials you want the robot to expose.
Open:
elektro.ino
in Arduino IDE.
Select the appropriate ESP8266 NodeMCU board configuration and upload the sketch.
Open Serial Monitor at:
115200 baud
Startup output includes:
Elektro started
DFPlayer ok.
AP started: Elektro
IP address:
...
HTTP server started
-
💡 Control the chest lamps — add the relay-controlled retro lamps planned during the original build and expose them through the web interface.
-
🎭 Upgrade the smoke system — replace the original cigarette-based mechanism with a controllable theatrical smoke or vapor generator.
-
🎙️ Improve speech synchronization — use audio-envelope analysis or prerecorded timing data to make jaw motion follow speech more accurately.
Read the complete project on Hackster.io
The project article documents:
- construction of the recycled-metal body
- ESP8266 electronics
- DFPlayer audio
- jaw mechanism
- smoke system
- Wi-Fi administration
- power supply
- Nerdearla installation
- project collaborators
- source code
Published September 25, 2025.
Making an Elektro — Hackaday.io
The Hackaday.io project page documents the full-scale build and links directly to the GitHub source code.
It covers the recycled-metal construction, audio system, servo-controlled jaw, smoke mechanism, Wi-Fi interface, and ggwave easter egg.
Fabricando un robot Elektro — Medium
Spanish-language project article covering the construction of the Nerdearla Elektro.
This article is also linked from the GitHub repository's About section.
Nerdearla 2025 article — Medium
Pre-event article announcing the Nerdearla appearance and the plan to exhibit a steel Elektro built approximately to the dimensions of the original.
Post-event documentation covering the completed robot, the EPS N°1 collaboration, recycled construction, speech, amplified audio, jaw motion, smoke mechanism, ggwave easter egg, and Wi-Fi administration.
The repository is indexed as:
ronibandini/elektro
Elektro robot for Nerdearla 2025
with the project topics:
esp8266
robot
elektro
servo-motor
dfplayer-mini
It is also included in the Ecosyste.ms DFPlayer Mini project index:
DFPlayer Mini projects — Ecosyste.ms
Elektro was created for Nerdearla 2025, a technology conference held in Buenos Aires, Argentina.
The robot was exhibited at CC Konex during the 2025 event.
ELEKTRO the Westinghouse Robot
The museum preserves the surviving original Elektro and documents its Westinghouse and World's Fair history.
Elektro the Moto-Man Had the Biggest Brain at the 1939 World's Fair
Detailed history of Westinghouse's early robotics program, Televox, and Elektro.
Other projects by Roni Bandini involving robots, automata, speech, servos, and reused hardware.
Arduino animatronic head with face detection and servo-controlled head, eyes, and mouth movement.
A smaller platform for experimenting with many of the same mechanical ideas used in Elektro.
github.com/ronibandini/AnimatronicHead
A modified 1998 Furby transformed into a Jorge Luis Borges animatronic using Arduino and DFPlayer Mini.
Like Elektro, the project combines prerecorded speech, mechanical movement, salvaged hardware, and a DFPlayer-based audio system.
Chattering-teeth automaton that reads headlines with an optimistic tone.
Built around a DFRobot UNIHIKER and servo-driven mechanical mouth, combining software-generated speech with a physical automaton.
github.com/ronibandini/yrigoyen
Elektro is a large steel machine containing moving mechanical parts, high-current audio equipment, and multiple supply voltages.
For reproductions or modifications:
- secure the robot against tipping
- keep hands clear of the jaw and servo linkage
- isolate exposed electrical terminals
- provide appropriate fusing
- use a common electrical ground where required
- ensure adequate wire gauge for the amplifier and other high-current loads
- keep combustible materials away from electronics and power supplies
- follow venue rules for smoke, flame, and moving installations
The original smoke sequence should not be reproduced in a public installation without suitable fire controls.
Elektro is released under the MIT License.
See LICENSE for details.
Roni Bandini
- 🐙 GitHub: @ronibandini
- 📸 Instagram: @ronibandini
- 🐦 X: @RoniBandini
- ✍️ Medium: bandini.medium.com
- 🛠️ Hackster: Roni Bandini
- 🔧 Hackaday.io: Roni Bandini
Mauro de Giuseppe
Students from EPS School No. 1 — General Las Heras, Buenos Aires, Argentina
Elektro was built through the combination of recycled materials, metalworking, embedded electronics, software, and collaborative fabrication for Nerdearla 2025.