The Mechanical Turk: Difference between revisions
Created page with "= The Mechanical Turk (project) = == Overzicht == ''The Mechanical Turk'' is een technisch en ambachtelijk schaakbordproject ontwikkeld binnen Hackerspace RandomData. Het project combineert houtbewerking, 3D-printing, robotica, NFC-technologie en softwareontwikkeling. Het doel is om een fysiek schaakbord te bouwen dat automatisch schakelt tussen fysieke en digitale zetten. Hiermee kunnen spelers schaakwedstrijden spelen tegen online tegenstanders via Chess.com, terwijl..." |
|||
| (3 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
= The Mechanical Turk (project) = | = The Mechanical Turk (project) = | ||
== | == Overview == | ||
''The Mechanical Turk'' is | ''The Mechanical Turk'' is a technical and artisanal chessboard project developed within the Dutch hackerspace [[Hackerspace RandomData]]. It combines woodworking, 3D printing, NFC technology, robotics, and Python development to create a physical chessboard that synchronizes with digital chess games played on platforms like [[Chess.com]]. | ||
Moves from an online opponent are physically executed on the board by a hidden robotic arm, while moves made on the physical board are detected and sent back to the online game. The name is a modern reference to the 18th-century chess automaton known as ''The Mechanical Turk'', which falsely appeared to play autonomously. This version is fully transparent and truly functional. | |||
== | == Project Lead == | ||
The project is led by '''0ffset_0x52''', also known as '''UEV52'''. Those interested in contributing can contact him via SignalChat or the Mattermost channel of Hackerspace RandomData. | |||
== Goals == | |||
* Build a working physical chessboard that mirrors and controls online games | |||
* Automate physical piece movement using a robotic magnetic arm | |||
* Enable real-world games against Chess.com opponents and AI bots | |||
* Create a platform that fuses old-world craftsmanship with modern automation | |||
== Technical Design == | |||
* Each chess piece contains a unique NFC tag | |||
* A magnetic robotic arm moves along X, Y, and Z axes beneath the board | |||
* Pieces are lifted magnetically and placed using scripted coordinates | |||
* The system tracks each piece's position via NFC scans | |||
* All movement and logic are handled via a custom Python script | |||
* Synchronization with Chess.com is achieved using their public API | |||
== | == Required Components == | ||
{| class="wikitable" style=\"text-align:left; width:100%;\" | |||
! Component !! Specification / Version !! Description | |||
|- | |||
| Raspberry Pi || Raspberry Pi 4 Model B (4GB RAM) || Controls motor logic, NFC reading, and API communication | |||
|- | |||
| Operating System || Raspberry Pi OS 64-bit || Platform for running scripts | |||
|- | |||
| Programming Language || Python 3.11 || Controls logic and hardware | |||
|- | |||
| NFC Reader || PN532 (I2C) || Detects pieces based on tag IDs | |||
|- | |||
| NFC Tags || NTAG213 / NTAG215 || Unique ID per chess piece | |||
|- | |||
| Stepper Motors || NEMA 17 + A4988 drivers || Moves the magnetic arm along X/Y grid | |||
|- | |||
| Servo Motor || SG90 or MG995 || Controls vertical lifting (Z-axis) | |||
|- | |||
| Magnet || Neodymium (6×3 mm) || Picks up pieces magnetically | |||
|- | |||
| Chess Pieces || 3D printed in PLA+ || Finished by hand: sanded, primed, painted, polished | |||
|- | |||
| Board Material || Mahogany, walnut, maple || Layered and lacquered for appearance | |||
|- | |||
| Tools || Circular saw, sander, engraver, clamps || Used in board construction | |||
|- | |||
| Finishing Materials || Acrylic paint, filler primer, lacquer || For visual quality and durability | |||
|- | |||
| Connectivity || WiFi or Ethernet || For online integration with Chess.com | |||
|} | |||
== Example Code == | |||
Below is a simple Python example that retrieves the last move from a Chess.com game and prints it: | |||
<syntaxhighlight lang=\"python\"> | <syntaxhighlight lang=\"python\"> | ||
import requests | import requests | ||
def get_last_move(game_id): | def get_last_move(game_id): | ||
url = f\"https://api.chess.com/pub/game/{game_id}\" | url = f\"https://api.chess.com/pub/game/{game_id}\" | ||
response = requests.get(url) | response = requests.get(url) | ||
data = response.json() | data = response.json() | ||
moves = data['moves'].split() | |||
return moves[-1] if moves else None | |||
move = get_last_move('example-game-id') | |||
if move == 'a2a4': | if move == 'a2a4': | ||
print(\" | print(\"Move pawn from A2 to A4\") | ||
# | # Insert motor control logic here | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == Construction Timeline == | ||
=== | === Phase 1: Planning and Design (Weeks 1–2) === | ||
* | * Create CAD designs for chess pieces | ||
* | * Define board layout and grid mechanics | ||
* | * Choose wood types for contrast and durability | ||
=== | === Phase 2: 3D Printing and Finishing (Weeks 3–4) === | ||
* | * Print pieces in PLA+ filament | ||
* | * Sand, prime, paint, and polish each piece | ||
* | * Affix NFC tags to the bottom of each piece | ||
=== | === Phase 3: Board Construction (Weeks 5–6) === | ||
* | * Cut and shape wood components | ||
* | * Route out internal space for grid and arm | ||
* | * Inlay or engrave chess squares | ||
* Assemble and lacquer the board | |||
=== | === Phase 4: Mechanical Arm (Weeks 7–8) === | ||
* | * Assemble X/Y movement system using stepper motors | ||
* | * Integrate vertical servo-lifting mechanism | ||
* Test magnetic pickup and alignment | |||
* | |||
=== | === Phase 5: Software Development (Weeks 9–10) === | ||
* | * Write motor control scripts in Python | ||
* | * Integrate NFC reader and calibrate tag detection | ||
* Connect to Chess.com API and handle logic | |||
== | === Phase 6: Testing and Integration (Weeks 11–12) === | ||
* Full system test with online games | |||
* Refine movements and calibrate grid | |||
* Add logging, error handling, and safety checks | |||
== Future Expansions == | |||
* Add local AI support via [[Stockfish (chess engine)]] | |||
* Use RGB LEDs for visual feedback | |||
* Add sound effects for capture, check, and checkmate | |||
* Integrate OLED display to show current notation | |||
* Enable voice control or multiplayer sync between boards | |||
== | == Historical Context == | ||
The original ''Mechanical Turk'' was a hoax automaton built by Wolfgang von Kempelen in 1770. Though it appeared to play chess autonomously, it concealed a hidden human operator. This project reimagines the same premise using modern technologies—robotics, NFC, and open-source software—to achieve the illusion in reality, transparently and without deception. | |||
== | == See Also == | ||
* | * [[Chess.com]] | ||
* | * [[Stockfish (chess engine)]] | ||
* | * [[Raspberry Pi]] | ||
* | * [[Hackerspace]] | ||
* | * [[Wolfgang von Kempelen]] | ||
== | == External Links == | ||
* [https://www.chess.com Chess.com] | |||
* [https://www.randomdata.nl Hackerspace RandomData] | |||
Latest revision as of 19:10, 3 July 2025
The Mechanical Turk (project)
Overview
The Mechanical Turk is a technical and artisanal chessboard project developed within the Dutch hackerspace Hackerspace RandomData. It combines woodworking, 3D printing, NFC technology, robotics, and Python development to create a physical chessboard that synchronizes with digital chess games played on platforms like Chess.com.
Moves from an online opponent are physically executed on the board by a hidden robotic arm, while moves made on the physical board are detected and sent back to the online game. The name is a modern reference to the 18th-century chess automaton known as The Mechanical Turk, which falsely appeared to play autonomously. This version is fully transparent and truly functional.
Project Lead
The project is led by 0ffset_0x52, also known as UEV52. Those interested in contributing can contact him via SignalChat or the Mattermost channel of Hackerspace RandomData.
Goals
- Build a working physical chessboard that mirrors and controls online games
- Automate physical piece movement using a robotic magnetic arm
- Enable real-world games against Chess.com opponents and AI bots
- Create a platform that fuses old-world craftsmanship with modern automation
Technical Design
- Each chess piece contains a unique NFC tag
- A magnetic robotic arm moves along X, Y, and Z axes beneath the board
- Pieces are lifted magnetically and placed using scripted coordinates
- The system tracks each piece's position via NFC scans
- All movement and logic are handled via a custom Python script
- Synchronization with Chess.com is achieved using their public API
Required Components
| Component | Specification / Version | Description |
|---|---|---|
| Raspberry Pi | Raspberry Pi 4 Model B (4GB RAM) | Controls motor logic, NFC reading, and API communication |
| Operating System | Raspberry Pi OS 64-bit | Platform for running scripts |
| Programming Language | Python 3.11 | Controls logic and hardware |
| NFC Reader | PN532 (I2C) | Detects pieces based on tag IDs |
| NFC Tags | NTAG213 / NTAG215 | Unique ID per chess piece |
| Stepper Motors | NEMA 17 + A4988 drivers | Moves the magnetic arm along X/Y grid |
| Servo Motor | SG90 or MG995 | Controls vertical lifting (Z-axis) |
| Magnet | Neodymium (6×3 mm) | Picks up pieces magnetically |
| Chess Pieces | 3D printed in PLA+ | Finished by hand: sanded, primed, painted, polished |
| Board Material | Mahogany, walnut, maple | Layered and lacquered for appearance |
| Tools | Circular saw, sander, engraver, clamps | Used in board construction |
| Finishing Materials | Acrylic paint, filler primer, lacquer | For visual quality and durability |
| Connectivity | WiFi or Ethernet | For online integration with Chess.com |
Example Code
Below is a simple Python example that retrieves the last move from a Chess.com game and prints it:
<syntaxhighlight lang=\"python\"> import requests
def get_last_move(game_id):
url = f\"https://api.chess.com/pub/game/{game_id}\" response = requests.get(url) data = response.json() moves = data['moves'].split() return moves[-1] if moves else None
move = get_last_move('example-game-id')
if move == 'a2a4':
print(\"Move pawn from A2 to A4\") # Insert motor control logic here
</syntaxhighlight>
Construction Timeline
Phase 1: Planning and Design (Weeks 1–2)
- Create CAD designs for chess pieces
- Define board layout and grid mechanics
- Choose wood types for contrast and durability
Phase 2: 3D Printing and Finishing (Weeks 3–4)
- Print pieces in PLA+ filament
- Sand, prime, paint, and polish each piece
- Affix NFC tags to the bottom of each piece
Phase 3: Board Construction (Weeks 5–6)
- Cut and shape wood components
- Route out internal space for grid and arm
- Inlay or engrave chess squares
- Assemble and lacquer the board
Phase 4: Mechanical Arm (Weeks 7–8)
- Assemble X/Y movement system using stepper motors
- Integrate vertical servo-lifting mechanism
- Test magnetic pickup and alignment
Phase 5: Software Development (Weeks 9–10)
- Write motor control scripts in Python
- Integrate NFC reader and calibrate tag detection
- Connect to Chess.com API and handle logic
Phase 6: Testing and Integration (Weeks 11–12)
- Full system test with online games
- Refine movements and calibrate grid
- Add logging, error handling, and safety checks
Future Expansions
- Add local AI support via Stockfish (chess engine)
- Use RGB LEDs for visual feedback
- Add sound effects for capture, check, and checkmate
- Integrate OLED display to show current notation
- Enable voice control or multiplayer sync between boards
Historical Context
The original Mechanical Turk was a hoax automaton built by Wolfgang von Kempelen in 1770. Though it appeared to play chess autonomously, it concealed a hidden human operator. This project reimagines the same premise using modern technologies—robotics, NFC, and open-source software—to achieve the illusion in reality, transparently and without deception.