The Mechanical Turk: Difference between revisions

From Randomdata wiki
Jump to navigation Jump to search
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..."
 
No edit summary
Line 2: Line 2:


== Overzicht ==
== 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.
''The Mechanical Turk'' is een technisch, ambachtelijk en experimenteel schaakbordproject ontwikkeld binnen [[Hackerspace RandomData]]. Het project combineert houtbewerking, 3D-printing, NFC-technologie, robotica en Python-programmering om een fysiek schaakbord te bouwen dat automatisch communiceert met het platform [[Chess.com]].  


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.
De zetten van een online tegenstander worden fysiek uitgevoerd op het bord, en wanneer de speler zelf een fysieke zet doet, wordt deze automatisch naar het online spel verzonden. Het bord maakt gebruik van een gridstructuur met een magnetische arm onder het bord, aangestuurd door een Raspberry Pi. Dit vormt een moderne interpretatie van het gelijknamige schaak-automaton uit 1770, dat destijds een illusie was, maar nu wél daadwerkelijk werkt.


== Beschrijving van het project ==
== Projectleiding ==
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.
Het project wordt geleid door '''0ffset_0x52''', beter bekend als '''UEV52'''. Wie wil bijdragen of deelnemen, kan contact opnemen via de SignalChat of via het Mattermost-kanaal van RandomData.


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.
== Doel van het project ==
Het bouwen van een interactief, fysiek schaakbord dat:
* Zetten van een online tegenstander uitvoert via een mechanische arm
* Fysieke zetten automatisch doorstuurt naar het online schaakspel
* Uitbreidbaar is met AI-functionaliteit, LED-feedback en geluidseffecten
* Zowel technisch uitdagend als esthetisch verfijnd is


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 ==
* Elk schaakstuk bevat een unieke NFC-sticker
* Een magnetische arm onder het bord beweegt via X/Y/Z-assen over een grid
* De arm koppelt magnetisch aan stukken om ze te verplaatsen
* Positieherkenning gebeurt via NFC
* Het geheel wordt bestuurd met een Python-script op een Raspberry Pi
* Integratie met Chess.com vindt plaats via de officiële API
 
== Hardwarecomponenten ==
Hieronder een overzicht van de technische randvoorwaarden en benodigde componenten:
 
{| class=\"wikitable sortable plainrowheaders\" style=\"text-align:left; width:100%;\"
! Component !! Specificatie / versie !! Functie / toelichting
|-
| Raspberry Pi || Model 4B (4GB RAM) || Besturing van het volledige systeem
|-
| Besturingssysteem || Raspberry Pi OS 64-bit || Platform voor aansturing scripts
|-
| Programmeertaal || Python 3.11 || Voor motorcontrole, API-koppeling en NFC-detectie
|-
| NFC-lezer || PN532 (I2C-interface) || Detectie van unieke tags onder stukken
|-
| NFC-tags || NTAG213 of NTAG215 || Voor unieke identificatie van elk stuk
|-
| X/Y-motoren || NEMA 17 stappenmotoren + A4988 drivers || Horizontale beweging van arm
|-
| Z-motor || SG90 of MG995 servo || Optillen van stukken
|-
| Grijpmagneet || Neodymium 6×3 mm || Voor het oppakken van schaakstukken
|-
| Schaakstukken || PLA+ 3D-geprint || Handmatig geschuurd, geverfd en gepolijst
|-
| Schaakbord || Mahonie + walnoot + esdoornhout || Handgemaakt, gelakt, gegraveerd
|-
| Gereedschap || Cirkelzaag, graveermachine, schuurmachine, klemmen || Voor houtbewerking
|-
| Afwerking || Filler primer, acrylverf, lak || Voor visuele en tactiele kwaliteit
|-
| Connectiviteit || WiFi of Ethernet || Voor communicatie met Chess.com
|}


== Technische werking in het kort ==
== Voorbeeldcode ==
* Schaakstukken hebben unieke NFC-tags
Onderstaand fragment laat zien hoe een zet kan worden opgehaald via de Chess.com API en hoe deze wordt vertaald naar een fysieke actie:
* 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\">
<syntaxhighlight lang=\"python\">
import chess
import chess.engine
import requests
import requests
from time import sleep


# Simpel voorbeeld: haal zet op van Chess.com API
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()
     return data['moves'].split()[-1]
     moves = data['moves'].split()
    return moves[-1] if moves else None
 
move = get_last_move('voorbeeld-game-id')


# Placeholder: zet motor aan om stuk van A2 naar A4 te verplaatsen
move = get_last_move('game-id-hier')
if move == 'a2a4':
if move == 'a2a4':
     print(\"Verplaats pion van A2 naar A4\")
     print(\"Verplaats pion van A2 naar A4\")
     # stuur signaal naar mechanische arm
     # hier komt motorsturing
</syntaxhighlight>
</syntaxhighlight>


== Bouwplan en tijdlijn ==
== Bouwfasen en tijdlijn ==


=== Fase 1 – Voorbereiding en ontwerp (week 1–2) ===
=== Fase 1 – Voorbereiding en ontwerp (week 1–2) ===
* Ontwerp van schaakstukken in CAD
* Ontwerpen van schaakstukken in CAD-software
* Grid- en mechaniekconcept uitwerken
* Bepalen van gridlayout en mechaniek
* Houtselectie
* Selectie van houtsoorten en bevestigingsmethodes
* Planning


=== Fase 2 – 3D-printen en afwerking (week 3–4) ===
=== Fase 2 – 3D-printen en afwerking (week 3–4) ===
* Printen in PLA
* Printen van alle stukken met PLA+
* Schuren, primen, schilderen, polijsten
* Schuren, primeren, verven en polijsten
* NFC-tags bevestigen
* NFC-stickers aanbrengen


=== Fase 3 – Bordconstructie (week 5–6) ===
=== Fase 3 – Bordbouw (week 5–6) ===
* Hout zagen en frezen
* Zagen, frezen en lijmen van houten bord
* Gridstructuur maken
* Graveren of inlay van speelvlak
* Schaakvlak ontwerpen met inlay/gravure
* Aanbrengen van beschermlaag (lak)
* Verlijmen en lakken


=== Fase 4 – Mechanische arm (week 7–8) ===
=== Fase 4 – Mechanische arm (week 7–8) ===
* Opbouw arm met servo’s/stappenmotoren
* Montage van stappenmotoren en railsysteem
* Testen op X/Y/Z-beweging
* Ontwikkeling van Z-as-grijper met magneet
* Kalibratie
* Testen van bereik en nauwkeurigheid


=== Fase 5 – Software & Raspberry Pi (week 9–10) ===
=== Fase 5 – Software (week 9–10) ===
* Python-scripts schrijven
* Programmeren van sturing in Python
* NFC-lezer integreren
* Integratie met NFC-lezer en motorcontroller
* Chess.com koppeling
* API-koppeling met Chess.com
* Logging en foutafhandeling


=== Fase 6 – Eindtest en integratie (week 11–12) ===
=== Fase 6 – Eindintegratie en test (week 11–12) ===
* Volledige systeemtest
* Kalibratie van bord en armbeweging
* Test met Chess.com en lokale AI
* Testspellen tegen menselijke en AI-tegenstanders
* Fine-tuning
* Bugfixes, logging, failsafes
* Optionele toevoegingen zoals LEDs en geluid


== Randvoorwaarden ==
== Toekomstige uitbreidingen ==
 
* Lokale AI-opponent via [[Stockfish (chess engine)|Stockfish]]
{| class=\"wikitable\"
* LED-indicatoren voor zetnotificaties
! Component !! Specificatie/Versie !! Toelichting
* Geluidseffecten (bijv. schaak, schaakmat)
|-
* OLED-display voor zettennotatie
| Raspberry Pi || Raspberry Pi 4 Model B (4GB) || Voor besturing en scripts
* Spraakbesturing en ondersteuning voor meerdere fysieke borden
|-
| 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 ==
== Historische inspiratie ==
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.
Het originele concept van de ''Mechanical Turk'' werd in 1770 gebouwd door Wolfgang von Kempelen. Het leek een autonoom schaakspelende automaat, maar er zat in werkelijkheid een menselijke schaakmeester in verstopt. Het moderne project gebruikt deze mythe als inspiratie om juist wél een volledig functioneel autonoom bord te bouwen — transparant, open-source, en verbonden met de hedendaagse digitale wereld.


== Toekomstige uitbreidingen ==
== Zie ook ==
* Lokale AI met Stockfish
* [[Chess.com]]
* LEDs voor visuele feedback
* [[Stockfish (chess engine)]]
* Geluid bij schaak/mat
* [[Raspberry Pi]]
* OLED-display voor zettennotatie
* [[Hackerspace]]
* Spraakbesturing of remote multiplayer
* [[Wolfgang von Kempelen]]


== Achtergrond en inspiratie ==
== Externe links ==
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.
* [https://www.chess.com Chess.com]
* [https://www.randomdata.nl Hackerspace RandomData]

Revision as of 18:59, 3 July 2025

The Mechanical Turk (project)

Overzicht

The Mechanical Turk is een technisch, ambachtelijk en experimenteel schaakbordproject ontwikkeld binnen Hackerspace RandomData. Het project combineert houtbewerking, 3D-printing, NFC-technologie, robotica en Python-programmering om een fysiek schaakbord te bouwen dat automatisch communiceert met het platform Chess.com.

De zetten van een online tegenstander worden fysiek uitgevoerd op het bord, en wanneer de speler zelf een fysieke zet doet, wordt deze automatisch naar het online spel verzonden. Het bord maakt gebruik van een gridstructuur met een magnetische arm onder het bord, aangestuurd door een Raspberry Pi. Dit vormt een moderne interpretatie van het gelijknamige schaak-automaton uit 1770, dat destijds een illusie was, maar nu wél daadwerkelijk werkt.

Projectleiding

Het project wordt geleid door 0ffset_0x52, beter bekend als UEV52. Wie wil bijdragen of deelnemen, kan contact opnemen via de SignalChat of via het Mattermost-kanaal van RandomData.

Doel van het project

Het bouwen van een interactief, fysiek schaakbord dat:

  • Zetten van een online tegenstander uitvoert via een mechanische arm
  • Fysieke zetten automatisch doorstuurt naar het online schaakspel
  • Uitbreidbaar is met AI-functionaliteit, LED-feedback en geluidseffecten
  • Zowel technisch uitdagend als esthetisch verfijnd is

Technische werking

  • Elk schaakstuk bevat een unieke NFC-sticker
  • Een magnetische arm onder het bord beweegt via X/Y/Z-assen over een grid
  • De arm koppelt magnetisch aan stukken om ze te verplaatsen
  • Positieherkenning gebeurt via NFC
  • Het geheel wordt bestuurd met een Python-script op een Raspberry Pi
  • Integratie met Chess.com vindt plaats via de officiële API

Hardwarecomponenten

Hieronder een overzicht van de technische randvoorwaarden en benodigde componenten:

Component Specificatie / versie Functie / toelichting
Raspberry Pi Model 4B (4GB RAM) Besturing van het volledige systeem
Besturingssysteem Raspberry Pi OS 64-bit Platform voor aansturing scripts
Programmeertaal Python 3.11 Voor motorcontrole, API-koppeling en NFC-detectie
NFC-lezer PN532 (I2C-interface) Detectie van unieke tags onder stukken
NFC-tags NTAG213 of NTAG215 Voor unieke identificatie van elk stuk
X/Y-motoren NEMA 17 stappenmotoren + A4988 drivers Horizontale beweging van arm
Z-motor SG90 of MG995 servo Optillen van stukken
Grijpmagneet Neodymium 6×3 mm Voor het oppakken van schaakstukken
Schaakstukken PLA+ 3D-geprint Handmatig geschuurd, geverfd en gepolijst
Schaakbord Mahonie + walnoot + esdoornhout Handgemaakt, gelakt, gegraveerd
Gereedschap Cirkelzaag, graveermachine, schuurmachine, klemmen Voor houtbewerking
Afwerking Filler primer, acrylverf, lak Voor visuele en tactiele kwaliteit
Connectiviteit WiFi of Ethernet Voor communicatie met Chess.com

Voorbeeldcode

Onderstaand fragment laat zien hoe een zet kan worden opgehaald via de Chess.com API en hoe deze wordt vertaald naar een fysieke actie:

<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('voorbeeld-game-id')

if move == 'a2a4':

   print(\"Verplaats pion van A2 naar A4\")
   # hier komt motorsturing

</syntaxhighlight>

Bouwfasen en tijdlijn

Fase 1 – Voorbereiding en ontwerp (week 1–2)

  • Ontwerpen van schaakstukken in CAD-software
  • Bepalen van gridlayout en mechaniek
  • Selectie van houtsoorten en bevestigingsmethodes

Fase 2 – 3D-printen en afwerking (week 3–4)

  • Printen van alle stukken met PLA+
  • Schuren, primeren, verven en polijsten
  • NFC-stickers aanbrengen

Fase 3 – Bordbouw (week 5–6)

  • Zagen, frezen en lijmen van houten bord
  • Graveren of inlay van speelvlak
  • Aanbrengen van beschermlaag (lak)

Fase 4 – Mechanische arm (week 7–8)

  • Montage van stappenmotoren en railsysteem
  • Ontwikkeling van Z-as-grijper met magneet
  • Testen van bereik en nauwkeurigheid

Fase 5 – Software (week 9–10)

  • Programmeren van sturing in Python
  • Integratie met NFC-lezer en motorcontroller
  • API-koppeling met Chess.com

Fase 6 – Eindintegratie en test (week 11–12)

  • Kalibratie van bord en armbeweging
  • Testspellen tegen menselijke en AI-tegenstanders
  • Bugfixes, logging, failsafes

Toekomstige uitbreidingen

  • Lokale AI-opponent via Stockfish
  • LED-indicatoren voor zetnotificaties
  • Geluidseffecten (bijv. schaak, schaakmat)
  • OLED-display voor zettennotatie
  • Spraakbesturing en ondersteuning voor meerdere fysieke borden

Historische inspiratie

Het originele concept van de Mechanical Turk werd in 1770 gebouwd door Wolfgang von Kempelen. Het leek een autonoom schaakspelende automaat, maar er zat in werkelijkheid een menselijke schaakmeester in verstopt. Het moderne project gebruikt deze mythe als inspiratie om juist wél een volledig functioneel autonoom bord te bouwen — transparant, open-source, en verbonden met de hedendaagse digitale wereld.

Zie ook