Obsah:

Arduino a Touchpad Tic Tac Toe: 8 kroků (s obrázky)
Arduino a Touchpad Tic Tac Toe: 8 kroků (s obrázky)

Video: Arduino a Touchpad Tic Tac Toe: 8 kroků (s obrázky)

Video: Arduino a Touchpad Tic Tac Toe: 8 kroků (s obrázky)
Video: CS50 2013 - Week 9 2024, Září
Anonim
Arduino a Touchpad Tic Tac Toe
Arduino a Touchpad Tic Tac Toe

Nebo cvičení ve vstupním a výstupním multiplexování a práce s bity. A příspěvek do soutěže Arduino.

Jedná se o implementaci tic tac toe hry využívající 3x3 pole dvoubarevných LED pro displej, jednoduchý odporový touchpad a Arduino, které spojují vše dohromady. Chcete-li zjistit, jak to funguje, podívejte se na video: Co tento projekt vyžaduje: Díly a spotřební materiál Jedna výkonová deska (nebo pásová deska) Devět dvoubarevných LED diod, společná katoda Devět identických rezistorů, v rozsahu 100-220 ohmů Šest identických rezistorů, v Rozsah 10 kOhm - 500 kOhm Jeden jednopólový přepínač s dvojitým vrháním Svazek hlavičkových kolíků Elektrický drát Jeden malý čtvercový list průhledného akrylátu o tloušťce ~ 1 mm, na straně 8 cm Čirá lepicí páska Heatshrinks (volitelně) Všechny výše uvedené jsou celkem běžné položky, celkové náklady by neměly přesáhnout 20 USD USD. Nástroje Jedna instalace Arduina (Arduino Duemilanove, Arduino IDE, počítač, USB kabel) Obvyklé elektrické nářadí (multimetr, pájka na pájku, nůžky na drát, řezačka drátu) Vše, co souvisí s Arduinem najdete na https://www.arduino.cc. Pokračujte ve stavbě!

Krok 1: Zapojení matice LED

Zapojení LED matice
Zapojení LED matice
Zapojení LED matice
Zapojení LED matice

Aby LED svítila, musí být připojeny oba její vodiče. Pokud bychom věnovali pár pinů každé z 18 LED (9 červených, 9 zelených), rychle by nám došly piny na Arduinu. S multiplexováním však budeme moci řešit všechny LED diody pouhými 9 piny! K tomu jsou LED diody zapojeny příčným způsobem, jak ukazuje první obrázek. LED diody jsou seskupeny do sloupců po třech a jejich katody jsou seskupeny do řad po šesti. Nastavením konkrétní anodové linky vysoko a konkrétní katodové linky nízko a s vysokou impedancí na všech ostatních anodových a katodových linkách můžeme vyberte, která LED dioda se má rozsvítit, protože existuje pouze jedna možná cesta, kterou může proud procházet. Například na druhém obrázku, nastavení zelené linky 1 anody vysoko a řádku katody 1 nízko, se rozsvítí vlevo dole zelená LED. Aktuální cesta je v tomto případě zobrazena modře. Ale co když chcete rozsvítit více než jednu LED na různých linkách? K dosažení tohoto cíle použijeme vytrvalost vidění. Velmi rychlý výběr dvojic LED linek dává iluzi, že všechny vybrané LED diody svítí současně.

Krok 2: Rozložení matice LED

Rozložení matice LED
Rozložení matice LED
Rozložení matice LED
Rozložení matice LED

Níže uvedené schéma zapojení ukazuje, jak jsou LED diody fyzicky zapojeny (G1-G9: zelené LED, R1-R9: červené LED). Tento diagram je pro jednotlivé červené a zelené LED diody, pokud používáte dvoubarevné běžné katodové červené/zelené diody LED, je zde pouze jedna katodová noha na červeno -zelený pár, kterou musíte zapojit. Červená a zelená anodová linie jdou do pinů PWM Arduina (piny 3, 5, 6, 9, 10, 11 na Duemilanove), abychom mohli mít efekty jako vyblednutí později. Katodové linky jdou do kolíků 4, 7 a 8. Každá katodová a anodová vedení mají pro ochranu odpory 100 ohmů.

Krok 3: Adresování LED matice

Pro kód tic tac toe budeme muset umět uložit následující informace o LED: - zda LED svítí nebo nesvítí - pokud svítí, zda je červená nebo zelená Jedním ze způsobů, jak toho dosáhnout, je uložit stav v 9článkovém poli pomocí tří číslic k vyjádření stavu (0 = vypnuto, 1 = červená zapnuta, 2 = zelená zapnuta). Pokaždé, když potřebujeme zkontrolovat stav LED, například abychom zkontrolovali, zda existuje podmínka výhry, budeme muset procházet polem. Tato metoda je funkční, ale poněkud neohrabaná. Efektivnější metodou by bylo použití dvou skupin po devíti bitech. První skupina devíti bitů ukládá stav zapnutí a vypnutí LED diod a druhá skupina devíti bitů ukládá barvu. Potom se manipulace se stavy LED jednoduše stává otázkou bitové aritmetiky a posunu. Zde je funkční příklad. Řekněme, že nakreslíme naši tic tac toe mřížku graficky a nejprve pomocí 1 s a 0 s znázorníme stav zapnuto-vypnuto (1 je zapnuto, 0 je vypnuto): 000 000 = matice s LED dole dole svítí 100 100 010 = matice s úhlopříčkou LED diody svítí 001 Pokud vyjmenujeme buňky zleva dole, můžeme výše uvedené reprezentace zapsat jako sérii bitů. V prvním případě by to bylo 100000000 a ve druhém případě by to bylo 001010100. Pokud o nich uvažujeme jako o binárních reprezentacích, pak lze každou sérii bitů kondenzovat do jednoho čísla (256 v prvním případě, 84 v druhém případě). Takže místo použití pole k uložení stavu matice můžeme použít pouze jedno číslo! Podobně můžeme barvu LED znázornit stejným způsobem (1 je červená, 0 je zelená). Předpokládejme nejprve, že všechny LED diody svítí (stav zapnutí a vypnutí je tedy reprezentován 511). Níže uvedená matice pak bude představovat stav barev LED: 010 zelená, červená, zelená 101 červená, zelená, červená 010 zelená, červená, zelená Nyní, když zobrazujeme matici LED, musíme procházet každý z bitů, nejprve ve stavu zapnuto-vypnuto a poté v barevném stavu. Řekněme například, že náš stav zapnutí a vypnutí je 100100100 a stav barev je 010101010. Zde je náš algoritmus pro rozsvícení matice LED: Krok 1. Proveďte bitové přidání stavu zapnutí a vypnutí pomocí binární 1 (tj. maskování). Krok 2. Pokud je to pravda, LED dioda svítí. Nyní proveďte bitové přidání barevného stavu pomocí binárního souboru 1. Krok 3. Pokud je to pravda, rozsviťte červenou LED. Pokud je nepravdivé, rozsviťte zelenou LED. Krok 4. Posuňte stav zapnutí i vypnutí o jeden bit doprava (tj. Posun bitů). Krok 5. Kroky 1 - 4 opakujte, dokud nebude načteno všech devět bitů. Všimněte si toho, že matici plníme pozpátku - začneme buňkou 9, potom pokračujeme zpět dolů do buňky 1. Stavy zapnutí a vypnutí a barvy jsou také uloženy jako celočíselný typ (slovo) bez znaménka místo celočíselného typu se znaménkem. To proto, že při bitovém řazení, pokud si nedáme pozor, můžeme nechtěně změnit znaménko proměnné. V příloze je kód pro rozsvícení LED matice.

Krok 4: Konstrukce dotykové podložky

Konstrukce dotykové podložky
Konstrukce dotykové podložky
Konstrukce dotykové podložky
Konstrukce dotykové podložky
Konstrukce dotykové podložky
Konstrukce dotykové podložky
Konstrukce dotykové podložky
Konstrukce dotykové podložky

Touchpad je vyroben z tenkého akrylového listu, který je dostatečně velký na to, aby překryl matici LED. Poté nalepte pásku drátů řady a sloupků na akrylovou fólii pomocí čiré pásky. Jako izolační vložka mezi dráty na křižovatkách se používá také čirá páska. Používejte čisté nástroje, aby se mastnota z prstů nedostala na lepivou stranu pásky. Skvrny od otisků prstů nejenže vypadají ošklivě, ale také způsobí, že bude páska méně lepivá. Odřízněte jeden konec každého z řádků a druhý konec připájejte k delšímu drátu. Před pájením na konektory pájejte odpor v řadě s vodiči. Zde používané odpory jsou 674k, ale jakákoli hodnota mezi 10k a 1M by měla být v pořádku. Připojení k Arduinu se provádí pomocí 6 analogových pinů, s piny 14-16 připojenými k řadám drátové mřížky a piny 17-19 připojenými k sloupce.

Krok 5: Touch Pad - jak to funguje

Touch Pad - jak to funguje
Touch Pad - jak to funguje
Touch Pad - jak to funguje
Touch Pad - jak to funguje

Stejně jako jsme použili crossbar multiplexer k nastavení LED matice s minimem pinů, můžeme použít podobný crossbar multiplexer k nastavení pole dotykových senzorů, které pak můžeme použít k aktivaci LED. Koncept této dotykové podložky je jednoduchý. Je to v podstatě drátěná mřížka se třemi holými dráty vedenými v řadách a třemi holými dráty vedenými ve sloupcích nad řadami. V každém průsečíku je malý čtverec izolace, který zabraňuje dotyku dvou vodičů. Prst dotýkající se křižovatky naváže kontakt s oběma vodiči, což má za následek obrovský, ale konečný odpor mezi těmito dvěma dráty. Malý proud, ale detekovatelný, proud lze tedy nechat protékat prstem z jednoho drátu na druhý. K určení, která křižovatka byla stisknuta, byla použita následující metoda: Krok 1: Nastavte všechny řádky sloupců na VÝSTUP NÍZKÝ. Krok 2: Nastavte řádky řádků na VSTUP, s aktivovanými interními vytaženími. Krok 3: Proveďte analogové čtení na každém řádku řádku, dokud hodnota neklesne pod danou prahovou hodnotu. To vám řekne, ve kterém řádku je lisovaná křižovatka. Krok 4: Opakujte kroky 1-3, ale nyní se sloupci jako vstupy a řádky jako výstupy. To vám řekne, který sloupec je lisovaná křižovatka. Aby se minimalizovaly účinky hluku, provede se několik odečtů a pak se zprůměrují. Průměrný výsledek je pak porovnán s prahem. Protože tato metoda kontroluje pouze prahovou hodnotu, není vhodná pro detekci současných stisků. Jelikož však tic tac toe pokračuje střídavě, stačí přečíst jeden stisk. V příloze je skica ilustrující fungování touchpadu. Stejně jako u LED matice jsou bity použity k znázornění, která křižovatka byla stisknuta.

Krok 6: Dát vše dohromady

Dát všechno dohromady
Dát všechno dohromady

Nyní, když jsou všechny jednotlivé součásti hotové, je čas je všechny spojit. Překryjte drátěnou mřížku na matici LED. Aby bylo možné synchronizovat se snímačem drátové mřížky, bude možná nutné změnit pořadí číslování pinů v maticovém kódu LED. Zajistěte drátěnou mřížku na místě pomocí upevňovacích prvků nebo lepidel podle vašeho výběru a nalepte na pěknou hrací desku. Přidejte přepínač mezi pin 12 a uzemnění Arduina. Tento přepínač má přepínat mezi režimem pro 2 hráče a režimem pro 1 hráče (oproti mikrokontroléru).

Krok 7: Programování Tic Tac Toe

V příloze je kód hry. Pojďme si nejprve rozdělit hru tic tac toe na jednotlivé kroky v režimu pro dva hráče: Krok 1: Hráč A vybere nevyplněnou buňku dotykem na křižovatku. Krok 2: LED dioda pro tuto buňku se rozsvítí barvou A. Krok 3: Zkontrolujte, zda hráč A vyhrál. Krok 4: Hráč B vybere nevyplněnou buňku. Krok 5: LED dioda pro tuto buňku se rozsvítí barvou B. Krok 6: Zkontrolujte, zda hráč B vyhrál. Krok 7: Opakujte 1-6, dokud nedojde k podmínce výhry, nebo dokud nejsou všechny buňky vyplněny. Čtení buněk: Program se pohybuje mezi čtením mřížky a zobrazením matice LED. Dokud snímač mřížky nezaregistruje nenulovou hodnotu, bude tato smyčka pokračovat. Když je stisknuta křižovatka, stisknutá proměnná uloží polohu stlačené buňky. Kontrola, zda je buňka nevyplněná: Když je získáno čtení polohy (proměnná stisknuto), je porovnána s aktuálním stavem buňky (uložena v proměnné GridOnOff) pomocí bitového sčítání. Pokud je stisknutá buňka nevyplněná, pokračujte rozsvícením LED, v opačném případě se vraťte ke čtení buněk. Přepínání barev: Logická proměnná, Turn, se používá k záznamu, kdo je na řadě. Barva LED zvolená při výběru buňky je určena touto proměnnou, která se střídá při každém výběru buňky. Kontrola podmínky výhry: Existuje pouze 8 možných podmínek výhry, které jsou uloženy jako proměnné slov v poli (winArray)). Dvě bitová přidání se používají k porovnání pozic naplněných buněk hráče s podmínkami výhry. Pokud dojde k zápasu, program zobrazí rutinu výhry, po které začne novou hru. Kontrola podmínky remízy: Když bylo zaznamenáno devět tahů a stále není žádná podmínka výhry, pak je hra remízou. LED diody poté zhasnou a spustí se nová hra. Přepnutí do režimu jednoho hráče: Pokud je přepínač v poloze zapnuto, program přejde do režimu jednoho hráče, přičemž jako první začíná lidský hráč. Na konci tahu lidského hráče program jednoduše vybere náhodnou buňku. Očividně to není nejchytřejší strategie!

Krok 8: Poznámky a další vylepšení

Zde video ukazující režim pro jednoho hráče, kde program hraje zcela náhodné pohyby: Zde zobrazený program je pouze minimální verzí s holými kostmi. Lze s tím dělat mnoho dalších věcí: 1) Rozsvícení LED diod najednou Současný kód zobrazuje pouze jednu LED diodu najednou. Díky zde zobrazenému zapojení je však možné rozsvítit všechny LED diody připojené k jedné katodové lince současně. Místo procházení všemi devíti pozicemi tedy stačí projíždět třemi katodovými liniemi. 2) Pomocí přerušení zobrazujte LED diody V závislosti na rutině LED displeje a množství zpracování mohou LED diody vykazovat určitý stupeň blikající. Použitím přerušení lze časování LED kontrolovat přesně a vedlo by to k plynulejšímu zobrazení. 3) Chytřejší počítačový hráč Aktuální kód zabírá jen několik kb, takže o něco více pro implementaci chytřejšího tic tac Doufám, že jste si tento návod užili, stejně jako mě bavilo na něm pracovat!

Doporučuje: