The Mechanical Turk
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 de zetten live en fysiek op het bord worden uitgevoerd.
Het is een moderne knipoog naar de originele Mechanical Turk uit 1770. In plaats van een verborgen schaakmeester zit er nu een programmeerbare mechanische arm onder het bord, aangestuurd door een Raspberry Pi.
Beschrijving van het project
Het bord wordt met de hand gebouwd uit meerdere soorten hout, waaronder mahonie. Elk schaakstuk wordt geprint met een 3D-printer en handmatig afgewerkt. Onder elk stuk zit een unieke NFC-sticker.
Onder het bord bevindt zich een gridstructuur waarin een magnetische arm beweegt. Deze arm beweegt verticaal om een stuk op te tillen en horizontaal om het over het bord te verplaatsen. Het systeem weet waar elk stuk zich bevindt dankzij de NFC-tags.
Wanneer een tegenstander online een zet doet, haalt een Python-script op de Raspberry Pi deze op via de Chess.com API. De arm voert vervolgens de fysieke zet uit. Wanneer de speler zelf een zet doet op het bord, wordt deze herkend via NFC en doorgestuurd naar Chess.com.
Technische werking in het kort
- Schaakstukken hebben unieke NFC-tags
- De magnetische arm beweegt in een X/Y-grid en tilt stukken verticaal op
- De Raspberry Pi bestuurt de arm via Python
- De zetten worden opgehaald of verstuurd via de Chess.com API
Voorbeeldscript
<syntaxhighlight lang=\"python\"> import chess import chess.engine import requests from time import sleep
- Simpel voorbeeld: haal zet op van Chess.com API
def get_last_move(game_id):
url = f\"https://api.chess.com/pub/game/{game_id}\" response = requests.get(url) data = response.json() return data['moves'].split()[-1]
- Placeholder: zet motor aan om stuk van A2 naar A4 te verplaatsen
move = get_last_move('game-id-hier') if move == 'a2a4':
print(\"Verplaats pion van A2 naar A4\") # stuur signaal naar mechanische arm
</syntaxhighlight>
Bouwplan en tijdlijn
Fase 1 – Voorbereiding en ontwerp (week 1–2)
- Ontwerp van schaakstukken in CAD
- Grid- en mechaniekconcept uitwerken
- Houtselectie
- Planning
Fase 2 – 3D-printen en afwerking (week 3–4)
- Printen in PLA
- Schuren, primen, schilderen, polijsten
- NFC-tags bevestigen
Fase 3 – Bordconstructie (week 5–6)
- Hout zagen en frezen
- Gridstructuur maken
- Schaakvlak ontwerpen met inlay/gravure
- Verlijmen en lakken
Fase 4 – Mechanische arm (week 7–8)
- Opbouw arm met servo’s/stappenmotoren
- Testen op X/Y/Z-beweging
- Kalibratie
Fase 5 – Software & Raspberry Pi (week 9–10)
- Python-scripts schrijven
- NFC-lezer integreren
- Chess.com koppeling
- Logging en foutafhandeling
Fase 6 – Eindtest en integratie (week 11–12)
- Volledige systeemtest
- Test met Chess.com en lokale AI
- Fine-tuning
- Optionele toevoegingen zoals LEDs en geluid
Randvoorwaarden
| Component | Specificatie/Versie | Toelichting |
|---|---|---|
| Raspberry Pi | Raspberry Pi 4 Model B (4GB) | Voor besturing en scripts |
| OS/software | Raspberry Pi OS 64-bit, Python 3.11 | Voor API-koppeling en motorsturing |
| NFC-lezer | PN532 module via I2C | Voor uitlezen van schaakstukken |
| NFC-tags | NTAG213 of NTAG215 | Unieke ID's per stuk |
| Motoren | NEMA 17 + A4988 drivers | X/Y-beweging van arm |
| Servo (Z-as) | SG90 of MG995 | Verticaal optillen van stukken |
| Magneet | Neodymium 6x3 mm | Voor stukkoppeling |
| 3D-printer | Bambu Lab P1P of gelijkwaardig | Printen van stukken |
| Filament | PLA+ | Beter afwerkbaar dan standaard PLA |
| Houtsoorten | Mahonie, esdoorn, walnoot | Visueel contrast op het bord |
| Gereedschap | Cirkelzaag, schuurmachine, graveermachine | Voor houtbewerking en afwerking |
| Verf & lak | Fillerprimer, acrylverf, houtlak | Voor professionele afwerking |
| Lijm & klemmen | Houtlijm, klemmen | Voor bordconstructie |
| Meetgereedschap | Geodriehoek, schuifmaat | Nauwkeurige plaatsing |
| Internet | WiFi of Ethernet | Voor communicatie met Chess.com |
Projectleiding
Het project wordt geleid door 0ffset_0x52, beter bekend als UEV52. Wie wil bijdragen aan dit project, kan contact opnemen via de SignalChat of zich melden in het RandomData Mattermost-kanaal.
Toekomstige uitbreidingen
- Lokale AI met Stockfish
- LEDs voor visuele feedback
- Geluid bij schaak/mat
- OLED-display voor zettennotatie
- Spraakbesturing of remote multiplayer
Achtergrond en inspiratie
Het originele concept van de Mechanical Turk werd in 1770 gebouwd door Wolfgang von Kempelen. Waar toen een menselijke schaakmeester verborgen zat om het spel te sturen, werkt deze moderne versie volledig transparant en digitaal. Het project combineert kunst, techniek en nostalgie tot een interactief schaakplatform.