Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Cześć twórcy, Nazywam się Tahir Miriyev, absolwentem Uniwersytetu Technicznego Bliskiego Wschodu w 2018 roku, Ankara/Turcja. Specjalizowałem się w matematyce stosowanej, ale zawsze lubiłem robić rzeczy, zwłaszcza gdy wymagało to trochę pracy ręcznej z elektroniką, projektowaniem i programowaniem. Dzięki unikalnemu kursowi z prototypowania, oferowanemu w naszym dziale Wzornictwa Przemysłowego, dostałem szansę na zrobienie czegoś naprawdę ciekawego. Projekt można traktować jako projekt semestralny, trwający cały semestr (4 miesiące). Studenci otrzymali zadanie polegające na znalezieniu kreatywnego podejścia do projektowania już istniejących produktów/dem i realizacji swoich pomysłów z wykorzystaniem mikrokontrolerów i czujników Arduino. Myślałem o szachach i po przeprowadzeniu badań nad udanymi projektami zauważyłem, że w poprzednich projektach twórcy w zasadzie używali gotowych silników szachowych (gdzie wszystkie ruchy każdej figury były zaprogramowane w rdzeniu), wraz z Raspberry Pi, trochę MUX 'es, LED'y i kontaktrony. W swoim projekcie postanowiłem jednak pozbyć się jakiegokolwiek zewnętrznego oprogramowania w zakresie silnika szachowego i znaleźć kreatywne rozwiązanie problemu rozpoznawania figur, wykorzystując czytnik RFID, czujniki Halla i Arduino Mega.
Krok 1: Czym jest problem z rozpoznawaniem figur i jak go rozwiązałem?
Mówiąc prościej, załóżmy, że masz szachownicę z "mózgiem"=mikrokontrolerem i musisz sprawić, by twoja szachownica zrozumiała, jaką figurę trzymałeś w dłoni i gdzie ją umieściłeś. To jest problem rozpoznawania figur. Rozwiązanie tego problemu jest banalne, gdy masz silnik szachowy, w którym wszystkie figury stoją na swoich początkowych pozycjach na szachownicy. Zanim wyjaśnię, dlaczego tak jest, pozwól, że poczynię kilka uwag.
Dla tych, którzy są entuzjastycznie nastawieni do tego, jak tutaj działają, muszę wyjaśnić, dlaczego potrzebujemy kontaktronów (lub w moim przypadku użyłem czujników z efektem Halla): jeśli umieścisz magnes pod każdym elementem i podniesiesz go z kwadrat na planszy (zakładając, że pod każdym kwadratem znajduje się kontaktron) ze względu na istnienie/nieistnienie pola magnetycznego nad czujnikiem, możesz sprawić, że kontroler zrozumie, czy na kwadracie jest/nie ma pionka. Jednak nadal nic nie mówi mikrokontrolerowi o tym, który element stoi na kwadracie. Mówi tylko, że na kwadracie nie ma/nie ma pionka. W tym momencie stajemy twarzą w twarz z problemem rozpoznawania figur, który można rozwiązać za pomocą silnika szachowego, ustawiając wszystkie pionki na swoich początkowych pozycjach, gdy rozpoczyna się gra w szachy. W ten sposób mikrokontroler „wie”, gdzie stoi każdy element od samego początku, ze wszystkimi adresami ustalonymi w pamięci. Niemniej jednak niesie to ze sobą ogromne ograniczenie: nie można wybrać, powiedzmy, dowolnej liczby pionów i umieścić ich losowo w dowolnym miejscu na planszy i rozpocząć analizę gry. Zawsze trzeba zaczynać od początku, wszystkie pionki powinny być oryginalnie na planszy, ponieważ tylko w ten sposób mikrokontroler może śledzić ich położenie po podniesieniu pionka i umieszczeniu go na innym kwadracie. W gruncie rzeczy to był problem, który zauważyłem i postanowiłem nad nim pracować.
Moje rozwiązanie było dość proste, choć kreatywne. Na przedniej stronie płytki umieściłem czytnik RFID. W międzyczasie umieściłem pod kawałkami nie tylko magnes, ale także tag RFID, przy czym każdy egzemplarz ma unikalny identyfikator. Dlatego zanim umieścisz figurę na dowolnym kwadracie, możesz najpierw zbliżyć figurę do czytnika RFID i pozwolić jej odczytać identyfikator, zidentyfikować figurę, zapisać ją w pamięci, a następnie umieścić w dowolnym miejscu. Ponadto zamiast kontaktronów, aby uprościć konstrukcję obwodu, zastosowałem czujniki hallotronowe, które działają podobnie, z tą tylko różnicą, że wysyła do mikrokontrolera 0 lub 1 jako dane cyfrowe, co oznacza "jest" lub odpowiednio „nie ma” żadnego pionka na kwadracie. Dodałem również diody LED (niestety nie tego samego koloru, nie miałem), aby po podniesieniu elementu zaświeciły się wszystkie kwadratowe miejsca, w których można umieścić podnoszony element. Pomyśl o tym jako o praktyce edukacyjnej dla uczniów szachów:)
Na koniec chciałbym zaznaczyć, że pomimo zastosowania kilku technik projekt pozostaje prosty i zrozumiały, nie do końca dopracowany i zbyt skomplikowany. Nie miałem wystarczająco dużo czasu, aby przejść do szachownicy 8x8 (również dlatego, że 64 czujniki hallotronowe są drogie w Turcji, pokryłem wszystkie wydatki związane z projektem), dlatego zrobiłem wersję demo 4x4 z przetestowanymi tylko dwoma elementami: Pawn i Królowa. Zamiast korzystać z silnika szachowego, napisałem kod źródłowy dla Arduino, który generuje wszystko, co zobaczysz na poniższym filmiku.
Krok 2: Jak to działa?
Zanim przejdziemy do wyjaśnienia krok po kroku, jak projekt został wykonany, myślę, że lepiej byłoby obejrzeć przykładowy film i uzyskać intuicyjne wyobrażenie o tym, o czym mówię.
Uwaga #1: jedna z czerwonych diod LED (pierwsza w rzędzie/od lewej do prawej) przepalona, nieważne.
Uwaga #2: chociaż powszechnie stosowana, z mojego doświadczenia mogę powiedzieć, że technologia RFID nie jest najlepszym pomysłem do zastosowania w aplikacjach DIY (oczywiście, jeśli masz alternatywy). Zanim wszystko zadziałało, zrobiłem wiele prób z umieszczaniem figur szachowych blisko czytnika i czekaniem, aż poprawnie odczyta identyfikator. Należy do tego skonfigurować port szeregowy, ponieważ sposób, w jaki czytnik RFID odczytuje identyfikator, to tylko ból głowy. Należy samemu spróbować zrozumieć problem. Jeśli potrzebujesz dodatkowej pomocy, napisz do mnie ([email protected]) lub dodaj skype (tahir.miriyev9r1), abyśmy mogli umówić się na rozmowę i szczegółowo omówić, wszystko dokładnie wyjaśnię.
Krok 3: Narzędzia i komponenty
Oto lista wszystkich narzędzi, których użyłem w projekcie: Komponenty elektroniczne:
- Deska do krojenia chleba (x1)
- Dookólne A1126LUA-T (IC-1126 SW OMNI 3-SIP ALLEGRO) Czujniki Halla (x16)
- Podstawowe diody LED 5 mm (x16)
- Przewody połączeniowe
- Czytnik i antena RFID 125 kHz (x1)
- Mega Arduino (x1)
- Tagi RFID 3M (x2)
Inne materiały:
- Pleksiglas
- Błyszczący papier
- krótkie deski (drewniane)
- Farba akrylowa (ciemnozielona i kremowa) x2
- Cienki karton
- 10 mm okrągłe magnesy (x2)
- Piony i hetmany
- Lutownica i materiały lutownicze
Krok 4: Schematy (Fritzing)
Schematy są trochę skomplikowane, wiem, ale pomysł powinien być jasny. Po raz pierwszy użyłem Fritzinga (swoją drogą bardzo polecam), prawdopodobnie połączenia można było narysować dokładniej. W każdym razie zanotowałem wszystko wewnątrz schematów. Uwaga: Nie mogłem znaleźć dokładnego modelu RDIF Reader wśród komponentów w bazie danych Fritzing. Model, którego użyłem to moduł RFID 125Khz - UART. Na Youtube można znaleźć samouczki o tym, jak ustawić ten moduł za pomocą Arduino.
Krok 5: Proces
Czas wyjaśnić, jak powstały rzeczy. Postępuj zgodnie z opisem krok po kroku:
1. Weź karton 21x21 cm oraz dodatkowy karton do wycięcia i sklejenia ścianek górnej części planszy tak, aby zrobić 16 kwadratów z wyliczonymi A B C D 1 2 3 4. Ponieważ karton jest cienki, w każdym kwadracie można umieścić 16 czujników z efektem Halla, każdy z 3 nogami i 16 diodami LED z 2 nogami każda.
2. Po ustawieniu komponentów trzeba będzie trochę przylutować, przylutować nóżki czujników Halla i diody LED do zworek. W tym miejscu polecam wybrać kolorowe przewody w inteligentny sposób, aby nie pomylić się z nogami + i - diod LED, a także nogami VCC, GND i PIN czujników z efektem Halla. Oczywiście można wydrukować płytkę z czujnikami, a nawet wlutowane już diody typu WS2812, ale postanowiłem zachować prostotę projektu i wykonać trochę więcej "ręcznej roboty". W tym momencie wystarczy przygotować przewody i czujniki, na późniejszych etapach zgodnie ze schematem Fritzing widać, gdzie należy przymocować końcówkę każdego przewodu. Wkrótce niektóre z nich trafią bezpośrednio do pinów w Arduino Mega (jest ich wystarczająco dużo na Arduino), inne do płytki stykowej i wszystkie GND można przylutować do jednego kawałka przewodu (tworząc wspólną masę), który później należy podłączyć do GND na płytce Arduino. Jedna ważna uwaga: czujniki z efektem Halla są OMNIKIERUNKOWE, co oznacza, że nie ma znaczenia, który biegun magnesu będzie trzymany blisko czujnika, wyśle on 0 danych, gdy w pobliżu jest jakieś pole magnetyczne i 1, gdy go nie ma, mianowicie magnes jest oddalony (dalej niż powiedzmy 5 cm) od czujnika.
3. Przygotuj podobny karton 21x21 cm i przymocuj do niego Arduino Mega i długą płytkę stykową. Możesz również ponownie wyciąć 4 ściany o dowolnej wysokości z tektury i skleić je pionowo za pomocą tych dwóch warstw kwadratowych desek o wymiarach 21x21 cm. Następnie postępuj zgodnie ze schematami Fritzing, aby ustawić wszystko. Możesz także ustawić czytnik RFID, gdy skończysz z diodami LED i czujnikami Halla.
4. Sprawdź, czy wszystkie diody i czujniki działają, wysyłając sygnały za pomocą podstawowych kodów. Nie unikaj tego kroku, ponieważ pozwoli Ci to sprawdzić, czy wszystko działa poprawnie i przejść do dalszej budowy planszy.
5. Przygotuj pionka i hetmana z dwoma magnesami o promieniu 10 cm przymocowanymi poniżej oraz okrągłymi znacznikami RFID. Później będziesz musiał odczytać identyfikatory tych tagów z ekranu szeregowego na Arduino IDE.
6. Jeśli wszystko działa dobrze, możesz uruchomić główny kod i wypróbować różne rzeczy!
7 (opcjonalnie). Możesz wykonać artystyczne prace z drewnem, które nada demo bardziej naturalny wygląd. To zależy od twojej woli i wyobraźni.
Krok 6: Niektóre zdjęcia i filmy z różnych etapów
Krok 7: Kod źródłowy
Teraz, gdy skończymy z prototypem, jesteśmy gotowi, aby go ożywić za pomocą poniższego kodu Arduino. Starałem się zostawić jak najwięcej komentarzy, aby proces analizy kodu był zrozumiały. Szczerze mówiąc, logika może wydawać się nieco skomplikowana na pierwszy rzut oka, ale jeśli zagłębisz się w logikę kodu, będzie wyglądała na bardziej kompleksową.
Uwaga: Podobnie jak na prawdziwej szachownicy, abstrakcyjnie numerowałem kwadraty jako A1, A2, A3, A4, B1, …, C1, …, D1,.., D4. Jednak w kodzie używanie tej notacji nie jest praktyczne. Dlatego użyłem tablic i reprezentowałem kwadraty odpowiednio jako 00, 01, 02, 03, 10, 11, 12, 13, …, 32, 33.
Dziękuję za uwagę! Przetestuj wszystko i pisz w komentarzach o wszelkiego rodzaju błędach, które pominąłem, ulepszeniach, sugestiach itp. Czekamy na opinie na temat projektu. Jeśli potrzebujesz jakiejkolwiek pomocy przy projekcie, napisz do mnie ([email protected]) lub dodaj skype (tahir.miriyev9r1), abyśmy mogli umówić się na rozmowę i omówić szczegóły. Powodzenia!