Inhoudsopgave:

4x4 demo van een elektronisch schaakbord / met Arduino Mega + RFID-lezer + Hall-effect sensoren - Ajarnpa
4x4 demo van een elektronisch schaakbord / met Arduino Mega + RFID-lezer + Hall-effect sensoren - Ajarnpa

Video: 4x4 demo van een elektronisch schaakbord / met Arduino Mega + RFID-lezer + Hall-effect sensoren - Ajarnpa

Video: 4x4 demo van een elektronisch schaakbord / met Arduino Mega + RFID-lezer + Hall-effect sensoren - Ajarnpa
Video: 4x4 HDMI Matrix Switcher with auto and seamless switching, video wall function and App control 2024, November
Anonim
4x4 demo van een elektronisch schaakbord / met Arduino Mega + RFID-lezer + Hall-effect sensoren
4x4 demo van een elektronisch schaakbord / met Arduino Mega + RFID-lezer + Hall-effect sensoren

Hallo makers, Ik ben Tahir Miriyev, afgestudeerd in 2018 aan de Middle East Technical University, Ankara/Turkije. Ik heb Toegepaste Wiskunde gestudeerd, maar ik vond het altijd al leuk om dingen te maken, vooral als het wat handwerk met elektronica, ontwerpen en programmeren betrof. Dankzij een unieke cursus prototyping, aangeboden op onze afdeling Industrial Design, kreeg ik de kans om iets heel interessants te maken. Het project kan worden behandeld als een Termijnproject, dat een heel semester duurt (4 maanden). Studenten kregen een taak toegewezen om een creatieve benadering te vinden voor het ontwerpen van reeds bestaande producten/demo's en om hun ideeën te realiseren met behulp van Arduino-microcontrollers en sensoren. Ik dacht aan schaken, en na wat onderzoek te hebben gedaan naar succesvolle projecten, merkte ik dat makers in eerdere projecten in principe kant-en-klare schaakengines gebruikten (waarbij alle zetten van elk cijfer in de kern waren geprogrammeerd), samen met Raspberry Pi, een aantal MUX 'es, LED's en reed-schakelaars. In mijn project besloot ik echter om alle externe software in termen van een schaakengine te verwijderen en een creatieve oplossing te vinden voor het figuurherkenningsprobleem, met behulp van RFID-lezer, Hall-effectsensoren en Arduino Mega.

Stap 1: Wat is een probleem met figuurherkenning en hoe heb ik het opgelost?

Wat is een probleem met figuurherkenning en hoe heb ik het opgelost?
Wat is een probleem met figuurherkenning en hoe heb ik het opgelost?

Om het simpel te zeggen, stel dat je een schaakbord hebt met een "brain"=microcontroller, en je moet je bord laten begrijpen welk figuur je in je hand had en waar je het hebt geplaatst. Dit is het probleem van figuurherkenning. De oplossing voor dit probleem is triviaal als je een schaakengine hebt waarbij alle stukken op hun beginpositie op het bord staan. Voordat ik uitleg waarom dat zo is, wil ik eerst een paar opmerkingen maken.

Voor degenen die enthousiast zijn over hoe de dingen hier werken, moet ik een verduidelijking geven over waarom we reed-schakelaars nodig hebben (of in mijn geval gebruikte ik Hall-effect-sensoren): als je een magneet onder elk stuk plaatst en het oppakt van een vakje op het bord (ervan uitgaande dat er onder elk vakje een reed-schakelaar zit) door het wel/niet bestaan van het magnetische veld boven de sensor, kun je je controller laten begrijpen of er wel/niet een stuk op het vakje staat. Het vertelt microcontroller echter nog steeds niets over welk stuk precies op het plein staat. Het vertelt alleen dat er wel/geen stuk op een veld staat. Op dit punt staan we oog in oog met een figuurherkenningsprobleem, dat kan worden opgelost met een schaakengine, waarbij alle stukken op hun oorspronkelijke positie worden geplaatst wanneer het schaakspel begint. Op deze manier "weet" de microcontroller waar elk onderdeel vanaf het begin staat, met alle adressen vast in het geheugen. Dit brengt ons echter een enorme beperking met zich mee: je kunt niet, laten we zeggen, een willekeurig aantal stukken selecteren en ze willekeurig ergens op het bord plaatsen en beginnen met het analyseren van het spel. Je moet altijd vanaf het begin beginnen, alle stukken moeten oorspronkelijk op het bord staan, omdat dit de enige manier is voor de microcontroller om hun locatie te volgen zodra je een stuk hebt opgetild en op een ander veld hebt geplaatst. In wezen was dit het probleem dat ik opmerkte en besloot om naar toe te werken.

Mijn oplossing was vrij eenvoudig, hoewel creatief. Ik plaatste een RFID-lezer aan de voorkant van een bord. Ondertussen heb ik niet alleen een magneet onder stukken bevestigd, maar ook een RFID-tag, waarbij elk stuk een unieke ID heeft. Dus voordat je een figuur op een willekeurig vierkant plaatst, kun je het stuk eerst dicht bij de RFID-lezer houden en het de ID laten lezen, het stuk identificeren, opslaan in het geheugen en vervolgens plaatsen waar je maar wilt. Ook heb ik, in plaats van reed-schakelaars, om het circuitontwerp te vereenvoudigen, hall-effectsensoren gebruikt, die op dezelfde manier werken, met het enige verschil dat ik 0 of 1 naar een microcontroller stuur als digitale gegevens, wat betekent "er is" of "er is geen" stuk op het veld, respectievelijk. Ik heb ook LED's toegevoegd (helaas niet van dezelfde kleur, had er geen), zodat wanneer je het stuk optilt, alle vierkante locaties, waar een opgetild stuk zou kunnen worden geplaatst, oplichten. Zie het als een educatieve oefening voor schakenstudenten:)

Ten slotte wil ik opmerken dat ondanks het feit dat ik verschillende technieken heb gebruikt, het project eenvoudig en begrijpelijk blijft, niet diep uitgewerkt of te ingewikkeld. Ik had niet genoeg tijd om verder te gaan met het 8x8-schaakbord (ook omdat 64 hall-effectsensoren duur zijn in Turkije, heb ik alle kosten met betrekking tot het project gedekt), daarom deed ik een 4x4-demoversie met slechts twee geteste stukken: pion en Koningin. In plaats van een schaakengine te gebruiken, heb ik een broncode voor Arduino geschreven, die alles genereert wat je in de onderstaande video zult zien.

Stap 2: Hoe dingen werken

Image
Image

Voordat we overgaan tot de stapsgewijze uitleg van hoe het project werd uitgevoerd, denk ik dat het beter is om een illustratieve video te bekijken en een intuïtief idee te krijgen van waar ik het over heb.

Opmerking #1: een van de rode LED's (eerste in de rij/van links naar rechts) is doorgebrand, laat maar.

Opmerking #2: hoewel veel gebruikt, kan ik uit mijn ervaring zeggen dat de RFID-technologie niet het beste idee is om te gebruiken in doe-het-zelf-toepassingen (natuurlijk als je alternatieven hebt). Voordat alles werkte, heb ik veel proeven gedaan door schaakstukken dicht bij de lezer te plaatsen en te wachten tot deze de ID correct leest. Daar moet een seriële poort voor worden ingesteld, want de manier waarop de RFID-lezer de ID leest, is gewoon hoofdpijn. Men moet het zelf proberen om het probleem te begrijpen. Als je meer hulp nodig hebt, mail me dan ([email protected]) of voeg skype toe (tahir.miriyev9r1), zodat we een gesprek kunnen plannen en dingen in detail kunnen bespreken, ik zal alles grondig uitleggen.

Stap 3: Gereedschappen en componenten

Gereedschappen en componenten
Gereedschappen en componenten
Gereedschappen en componenten
Gereedschappen en componenten
Gereedschappen en componenten
Gereedschappen en componenten

Hier is de lijst met alle tools die ik voor het project heb gebruikt: Elektronische componenten:

  • Broodplank (x1)
  • Omnidirectionele A1126LUA-T (IC-1126 SW OMNI 3-SIP ALLEGRO) Hall-effectsensoren (x16)
  • Basis 5 mm LED's (x16)
  • Doorverbindingsdraden
  • 125 kHz RFID-lezer en antenne (x1)
  • Arduino Mega (x1)
  • RFID 3M-tags (x2)

Andere materialen:

  • Plexiglas
  • Glanzend papier
  • korte planken (houten)
  • Acrylverf (donkergroen en creme) x2
  • Dun karton
  • 10 mm ronde magneten (x2)
  • Pion en Koningin stukken
  • Soldeerbout en soldeermaterialen

Stap 4: Schema's (Fritzing)

Schema's (Fritzing)
Schema's (Fritzing)

Schema's zijn een beetje ingewikkeld, ik weet het, maar het idee moet duidelijk zijn. Het was de eerste keer dat ik Fritzing gebruikte (een aanrader trouwens), waarschijnlijk konden verbindingen nauwkeuriger worden getekend. Hoe dan ook, ik heb alles in de schema's genoteerd. Opmerking: ik kon het exacte model van RDIF Reader niet vinden tussen componenten in de database van Fritzing. Het model dat ik gebruikte is 125Khz RFID-module - UART. Op Youtube vind je tutorials over het instellen van deze module met Arduino.

Stap 5: Proces

Proces
Proces

Tijd om uit te leggen hoe dingen gemaakt zijn. Volg de stapsgewijze beschrijving:

1. Neem een karton van 21x21 cm en wat extra karton om de wanden van het bovenste deel van het bord te snijden en te lijmen, om 16 vierkanten te maken met A B C D 1 2 3 4 opgeteld. Omdat karton dun is, kunt u in elk vierkant 16 hall-effectsensoren plakken, elk met 3 poten en 16 LED's met elk 2 poten.

2. Nadat je componenten hebt ingesteld, moet je wat solderen, poten van Hall-effect-sensoren en LED's aan jumperdraden solderen. Op dit punt zou ik aanraden om op een slimme manier gekleurde draden te selecteren, zodat je niet in de war raakt met de + en - poten van LED's, ook VCC, GND en PIN-poten van Hall-effect-sensoren. Je zou natuurlijk een PCB kunnen printen met sensoren en zelfs WS2812 type LED's die al zijn gesoldeerd, maar ik besloot het project simpel te houden en wat meer "handwerk" te doen. Op dit punt hoeft u alleen maar snoeren en sensoren voor te bereiden. In latere stadia kunt u na het Fritzing-schema zien waar u het uiteinde van elke draad moet bevestigen. Binnenkort gaan sommige rechtstreeks naar de pincodes op de Arduino Mega (er zijn er genoeg op de Arduino), andere naar het breadboard en alle GND's kunnen aan een enkel stuk snoer worden gesoldeerd (waardoor een gemeenschappelijke basis ontstaat) die later moet worden aangesloten op de GND op het Arduino-bord. Een belangrijke opmerking hierbij: Hall-effectsensoren zijn OMNIDIRECTIONEEL, wat betekent dat het niet uitmaakt welke pool van een magneet dicht bij de sensor wordt gehouden, het zal 0 gegevens verzenden terwijl er een magnetisch veld in de buurt is en 1 wanneer dat niet het geval is, namelijk, magneet is weg (verder dan laten we zeggen 5 cm) van de sensor.

3. Bereid gelijkaardig karton van 21x21 cm voor en bevestig de Arduino Mega en een lang breadboard erop. Je kunt ook weer 4 wanden van elke gewenste hoogte uit karton snijden, en deze verticaal verlijmen met die twee lagen vierkante platen van 21x21 cm. Volg dan Fritzing Schematics om dingen op te zetten. Je kunt de RFID-lezer ook instellen nadat je klaar bent met LED's en Hall-effect sensoren.

4. Test of alle LED's en sensoren werken, door signalen te sturen met behulp van basiscodes. Vermijd deze stap niet, want dan kunt u testen of alles naar behoren werkt en kunt u doorgaan met de verdere constructie van het bord.

5. Bereid pion en koningin voor, met twee magneten met een straal van 10 cm eronder, evenals ronde RFID-tags. Later moet u de ID's van die tags van Serial Screen op Arduino IDE lezen.

6. Als alles goed werkt, kun je de hoofdcode starten en dingen uitproberen!

7 (optioneel). U kunt wat artistiek werk met hout doen, waardoor uw demo een natuurlijker beeld krijgt. Dat is aan uw wil en verbeelding.

Stap 6: Enkele foto's en video's uit verschillende stadia

Image
Image
Enkele foto's en video's uit verschillende stadia
Enkele foto's en video's uit verschillende stadia
Enkele foto's en video's uit verschillende stadia
Enkele foto's en video's uit verschillende stadia

Stap 7: Broncode

Broncode
Broncode

Als we nu klaar zijn met een prototype, zijn we klaar om het tot leven te brengen met de onderstaande Arduino-code. Ik heb geprobeerd zoveel mogelijk opmerkingen achter te laten om het proces van code-analyse begrijpelijk te maken. Om eerlijk te zijn, lijkt de logica op het eerste gezicht misschien een beetje ingewikkeld, maar als je dieper in de logica van de code graaft, zal het er uitgebreider uitzien.

Opmerking: net als bij het echte schaakbord, heb ik vierkanten abstract genummerd als A1, A2, A3, A4, B1, …, C1, …, D1,.., D4. In de code is het echter niet praktisch om deze notatie te gebruiken. Daarom gebruikte ik arrays en stelde ik vierkanten voor als respectievelijk 00, 01, 02, 03, 10, 11, 12, 13, …, 32, 33.

Dank u voor uw aandacht! Test alles en wees vrij om in de opmerkingen te schrijven over eventuele fouten die ik heb gemist, verbeteringen, suggesties enz. Ik kijk ernaar uit om wat meningen over het project te horen. Als je hulp nodig hebt bij het project, mail me dan ([email protected]) of voeg Skype toe (tahir.miriyev9r1), zodat we een gesprek kunnen plannen en dingen in detail kunnen bespreken. Veel succes!