Spisu treści:

Konsola Arduino VGA z pięcioma grami: 4 kroki
Konsola Arduino VGA z pięcioma grami: 4 kroki

Wideo: Konsola Arduino VGA z pięcioma grami: 4 kroki

Wideo: Konsola Arduino VGA z pięcioma grami: 4 kroki
Wideo: 50. Jak z Arduino zrobić konsolę do gier? 2024, Lipiec
Anonim
Image
Image
Konsola Arduino VGA z pięcioma grami
Konsola Arduino VGA z pięcioma grami
Konsola Arduino VGA z pięcioma grami
Konsola Arduino VGA z pięcioma grami

W moich poprzednich Instructables odtworzyłem uproszczone wersje niektórych z najpopularniejszych klasycznych gier zręcznościowych, za pomocą samego Arduino i kilku innych komponentów. Później połączyłem pięć z nich w jeden szkic. Tutaj pokażę, jak zbudować prostą konsolę do gry w Pong, Breakout, Bomber, Tetris oraz zabawkę do rysowania inspirowaną Etch-a-Sketch. Na tej konsoli można również zagrać w Snake i dwie inne gry napisane przez innych autorów: Bit Ninja Sandro Maffiodo aka „Smaffer” i Stacker Nikity Kurylev.

Główną cechą jest generowanie sygnału VGA, dzięki bibliotece VGAx, stąd konsola potrzebuje monitora VGA. Moim celem, jak zwykle, jest uniknięcie jakichkolwiek „specjalnych elementów” do budowy, nie potrzebujesz wtedy żadnych wspierających układów scalonych ani osłon! Jedyne elementy to dwa potencjometry, pięć przycisków, kilka rezystorów i złącze DSUB15 (VGA). Głośnik piezoelektryczny jest opcjonalny. Możesz zobaczyć, jak te gry wyglądają na zdjęciach na tej stronie.

Biblioteka VGAx pozwala na użycie czterech kolorów o rozdzielczości 120 x 60 pikseli, niewiele, ale wystarcza na tę retro konsolę do gier. Grafika jest surowa, ale dzięki zastosowaniu potencjometrów gry działają płynnie. Dostępne są również proste efekty dźwiękowe.

Krok 1: Jak zbudować własną konsolę Arduino VGA?

Jak zbudować własną konsolę Arduino VGA?
Jak zbudować własną konsolę Arduino VGA?
Jak zbudować własną konsolę Arduino VGA?
Jak zbudować własną konsolę Arduino VGA?

Najpierw pobierz kody ArduinoVGAgame.ino i/lub Snake.ino na dole tej strony i skopiuj je na swój komputer w katalogu o tej samej nazwie. Pobierz bibliotekę VGAx z tego łącza na GitHub. Najprostszym sposobem jest skopiowanie go do podfolderu oprogramowania Arduino o nazwie „biblioteki”, aby był natychmiast rozpoznawany.

WAŻNE: ta biblioteka działa dla Arduno IDE 1.6.4, ale nie jest w pełni kompatybilna ze starszymi lub nowszymi wersjami.

Prześlij kod na swoją płytkę Arduino (testowałem zarówno Uno, jak i Nano). Ostrzeżenie o małej ilości dostępnej pamięci jest normalne. Jeśli nie masz innych błędów wszystko jest w porządku i możesz od razu zacząć budować własną konsolę.

Do tego potrzebujesz:

  • Arduino Uno Rev. 3 lub Arduino Nano 3.x (ATmega328)
  • złącze DSUB15, tj. złącze żeńskie VGA lub kabel VGA do przecięcia.
  • rezystory: 2 x 68 Ohm i 2 x 470 Ohm oraz 5 x 1 do 2 kOhm
  • dwa potencjometry liniowe 10 kOhm (podobne wartości też są w porządku)
  • pięć przycisków
  • kawałek kabla
  • jedno lub dwa ładne pudełka do umieszczenia wszystkich komponentów.

Fakultatywny:

  • deska do krojenia chleba lub stripboard
  • głośnik piezo

Schemat znajduje się na początku tego kroku wraz z przykładem gotowej „konsoli”.

schemat pokazuje jak podłączyć przycisk i potencjometr. Dokładniej, musisz podłączyć pięć przycisków odpowiednio do pinów 5, 10, 11, 12 i 13. Akcja wykonywana przez każdy przycisk jest opisana w prawej górnej tabeli na schemacie. Po lewej pokazano jak podłączyć potencjometr (potrzebne są dwa potencjometry do pinów A1 i A2). Głośnik należy podłączyć do analogowego pinu A0.

Płytkę Arduino ze złączem VGA umieściłem w drewnianym pudełku, w którym znajduje się również potencjometr pierwszego gracza i cztery przyciski, podczas gdy potencjometr drugiego gracza i przycisk startu znajdują się w osobnym, mniejszym pudełku.

Jeśli podoba Ci się ta zabawka i zdecydujesz się ją odtworzyć, doceniam, że napiszesz komentarz lub wyślesz zdjęcie w sekcji komentarzy poniżej.

Krok 2: Gry od innych autorów

Sandro Maffiodo niedawno opublikował grę BitNinja. Więcej informacji znajdziesz tutaj i pobierz kod tutaj.

Aby korzystać z mojej konsoli, wystarczy zremapować przycisk w jego kodzie w następujący sposób:

#define BTN_UP 11 (zamiast 13)

#define BTN_LEFT 10 (zamiast 12)

#define BTN_RIGHT 12 (zamiast 11)

Stacker od Nikity Kurylowa jest dostępny tutaj. Więcej informacji tutaj.

Ponownie, musisz przemapować jeden przycisk, w innej części kodu: po prostu zamień digitalRead(2) na digitalRead(13)

Krok 3: Dodatek 1: Więcej szczegółów na temat budowania kontrolerów

Załącznik 1: Więcej szczegółów na temat budowania kontrolerów
Załącznik 1: Więcej szczegółów na temat budowania kontrolerów
Załącznik 1: Więcej szczegółów na temat budowania kontrolerów
Załącznik 1: Więcej szczegółów na temat budowania kontrolerów
Załącznik 1: Więcej szczegółów na temat budowania kontrolerów
Załącznik 1: Więcej szczegółów na temat budowania kontrolerów
Załącznik 1: Więcej szczegółów na temat budowania kontrolerów
Załącznik 1: Więcej szczegółów na temat budowania kontrolerów

Możesz zrealizować kontroler na wiele różnych sposobów, w zależności od dostępnego materiału i Twojego gustu.

Lubię je realizować za pomocą drewnianych pudełek (patrz zdjęcia na tej stronie). Skrzynka główna dla Arduino, złącze VGA oraz przyciski pierwszego odtwarzacza i potencjometr; drugi (mniejszy) tylko na przycisk i koło drugiego gracza (potrzebne do Ponga i zabawki do rysowania). Inną możliwością jest umieszczenie wszystkiego w jednym większym pudełku.

Najpierw polecam podłączyć port VGA. Na pierwszym i drugim zdjęciu widać pewne szczegóły: zwróć uwagę na dwa rezystory 470 Ohm dla czerwonego i zielonego podłączone odpowiednio do pinów 6 i 7 oraz dwa 68 Ohm do pinów 3 i 9 dla sygnału synchronizacji poziomej i pionowej.

Możesz wybrać różne kombinacje kolorów w zależności od pinów podłączonych do złącza VGA DSUB15, piny 1, 2 i 3 reprezentują odpowiednio czerwony, zielony, niebieski (RGB). Podłączyłem piny 1 i 2, więc mam następującą kombinację kolorów: (0, 0) = czarny; (1, 0) = czerwony; (0, 1) = zielony; (1, 1) = żółty.

W przypadku wszystkich różnych możliwości proponuję zapoznać się ze szczegółami na stronie, z której pobierasz biblioteki VGAx.

Jak tylko złącze VGA będzie gotowe, możesz przygotować wszystkie inne kable do przycisków, kółek i głośnika (patrz rysunek 2).

Teraz po prostu złóż wszystko razem: pamiętaj, że każdy pin przycisku musi być podłączony do masy przez rezystor 1 lub 2 kOhm, w przeciwnym razie, gdy przycisk jest otwarty, stan pinu może być nieokreślony. Oznacza to, że jeśli pin pozostanie odłączony, możesz mieć na nim losowe (statyczne) napięcie, które może go aktywować. Zobacz więcej szczegółów na schemacie w drugim kroku tej instrukcji.

Ostatnim krokiem jest naprawienie wszystkiego na miejscu. Użyłem pistoletu do klejenia na gorąco, ale możesz użyć swojej ulubionej metody.

Krok 4: Dodatek 2: Niektóre uwagi dotyczące limitów pamięci

To niesamowite, że proste Arduino jest w stanie generować sygnał VGA i wszystkie te gry razem. Prawdziwym wąskim gardłem jest brak SRAM. Mikrokontroler AVR ma tylko 2048 bajtów dostępnych do przechowywania i manipulowania zmiennymi, a biblioteka VGAx przechowuje zmienne ekranowe w buforze ramki 120x60 pikseli, gdzie każdy piksel potrzebuje 2 bitów (4 kolory), co daje łącznie 1800 bajtów. Oznacza to, że na zmienne szkicu pozostało tylko 248 bajtów. Co więcej, z mojego doświadczenia wynika, że należy pozostawić co najmniej 100 bajtów wolnych, aby uniknąć niestabilności. Wykorzystując ponad 1950 bajtów pamięci dynamicznej, mikrokontroler zaczyna wykazywać dziwne i nieprzewidywalne zachowanie.

Oznacza to, że wszystkie zmienne muszą być współdzielone przez różne gry, a to sprawia, że kod jest nieczytelny i trudny do debugowania. To nie tylko kwestia „dodania nowej gry” do poprzedniego szkicu, ale cały kod musi być głęboko zmodyfikowany i zoptymalizowany.

Ponadto musiałem użyć minimalnego możliwego formatu zmiennej: na przykład dla wszystkich współrzędnych musiałem użyć „byte” zamiast „int” lub, w innych przypadkach, musiałem preferować „int” zamiast „float”.

Na koniec moje podziękowania kieruję do Sandro Maffiodo aka Smaffera, twórcy biblioteki VGAx i niesamowitej gry BitNinja. Bez tej biblioteki ten projekt nie mógłby zostać zrealizowany.

Dziękuję również Nikita Kurylev za prostą, ale zabawną grę Stacker.

Zalecana: