Innehållsförteckning:

Arduino och Touchpad Tic Tac Toe: 8 steg (med bilder)
Arduino och Touchpad Tic Tac Toe: 8 steg (med bilder)

Video: Arduino och Touchpad Tic Tac Toe: 8 steg (med bilder)

Video: Arduino och Touchpad Tic Tac Toe: 8 steg (med bilder)
Video: Arduino Equilibri Impulsem la Robòtica 2024, September
Anonim
Arduino och pekplatta Tic Tac Toe
Arduino och pekplatta Tic Tac Toe

Eller en övning i in- och utmatningsmultiplexering och att arbeta med bitar. Och ett bidrag till Arduino -tävlingen.

Detta är en implementering av ett tic tac toe -spel med en 3x3 -uppsättning tvåfärgade lysdioder för en display, en enkel resistiv pekplatta och en Arduino för att knyta ihop allt. För att se hur det fungerar, kolla in videon: Vad detta projekt kräver: Delar och förbrukningsvaror Ett perf-kort (eller bandkort) Nio tvåfärgade lysdioder, vanlig katod Nio identiska motstånd, i intervallet 100-220 ohm Sex identiska motstånd, i 10kohm - 500kohm intervall En enda polig, dubbelkastningsbrytare Ett gäng huvudstiften Ett gäng elektriska trådar Ett litet fyrkantigt ark av transparent akryl, ~ 1 mm tjock, 8 cm på sidan Klar klibbig tejp Värmekrymp (tillval) Allt ovan är ganska vanliga artiklar, bör den totala kostnaden inte överstiga USD $ 20. Verktyg En Arduino -installation (Arduino Duemilanove, Arduino IDE, dator, USB -kabel) Vanliga elektriska verktyg (multimeter, lödlödpistol, trådklämmor, trådskärare) Allt som Arduino -relaterat kan vara finns på https://www.arduino.cc. På med bygget!

Steg 1: Anslut LED -matrisen

Anslutning av LED -matrisen
Anslutning av LED -matrisen
Anslutning av LED -matrisen
Anslutning av LED -matrisen

För att en LED ska tändas måste båda dess ledningar vara anslutna. Om vi skulle ägna ett par stift till var och en av de 18 lysdioderna (9 röda, 9 gröna), skulle vi snabbt ta slut på stiften på Arduino. Men med multiplexering kommer vi att kunna adressera alla lysdioder med bara 9 stift! Lysdioderna är grupperade i trekolonner och deras katoder grupperas i rader om sexor. Genom att ställa in en särskild anodlinje hög och en särskild katodlinje låg och med hög impedans på alla andra anod- och katodlinjer kan vi välj vilken lysdiod vi vill tända, eftersom det bara finns en möjlig väg som strömmen kan ta. Till exempel, i den andra figuren, när den gröna anoden är 1 linje hög och katoden 1 linje låg, tänds den nedre vänstra gröna lysdioden. Den aktuella sökvägen i detta fall visas med blått. Men vad händer om du vill tända mer än en lysdiod på olika linjer? Vi kommer att använda visionens uthållighet för att uppnå detta. Genom att välja par LED -linjer mycket snabbt, ger det en illusion att alla valda lysdioder lyser samtidigt.

Steg 2: LED -matrislayout

LED -matrislayout
LED -matrislayout
LED -matrislayout
LED -matrislayout

Kretsschemat nedan visar hur lysdioderna är fysiskt anslutna (G1-G9: gröna lysdioder, R1-R9: röda lysdioder). Detta diagram är för enstaka röda och gröna lysdioder, om du använder tvåfärgade vanliga katodröda/gröna lysdioder finns det bara ett katodben per rött/grönt par som du måste koppla upp. De röda och gröna anodlinjerna går in i PWM -stiften av Arduino (stift 3, 5, 6, 9, 10, 11 på Duemilanove), så att vi kan få effekter som blekning senare. Katodledningarna går in i stift 4, 7 och 8. Var och en av katod- och anodledningarna har 100 ohm motstånd för skydd.

Steg 3: Adressering av LED -matrisen

För tic tac toe -koden måste vi kunna lagra följande information om lysdioderna: - om en lysdiod lyser eller inte - om den lyser, om den är röd eller grön Ett sätt att göra detta är att lagra tillståndet i en 9-cellars matris med tre siffror för att representera tillståndet (0 = av, 1 = röd på, 2 = grön på). Varje gång vi behöver kontrollera statusen för lysdioden, till exempel för att kontrollera om det finns ett vinstvillkor, måste vi cykla genom matrisen. Detta är en fungerande metod, men ganska klumpig. En mer strömlinjeformad metod skulle vara att använda två grupper om nio bitar. Den första gruppen med nio bitar lagrar lysdiodernas på-av-status, och den andra gruppen med nio bitar lagrar färgen. Sedan blir manipulering av LED -tillstånden helt enkelt en fråga om lite aritmetik och förskjutning. Här är ett fungerat exempel. Låt oss säga att vi ritar vårt tic tac toe-rutnät grafiskt och först använder 1: or och 0: or för att representera avstängningsstatus (1 är på, 0 är av): 000 000 = matris med nedre vänstra lysdiod tänd 100 100 010 = matris med diagonal Lysdioder lyser 001 Om vi räknar upp cellerna längst ner till vänster kan vi skriva ovanstående representationer som en serie bitar. I det första fallet skulle det vara 100000000, och i det andra fallet skulle det vara 001010100. Om vi tänker på dessa som binära representationer, kan varje serie bitar kondenseras till ett enda tal (256 i det första fallet, 84 i det andra fallet). Så istället för att använda en array för att lagra matrisens tillstånd kan vi bara använda ett enda nummer! På samma sätt kan vi representera LED: ns färg på samma sätt (1 är röd, 0 är grönt). Låt oss först anta att alla lysdioder är tända (så på-av-status representeras av 511). Matrisen nedan kommer då att representera färgtillståndet för lysdioderna: 010 grön, röd, grön 101 röd, grön, röd 010 grön, röd, grön Nu när vi visar LED -matrisen måste vi bara bläddra igenom var och en av bitarna, först i på-av-läge och sedan i färgläge. Låt oss till exempel säga att vårt på-av-tillstånd är 100100100, och färgtillståndet är 010101010. Här är vår algoritm för att lysa upp LED-matrisen: Steg 1. Gör en bitvis tillägg av på-av-tillståndet med en binär 1 (dvs bit maskering). Steg 2. Om det är sant lyser lysdioden. Gör nu ett bitvis tillägg av färgtillståndet med en binär 1. Steg 3. Om det är sant, tänd den röda lysdioden. Tänd den gröna lysdioden om den är falsk. Steg 4. Växla både på-av-läge och färgtillstånd, en bit åt höger (dvs bitskiftning). Steg 5. Upprepa steg 1 - 4 tills alla nio bitarna har lästs. Observera att vi fyller matrisen bakåt - vi börjar med cell 9 och går sedan tillbaka till cell 1. På -av- och färgtillstånden lagras också som en osignerad heltalstyp (word) istället för en signerad heltalstyp. Det beror på att vid bitskiftning, om vi inte är försiktiga, kan vi oavsiktligt ändra variabelns tecken. Koden bifogas LED -matrisen.

Steg 4: Konstruera pekplattan

Konstruera pekplattan
Konstruera pekplattan
Konstruera pekplattan
Konstruera pekplattan
Konstruera pekplattan
Konstruera pekplattan
Konstruera pekplattan
Konstruera pekplattan

Pekplattan är konstruerad av ett ark tunn tunn akryl, tillräckligt stor för att kunna läggas över LED -matrisen. Tejpa sedan ner rad- och kolumnledningarna på akrylarket med klar tejp. Klar tejp används också som isolerande distans mellan trådarna, vid korsningarna. Var noga med att använda rena verktyg för att förhindra att fingerfett hamnar på tejpens klibbiga sida. Fingeravtrycksfläckar ser inte bara fula ut, utan gör tejpen mindre klibbig. Klipp av ena änden av var och en av linjerna och löd den andra änden till en längre tråd. Löd ett motstånd i linje med ledningarna innan du löds på kontakter. Motstånden som används här är 674k, men alla värden mellan 10k och 1M bör vara fina. Anslutningarna till Arduino görs med de 6 analoga stiften, med stift 14-16 anslutna till trådnätsraderna och stift 17-19 anslutna till kolumnerna.

Steg 5: Pekplattan - hur det fungerar

Pekplattan - hur det fungerar
Pekplattan - hur det fungerar
Pekplattan - hur det fungerar
Pekplattan - hur det fungerar

Precis som vi använde en tvärstångsmultiplexer för att sätta upp en LED -matris med minimala stift, kan vi använda en liknande tvärstångsmultiplexer för att skapa en beröringssensormatris, som vi sedan kan använda för att aktivera lysdioderna. Konceptet för denna pekplatta är enkelt. Det är i huvudsak ett trådnät, med tre nakna trådar som körs i rader och tre nakna trådar som löper i kolumner ovanför raderna. Vid varje skärningspunkt finns en liten isoleringskvadrat som hindrar de två trådarna från att vidröra varandra. Ett finger som vidrör korsningen kommer i kontakt med båda trådarna, vilket resulterar i ett enormt, men ändligt motstånd mellan de två trådarna. En liten, men detekterbar, ström kan därför få flödet från en tråd till nästa, via fingret. För att avgöra vilken korsning som trycktes användes följande metod: Steg 1: Ställ in alla kolumnlinjer till UTGÅNG LÅG. Steg 2: Ställ radlinjerna till INPUT, med de interna pulserna aktiverade. Steg 3: Ta en analog avläsning på varje radrad tills värdet sjunker under ett givet tröskelvärde. Detta visar dig i vilken rad den pressade skärningspunkten är. Steg 4: Upprepa steg 1-3, men nu med kolumnerna som ingångar och raderna som utgångar. Detta berättar vilken kolumn den pressade skärningspunkten är. För att minimera effekterna av brus tas ett antal avläsningar och görs i genomsnitt. Det genomsnittliga resultatet jämförs sedan med en tröskel. Eftersom denna metod bara kontrollerar mot en tröskel är den inte lämplig för att detektera samtidiga tryckningar. Men eftersom tic -tac toe fortsätter i tur och ordning räcker det med att läsa en enda press. Bifogad är en skiss som illustrerar hur pekplattan fungerar. Liksom med LED -matrisen används bitar för att representera vilken skärning som pressades.

Steg 6: Att sätta ihop allt

Att sätta ihop allt
Att sätta ihop allt

Nu när alla enskilda komponenter är klara är det dags att sätta ihop dem alla. Överlägg trådnätet på LED -matrisen. Du kan behöva ordna om stiftnumren i LED -matriskoden för att synkronisera den med trådnätssensorn. Säkra trådnätet på plats med fästelement eller lim efter eget val, och klistra på ett fint spelbräda. Lägg till en omkopplare mellan stift 12 och marken på Arduino. Denna omkopplare är för att växla mellan 2 -spelarläge och 1 -spelarläge (mot mikrokontrollern).

Steg 7: Programmering av Tic Tac Toe

Koden för spelet bifogas. Låt oss först bryta ner tic -tac toe -spelet i dess olika steg, i tvåspelarläget: Steg 1: Spelare A väljer en ofylld cell genom att röra vid en korsning. Steg 2: Lysdioden för den cellen tänds med färgen A. Steg 3: Kontrollera om spelare A har vunnit. Steg 4: Spelare B väljer en ofylld cell. Steg 5: Lysdioden för den cellen lyser med färg B. Steg 6: Kontrollera om spelare B har vunnit. Steg 7: Upprepa 1-6 tills det finns ett vinstvillkor, eller om alla celler är fyllda. Läsning av cellerna: Programmet går mellan att läsa rutnätet och visa LED-matrisen. Så länge rutnätssensorn inte registrerar ett värde som inte är noll, fortsätter den här slingan. När en korsning trycks in lagras den pressade variabelns position för den tryckta cellen. Kontrollerar om cellen är ofylld: När en positionsavläsning erhålls (variabel pressad) jämförs den med den aktuella cellstatus (lagrad i variabeln GridOnOff) med ett bitvis tillägg. Om den tryckta cellen inte är fylld, fortsätt sedan med att tända lysdioden, annars återgå till att läsa cellerna. Markera färgerna: En boolsk variabel, Turn, används för att spela in vems tur det är. LED -färgen som väljs när en cell väljs bestäms av denna variabel, som växlar varje gång en cell väljs.). Två bitvisa tillägg används för att jämföra en spelares fyllda cellpositioner med vinstvillkoren. Om det finns en match, visar programmet en vinstrutin, varefter det startar ett nytt spel. Kontrollerar om det är oavgjort: När nio varv har spelats in och det fortfarande inte finns något vinstvillkor, är spelet oavgjort. Lysdioderna försvinner sedan och ett nytt spel startas. Omkoppling till ett spelarläge: Om omkopplaren är i på -läge går programmet in i ett spelarläge, där den mänskliga spelaren startar först. I slutet av den mänskliga spelarens tur väljer programmet helt enkelt en slumpmässig cell. Uppenbarligen är detta inte den smartaste strategin!

Steg 8: Anmärkningar och ytterligare förbättringar

Här en video som visar enspelarläget, med programmet som spelar helt slumpmässiga drag: Programmet som visas här är bara en minimal version med bara ben. Många andra saker kan göras med detta: 1) Tända lysdioder tre åt gången Den aktuella koden visar bara en lysdiod samtidigt. Med ledningarna som visas här är det dock möjligt att tända alla lysdioder som är anslutna till en katodledning samtidigt. Så, i stället för att cykla genom alla nio positioner, är allt du behöver göra att bläddra igenom de tre katodlinjerna. 2) Använd avbrott för att visa lysdioderna Beroende på LED -displayrutinen och mängden bearbetning kan lysdioderna visa en viss grad av flimrande. Genom att använda avbrott kan tidpunkterna för lysdioderna styras exakt och skulle leda till en mjukare display.3) En smartare datorspelare Den nuvarande koden tar bara några kb och lämnar en hel del mer för implementeringen av en smartare dator tic tac hoppas du har tyckt om att läsa den här instruerbara så mycket som jag hade kul att arbeta med den!

Rekommenderad: