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, Lipanj
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 natječaj.

Ovo je implementacija igre tic tac toe koja koristi 3x3 niz dvobojnih LED dioda za zaslon, jednostavnu otpornu dodirnu podlogu i Arduino za povezivanje svega. Da biste vidjeli kako to funkcionira, pogledajte video: Što ovaj projekt zahtijeva: Dijelovi i potrošni materijal Jedna perf 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č s dvostrukim prebacivanjem Gomila zatikača zaglavlja Hrpa električne žice Jedan mali kvadratni list prozirnog akrila, ~ 1 mm debljine, 8 cm sa strane Prozirna ljepljiva traka Hladnjake (po izboru) Sve gore navedeno su uobičajene stavke, ukupni trošak ne smije prelaziti 20 USD. Alati Jedno postavljanje Arduina (Arduino Duemilanove, Arduino IDE, računalo, USB kabel) Uobičajeni električni alati (multimetar, pištolj za lemljenje, žice, rezač žice) Sve što je povezano s Arduinom 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, sve LED diode ćemo moći adresirati 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 impedancijom na svim ostalim anodnim i katodnim vodovima, možemo odaberite LED koji ž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 linije katode 1 nisko, donja lijeva zelena LED svijetli. Trenutni put u ovom slučaju prikazan je plavom bojom. No što 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 sve odabrane LED diode svijetle 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 diode sa uobičajenom 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, potrebno je moći pohraniti sljedeće informacije o LED -ima: - je li LED svijetlila ili ne - ako svijetli, je li crvena ili zelena Jedan od načina 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 kružiti kroz niz. Ovo je izvediva metoda, ali prilično nespretna. Racionalnija metoda bila bi korištenje dvije grupe od devet bitova. Prva skupina od devet bitova pohranjuje status uključenosti i isključenosti LED dioda, a druga skupina od devet bita sprema boju. Tada manipuliranje LED stanjem jednostavno postaje stvar aritmetike i pomaka. Evo primjera koji je obrađen. Recimo da grafički nacrtamo svoju mrežu tac-toe prst, a prvo upotrijebimo 1s i 0s za prikaz statusa uključenosti-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 svaki niz 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 (pa je status uključenosti i isključenosti predstavljen 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 stanju uključenosti i isključenosti, a zatim u stanju boje. Na primjer, recimo da je naše uključeno-isključeno stanje 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 to istina, LED svijetli. Učinite sada bitovno dodavanje stanja boje s binarnim 1. Korak 3. Ako je to istina, upalite crvenu LED diodu. Ako je laž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, zatim nastavljamo natrag do ćelije 1. Također, stanja uključivanja i isključivanja i boje pohranjeni su kao nepotpisani cijeli broj (riječ) umjesto s predznakom cijelog broja. To je zato što bismo pri pomaku bitova, ako nismo oprezni, mogli nenamjerno promijeniti znak varijable. U privitku je kôd za osvjetljavanje LED matrice.

Korak 4: Konstruiranje 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 izrađen od tankog akrilnog lista, dovoljno velikog da se prelije preko LED matrice. Zatim zalijepite žice redaka i stupova na akrilnu ploču, koristeći prozirnu traku. Prozirna traka također se koristi kao izolacijski odstojnik između žica, na raskrižjima. Obavezno koristite čiste alate kako biste spriječili da mast prstiju uđe na ljepljivu stranu trake. Mrlje od otisaka prstiju ne samo da izgledaju ružno, već čine 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 izvedeni su 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: Touch Pad - kako to radi

Dodirna ploča - kako to radi
Dodirna ploča - kako to radi
Dodirna ploča - kako to radi
Dodirna ploča - kako to radi

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 osjetnika dodira, koje zatim možemo upotrijebiti za aktiviranje LED dioda. Koncept ovog touchpada je jednostavan. To je u biti žičana mreža, s tri gole žice koje idu u redovima, a tri gole žice prolaze u stupcima iznad redova. Na svakom raskrižju 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 dviju žica. Mala struja, ali se može detektirati, stoga može prstom priteći od jedne žice do sljedeće. Kako bi se utvrdilo koje je sjecište pritisnuto, korištena je sljedeća metoda: Korak 1: Postavite sve linije stupaca na OUTPUT LOW. Korak 2: Postavite retke retka na INPUT, s uključenim unutarnjim izvlačenjem. Korak 3: Očitajte analogno na svakom retku retka sve dok vrijednost ne padne ispod zadanog praga. Ovo vam govori u kojem je retku pritisnuto sjecište. Korak 4: Ponovite korake 1-3, ali sada sa stupcima kao ulazima i redovima kao izlazima. To vam govori koji je stupac pritisnuto sjecište. Kako bi se smanjili učinci buke, uzima se niz očitanja, a zatim se prosjekuje. Prosječni rezultat se zatim uspoređuje s pragom. Budući da ova metoda samo provjerava prag, nije prikladna za otkrivanje istovremenih pritisaka. Međutim, budući da se kartice okreću naizmjenično, dovoljno je čitanje jednog pritiska. U privitku je skica koja prikazuje način rada dodirne podloge. Kao i LED matrica, bitovi se koriste za predstavljanje presjeka koji je pritisnut.

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 kako biste ga sinkronizirali sa senzorom žičane mreže. Uč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. Idemo prvo raščlaniti igru tic tac toe igru na njene različite korake, u načinu za dva igrača: Korak 1: Igrač A odabire neispunjenu ćeliju dodirom raskrižja. Korak 2: LED dioda za tu ćeliju svijetliti bojom A. Korak 3: Provjerite je li igrač A pobijedio. Korak 4: Igrač B odabire neispunjenu ćeliju. Korak 5: LED dioda za tu ćeliju svijetliti bojom B. Korak 6: Provjerite je li igrač B pobijedio. Korak 7: Ponavljajte 1-6 dok ne dođe do uvjeta pobjede ili ako su sve ćelije ispunjene. Čitanje ćelija: Program se petlja između čitanja rešetke i prikaza LED matrice. Sve dok senzor mreže ne registrira vrijednost različitu od nule, ova će se petlja nastaviti. Kad se pritisne raskrižje, pritisnuta varijabla sprema položaj pritisnute ćelije. Provjera je li ćelija nepopunjena: Kad se dobije očitanje položaja (varijabla pritisnuta), uspoređuje se s trenutnim statusom ćelije (pohranjeno u varijabli GridOnOff) pomoću bitnog zbrajanja. 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 odabere ćelija. Provjera uvjeta dobitka: Postoji samo 8 mogućih uvjeta dobitka, a oni su pohranjeni kao varijable riječi u nizu (winArray). Dva bitovna zbrajanja koriste se za usporedbu igračevih popunjenih pozicija ćelija s uvjetima 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 i još uvijek nema uvjeta za pobjedu, igra je neriješena. LED diode tada 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 za jednog igrača, a prvi počinje igrač. Na kraju okretanja 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 kôd prikazuje samo jednu LED odjednom. Međutim, s ožičenjem prikazanim ovdje, moguće je istovremeno upaliti sve LED diode spojene na jednu katodnu liniju. 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čunalni playerTrerentni kod zauzima samo nekoliko kb, ostavljajući prilično više za implementaciju pametnijeg računalnog tic tac -a Nadam se da ste uživali u čitanju ovog uputstva koliko i ja u radu na njemu!

Preporučeni: