|

Gra Snake na Arduino Nano z wyświetlaczem OLED i joystickiem analogowym

Gra Snake na Arduino Nano z wyświetlaczem OLED i joystickiem analogowym

W tym wpisie przedstawiamy prosty projekt DIY inspirowany klasyczną grą Snake. Stworzymy niewielką konsolkę na bazie mikrokontrolera Arduino Nano, wyposażoną w wyświetlacz OLED 0,96″ oraz joystick analogowy. Kod realizujący grę został znaleziony w Internecie, nie znamy jego oryginalnego autora. Projekt ma charakter edukacyjny i pokazowy, pozwalając samodzielnie zbudować działającą grę retro z użyciem podstawowych komponentów elektronicznych.

Lista potrzebnych elementów

Zanim przystąpimy do montażu, przygotujmy następujące komponenty:

  • Uniwersalna płytka PCB 3x7cm dwustronna
  • Gniazdo goldpin 1×4 pin żeńskie proste 2.54mm
  • 2× Gniazdo goldpin 1×15 pin żeńskie proste 2.54mm
  • Nano V3.0 z USB-C moduł nielutowany
  • Wyświetlacz OLED 0,96″ 128x64px I2C, niebieski
  • Joystick analogowy 3-osiowy z przyciskiem

Oprócz powyższych elementów przydatne będą również podstawowe przewody połączeniowe tzw. kynary lub przewody montażowe, lutownica oraz cienka cyna do lutowania, a także ewentualnie narzędzia do przycięcia pinów czy przewodów.

👉 Aby ułatwić, przygotowaliśmy gotowy koszyk z wszystkimi produktami potrzebnymi do wykonania projektu. Dzięki temu możesz dodać je do zamówienia jednym kliknięciem i od razu przejść do montażu.

Tabela połączeń

Poniższa tabela podsumowuje połączenia między modułami OLED, joystick a pinami Arduino Nano:

KomponentPin Arduino NanoUwagi
OLED SDAA4magistrala I²C dane
OLED SCKA5magistrala I²C zegar
OLED VDD5Vzasilanie +5V
OLED GNDGNDmasa
Joystick VRXA7oś X analog
Joystick VRYA6oś Y analog
Joystick SWA3przycisk
Joystick +5V5Vzasilanie +5V
Joystick GNDGNDmasa

Montaż krok po kroku

1. Przygotowanie elementów i PCB

Moduł Arduino Nano, niewielki wyświetlacz OLED 0,96″, płytka prototypowa PCB 3×7 cm oraz moduł analogowego joysticka, a także złącza goldpin żeńskie listwy do wlutowania. Przed rozpoczęciem prac upewnijmy się, że rozumiemy rozmieszczenie pinów Arduino Nano oraz wyprowadzeń joysticka i wyświetlacza OLED. Arduino Nano w wersji nielutowanej wymaga przylutowania złączy w naszym projekcie wykorzystamy dwie listwy żeńskie 1×15 pin dla pinów modułu Nano w dwóch rzędach oraz jedno żeńskie złącze 1×4 pin dla wyświetlacza. Joystick analogowy posiada własne wyprowadzenia na płytce wejścia osi i przycisk.

2. Lutujemy Arduino Nano tylko boczne listwy pinów

Przed rozpoczęciem prowadzenia przewodów pod płytką przygotowujemy moduł Arduino Nano w wersji nielutowanej. W naszym projekcie przylutowujemy wyłącznie dwa boczne rzędy pinów 2×15. Celowo nie montujemy górnego złącza ISP, ponieważ znajdują się one dokładnie w miejscu, gdzie pracuje joystick. Przy maksymalnym wychyleniu w lewo drążek joysticka mógłby uderzać o wystające piny złącza ISP, dlatego pozostawiamy tę część modułu nieobsadzoną, aby zapewnić pełny zakres ruchu i uniknąć kolizji mechanicznej.

Po przylutowaniu bocznych listew przechodzimy do lutowania złącz na płytce pod nano i wyświetlacz.

3. Lutowanie złącz na płytce

Na płytce uniwersalnej wyznaczamy miejsce pod moduł Arduino Nano oraz pozostałe złącza. Najlepiej włożyć Arduino Nano w listwy 1×15 pin i ułożyć całość na płytce PCB, aby pasowały do siebie, po czym przylutować listwy do płytki. Następnie lutujemy żeńskie złącze 1×4 pin, będzie ono służyło do podłączania wyświetlacza OLED, który wygodnie wpinamy na goldpiny, zamiast lutować bezpośrednio. Po przylutowaniu wszystkich gniazd powinniśmy otrzymać płytkę prototypową z solidnie zamontowanymi gniazdami: dwoma długimi 15-pinowymi dla Arduino Nano oraz jednym 4-pinowym dla OLED. Sprawdźmy, czy luty są poprawne i czy nie występują żadne zwarcia między polami lutowniczymi.

4. Lekka modyfikacja joysticka prostowanie i skierowanie pinów w dół

Joystick analogowy, w swojej standardowej wersji, posiada piny skierowane poziomo w bok, co odstaje od płytki i utrudnia estetyczny montaż. Aby całość wyglądała schludniej i układała się lepiej na PCB, wykonujemy niewielką modyfikację polegającą na zmianie kierunku pinów na pionowe, skierowane w dół. W tym celu:

  • Wylutowujemy oryginalne piny joysticka, najlepiej używając plecionki lub odsysacza, aby nie uszkodzić pól lutowniczych.
  • Po usunięciu fabrycznych pinów przycinamy je, aby były proste, bez bocznego zagięcia.
  • Przygotowane piny lub nowe goldpiny wkładamy pionowo od spodu modułu, tak by wychodziły w dół.
  • Stabilnie przylutowujemy piny w nowej pozycji.

Cała modyfikacja jest estetyczna i porządkująca, niekonieczna do działania układu, jeśli nie masz doświadczenia w wylutowywaniu tylu pinów naraz, możesz zostawić joystick w formie fabrycznej, a projekt również zadziała. Następnie umieszczamy zmodyfikowany joystick po prawej stronie płytki, w naszym przypadku mocując go na taśmie dwustronnej 3M.

5. Połączenie przewodami pod płytką

Widok od spodu zmontowanej płytki ukazuje wykonane połączenia przewodami, wszystkie niezbędne połączenia zostały zrealizowane przy pomocy cienkich przewodów kynar, poprowadzonych pod płytką drukowaną. W ten sposób moduły można łatwo podłączyć zgodnie ze schematem. Wyświetlacz OLED korzysta z interfejsu I²C, dlatego jego piny SDA i SCL połączyliśmy z analogowymi wejściami A4 i A5 Arduino Nano są to wyprowadzenia obsługujące I²C. Zasilanie OLED VCC zostało doprowadzone do 5V Nano, a GND do masy. Joystick analogowy wymaga podłączenia obu osi do wejść analogowych mikrokontrolera, przewodem połączyliśmy wyjście VRX z pinem A7 Arduino, a VRY z pinem A6. Wyjście przycisku SW joysticka podłączone zostało do pinu A3 Arduino wykorzystanego jako wejście cyfrowe z rezystorem podciągającym. Oprócz tego moduł joysticka zasiliamy z 5V i GND. Powyższe połączenia przedstawia tabela w kolejnym rozdziale.

6. Montaż modułów i uruchomienie projektu

Arduino Nano zostało wpięte w dwie równoległe listwy żeńskie, moduł joysticka przymocowany do płytki i podłączony przewodami, a wyświetlacz OLED osadzony w gnieździe 1×4 pin. Taka konstrukcja pozwala łatwo demontować poszczególne elementy w razie potrzeby np. do programowania Arduino lub poprawek w okablowaniu.

Po zakończeniu montażu oraz wykonaniu wszystkich połączeń układ jest gotowy do uruchomienia. W tym momencie zarówno Arduino Nano, jak i joystick oraz wyświetlacz OLED tworzą kompletny zestaw sprzętowy, który może obsłużyć działanie gry. Kolejnym krokiem jest więc wgranie odpowiedniego programu, który ożywi cały projekt i pozwoli sterować wężem na ekranie.

Kod gry Snake

Kod programu realizującego grę Snake na Arduino Nano zamieszczamy poniżej.


Program wykorzystuje bibliotekę Adafruit_SSD1306 do obsługi wyświetlacza OLED oraz odczytuje dane z joysticka analogowego w celu sterowania ruchami węża. Warto zauważyć, że w kodzie zdefiniowano podstawowe parametry gry m.in. rozdzielczość planszy zależną od wielkości „pixela” węża ustalonej przez zmienną SNAKE_BLOCK_SIZE, mechanikę wzrostu węża po zjedzeniu jedzenia, losowe pojawianie się jedzenia na ekranie oraz warunek końca gry kolizja z samym sobą.

Po wgraniu powyższego programu do Arduino Nano konsolka jest gotowa do działania. Na ekranie OLED pojawi się napis SNAKE i komunikat startowy, gra rozpocznie się po wciśnięciu przycisku wbudowanego w joystick.

W trakcie gry wąż porusza się w sposób ciągły, a kierujemy nim, wychylając drążek joysticka w żądanym kierunku. Celem gry jest zbieranie jak największej liczby „pokarmów” pojawiających się jako małe piksele na ekranie bez kolizji z samym sobą i obramowaniem. Gdy wąż zje pokarm, wydłuża się, w kodzie zrealizowano to poprzez dodanie nowego segmentu do tablicy segmentów węża.

Gdy nastąpi zderzenie, gra wyświetla ekran z martwym wężem oraz podsumowaniem wyników bieżący wynik, najlepszy wynik i oczekuje na ponowne naciśnięcie przycisku, aby zresetować grę.

Nam w zespole msalamon, udało się wykręcić aż 54 punkty!
A Tobie? Daj znać w komentarzu, jaki wynik udało Ci się zdobyć i czy udało Ci się pokonać naszego rekordzistę. 😄

Rozszerzanie projektu

Projekt gry Snake można dowolnie modyfikować i rozbudowywać. Zachęcamy do eksperymentowania, poniżej kilka pomysłów na usprawnienia:

  • Zmiana grafiki startowej – możesz zmodyfikować wyświetlany ekran powitalny np. dodać własne logo czy nazwę swojej wersji gry.
  • Dodanie dźwięków – warto podłączyć mały buzzer do Arduino i wykorzystać funkcję tone(), aby wydawać sygnały dźwiękowe np. przy zjedzeniu pokarmu lub końcu gry.
  • Regulacja prędkości i poziomu trudności – można dostosować tempo gry np. zwiększać szybkość węża wraz z wynikiem lub nawet wykorzystać potencjometr do wyboru poziomu trudności przed startem rozgrywki.
  • Zmiana rozmiaru pola gry – zmieniając stałą SNAKE_BLOCK_SIZE, w kodzie określamy wielkość segmentu węża, co wpływa na „rozdzielczość” planszy. Mniejszy rozmiar segmentu da więcej pól gry trudniej sterować, a większy mniej pól łatwiej, ale krótsza gra.
  • Inne sterowanie – jeśli nie masz joysticka, kod można łatwo dostosować do sterowania za pomocą czterech przycisków kierunkowych.

Podsumowanie

Mamy nadzieję, że powyższy projekt dostarczył Ci wiele radości z budowy własnej mini konsoli do gry Snake. To świetny sposób na naukę podstaw elektroniki i programowania mikrokontrolerów. Powodzenia w realizacji i modyfikacjach projektu!


Prezentowaną w artykule elektronikę znajdziesz oczywiście w naszym sklepie 👉 sklep.msalamon.pl 👈Zapraszamy również na nasze social media, gdzie na bieżąco informujemy o nowych produktach oraz o najciekawszych promocjach 😎👇


Podobne wpisy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *