Sadržaj:

Arduino i Touchpad Tic Tac Toe: 8 koraka (sa slikama)
Arduino i Touchpad Tic Tac Toe: 8 koraka (sa slikama)

Video: Arduino i Touchpad Tic Tac Toe: 8 koraka (sa slikama)

Video: Arduino i Touchpad Tic Tac Toe: 8 koraka (sa slikama)
Video: Arduino - Tic Tac Toe Game with Touchpad 2024, Novembar
Anonim
Arduino i Touchpad Tic Tac Toe
Arduino i Touchpad Tic Tac Toe

Ili, vježba u ulaznom i izlaznom multipleksiranju i rad s bitovima. I prijava za Arduino takmičenje.

Ovo je implementacija tic tac toe igre koja koristi 3x3 niz dvobojnih LED dioda za ekran, jednostavnu otpornu dodirnu ploču i Arduino da sve poveže. Da biste vidjeli kako to funkcionira, pogledajte video: Što ovaj projekt zahtijeva: Dijelovi i potrošni materijal Jedna ploča (ili trakasta ploča) Devet dvobojnih LED dioda, zajednička katoda Devet identičnih otpornika, u rasponu 100-220 ohma Šest identičnih otpornika, u 10kohm - 500kohm raspon Jedan jednopolni prekidač sa dvostrukim prebacivanjem Gomila igala zaglavlja Hrpa električne žice Jedan mali kvadratni list prozirnog akrila, ~ 1 mm debljine, 8 cm sa strane Čista ljepljiva traka Heatshrinks (opcionalno) Sve gore navedeno su uobičajene stavke, ukupni trošak ne smije prelaziti 20 USD. Alati Jedno Arduino postavljanje (Arduino Duemilanove, Arduino IDE, računalo, USB kabel) Uobičajeni električni alati (multimetar, lemilica za lemljenje, isječci žice, rezač žice) Sve što se odnosi na Arduino može biti naći na https://www.arduino.cc. Nastavite sa izgradnjom!

Korak 1: Ožičenje LED matrice

Ožičenje LED matrice
Ožičenje LED matrice
Ožičenje LED matrice
Ožičenje LED matrice

Da bi LED zasvijetlila, moraju biti spojena oba njegova kabela. Ako bismo posvetili par pinova svakoj od 18 LED dioda (9 crvenih, 9 zelenih), brzo bismo ostali bez pinova na Arduinu. Međutim, s multipleksiranjem, moći ćemo adresirati sve LED diode sa samo 9 pinova! Da bismo to učinili, LED diode su ožičene na prečku, kao što je prikazano na prvoj slici. LED diode su grupirane u trojke, a njihove katode grupirane su u redove šestica. Postavljanjem određene anodne linije visoko, a određene katodne linije niskom i visokom impedansom na svim ostalim anodnim i katodnim linijama, možemo odaberite koju LED diodu želimo upaliti, jer postoji samo jedan mogući put koji struja može proći. Na primjer, na drugoj slici, postavljanjem zelene anode 1 reda visoko, a katode 1 linijom nisko, donja lijeva zelena LED svijetli. Trenutna putanja u ovom slučaju prikazana je plavom bojom. Ali šta ako želite upaliti više od jedne LED diode na različitim linijama? Upotrijebit ćemo upornost vizije da to postignemo. Odabirom parova LED linija vrlo brzo stvara se iluzija da se sve odabrane LED lampice pale u isto vrijeme.

Korak 2: Raspored LED matrice

Raspored LED matrice
Raspored LED matrice
Raspored LED matrice
Raspored LED matrice

Donji dijagram prikazuje kako su LED diode fizički ožičene (G1-G9: zelene LED, R1-R9: crvene LED). Ovaj dijagram je za pojedinačne crvene i zelene LED diode, ako koristite dvobojne crvene/zelene LED katode sa zajedničkom katodom, postoji samo jedna katodna noga po crvenom/zelenom paru koju morate povezati. Crvene i zelene anodne linije idu u PWM pinove Arduina (pinovi 3, 5, 6, 9, 10, 11 na Duemilanove), tako da kasnije možemo imati efekte poput izblijedjenja. Katodne linije idu u pinove 4, 7 i 8. Svaka katodna i anodna linija imaju otpornike od 100 ohma za zaštitu.

Korak 3: Adresiranje LED matrice

Za kvačicu, moramo biti u mogućnosti pohraniti sljedeće informacije o LED diodama: - da li LED svijetli ili ne - ako svijetli, je li crvena ili zelena Jedan način za to je pohraniti stanje u nizu od 9 ćelija, koristeći tri znamenke za predstavljanje stanja (0 = isključeno, 1 = crveno uključeno, 2 = zeleno uključeno). Svaki put kad moramo provjeriti stanje LED diode, na primjer, da provjerimo postoji li uvjet dobitka, morat ćemo se kretati kroz niz. Ovo je izvodljiva metoda, ali prilično nespretna. Racionalizovanija metoda bila bi upotreba dvije grupe od devet bitova. Prva grupa od devet bitova pohranjuje status uključenosti i isključenosti LED dioda, a druga grupa od devet bitova pohranjuje boju. Tada manipulacija LED stanjem jednostavno postaje stvar aritmetike i pomaka. Evo primjera koji je obrađen. Pretpostavimo da grafički nacrtamo svoju mrežu tac tae toe prst, a prvo upotrijebimo 1s i 0s za prikaz statusa uključenosti i isključenosti (1 je uključeno, 0 je isključeno): 000 000 = matrica s donjim lijevim LED-om upaljena 100 100 010 = matrica s dijagonalom LED diode svijetle 001 Ako nabrojimo ćelije dolje lijevo, gornje prikaze možemo zapisati kao niz bitova. U prvom slučaju to bi bilo 100000000, a u drugom slučaju 001010100. Ako o njima razmišljamo kao o binarnim prikazima, tada se svaka serija bitova može sažeti u jedan broj (256 u prvom slučaju, 84 u drugom slučaju). Dakle, umjesto da koristimo niz za spremanje stanja matrice, možemo koristiti samo jedan broj! Slično, možemo prikazati boju LED na isti način (1 je crvena, 0 je zelena). Pretpostavimo prvo da su sve LED diode upaljene (tako da je status uključenosti i isključenosti predstavljen sa 511). Donja matrica tada će predstavljati stanje boje LED dioda: 010 zelena, crvena, zelena 101 crvena, zelena, crvena 010 zelena, crvena, zelena Sada, kada prikazujemo LED matricu, moramo samo proći kroz svaki od bitova, prvo u uključenom-isključenom stanju, a zatim u stanju boje. Na primjer, recimo da je naše stanje uključeno-isključeno 100100100, a stanje boje 010101010. Evo našeg algoritma za osvjetljavanje LED matrice: Korak 1. Učinite bitovno dodavanje stanja uključivanja-isključivanja s binarnim 1 (tj. maskiranje). Korak 2. Ako je tačno, LED lampica svijetli. Učinite sada bitovno dodavanje stanja boje sa binarnim 1. Korak 3. Ako je tačno, upalite crvenu LED diodu. Ako je pogrešno, upalite zelenu LED diodu. Korak 4. Pomaknite stanje uključivanja i isključivanja i stanje boje, jedan bit udesno (tj. Pomak bita). Korak 5. Ponavljajte korake 1 - 4 dok se ne pročita svih devet bitova. Imajte na umu da matricu popunjavamo unatrag - počinjemo s ćelijom 9, pa nastavljamo natrag do ćelije 1. Također, stanja uključenosti i isključenosti i boje pohranjeni su kao nepotpisani cijeli broj (riječ) umjesto s predznačenim cijelim brojem. To je zato što bismo pri pomaku bitova, ako nismo oprezni, mogli nenamjerno promijeniti znak varijable. U prilogu je kôd za osvjetljavanje LED matrice.

Korak 4: Konstrukcija dodirne podloge

Konstrukcija dodirne podloge
Konstrukcija dodirne podloge
Konstrukcija dodirne podloge
Konstrukcija dodirne podloge
Konstrukcija dodirne podloge
Konstrukcija dodirne podloge
Konstrukcija dodirne podloge
Konstrukcija dodirne podloge

Touchpad je napravljen od lima tankog akrila, dovoljno velikog da se prelije preko LED matrice. Zatim zalijepite žice redaka i stupova na akrilnu ploču, koristeći prozirnu traku. Prozirna traka se također koristi kao izolacijski odstojnik između žica, na raskrižjima. Obavezno koristite čiste alate kako biste spriječili da mast prstiju dođe na ljepljivu stranu trake. Mrlje od otisaka prstiju ne samo da izgledaju ružno, već čine i traku manje ljepljivom. Odrežite jedan kraj svake linije, a drugi kraj lemite na dužu žicu. Lemite otpornik u skladu sa žicama, prije lemljenja na konektorima. Otpornici koji se ovdje koriste su 674k, ali bilo koja vrijednost između 10k i 1M trebala bi biti u redu. Priključci na Arduino se izvode pomoću 6 analognih pinova, s pinovima 14-16 spojenim na redove žičane mreže, a pinovi 17-19 spojeni na. kolone.

Korak 5: Dodirna ploča - kako funkcionira

Dodirna ploča - kako to funkcionira
Dodirna ploča - kako to funkcionira
Dodirna ploča - kako to funkcionira
Dodirna ploča - kako to funkcionira

Baš kao što smo koristili poprečni multiplekser za postavljanje LED matrice s minimalnim pinovima, možemo koristiti sličan poprečni multiplekser za postavljanje niza senzora dodira, koje zatim možemo koristiti za aktiviranje LED dioda. Koncept ove dodirne podloge je jednostavan. To je u osnovi žičana mreža, s tri gole žice u nizovima i tri gole žice u kolonama iznad redova. Na svakoj raskrsnici nalazi se mali kvadrat izolacije koji sprječava dodirivanje dviju žica. Prst koji dodiruje raskrižje uspostavit će kontakt s obje žice, što će rezultirati velikim, ali konačnim otporom između dvije žice. Mala struja, ali se može detektirati, stoga može prstom priteći od jedne žice do sljedeće. Da bi se utvrdilo koje je raskrižje pritisnuto, korištena je sljedeća metoda: Korak 1: Postavite sve linije stupaca na OUTPUT LOW. Korak 2: Postavite redove redova na INPUT, s aktiviranim internim dodacima. Korak 3: Očitajte analogno na svakoj liniji reda sve dok vrijednost ne padne ispod zadanog praga. Ovo vam govori u kojem je redu pritisnuta raskrsnica. Korak 4: Ponovite korake 1-3, ali sada sa kolonama kao ulazima i redovima kao izlazima. Ovo vam govori koji je stupac pritisnuti presjek. Da biste smanjili efekte buke, uzima se niz očitanja, a zatim se prosjekuje. Prosječni rezultat se zatim uspoređuje s pragom. Budući da se ova metoda samo provjerava s pragom, nije prikladna za otkrivanje istovremenih pritisaka. Međutim, s obzirom na to da se kartice okreću naizmjenično, dovoljno je čitanje jednog pritiska. U prilogu je skica koja ilustrira način rada dodirne podloge. Kao i LED matrica, bitovi se koriste za predstavljanje raskrsnice koja je pritisnuta.

Korak 6: Sve spojite

Spajanje svega
Spajanje svega

Sada kada su sve pojedinačne komponente gotove, vrijeme je da ih sve spojite. Prekrijte žičanu rešetku na LED matrici. Možda ćete morati promijeniti redoslijed brojeva pinova u LED matričnom kodu da biste ih sinkronizirali sa senzorom žičane mreže. Pričvrstite žičanu rešetku pričvršćivačima ili ljepilima po svom izboru i zalijepite je na lijepu ploču za igru. Dodajte prekidač između pina 12 i mase Arduina. Ovaj prekidač služi za prebacivanje između načina rada za 2 igrača i 1 za igrača (u odnosu na mikrokontroler).

Korak 7: Programiranje Tic Tac Toe

U privitku je kôd za igru. Prvo raščlanimo igru tic tac toe igru na njene različite korake, u načinu za dva igrača: Korak 1: Igrač A odabire nepopunjenu ćeliju dodirom raskrsnice. Korak 2: LED za tu ćeliju svijetliti bojom A. Korak 3: Provjerite je li igrač A pobijedio. Korak 4: Igrač B odabire nepopunjenu ćeliju. Korak 5: LED za tu ćeliju svijetli bojom B. Korak 6: Provjerite je li igrač B pobijedio. Korak 7: Ponavljajte 1-6 dok ne dođe do uvjeta za pobjedu ili ako su sve ćelije popunjene. Čitanje ćelija: Program se petlja između čitanja mreže i prikaza LED matrice. Sve dok senzor mreže ne registrira vrijednost različitu od nule, ova će se petlja nastaviti. Kada se pritisne raskrižje, pritisnuta varijabla sprema položaj pritisnute ćelije. Provjera je li ćelija nepopunjena: Kada se dobije očitanje položaja (varijabla Pressed), uspoređuje se s trenutnim statusom ćelije (pohranjeno u varijabli GridOnOff) koristeći bitovni sabirak. Ako je prešana ćelija nepopunjena, tada nastavite s paljenjem LED diode, u suprotnom se vratite na čitanje ćelija. Promjenjivanje boja: Booleova varijabla Turn koristi se za bilježenje čiji je red. Boja LED -a odabrana pri odabiru ćelije određena je ovom varijablom, koja se izmjenjuje svaki put kada se ćelija odabere. Provjera uvjeta dobitka: Postoji samo 8 mogućih uvjeta dobitka, a oni su pohranjeni kao varijable riječi u nizu (winArray). Dva bitska sabiranja koriste se za upoređivanje igračevih popunjenih pozicija ćelija sa uslovima pobjede. Ako postoji podudarnost, program prikazuje rutinu pobjede, nakon čega započinje novu igru. Provjera uvjeta za neriješeno: Kada je zabilježeno devet zavoja, a još uvijek nema uvjeta za pobjedu, igra je neriješena. LED diode se zatim blijede i započinje nova igra. Prebacivanje na način rada jednog igrača: Ako je prekidač u položaju uključeno, program prelazi u način rada jednog igrača, s tim da prvi počinje igrač. Na kraju poteza ljudskog igrača, program jednostavno odabere nasumičnu ćeliju. Očigledno, ovo nije najpametnija strategija!

Korak 8: Primjedbe i daljnja poboljšanja

Evo videozapisa koji prikazuje način rada za jednog igrača, s programom koji reproducira potpuno nasumične poteze: Ovdje prikazani program je samo minimalna verzija golih kostiju. Mnoge druge stvari se mogu učiniti s ovim: 1) Paljenje tri LED diode odjednomTrenutni kod prikazuje samo jednu LED odjednom. Međutim, pomoću ožičenja prikazanog ovdje, moguće je upaliti sve LED diode spojene na jednu katodnu liniju istovremeno. Dakle, umjesto da se krećete kroz svih devet položaja, sve što trebate učiniti je proći kroz tri katodne linije.2) Koristite prekide za prikaz LED dioda. Ovisno o rutini LED prikaza i količini obrade, LED diode mogu pokazati određeni stupanj treperenje. Korištenjem prekida, vrijeme LED dioda može se precizno kontrolirati i dovesti do glatkog prikaza.3) Pametniji računarski player Trenutni kôd zauzima samo nekoliko kb, ostavljajući prilično više za implementaciju pametnijeg računarskog tic tac -a Nadam se da ste uživali u čitanju ovog uputstva koliko i ja u radu na njemu!

Preporučuje se: