Innholdsfortegnelse:
- Trinn 1: Hva er et figurgjenkjenningsproblem og hvordan jeg løste det
- Trinn 2: Hvordan ting fungerer
- Trinn 3: Verktøy og komponenter
- Trinn 4: Skjematikk (Fritzing)
- Trinn 5: Behandle
- Trinn 6: Noen bilder og videoer fra forskjellige stadier
- Trinn 7: Kildekode
Video: 4x4 demo av et elektronisk sjakkbrett/ med Arduino Mega + RFID-leser + Hall-effekt sensorer: 7 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:23
Hei skapere, Jeg er Tahir Miriyev, 2018 utdannet fra Middle East Technical University, Ankara/ Tyrkia. Jeg tok hovedfag i anvendt matematikk, men jeg har alltid likt å lage ting, spesielt når det innebar litt håndarbeid med elektronikk, design og programmering. Takket være et unikt kurs om prototyping, som tilbys ved vår avdeling for industrielt design, fikk jeg sjansen til å lage noe veldig interessant. Prosjektet kan behandles som et terminprosjekt, som varer i et helt semester (4 måneder). Studentene ble tildelt en oppgave å finne en kreativ tilnærming til å designe allerede eksisterende produkter/demoer og realisere ideene sine ved hjelp av Arduino mikrokontrollere og sensorer. Jeg tenkte på sjakk, og etter å ha forsket litt på vellykkede prosjekter, la jeg merke til at i tidligere prosjekter brukte beslutningstakere i utgangspunktet ferdige sjakkmotorer (hvor alle trekk i hver figur var programmert i kjernen), sammen med Raspberry Pi, noen MUX er, lysdioder og sivbrytere. I prosjektet mitt bestemte jeg meg imidlertid for å kvitte meg med ekstern programvare når det gjelder sjakkmotor, og finne en kreativ løsning for figurgjenkjenningsproblemet ved hjelp av RFID-leser, Hall-effekt-sensorer og Arduino Mega.
Trinn 1: Hva er et figurgjenkjenningsproblem og hvordan jeg løste det
For å si det enkelt, anta at du har et sjakkbrett med en "hjerne" = mikrokontroller, og du må få brettet ditt til å forstå hvilken figur du holdt i hånden og hvor du har plassert den. Dette er problemet med figurgjenkjenning. Løsningen på dette problemet er triviell når du har en sjakkmotor med alle brikkene stående på sine utgangsposisjoner på brettet. Før jeg forklarer hvorfor det er slik, la meg komme med noen kommentarer.
For de som er begeistret for hvordan ting fungerer her, må jeg gjøre en avklaring på hvorfor vi trenger sivbrytere (eller i mitt tilfelle brukte jeg Hall-effekt sensorer): hvis du plasserer en magnet under hvert stykke og henter den fra en firkant på tavlen (forutsatt at det er en sivbryter under hver firkant) på grunn av at det magnetiske feltet over sensoren eksisterer/ikke eksisterer, kan du få kontrolleren til å forstå om det er/ikke er et stykke på torget. Imidlertid forteller den fortsatt ikke mikrokontroller noe om nøyaktig hvilket stykke som står på torget. Det forteller bare at det er/ikke et stykke på en firkant. På dette tidspunktet står vi ansikt til ansikt med et figurgjenkjenningsproblem, som kan løses ved hjelp av en sjakkmotor, med alle brikkene plassert på utgangsposisjonene når sjakkspillet starter. På denne måten "vet" mikrokontroller hvor hvert stykke står helt fra begynnelsen, med alle adresser festet i minnet. Likevel gir dette oss en enorm begrensning: du kan ikke velge, la oss si, et hvilket som helst antall brikker og plassere dem tilfeldig hvor som helst på brettet og begynne å analysere spillet. Du må alltid starte fra begynnelsen, alle brikkene skal være på brettet opprinnelig, da dette er den eneste måten for mikrokontrolleren å spore posisjonene sine når du løftet et stykke og plasserte det på et annet torg. I hovedsak var dette problemet jeg la merke til og bestemte meg for å jobbe mot.
Løsningen min var ganske enkel, selv om den var kreativ. Jeg plasserte en RFID -leser på forsiden av et brett. I mellomtiden festet jeg ikke bare en magnet under stykker, men også en RFID -tag, med hvert stykke en unik ID. Derfor, før du plasserer en figur på en ønsket firkant, kan du først holde stykket nær RFID -leseren og la det lese ID -en, identifisere stykket, lagre det i minnet, og deretter kan du plassere det hvor du vil. I stedet for å bruke sivbrytere, for å forenkle kretsdesignet, brukte jeg også hall-effekt sensorer, som fungerer på samme måte, med den eneste forskjellen på å sende 0 eller 1 til en mikrokontroller som digitale data, som betyr "det er" eller "det er ikke" noen brikke på torget, henholdsvis. Jeg har også lagt til LED -er (dessverre ikke i samme farge, hadde ikke dem), slik at når du løfter stykket, vil alle firkantede steder, der et løftet stykke kan plasseres, lyse. Tenk på det som en pedagogisk praksis for sjakkelever:)
Til slutt vil jeg merke til at til tross for at jeg brukte flere teknikker, er prosjektet fortsatt enkelt og forståelig, ikke dypt utarbeidet eller for komplisert. Jeg hadde ikke nok tid til å fortsette med 8x8 sjakkbrett (også fordi 64 hall-effektsensorer er kostbare i Tyrkia, jeg dekket alle utgifter knyttet til prosjektet), derfor gjorde jeg 4x4 demoversjon med bare to stykker testet: Bonde og Dronning. I stedet for å bruke en sjakkmotor, skrev jeg en kildekode for Arduino, som genererer alt du vil se i videoen nedenfor.
Trinn 2: Hvordan ting fungerer
Før vi går over til den trinnvise forklaringen på hvordan prosjektet ble gjort, tror jeg det ville være bedre å se en illustrerende video og få en intuitiv ide om hva jeg snakker om.
Merknad 1: en av de røde lysdiodene (først i rekken/ fra venstre til høyre) brant ut, ikke noe.
Merknad 2: Selv om den er mye brukt, kan jeg fra min erfaring si at RFID -teknologien ikke er den beste ideen å bruke i DIY -applikasjoner (selvfølgelig hvis du har alternativer). Før alt fungerte, gjorde jeg mange forsøk med å plassere sjakkbrikker nær leseren og vente til den leser ID -en riktig. Seriell port bør settes opp for det fordi måten RFID -leser leser ID -en bare er hodepine. Man bør prøve seg selv for å forstå problemet. Hvis du trenger mer hjelp, kan du sende meg en e -post ([email protected]) eller legge til på skype (tahir.miriyev9r1), slik at vi kan planlegge en samtale og diskutere ting i detaljer. Jeg vil forklare alt grundig.
Trinn 3: Verktøy og komponenter
Her er listen over alle verktøyene jeg brukte til prosjektet: Elektroniske komponenter:
- Brødbrett (x1)
- Omnidireksjonell A1126LUA-T (IC-1126 SW OMNI 3-SIP ALLEGRO) Hall effekt sensorer (x16)
- Grunnleggende 5 mm lysdioder (x16)
- Jumper ledninger
- 125 kHz RFID -leser og antenne (x1)
- Arduino Mega (x1)
- RFID 3M -etiketter (x2)
Andre materialer:
- Plexiglass
- Glanset papir
- korte planker (tre)
- Akrylmaling (mørk grønn og creme) x2
- Tynn papp
- 10 mm runde magneter (x2)
- Pante- og dronningstykker
- Loddejern og loddematerialer
Trinn 4: Skjematikk (Fritzing)
Skjemaer er litt kompliserte, jeg vet, men ideen burde være klar. Det var første gang jeg brukte Fritzing (anbefalt forresten), sannsynligvis kunne forbindelser trekkes mer nøyaktig. Uansett, jeg noterte alt inne i skjematikken. Merk: Jeg fant ikke den eksakte modellen til RDIF Reader blant komponentene i databasen til Fritzing. Modellen jeg brukte er 125Khz RFID -modul - UART. Du kan finne veiledninger på Youtube om hvordan du setter denne modulen med Arduino.
Trinn 5: Behandle
På tide å forklare hvordan ting ble laget. Følg trinn-for-trinn-beskrivelsen:
1. Ta en papp på 21x21 cm, samt litt ekstra papp for å klippe og lime veggene på den øvre delen av brettet, for å lage 16 firkanter med A B C D 1 2 3 4 oppført. Siden papp er tynn, kan du stikke 16 hall-effekt-sensorer i hver firkant, med 3 ben hver og 16 LED-er med 2 bein hver.
2. Etter at du har satt inn komponenter, må du lodde litt, for å lodde ben til hall-effekt-sensorer og LED-er til jumper-ledninger. På dette tidspunktet vil jeg anbefale å velge fargede ledninger på en smart måte, slik at du ikke blir forvirret med + og - benene på LED -er, også VCC-, GND- og PIN -ben til Hall -effektsensorer. Selvfølgelig kan man skrive ut en PCB med sensorer og til og med WS2812 -type LED -er som allerede er loddet, men jeg bestemte meg for å holde prosjektet enkelt og gjøre litt mer "håndarbeid". På dette tidspunktet er alt du trenger å gjøre å forberede ledninger og sensorer. På senere stadier etter Fritzing -opplegget kan du se hvor du skal feste enden av hver ledning. Kort tid vil noen av dem gå direkte til PIN -kodene på Arduino Mega (det er nok av dem på Arduino), andre til brødbrettet og alle GND -er kan loddes til et enkelt stykke ledning (som gjør felles grunn) som senere skal være koblet til GND på Arduino -kortet. En viktig merknad her: Hall -effekt sensorer er OMNIDIRECTIONAL, noe som betyr at det ikke spiller noen rolle hvilken pol på en magnet som vil holdes nær sensoren, den sender 0 data mens det er noe magnetfelt i nærheten og 1 når det ikke er det, nemlig at magneten er borte (lenger enn la oss si 5 sm) fra sensoren.
3. Forbered lignende 21x21 cm papp og fest Arduino Mega og et langt brødbrett på den. Du kan også kutte 4 vegger av ønsket høyde fra papp igjen, og lime dem vertikalt med de to lagene med firkantede brett på 21 x 21 cm. Følg deretter Fritzing Schematics for å sette opp ting. Du kan også stille inn RFID-leseren etter at du er ferdig med lysdioder og hall-effektsensorer.
4. Test om alle lysdioder og sensorer fungerer, ved å sende signaler ved hjelp av grunnleggende koder. Ikke unngå dette trinnet, da det lar deg teste om alt fungerer som det skal og gå videre til videre konstruksjon av brettet.
5. Forbered Pawn and Queen, med to magneter med en radius på 10 cm festet under, samt runde RFID -tagger. Senere må du lese ID -er for disse kodene fra Serial Screen på Arduino IDE.
6. Hvis alt fungerer bra, kan du starte hovedkoden og prøve ting!
7 (valgfritt). Du kan gjøre et kunstnerisk arbeid med tre som vil gi demoen din et mer naturlig syn. Det er opp til din vilje og fantasi.
Trinn 6: Noen bilder og videoer fra forskjellige stadier
Trinn 7: Kildekode
Når vi er ferdige med en prototype, er vi klare til å gi den liv med Arduino -koden nedenfor. Jeg prøvde å legge igjen så mange kommentarer jeg kunne for å gjøre prosessen med kodeanalyse forståelig. For å være ærlig kan logikken virke litt kompleks fra første øyekast, men hvis du graver dypere inn i logikken til koden, vil den se mer omfattende ut.
Merk: I likhet med det virkelige sjakkbrettet numererte jeg abstrakt kvadrater som A1, A2, A3, A4, B1,…, C1,…, D1,.., D4. I koden er det imidlertid ikke praktisk å bruke denne notasjonen. Derfor brukte jeg matriser og representerte firkanter som henholdsvis 00, 01, 02, 03, 10, 11, 12, 13,…, 32, 33.
Takk for din oppmerksomhet! Test alt og vær fri til å skrive i kommentarene om eventuelle feil jeg savnet, forbedringer, forslag osv. Ser frem til å høre noen meninger om prosjektet. Hvis du trenger hjelp til prosjektet, kan du sende meg en e -post ([email protected]) eller legg til på skype (tahir.miriyev9r1), slik at vi kan planlegge en samtale og diskutere ting i detaljer. Lykke til!