An Arduino replacement controller for a failed Samsung washing machine, combining relay-based motor and valve control, physical buttons, Wi-Fi, Telegram notifications, and a few deliberately unnecessary extras.
Hacksung began after a Samsung WS1702 washing machine developed erratic behavior after only a few years of use.
Several repairs were attempted, including work on the motor, carbon brushes, wiring, coils, pumps, and electronic control board. The individual electromechanical components still appeared usable, so instead of discarding the complete appliance, the original controller was replaced with an Arduino and external control electronics.
The resulting machine provides:
- manual control of water and motor functions
- experimental automatic wash cycles
- a Nokia 5110 menu interface
- Wi-Fi connectivity
- Telegram notifications
- a dollar-exchange-rate screen
- a fake "Will it run Doom?" sequence
- custom literary washing programs
┌────────────────────┐
│ Arduino MKR WiFi │
│ 1010 │
└─────────┬──────────┘
│
┌────────────────┼───────────────────┐
│ │ │
▼ ▼ ▼
Nokia 5110 3 push buttons Wi-Fi / Internet
display │
├── Telegram
│ │
│ └── Dollar quote
│
▼
Menu system
│
▼
4 relay outputs
│
┌────┼───────────────┐
│ │ │
▼ ▼ ▼
Motor Water In Water Out
- 🧺 Replacement washing-machine control unit
- ⚡ Arduino MKR WiFi 1010
- 🔌 Four relay outputs
- 💧 Water-in valve control
- 🚰 Drain / water-out control
- 🌀 Washing-machine motor control
- 📟 Nokia 5110 / PCD8544 display
- 🔘 Three-button menu interface
- 📶 Wi-Fi connectivity through WiFiNINA
- 📲 Telegram completion notification
- 🌐 Direct HTTP/HTTPS requests
- 💵 Dollar exchange-rate submenu
- 🎮 "Will it run Doom?" bitmap animation
- 📚 Washing cycles named after writers
- 🖨️ Custom 3D-printed controller enclosure
- 📜 MIT licensed
Most of a washing machine is not the control board.
A conventional machine contains independently useful components such as:
motor
water inlet valves
drain pump
tachometer
door hardware
drum
mechanical structure
Hacksung keeps those components and replaces the failed electronic controller.
Original control PCB
✕
│
▼
Arduino controller
│
├── read buttons
├── display menus
├── execute sequence
├── switch relays
├── connect to Wi-Fi
└── send notifications
The project was built as an experiment in extending the life of an otherwise mechanically functional appliance.
USER
│
┌──────┴───────┐
│ │
▼ ▼
Nokia 5110 3 buttons
│ │
└──────┬───────┘
▼
┌───────────────────┐
│ Arduino MKR WiFi │
│ 1010 │
│ │
│ C++ │
│ Menu system │
│ WiFiNINA │
└─────────┬─────────┘
│
┌──────┴───────┐
│ │
▼ ▼
Relay outputs Internet
│ │
┌─────────┼───────┐ ├── Telegram
▼ ▼ ▼ │
Motor Water In Drain └── Custom PHP
│
▼
Dollar exchange
quote
The original build uses:
| Qty | Component | Purpose |
|---|---|---|
| 1 | Arduino MKR WiFi 1010 | Main controller and Wi-Fi |
| 1 | 4-channel relay board / shield | Motor and valve switching |
| 1 | Nokia 5110 LCD | User interface |
| 3 | Push buttons | Menu navigation |
| 1 | SCR 2000 W AC voltage controller | Experimental motor-speed control |
| 1 | ZMPT101B AC voltage sensor | Experimental motor tachometer interface |
| 1 | Samsung WS1702 washing machine | Original appliance |
| 1 | Custom 3D-printed controller enclosure | Electronics housing |
Project tutorial:
Dead Washing Machine Returns to Life with Arduino MKR — Hackster.io
The project uses an Arduino MKR WiFi 1010, based on the SAMD21 microcontroller.
Relevant characteristics include:
- Arm Cortex-M0+ processor
- up to 48 MHz
- 256 KB Flash
- 32 KB SRAM
- Wi-Fi
- Bluetooth
- hardware cryptographic support
- compact MKR form factor
Official documentation:
The MKR WiFi 1010 uses:
3.3 V I/O
and its GPIO pins are not 5 V tolerant.
The current source uses:
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>and initializes the display with:
Adafruit_PCD8544 display =
Adafruit_PCD8544(7, 6, 5, 4, 3);The pin assignment is:
| Function | MKR pin |
|---|---|
| SCLK | 7 |
| DIN | 6 |
| D/C | 5 |
| CS | 4 |
| RST | 3 |
The screen resolution is:
84 × 48
which is also used for the Hacksung logo and Doom animation bitmaps.
The three menu buttons are configured as:
const int BUTTON_PIN = 0;
const int BUTTON_PIN1 = 1;
const int BUTTON_PIN2 = 2;with:
INPUT_PULLUPThe firmware implements software debouncing:
const int DEBOUNCE_DELAY = 75;The buttons provide:
UP
DOWN
ENTER
style navigation through the menu system.
The current source defines four relay outputs:
int relayMotor1 = 8;
int relayWaterIn = 9;
int relayWaterOut = 10;
int relayMotor2 = 11;| Function | MKR pin |
|---|---|
| Motor relay 1 | 8 |
| Water inlet | 9 |
| Drain / water out | 10 |
| Motor relay 2 | 11 |
The relay logic is active-low in the current firmware.
At startup:
digitalWrite(relayMotor1, HIGH);
digitalWrite(relayMotor2, HIGH);
digitalWrite(relayWaterIn, HIGH);
digitalWrite(relayWaterOut, HIGH);keeps all outputs inactive.
An output is activated with:
digitalWrite(..., LOW);The current firmware has four top-level menu options:
> Manual
Auto
Extra
Info
or:
Manual
> Auto
Extra
Info
The menu state is maintained using:
int screenCursor = 1;
int menuLevel = 0;The manual submenu contains:
Water In
Motor on
Water out
Back
Each selection toggles the corresponding relay.
Example:
if (waterIn == 0) {
digitalWrite(relayWaterIn, LOW);
waterIn = 1;
}
else {
digitalWrite(relayWaterIn, HIGH);
waterIn = 0;
}The same basic logic is used for:
motor
drain
This mode was useful during development for identifying and testing the original washing-machine hardware independently.
The display interface also shows small status indicators when outputs are active.
The current myMessage() function adds:
↑ water entering
∞ motor running
↓ water leaving
at the right side of the Nokia display.
Conceptually:
Hacksung ↑
> Water In
Motor on ∞
Water out ↓
Back
Instead of conventional appliance names, Hacksung uses argentine writers as washing programs:
Lucio Mansilla
Gombrowicz
Bioy Casares
The intended personalities of the cycles are described in the original project as:
Prewash: 5 min
Wash: 5 min
Spin: 400 rpm
A deliberately rough cycle, referencing Una excursión a los indios ranqueles.
Prewash: 15 min
Wash: 30 min
Spin: 800 rpm
Prewash: 30 min
Wash: 60 min
Spin: 1000 rpm
These names turn the replacement appliance controller into something more personal than a conventional list such as:
Cotton
Eco
Quick
Delicate
The current source is explicitly marked:
work in progress
and the automatic cycles should be understood accordingly.
The first cycle contains an actual relay-control demonstration.
The current sequence is:
Water inlet ON
│
│ 20 seconds
▼
Water inlet OFF
│
▼
Motor ON
│
│ 20 seconds
▼
Motor OFF
│
▼
Drain ON
│
│ 20 seconds
▼
Drain OFF
│
▼
Motor ON
│
│ 20 seconds
▼
Motor OFF
│
▼
Telegram notification
The values displayed on screen:
Prewash: 5 min
Wash: 5 min
Cent: 400 rpm
The original washing-machine motor has seven connections.
During development, the motor was tested independently from the failed controller to identify the connections required to run it.
The full project also experimented with an:
SCR 2000 W AC voltage regulator
to vary motor speed.
This was necessary because simply switching the motor on and off was not sufficient for a complete wash cycle.
Different operations require very different speeds:
agitation
↓
low speed
spinning
↓
high speed
The original motor includes a tachometer.
The project documentation describes measuring approximately:
40 V AC
from that tachometer during development.
A ZMPT101B AC voltage sensor was added as an experimental interface so the signal could eventually be measured through the microcontroller.
The current source contains placeholders:
//motorRpm = analogRead(A0);and:
//analogWrite(A1, 100);for future closed-loop motor-speed control.
The original project also investigated reversing motor direction.
The published build notes that this requires changing the motor connections through additional switching hardware.
The current repository declares:
relayMotor2on pin:
11
but does not implement a complete automatic reversing sequence.
Motor reversal therefore remains an unfinished part of the prototype.
The project uses:
#include <WiFiNINA.h>Credentials are configured in:
char ssid[] = "SSID";
char pass[] = "PASSWORD";At startup the firmware waits until:
status == WL_CONNECTEDbefore entering the main interface.
The startup screen displays a Wi-Fi bitmap while connecting.
When the implemented automatic cycle finishes, Hacksung sends a message through the Telegram Bot API.
The current source connects directly to:
api.telegram.org
using:
client.connectSSL(server, 443)and sends an HTTP request equivalent to:
GET /bot<TOKEN>/sendMessage
?chat_id=<CHAT_ID>
&text=Finished
This avoids relying on a dedicated Telegram Arduino library.
Replace the placeholders in:
client.println(
"GET /XXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYY/"
"sendMessage?chat_id=-ZZZZZZZZZZZZZZZZ"
"&text=Finished HTTP/1.1"
);with the corresponding:
bot token
chat ID
Do not commit real credentials to a public repository.
Telegram Bot API:
Because a washing machine obviously needs an exchange-rate screen, the Extra menu contains:
Doom
Dollar
Stats
Back
The Dollar option connects to a custom HTTP server:
char server2[] = "yourPHPServer.com";and requests:
/server/dolar.php
over port:
80
The response is parsed using:
quote = getValue(
serverAnswer,
'~',
1
);and displayed as:
Dollar quote
Sell $
<value>
The example therefore expects the custom PHP endpoint to return a response containing a ~-delimited value.
Not quite.
The Doom submenu displays four monochrome bitmaps sequentially on the Nokia 5110:
doom1
doom2
doom3
doom4with delays of:
1.5 s
1.5 s
1.0 s
1.0 s
The result is a short Doom-style animation.
Hacksung
│
▼
Extra
│
▼
Doom
│
▼
84 × 48 bitmap animation
No Doom game engine is running on the washing machine.
The Extras menu also includes:
Stats
The current firmware displays:
Manual: 12
Auto: 0
Run: 8 hrs
These values are currently hardcoded:
myMessage(
"Stats",
"Manual: 12",
"Auto: 0",
"Run: 8 hrs"
);They are placeholders rather than persistent usage counters.
The Info menu displays:
Roni Bandini
Dec 2020
@RoniBandini
Argentina
and then returns automatically to the main menu.
The sketch includes:
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <SPI.h>
#include <WiFiNINA.h>Required libraries:
- Adafruit GFX Library
- Adafruit PCD8544 Nokia 5110 LCD Library
- WiFiNINA
- SPI — included with Arduino
git clone https://github.com/ronibandini/hacksung.git
cd hacksungDownload:
In Arduino IDE:
Tools
→ Board
→ Boards Manager
install:
Arduino SAMD Boards
Then select:
Arduino MKR WiFi 1010
From:
Sketch
→ Include Library
→ Manage Libraries
install:
Adafruit GFX Library
Adafruit PCD8544
WiFiNINA
Edit:
char ssid[] = "SSID";
char pass[] = "PASSWORD";Replace the placeholder bot-token and chat-ID values in the Telegram request.
For testing, configure a Telegram bot using:
@BotFather
and obtain the target group/chat ID.
The Dollar submenu expects an external server.
Configure:
char server2[] = "yourPHPServer.com";and provide:
/server/dolar.php
with the response format expected by the parser.
The washing-machine control functions do not depend on this feature.
Current source mapping:
D0 → button
D1 → button
D2 → button
D7 → SCLK
D6 → DIN
D5 → D/C
D4 → CS
D3 → RST
D8 → Motor 1
D9 → Water In
D10 → Water Out
D11 → Motor 2
Open:
hacksung.ino
compile and upload it to the MKR WiFi 1010.
Serial output uses:
9600 baud
and begins with:
Hacksung started...
Roni Bandini - Argentina
hacksung/
├── Hacksung.pdf
├── LICENSE
├── README.md
└── hacksung.ino
Main Arduino firmware.
Contains:
- relay control
- button debouncing
- menu system
- LCD bitmaps
- manual operation
- automatic-cycle prototype
- Telegram request
- dollar exchange-rate request
- Doom animation
- status screen
Additional project documentation.
MIT License.
The control unit enclosure was designed in Fusion 360 and printed as a custom replacement interface.
The original build documentation describes it as a three-part case.
3D files:
Hacksung washing machine control unit — Thingiverse
The enclosure houses:
- Arduino
- relay hardware
- Nokia display
- three physical buttons
- related control electronics
- 🌀 Closed-loop motor control — safely condition the tachometer signal and implement actual RPM feedback for controlled wash and spin speeds.
Arduino published a dedicated feature on December 28, 2020.
The article covers:
- the failed Samsung controller
- Arduino MKR WiFi 1010
- four relays
- three buttons
- motor and valve control
- Telegram notifications
- reuse of the original appliance
- future motor-speed and reverse-control ideas
Electrogeek published Spanish-language coverage of Hacksung in September 2025, describing the MKR WiFi replacement controller, relays, Telegram integration, GitHub source, and 3D-printable enclosure.
RoboCraft also covered the project, describing the Arduino MKR WiFi 1010 replacement controller, three-button interface, Nokia display, four relays, and Telegram notification.
A later Time Out article about other Maker Counterculture projects also mentions the hacked Samsung washing machine and its unusual features:
- writer-themed washing cycles
- Telegram
- dollar exchange rate
- Doom
The complete project tutorial was published on December 25, 2020.
It documents:
- original washing-machine failure
- motor investigation
- seven-pin motor
- water valves
- Arduino MKR WiFi 1010
- relay controller
- SCR motor-speed experiment
- ZMPT101B tachometer experiment
- Nokia 5110 interface
- literary washing cycles
- Telegram
- dollar exchange rates
- Doom
- enclosure design
- future development
Dead Washing Machine Returns to Life with Arduino MKR — Hackster.io
DFRobot Maker Community republished the build with its complete hardware list and project explanation.
Read on DFRobot Maker Community
The original Spanish-language article documents the transformation from Samsung washing machine to Hacksung.
It covers:
- the unsuccessful repair history
- motor and valve testing
- MKR WiFi controller
- relay hardware
- Nokia 5110 display
- literary cycles
- Telegram
- exchange-rate menu
- Doom screen
Hackear el lavarropas — Medium
Hacksung is part of a broader collection of projects based on modifying existing technologies, repurposing discarded hardware, building unusual interfaces, and treating hardware as something that can be understood and transformed rather than simply replaced.
More projects and context are collected in:
- Arduino MKR WiFi 1010
- Arduino IDE
- WiFiNINA
- Adafruit PCD8544 Nokia 5110 Library
- Telegram Bot API
- Hacksung enclosure — Thingiverse
Other projects by Roni Bandini involving hardware reuse, appliances, unusual interfaces, and Maker Counterculture.
Electronic art installation built from a discarded Olivetti calculator using an Arduino UNO R4 Minima, six-digit LCD, and the original printer mechanism.
Another project that keeps useful hardware while replacing the original electronic behavior.
Raspberry Pi-powered media installation built around a CRT monitor, physical controls, video processing, and historical technology.
Another project combining obsolete hardware with a completely new control system and purpose.
github.com/ronibandini/Tachistoscope
Full-scale ESP8266-controlled recreation of the 1939 Westinghouse Elektro robot using recycled metal, motors, audio, smoke, and Wi-Fi control.
Another project centered on reconstructing and reprogramming electromechanical hardware.
github.com/ronibandini/elektro
A washing machine contains exposed circuits and components operating directly from mains electricity.
Depending on the country, this may be approximately:
110–120 V AC
or:
220–240 V AC
Both can cause fatal electric shock, burns, fire, or equipment damage.
Do not reproduce the mains-voltage portions of this project unless you are qualified to work safely on mains-powered appliances.
A washing machine combines:
mains electricity
+
water
+
metal enclosure
+
high-current motor
which makes safe grounding, insulation, fusing, strain relief, clearances, connectors, and enclosure design critical.
Never test exposed mains wiring in wet conditions.
Hacksung is released under the MIT License.
See LICENSE for details.
Roni Bandini
Maker, AI developer, electronic artist and writer.
- 🐙 GitHub: @ronibandini
- 💼 LinkedIn: Roni Bandini
- 📸 Instagram: @ronibandini
- 🐦 X: @RoniBandini
- ✍️ Medium: bandini.medium.com
- 🛠️ Hackster: Roni Bandini
- 🔧 Hackaday.io: Roni Bandini
Buenos Aires, Argentina.