Indholdsfortegnelse:
- Trin 1: Hvad er et problem med genkendelse af figurer, og hvordan jeg løste det
- Trin 2: Sådan fungerer tingene
- Trin 3: Værktøjer og komponenter
- Trin 4: Skemaer (Fritzing)
- Trin 5: Behandl
- Trin 6: Nogle fotos og videoer fra forskellige stadier
- Trin 7: Kildekode
Video: 4x4 demo af et elektronisk skakbræt/ med Arduino Mega + RFID-læser + Hall-effekt sensorer: 7 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
Hej beslutningstagere, Jeg er Tahir Miriyev, 2018 uddannet fra Middle East Technical University, Ankara/ Tyrkiet. Jeg tog hovedfag i anvendt matematik, men jeg elskede altid at lave ting, især når det involverede håndarbejde med elektronik, design og programmering. Takket være et unikt kursus om prototyper, der tilbydes på vores afdeling for industrielt design, fik jeg en chance for at lave noget virkelig interessant. Projektet kan behandles som et termoprojekt, der varede i et helt semester (4 måneder). Eleverne fik til opgave at finde en kreativ tilgang til at designe allerede eksisterende produkter/demoer og realisere deres ideer ved hjælp af Arduino mikrokontrollere og sensorer. Jeg tænkte på skak, og efter at have foretaget nogle undersøgelser af vellykkede projekter, bemærkede jeg, at beslutningstagere i tidligere projekter stort set brugte færdige skakmotorer (hvor alle træk i hver figur var programmeret i kernen) sammen med Raspberry Pi, nogle MUX er, LED'er og sivkontakter. I mit projekt besluttede jeg mig dog for at slippe af med enhver ekstern software med hensyn til en skakmotor og finde en kreativ løsning på figurgenkendelsesproblemet ved hjælp af RFID-læser, Hall-effekt sensorer og Arduino Mega.
Trin 1: Hvad er et problem med genkendelse af figurer, og hvordan jeg løste det
For at sige det enkelt, antag at du har et skakbræt med en "hjerne" = mikrokontroller, og du skal få dit bræt til at forstå, hvilken figur du havde i din hånd, og hvor du har placeret det. Dette er problemet med figurgenkendelse. Løsningen på dette problem er triviel, når du har en skakmotor med alle brikker stående på deres oprindelige positioner på brættet. Inden jeg forklarer, hvorfor det er sådan, lad mig komme med nogle bemærkninger.
For dem, der er begejstrede for, hvordan tingene fungerer her, skal jeg præcisere, hvorfor vi har brug for rørskifter (eller i mit tilfælde brugte jeg Hall-effekt sensorer): hvis du placerer en magnet under hvert stykke og henter det fra en firkant på tavlen (forudsat at der er en sivkontakt under hver firkant) på grund af magnetfeltets eksistens/ikke -eksistens over sensoren, kan du få din controller til at forstå, om der står/ikke er et stykke på pladsen. Det fortæller dog stadig ikke mikrokontroller noget om præcis hvilket stykke der står på pladsen. Det fortæller kun, at der er/ikke et stykke på en firkant. På dette tidspunkt står vi ansigt til ansigt med et figurgenkendelsesproblem, som kan løses ved hjælp af en skakmotor, hvor alle brikker placeres på deres startpositioner, når skakspillet starter. På denne måde "ved" mikrokontroller, hvor hvert stykke står lige fra begyndelsen, med alle adresser fast i hukommelsen. Ikke desto mindre giver dette os en enorm begrænsning: du kan ikke vælge, lad os sige, et vilkårligt antal stykker og placere dem tilfældigt hvor som helst på brættet og begynde at analysere spillet. Du skal altid starte forfra, alle brikker skulle oprindeligt være på brættet, da dette er den eneste måde for mikrokontrolleren at spore deres placeringer, når du løftede et stykke og placerede på en anden firkant. I det væsentlige var dette det problem, jeg lagde mærke til og besluttede mig for at arbejde hen imod.
Min løsning var ganske enkel, selvom den var kreativ. Jeg placerede en RFID -læser på forsiden af et bræt. I mellemtiden vedhæftede jeg ikke kun en magnet under stykker, men også et RFID -mærke, hvor hvert stykke havde et unikt ID. Derfor, før du placerer en figur på en ønsket firkant, kan du først holde stykket tæt på RFID -læseren og lade det læse ID'et, identificere stykket, gemme det i hukommelsen, og derefter kan du placere det, hvor du vil. I stedet for at bruge reed switches brugte jeg for at forenkle kredsløbets design hall-effekt sensorer, der fungerer på samme måde, med den eneste forskel at sende 0 eller 1 til en mikrokontroller som digitale data, hvilket betyder "der er" eller "der er ikke" noget stykke på henholdsvis pladsen. Jeg tilføjede også LED'er (desværre ikke af samme farve, havde ikke dem), så når du løfter stykket, lyser alle firkantede steder, hvor et løftet stykke kan placeres. Tænk på det som en uddannelsesmæssig praksis for skakelever:)
Endelig vil jeg gerne bemærke, at på trods af at jeg brugte flere teknikker, forbliver projektet enkelt og forståeligt, ikke dybt gennemarbejdet eller for kompliceret. Jeg havde ikke tid nok til at fortsætte med 8x8 skakbræt (også fordi 64 hall-effektsensorer er dyre i Tyrkiet, jeg dækkede alle udgifter i forbindelse med projektionen), derfor lavede jeg en 4x4 demoversion med kun to stykker testet: Bonde og Dronning. I stedet for at bruge en skakmotor skrev jeg en kildekode til Arduino, som genererer alt, hvad du kan se i videoen herunder.
Trin 2: Sådan fungerer tingene
Inden vi går over til den trinvise forklaring på, hvordan projektet blev udført, tror jeg, at det ville være bedre at se en illustrativ video og få en intuitiv ide om, hvad jeg taler om.
Note #1: en af de røde lysdioder (først i rækken/ fra venstre mod højre) brændte ud, ligegyldigt.
Note #2: Selvom den er meget udbredt, kan jeg fra min erfaring sige, at RFID -teknologien ikke er den bedste idé at bruge i DIY -applikationer (selvfølgelig hvis du har alternativer). Inden alt fungerede, lavede jeg mange forsøg med at placere skakbrikker tæt på læseren og vente, indtil det korrekt læser ID'et. Seriel port bør konfigureres til det, fordi måden RFID -læser læser id'et på, er bare en hovedpine. Man bør prøve sig selv for at forstå problemet. Hvis du har brug for mere hjælp, kan du sende mig en mail ([email protected]) eller tilføje på skype (tahir.miriyev9r1), så vi kan planlægge en samtale og diskutere tingene i detaljer, jeg vil forklare alt grundigt.
Trin 3: Værktøjer og komponenter
Her er listen over alle de værktøjer, jeg brugte til projektet: Elektroniske komponenter:
- Brødbræt (x1)
- Omnidirektionel A1126LUA-T (IC-1126 SW OMNI 3-SIP ALLEGRO) Hall effekt sensorer (x16)
- Grundlæggende 5 mm lysdioder (x16)
- Jumper ledninger
- 125 kHz RFID -læser og antenne (x1)
- Arduino Mega (x1)
- RFID 3M -tags (x2)
Andre materialer:
- Plexiglas
- Blankt papir
- korte planker (træ)
- Akrylmaling (mørkegrøn og creme) x2
- Tyndt karton
- 10 mm runde magneter (x2)
- Pante- og dronningstykker
- Loddejern og loddematerialer
Trin 4: Skemaer (Fritzing)
Skemaer er lidt komplicerede, jeg ved det, men ideen burde være klar. Det var første gang jeg brugte Fritzing (anbefales i øvrigt stærkt), sandsynligvis kunne forbindelser trækkes mere præcist. Under alle omstændigheder noterede jeg alt inde i skemaerne. Bemærk: Jeg kunne ikke finde den nøjagtige model af RDIF Reader blandt komponenter i Fritzings database. Den model, jeg brugte, er 125Khz RFID -modul - UART. Du kan finde vejledninger på Youtube om, hvordan du indstiller dette modul med Arduino.
Trin 5: Behandl
Tid til at forklare, hvordan tingene blev til. Følg venligst den trinvise beskrivelse:
1. Tag en 21x21 cm pap, samt noget ekstra pap til at skære og lime væggene på den øverste del af brættet, for at lave 16 firkanter med A B C D 1 2 3 4 opregnet. Da pap er tynd, kan du stikke 16 hall-effekt sensorer i hver firkant, med 3 ben hver og 16 LED'er med 2 ben hver.
2. Når du har indstillet komponenter, skal du lodde lidt, for at lodde ben af Hall-effekt sensorer og LED'er til jumperwires. På dette tidspunkt vil jeg anbefale at vælge farvede ledninger på en smart måde, så du ikke bliver forvirret med + og - benene på LED'er, også VCC, GND og PIN ben på Hall -effekt sensorer. Selvfølgelig kan man udskrive et printkort med sensorer og endda WS2812 -type LED'er, der allerede er loddet, men jeg besluttede at holde projektet enkelt og lave noget mere "håndarbejde". På dette tidspunkt er alt, hvad du skal gøre, at forberede ledninger og sensorer, på senere trin efter Fritzing -ordningen kan du se, hvor du skal fastgøre enden af hver ledning. Kort tid vil nogle af dem gå direkte til PIN -koder på Arduino Mega (der er nok af dem på Arduino), andre til brødbrættet og alle GND'er kan loddes til et enkelt stykke ledning (der gør fælles grund), som senere skal tilsluttes GND på Arduino -kortet. En vigtig bemærkning her: Hall effekt sensorer er OMNIDIRECTIONAL, hvilket betyder, at det er ligegyldigt, hvilken pol af en magnet der holdes tæt på sensoren, den sender 0 data, mens der er noget magnetfelt i nærheden og 1 når der ikke er, nemlig magneten er væk (længere end lad os sige 5 sm) fra sensoren.
3. Forbered lignende 21x21 cm pap og fastgør Arduino Mega og et langt brødbræt på det. Du kan også klippe 4 vægge af enhver ønsket højde fra pap igen, og lime dem lodret med de to lag med 21x21 cm firkantede brædder. Følg derefter Fritzing Schematics for at sætte tingene op. Du kan også indstille RFID-læseren, når du er færdig med lysdioder og hall-effektsensorer.
4. Test om alle lysdioder og sensorer fungerer ved at sende signaler ved hjælp af grundlæggende koder. Undgå ikke dette trin, da det vil lade dig teste, om alt fungerer korrekt og gå videre til yderligere konstruktion af brættet.
5. Forbered Pawn and Queen med to magneter med en radius på 10 cm vedhæftet nedenfor samt runde RFID -tags. Senere skal du læse ID'er for disse tags fra Serial Screen på Arduino IDE.
6. Hvis alt fungerer godt, kan du starte hovedkoden og prøve tingene ud!
7 (valgfrit). Du kan udføre noget kunstnerisk arbejde med træ, som vil give din demo en mere naturlig udsigt. Det er op til din vilje og fantasi.
Trin 6: Nogle fotos og videoer fra forskellige stadier
Trin 7: Kildekode
Når vi nu er færdige med en prototype, er vi klar til at bringe den til live med Arduino -koden herunder. Jeg forsøgte at efterlade så mange kommentarer som jeg kunne, for at gøre processen med kodeanalyse forståelig. For at være ærlig kan logikken virke lidt kompleks fra første øjekast, men hvis du graver dybere ned i kodens logik, vil den se mere omfattende ud.
Bemærk: I lighed med det rigtige skakbræt talte jeg abstrakt kvadrater som A1, A2, A3, A4, B1,…, C1,…, D1,.., D4. I koden er det imidlertid ikke praktisk at bruge denne notation. Derfor brugte jeg arrays og repræsenterede firkanter som henholdsvis 00, 01, 02, 03, 10, 11, 12, 13,…, 32, 33.
Tak for din opmærksomhed! Test alt og vær fri til at skrive i kommentarerne om enhver form for fejl, jeg savnede, forbedringer, forslag osv. Ser frem til at høre nogle meninger om projektet. Hvis du har brug for nogen form for hjælp til projektet, kan du sende mig en mail ([email protected]) eller tilføj på skype (tahir.miriyev9r1), så vi kan planlægge en samtale og diskutere ting i detaljer. Held og lykke!