Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'Konsola'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona

Znaleziono 2 wyniki

  1. Podczas ostatniej akcji kuponowo-rabatowej stałem się posiadaczem RaspberryPi 3B+. Od początku w planach miałem wykorzystanie tego mini komputerka jako serce konsoli retro. W pierwszej chwili chciałem stworzyć duży, stacjonarny automat Arcade. W porę doszedłem jednak do wniosku, iż nie mam za bardzo miejsca na taki "mebel". Dlatego też wizja się zmieniła. Postanowiłem zbudować przenośne urządzenie, podpinane do dowolnego Tv za pomocą kabla HDMI o długości 5m. Tak oto zrodziły się pierwsze plany. Zrobiłem jak zwykle przegląd rynku, sprawdziłem ceny poszczególnych elementów, analizowałem swoje możliwości wykonania obudowy. Ten etap trwał dość długo, ponieważ nie ukrywam, iż mam mało czasu na takie zabawy. Jednak w maju w końcu zabrałem się do budowy. Na początek musiała powstać przemyślana obudowa. Zdecydowałem się na zestaw przycisków i joystików z Aliexpress (nie spieszyło mi się, a za zaoszczędzone pieniądze można kupić coś dodatkowo). I tak oto w czerwcu stałem się posiadaczem zestawu jak poniżej: Oczywiście na tym etapie wybrałem już sposób rozmieszczenia przycisków i dokupiłem dodatkowo przyciski COIN oraz 1GRACZ i 2GRACZY (dolny rząd): Obudowa została wykonana ze starych paneli, narożniki wzmocnione kantówką 2x3cm i 2x2cm (wszystko z posiadanych ścinków). Rozplanowałem też umieszczenie wentylatora nawiewowego oraz kratki wentylacyjnej, co by zapewnić naszej konsoli dobre warunki pracy (wentylator z PC na 12V). Panele są różne, więc po wykonaniu pudła całość została przeciągnięta szpachlą samochodową z włóknami wzmacniającymi oraz przeszlifowana. Tak wykonana obudowa została oklejona folią carbon zakupioną na allegro. Skoro przyjąłem, że konsola będzie przenośna to trzeba było wzmocnić narożniki. Zrobiłem to z wykorzystaniem kątowników aluminiowych oraz narożników. Pozostało wykonanie połączeń elektrycznych. Przyciski są podświetlane, więc szkoda było tego nie wykorzystać. Stąd mamy po 4 przewody do każdego przycisku. Wykorzystałem posiadany zasilacz 5V 4A i zasiliłem z niego całość: poprzez przejściówki adapter gniazda 5.5/2.1-microUSB RaspPi, podświetlenie przycisków, wentylator. Na potrzeby wentylatora od PC dołożyłem małą przetwornicę StepUp ustawioną na 12V. Trzeba było rozplanować wyprowadzenie HDMI, USB i gniazdo zasilania z obudowy. W tym celu wyfrezowałem sobie płytkę z aluminium i umieściłem w niej takie oto przedłużki: Oczywiście serce naszej konsoli również znalazło się w środku wraz z oprogramowaniem RetroPie 4.5 i kartą SD 64GB zapełniona grami. Przy pierwszej konfiguracji korzystałem ze standardowej klawiatury PC ale w późniejszym etapie dla wygody wykorzystuję klawiaturę MT08 oraz dorywczo pad Tracer Recon PC. Nie opisuję procesu instalacji i konfiguracji RetroPie, ponieważ najlepiej w tym celu korzystać z internetu i strony projektu; https://retropie.org.uk/ Całość działa od kilku dni. Miałem sporo problemów z konfiguracją joysticków. Początkowo dobrze działały tylko w menu RetroPie a w grach osie i przyciski były pozamieniane. Poradziłem sobie z tym ręcznie edytując pliki konfiguracyjne i w nich dokonałem odpowiednich zmian. Dłuższe testy pokażą co należy zmienić. Już na wstępie planuję dodanie przycisku do zał/wył malinki: Do dopełnienia całości - od spodu znajduje się 6 gumowych nóżek, by nie rysować stołu/ławy itp. Wszystkie zdjęcia pochodzą z różnych etapów budowy i nie koniecznie odzwierciedlają w pełni gotowe urządzenie. Jednak już w takiej formie przechodziło wstępne testy. RaspPi jest podczepione do dolnej płyty. Wszystko w środku zamocowane by nic nie latało. Wentylator wraz z przeciwległą kratką zapewniają bardzo dobre chłodzenie wszystkich urządzeń. Na razie z niedogodności to w razie problemów z kartą sd trzeba rozkręcić dół (8 śrubek w narożnikach). Przydałaby się jakaś mała klapka rewizyjna, ale na razie nie mam pomysłu na jej wykonanie. Ostatecznie dodam chyba również oznaczenia na przyciskach.
  2. Cześć majsterkowicze! Jakiś czas temu zakupiłem konsolę Nintendo Switch, po wielu godzinach frajdy jaką mi dała włączył mi się instynkt majsterkowicza i zrodziła idea zbudowania własnej konsoli. 😃 Początkowo rozważałem użycie Raspberry Pi i zbudowanie handheldowego emulatora na Retro Pi. Jednak biorąc pod uwagę, że z zawodu jestem programistą a tam nie miałbym za wiele do "kodzenia" stwierdziłem, że zejdę poziom niżej i spróbuję coś zrobić w oparciu o AtMegę. Zamysł był prosty, stworzyć konsolę na AtMedze z własnym firmware i silnikiem do tworzenia gier a potem zaprogramować na nią jakieś gry. Pod ręką jednak nie miałem żadnego wolnego "odpowiednio mocnego" mikrokontrolera od MicroChipa, więc musiałem się poratować Arduino ProMini z AtMegą 328. Do interakcji z użytkownikiem wykorzystałem TactSwitche (4 jako przyciski kierunkowe, 1 akcji ale rozważam dodanie 2 przycisku akcji aby stworzyć układ znany z klasycznego GameBoya) oraz wyświetlacz OLED 128x64 komunikujący się z Arduino przez I2C. Do tego wszystkiego dołączyłem Buzzer aby dodać efekty dźwiękowe i proste melodyjki 🙂 Zasilanie całej konsoli odbywałoby się przez stabilizator 7805 z baterii 9V (wiem, że jest niekonieczny przy Arduino ale zostawiłem go na wypadek późniejszej wymiany Arduino na suchą AtMege :D). Poniższy schemat pokazuje nieskomplikowaną budowę konsoli. Jako pierwszą grę stworzyłem klona kultowego Pong ale dla jednego gracza (drugą paletką kieruje sztuczna inteligencja). Kod gry można zobaczyć poniżej: #include <Adafruit_SSD1306.h> #include "engine.h" #define PLAYER_SPEED 50 #define ENEMY_SPEED 80 #define BALL_START_SPEED 40 #define BALL_MAX_SPEED 60 float player_y; float enemy_y; float enemy_movement; unsigned long last_decision; unsigned long last_incrementation; float ball_x; float ball_y; short ball_speed; short ball_motion_x; short ball_motion_y; short player_score; short enemy_score; long currentTime; long oldTime; float deltaTime; void resetBall() { ball_x = 62; ball_y = 30; ball_motion_x = -1; ball_motion_y = 1; ball_speed = BALL_START_SPEED; delay(500); } void gameSetup() { player_y = 22; enemy_y = 22; enemy_movement = 0; player_score = 0; enemy_score = 0; resetBall(); } void gameLoop(short axis_x, short axis_y, bool action) { oldTime = currentTime; currentTime = millis(); deltaTime = (float)(currentTime - oldTime) / 1000; player_y += PLAYER_SPEED * axis_y * deltaTime; enemy_y += ENEMY_SPEED * enemy_movement * deltaTime; // Enemy AI float distance = sqrt(pow(ball_x - 121, 2) + pow(ball_y - enemy_y, 2)); enemy_movement = 0; if (distance > 15 && distance < 100) { if (millis() - last_decision > 50) { if (ball_y > enemy_y + 10) { enemy_movement = 1; } else if (ball_y < enemy_y + 10) { enemy_movement = -1; } last_decision = millis(); } } player_y = constrain(player_y, 0, 44); enemy_y = constrain(enemy_y, 0, 44); // Ball movement ball_x += ball_speed * ball_motion_x * deltaTime; ball_y += ball_speed * ball_motion_y * deltaTime; if (ball_y >= 64 - 4 || ball_y <= 0) { ball_motion_y *= -1; } if (ball_x >= 4 && ball_x <= 7 && ball_motion_x < 0) { if (ball_y > player_y - 4 && ball_y < player_y + 20) { ball_motion_x *= -1; } // Increment ball speed with every successfull bounce if (ball_speed < BALL_MAX_SPEED) { ball_speed++; } } if (ball_x >= 121 && ball_x <= 124 && ball_motion_x > 0) { if (ball_y > enemy_y - 4 && ball_y < enemy_y + 20) { ball_motion_x *= -1; } } // Count score if (ball_x > 128) { player_score += 1; resetBall(); } if (ball_x < 0) { enemy_score += 1; resetBall(); } // Game over condition if (enemy_score > 10) { gameOver(); } // Win condition if (player_score > 10) { playerWins(); } } void gameDraw(Adafruit_SSD1306 display) { display.clearDisplay(); // Draw player display.fillRect(0, player_y, 3, 20, SSD1306_WHITE); // Draw enemy display.fillRect(125, enemy_y, 3, 20, SSD1306_WHITE); // Draw ball display.fillRect(ball_x, ball_y, 4, 4, SSD1306_WHITE); // Draw mid line for (int i = 0; i < 32; i++) { int position = 4 + (4 * (i-1)); display.fillRect(63, position, 2, 2, SSD1306_WHITE); } // Draw score display.setTextColor(SSD1306_WHITE); display.setTextSize(1); display.setCursor(50, 0); display.println(player_score); display.setCursor(72, 0); display.println(enemy_score); display.display(); } Nie jest to "samowystarczalny" kod Arduino, do działania wymaga on jeszcze firmware i silnika do gier, którego ze względu na niedopracowanie nie mogę go teraz pokazać (ale gdy tylko go skończę udostępnię całość na GitHub :D). Kod gry jest banalny. Do grafiki używam biblioteki od AdaFruit. Sztuczną inteligencją kieruje implementacja algorytmu "Chaser" do gry PONG z małymi moimi modyfikacjami (reakcja dopiero w momencie gdy piłka będzie na odpowiednim dystansie oraz opóźnienie reakcji AI aby ją bardziej "uczłowieczyć" i dać jakieś szanse na zwycięstwo graczowi (aczkolwiek i tak z tym cieżko bo czas reakcji bota jest dosyć niski XD, obecnie jest to ok. 50ms. Dla porównania człowiek przeciętnie ma reakcję po ok. 200ms). Gra się kończy gdy jeden z graczy zdobędzie 10 punktów, punkty zdobywamy odbijając piłeczkę tak aby przeciwnik nie mógł jej odbić (gdy piłka "wyleci za paletkę" punkt otrzymuje gracza używający przeciwnej paletki). W silniku brakuje jeszcze wielu rzeczy min. obliczania delta time wewnątrz silnika i przekazywanie wyniku do gry czy bardziej dopracowanego kodu odpowiedzialnego za sterowanie dźwiękiem (w tym prostego "odtwarza" melodyjek zapisanych jako sekwencja dźwięków). Do tego nie ma jeszcze obsługi ekranu końca gry (oraz zwycięstwa) i tak zwane splash screenu przed startem. Jednak gra jest grywalna co można zobaczyć na filmiku na samym dole. Prototyp prezentuje się tak: Jest zbudowany na płytce stykowej (podłączone są na razie tylko dwa przyciski, które są wykorzystywane w grze. Odłączony tak samo jest Buzzer, który na razie odtwarza w pętli trzy dźwięki). W planach jest również stworzenie na drukarce 3D obudowy w tym przeniesienie całego układu na PCB by zrobić z urządzenia pełnoprawną konsole😄 Gdy uda mi się skończyć firmware i silnik w planach mam dalsze wspieranie konsoli tworząc na nią kolejne gry (następne w kolejce są klon Froggera i Tetrisa). Z powodu dodawania kolejnych gier może dojść potrzeba dołączenia dodatkowej pamięci EEPROM lub modułu z kartą SD. (Koncepcja finalnego produktu. Wiem, że artysta ze mnie średni :D) Link do wideo z działaniem konsoli
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.