Spisu treści:

Arduino i touchpad Tic Tac Toe: 8 kroków (ze zdjęciami)
Arduino i touchpad Tic Tac Toe: 8 kroków (ze zdjęciami)

Wideo: Arduino i touchpad Tic Tac Toe: 8 kroków (ze zdjęciami)

Wideo: Arduino i touchpad Tic Tac Toe: 8 kroków (ze zdjęciami)
Wideo: Arduino - Tic Tac Toe Game with Touchpad 2024, Wrzesień
Anonim
Arduino i touchpad kółko i krzyżyk
Arduino i touchpad kółko i krzyżyk

Albo ćwiczenie z multipleksowania wejścia i wyjścia oraz pracy z bitami. Oraz zgłoszenie na konkurs Arduino.

Jest to implementacja gry w kółko i krzyżyk wykorzystująca tablicę dwukolorowych diod LED 3x3 na wyświetlaczu, prosty rezystancyjny touchpad i Arduino do łączenia wszystkiego razem. Aby zobaczyć, jak to działa, obejrzyj wideo:Czego wymaga ten projekt:Części i materiały eksploatacyjne Jedna płyta perforowana (lub płyta z paskami) Dziewięć dwukolorowych diod LED, wspólna katoda Dziewięć identycznych rezystorów w zakresie 100-220 omów Sześć identycznych rezystorów w Zakres 10kohm - 500kohm Jeden przełącznik jednobiegunowy, dwustanowy Pęczek kołków rozgałęźnych Pęczek przewodu elektrycznego Jeden mały kwadratowy arkusz przezroczystego akrylu o grubości ~ 1 mm, 8 cm z boku Przezroczysta taśma samoprzylepna Termokurczliwe (opcjonalne) Wszystkie powyższe są dość powszechnymi przedmiotami, całkowity koszt nie powinien przekraczać 20 USD. Narzędzia Jedna konfiguracja Arduino (Arduino Duemilanove, Arduino IDE, komputer, kabel USB) Zwykłe narzędzia elektryczne (multimetr, lutownica, wycinaki do drutu, przecinak do drutu) Wszystko, co związane z Arduino, może być znaleźć na https://www.arduino.cc. Kontynuuj budowę!

Krok 1: Okablowanie matrycy LED

Okablowanie matrycy LED
Okablowanie matrycy LED
Okablowanie matrycy LED
Okablowanie matrycy LED

Aby dioda LED zaświeciła się, oba jej przewody muszą być połączone. Gdybyśmy mieli poświęcić parę pinów każdej z 18 diod LED (9 czerwonych, 9 zielonych), szybko zabrakłoby nam pinów w Arduino. Jednak dzięki multipleksowaniu będziemy w stanie zaadresować wszystkie diody LED za pomocą zaledwie 9 pinów! Aby to zrobić, diody LED są połączone w sposób krzyżowy, jak pokazano na pierwszym rysunku. Diody LED są pogrupowane w kolumny po trzy, a ich katody są pogrupowane w rzędy po sześć. Ustawiając określoną linię anodową wysoko, a konkretną linię katodową niską oraz mając wysoką impedancję na wszystkich pozostałych liniach anodowych i katodowych, możemy wybierz, która dioda LED ma się świecić, ponieważ istnieje tylko jedna możliwa ścieżka, którą prąd może obrać. Na przykład na drugim rysunku, ustawiając zieloną linię anody 1 wysoko, a katodę 1 nisko, dolna lewa zielona dioda LED świeci. Aktualna ścieżka w tym przypadku jest pokazana na niebiesko. Ale co, jeśli chcesz zapalić więcej niż jedną diodę LED na różnych liniach? Aby to osiągnąć, użyjemy wytrwałości wizji. Wybierając bardzo szybko pary linii LED, daje to złudzenie, że wszystkie wybrane diody świecą się jednocześnie.

Krok 2: Układ matrycy LED

Układ matrycy LED
Układ matrycy LED
Układ matrycy LED
Układ matrycy LED

Poniższy schemat obwodu pokazuje, w jaki sposób diody LED są fizycznie połączone (G1-G9: zielone diody LED, R1-R9: czerwone diody LED). Ten schemat dotyczy pojedynczych czerwonych i zielonych diod LED, jeśli używasz dwukolorowych czerwono-zielonych diod LED ze wspólną katodą, na każdą czerwono-zieloną parę jest tylko jedna noga katody, którą musisz podłączyć. Czerwone i zielone linie anodowe wchodzą do pinów PWM Arduino (piny 3, 5, 6, 9, 10, 11 w Duemilanove), dzięki czemu możemy później uzyskać efekty, takie jak zanikanie. Linie katodowe przechodzą do pinów 4, 7 i 8. Każda z linii katodowych i anodowych ma rezystory 100 omów dla ochrony.

Krok 3: Adresowanie matrycy LED

W przypadku kodu „kółko i krzyżyk” musimy być w stanie przechowywać następujące informacje o diodach LED: - czy dioda świeci, czy nie - jeśli świeci, czy jest czerwona czy zielona Jednym ze sposobów na zrobienie tego jest zapisanie stanu w 9-komórkowej tablicy, przy użyciu trzech cyfr do reprezentowania stanu (0 = wyłączony, 1 = czerwony włączony, 2 = zielony włączony). Za każdym razem, gdy musimy sprawdzić stan diody LED, na przykład, aby sprawdzić, czy istnieje warunek wygranej, musimy przechodzić przez tablicę. Jest to wykonalna metoda, ale raczej niezgrabna. Bardziej usprawnioną metodą byłoby użycie dwóch grup po dziewięć bitów. Pierwsza grupa dziewięciu bitów przechowuje stan włączenia-wyłączenia diod LED, a druga grupa dziewięciu bitów przechowuje kolor. Wówczas manipulowanie stanami diod LED staje się po prostu kwestią arytmetyki bitowej i przesuwania. Oto praktyczny przykład. Załóżmy, że rysujemy graficznie naszą siatkę w kółko i krzyżyk, a najpierw używamy 1 i zer do oznaczenia stanu włączenia/wyłączenia (1 jest włączone, 0 jest wyłączone): 000 000 = matryca z zapaloną lewą dolną diodą LED 100 100 010 = matryca z przekątną Diody świecące 001 Jeśli wyliczamy komórki od dołu po lewej, możemy zapisać powyższe reprezentacje jako ciąg bitów. W pierwszym przypadku byłoby to 100000000, a w drugim 001010100. Jeśli myślimy o nich jako o reprezentacji binarnej, to każdy ciąg bitów można skondensować w jedną liczbę (256 w pierwszym przypadku 84 w drugim przypadku). Więc zamiast używać tablicy do przechowywania stanu macierzy, możemy po prostu użyć jednej liczby! Podobnie możemy w ten sam sposób przedstawić kolor diody LED (1 to czerwony, 0 to zielony). Załóżmy najpierw, że świecą się wszystkie diody (a więc stan on-off jest reprezentowany przez 511). Poniższa macierz będzie wtedy reprezentować stan kolorów diod LED: 010 zielony, czerwony, zielony 101 czerwony, zielony, czerwony 010 zielony, czerwony, zielony Teraz, podczas wyświetlania matrycy LED, musimy po prostu przejść przez każdy z bitów, najpierw w stanie włączonym i wyłączonym, a następnie w stanie kolorowym. Na przykład załóżmy, że nasz stan on-off to 100100100, a stan koloru to 010101010. Oto nasz algorytm rozpalania matrycy LED: Krok 1. Dodaj bitowe stany on-off z binarną 1 (czyli bit maskowanie). Krok 2. Jeśli to prawda, dioda LED świeci. Wykonaj teraz bitowe dodanie stanu koloru za pomocą binarnego 1. Krok 3. Jeśli to prawda, zapal czerwoną diodę LED. Jeśli to fałsz, zapal zieloną diodę LED. Krok 4. Przesuń zarówno stan włączenia-wyłączenia, jak i stan koloru, o jeden bit w prawo (tj. przesunięcie bitowe). Krok 5. Powtarzaj kroki 1 - 4, aż wszystkie dziewięć bitów zostanie odczytanych. Zwróć uwagę, że wypełniamy macierz od tyłu - zaczynamy od komórki 9, a następnie przechodzimy z powrotem do komórki 1. Ponadto stany on-off i color są przechowywane jako typ liczby całkowitej bez znaku (word) zamiast typu liczby całkowitej ze znakiem. Dzieje się tak, ponieważ podczas przesuwania bitów, jeśli nie będziemy ostrożni, możemy nieumyślnie zmienić znak zmiennej. W załączeniu kod do rozpalania matrycy LED.

Krok 4: Konstruowanie touchpada

Konstruowanie tabliczki dotykowej
Konstruowanie tabliczki dotykowej
Konstruowanie tabliczki dotykowej
Konstruowanie tabliczki dotykowej
Konstruowanie tabliczki dotykowej
Konstruowanie tabliczki dotykowej
Konstruowanie tabliczki dotykowej
Konstruowanie tabliczki dotykowej

Touchpad zbudowany jest z cienkiego arkusza akrylu, wystarczająco dużego, aby nałożyć na matrycę LED. Następnie przyklej przewody rzędów i kolumn do arkusza akrylowego za pomocą przezroczystej taśmy. Przezroczysta taśma jest również używana jako przekładka izolacyjna między przewodami, na skrzyżowaniach. Pamiętaj, aby używać czystych narzędzi, aby zapobiec przedostawaniu się smaru z palców na lepką stronę taśmy. Plamy odcisków palców nie tylko wyglądają brzydko, ale sprawiają, że taśma jest mniej lepka. Odetnij jeden koniec każdej z linii, a drugi koniec przylutuj do dłuższego drutu. Przylutuj rezystor w linii z przewodami, przed przylutowaniem złącz. Zastosowane tutaj rezystory to 674k, ale każda wartość między 10k a 1M powinna być w porządku. Połączenia z Arduino są wykonane za pomocą 6 pinów analogowych, z pinami 14-16 podłączonymi do rzędów siatki drucianej i pinami 17-19 podłączonymi do kolumny.

Krok 5: Panel dotykowy - jak to działa

Panel dotykowy - jak to działa
Panel dotykowy - jak to działa
Panel dotykowy - jak to działa
Panel dotykowy - jak to działa

Tak jak użyliśmy multipleksera poprzecznego do skonfigurowania matrycy LED z minimalną liczbą pinów, możemy użyć podobnego multipleksera poprzecznego do skonfigurowania matrycy czujników dotykowych, której możemy następnie użyć do aktywacji diod LED. Koncepcja tego touchpada jest prosta. Jest to zasadniczo siatka druciana, z trzema gołymi drutami biegnącymi w rzędach i trzema gołymi drutami biegnącymi w kolumnach nad rzędami. W każdym punkcie przecięcia znajduje się mały kwadrat izolacji, który zapobiega stykaniu się dwóch przewodów. Palec dotykający skrzyżowania zetknie się z obydwoma przewodami, co spowoduje ogromny, ale skończony opór między dwoma przewodami. Można zatem sprawić, by prąd o niewielkim natężeniu, ale wykrywalny, płynął palcem z jednego przewodu do drugiego. Aby określić, które przecięcie zostało naciśnięte, zastosowano następującą metodę: Krok 1: Ustaw wszystkie wiersze kolumny na OUTPUT LOW. Krok 2: Ustaw linie rzędu na INPUT, z włączonymi wewnętrznymi podciąganiami. Krok 3: Wykonaj odczyt analogowy w każdej linii rzędu, aż wartość spadnie poniżej określonego progu. Dzięki temu dowiesz się, w którym wierszu znajduje się wciśnięte przecięcie. Krok 4: Powtórz kroki 1-3, ale teraz z kolumnami jako danymi wejściowymi i wierszami jako danymi wyjściowymi. To mówi, która kolumna jest wciśniętym przecięciem. Aby zminimalizować wpływ szumu, wykonuje się pewną liczbę odczytów, a następnie uśrednia. Uśredniony wynik jest następnie porównywany z wartością progową. Ponieważ ta metoda sprawdza tylko wartość progową, nie nadaje się do wykrywania jednoczesnych naciśnięć. Ponieważ jednak gra w kółko i krzyżyk przebiega na zmianę, wystarczy przeczytać pojedyncze naciśnięcie. W załączeniu znajduje się szkic ilustrujący działanie touchpada. Podobnie jak w przypadku matrycy LED, bity służą do wskazania, które przecięcie zostało naciśnięte.

Krok 6: Składanie wszystkiego razem

Składanie wszystkiego razem
Składanie wszystkiego razem

Teraz, gdy wszystkie poszczególne elementy są gotowe, nadszedł czas, aby je wszystkie połączyć. Nałóż siatkę drucianą na matrycę LED. Może zaistnieć potrzeba zmiany kolejności numeracji pinów w kodzie matrycy LED, aby zsynchronizować ją z czujnikiem siatki drucianej. Zabezpiecz siatkę drucianą na miejscu za pomocą wybranych zapięć lub klejów i przyklej ładną planszę do gry. Dodaj przełącznik między pinem 12 a uziemieniem Arduino. Ten przełącznik służy do przełączania między trybem 2 graczy i trybem 1 gracza (w porównaniu z mikrokontrolerem).

Krok 7: Programowanie kółko i krzyżyk

Dołączony jest kod gry. Najpierw podzielmy grę w kółko i krzyżyk na poszczególne etapy, w trybie dla dwóch graczy: Krok 1: Gracz A wybiera niewypełnioną komórkę, dotykając skrzyżowania. Krok 2: Dioda LED tej komórki zapala się w kolorze A. Krok 3: Sprawdź, czy gracz A wygrał. Krok 4: Gracz B wybiera niewypełnioną komórkę. Krok 5: Dioda LED tej komórki zapala się w kolorze B. Krok 6: Sprawdź, czy gracz B wygrał. Krok 7: Powtarzaj 1-6, aż pojawi się warunek wygranej lub jeśli wszystkie komórki zostaną wypełnione. Czytanie komórek:Program zapętla się między odczytem siatki a wyświetleniem matrycy LED. Dopóki czujnik sieci nie zarejestruje wartości niezerowej, pętla ta będzie kontynuowana. Po naciśnięciu przecięcia zmienna Pressed przechowuje pozycję wciśniętej komórki. Sprawdzanie, czy komórka nie jest wypełniona:Po uzyskaniu odczytu pozycji (zmienna Pressed) jest on porównywany z bieżącym stanem komórki (przechowywanym w zmiennej GridOnOff) za pomocą dodawania bitowego. Jeśli komórka Pressed jest pusta, należy zapalić diodę LED, w przeciwnym razie powrócić do odczytu komórek. Przełączanie kolorów: Zmienna logiczna Turn służy do rejestrowania, czyj jest ruch. Kolor diody LED wybrany podczas wybierania komórki jest określany przez tę zmienną, która zmienia się za każdym razem, gdy wybierana jest komórka. Sprawdzanie warunku wygranej:Istnieje tylko 8 możliwych warunków wygranej, które są przechowywane jako zmienne słów w tablicy (winArray). Do porównania wypełnionych pozycji komórek gracza z warunkami wygranej służą dwa dodawania bitowe. Jeśli dojdzie do meczu, program wyświetla procedurę zwycięstwa, po której rozpoczyna nową grę. Sprawdzanie warunku remisu: Gdy zostało zarejestrowanych dziewięć tur i nadal nie ma warunku wygranej, gra kończy się remisem. Następnie diody LED gasną i rozpoczyna się nowa gra. Przełączanie w tryb jednego gracza: Jeśli przełącznik jest w pozycji włączonej, program przechodzi w tryb jednego gracza, w którym jako pierwszy zaczyna grać człowiek. Pod koniec tury ludzkiego gracza program po prostu wybiera losową komórkę. Oczywiście nie jest to najmądrzejsza strategia!

Krok 8: Uwagi i dalsze ulepszenia

Oto film pokazujący tryb dla jednego gracza, w którym program odtwarza całkowicie losowe ruchy: Pokazany tutaj program jest tylko minimalną wersją z gołymi kośćmi. Można w ten sposób zrobić wiele innych rzeczy: 1) Zapalanie trzech diod na raz Bieżący kod wyświetla tylko jedną diodę na raz. Jednak dzięki pokazanemu tutaj okablowaniu możliwe jest jednoczesne zaświecenie wszystkich diod LED podłączonych do jednej linii katodowej. Tak więc, zamiast przechodzić przez wszystkie dziewięć pozycji, wystarczy przejść przez trzy linie katodowe.2) Użyj przerwań do wyświetlania diod LED W zależności od procedury wyświetlania LED i ilości przetwarzania, diody LED mogą wykazywać pewien stopień migocący. Używając przerwań, czas diod LED może być precyzyjnie kontrolowany i prowadzi do płynniejszego wyświetlania.3) Inteligentniejszy odtwarzacz komputerowy Aktualny kod zajmuje tylko kilka kb, pozostawiając trochę więcej na implementację inteligentniejszego komputera. Toe player. Mam nadzieję, że podobało ci się czytanie tego podręcznika tak samo, jak dobrze się bawiłem pracując nad nim!

Zalecana: