Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

ATtiny85 Mini Arcade:Schlange

Komponenten und Verbrauchsmaterialien

Mikrochip-Technologie ATtiny85
× 1
Grafik-OLED, 128 x 64
× 1
SparkFun microB USB Breakout
× 1
Arduino Nano R3
× 1

Notwendige Werkzeuge und Maschinen

Lötkolben (generisch)
3D-Drucker (generisch)

Apps und Onlinedienste

Autodesk Fusion 360
Arduino-IDE

Über dieses Projekt

Inspiration und vergangenes Projekt

Im Dezember 2017 habe ich eine Handheld-Arduino-Pong-Konsole entwickelt, die einen Arduino Nano- und OLED-Bildschirm sowie zwei Tasten verwendet.

Das war damals in Ordnung, aber die Konsole war etwas zu groß und unhandlich. In letzter Zeit habe ich jedoch versucht, einige meiner früheren Projekte neu zu erstellen. Dieses Mal wollte ich eine sehr kleine Konsole entwickeln, auf der die Leute Snake spielen können.

Die ausgewählten Komponenten

Um die Konsole klein zu machen, konnte ich kein Arduino-Entwicklungsboard verwenden, weshalb ich mich für einen ATtiny85 entschieden habe.

Es verfügt über genügend I/O, um das Spiel auszuführen, einschließlich zweier ADC-Pins und eines I2C-Ports und eines GPIO-Pins. Ich habe mich für ein einfaches 2-Achsen-Joystick-/Schaltermodul entschieden, da es einfach anzuschließen ist und nur 3 Pins für die Signalisierung benötigt.

Schließlich war es an der Zeit zu entscheiden, welches Display benötigt wurde. Da der 128 x 64 OLED-Bildschirm von DFRobot eine geringe Größe, aber eine hohe Auflösung hat, habe ich mich dafür entschieden.

Löten eines Systems

Zu Beginn habe ich einen ATtiny85 an eine SOP-8-DIP-8-Breakout-Platine angeschlossen und an ein kleines Stück Perf-Board gelötet. Als nächstes lötete ich zwei Header an - einen für die Programmierung und den anderen für den Bildschirm. Danach habe ich die Pins des analogen Joysticks mit dem Perf-Board verbunden und entsprechend verdrahtet. Für den letzten Schritt habe ich eine Micro-USB-Breakout-Platine mit dem Rest des Systems zur Stromversorgung verbunden.

Entwerfen eines Gehäuses

Das Gehäuse wurde in Fusion 360 entworfen. Ich begann mit der Erstellung und Anordnung der Komponenten, die ich im eigentlichen Build verwendet habe, und erstellte dann ein Gehäuse um sie herum.

> " />

Ich wollte eine Arcade-Box aus den 80ern nachahmen, aber trotzdem eine sehr kleine Größe beibehalten. Unten sind einige Renderings des Gehäuses:

Programmierung des Spiels

Snake ist ein relativ einfach zu programmierendes Spiel. Ich habe eine maximale Schlangenlänge von 30 eingestellt, um RAM zu sparen, was bedeutet, dass der Spieler gewinnt, sobald die Schlange 29 Pixel gefressen hat. Um den Überblick über die Segmente der Schlange zu behalten, habe ich ein 2-dimensionales Array erstellt, das geordnete Paare für jedes Segment speichert.

Immer wenn sich der Kopf an eine neue Position bewegt, werden seine vorherigen Positionen nach unten kaskadiert. Jedes Mal, wenn ein Segment verbraucht wird, wird an einem zufälligen Punkt ein neues gespawnt. Die Kollisionsprüfung erfolgt, indem die Koordinaten jedes Segments durchlaufen und überprüft werden, ob die Koordinaten des Kopfes gleich sind. Außerdem verliert der Spieler, wenn er die Schlange entlang einer der Wände schlägt.

Schlange spielen

Ich begann damit, die Konsole einzuschalten und darauf zu warten, dass der Bildschirm das Essen und das erste Segment der Schlange geladen hat. Dann steuerte ich die Schlange einfach, indem ich den Joystick in die richtige Richtung bewegte, während ich ihr beim Essen zusah. Dieses Spiel macht Spaß und ist ein großartiger Langeweile-Killer in einem winzigen Paket.

Code

  • ATTiny85-Code
ATTiny85-CodeC/C++
Stellen Sie sicher, dass Sie zuerst U8g2lib installieren
//#include #include U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g(U8G2_R0,/* clock=/ 2, / data=/ 0, / reset=*/ U8X);#define MAX_LENGTH 30 //30 Segmente max#define X 0#define Y 1#define JOYSTICK_X 2#define JOYSTICK_Y 3#define DIR_THRESH 300 //Werte müssen entweder 0-300 oder 723-1023 sein um countuint8_t segmentPositions[MAX_LENGTH][ 2];uint8_t headPosition[2] ={63, 31}; //Schlange am Anfang von startuint8_t platzieren foodPosition[2]; //Wo sich das Essen befindetuint8_t tempPosition0[2]; //Position des vorherigen Segments speichern und an nextuint8_t weitergeben tempPosition1[2]; //Position des vorherigen Segments speichern, um es an nextint weiterzugeben segmentLength =1;void gameUpdate();enum DIRECTIONS { RIGHT, DOWN, LEFT, UP} currentDirection;void setup() { //TinyWireM.begin(); u8g.begin(); u8g.setPowerSave(0); pinMode (JOYSTICK_X, INPUT); pinMode (JOYSTICK_Y, INPUT); randomSeed (analogRead (0)); beginGame();}void loop() { u8g.firstPage(); do { gameUpdate(); u8g.setColorIndex(1); } while(u8g.nextPage());}void beginGame(){ currentDirection =RIGHT; spawnFood(); delay(1000);}bool checkCollisions(){ for(int i=1; i=128) return 1; else if(headPosition[Y] <=0 || headPosition[Y]>=64) return 1; Rückgabe falsch;}void spawnFood(){ int randomX =random(5, 123); int randomY =random(5, 60); foodPosition[X] =randomX; foodPosition[Y] =randomY;}void checkFoodEaten(){ if(headPosition[X] ==foodPosition[X] || headPosition[Y] ==foodPosition[Y]){ segmentLength +=1; spawnFood(); }}void updateDirection () { int joy_x_val =analogRead (JOYSTICK_X); int joy_y_val =analogRead (JOYSTICK_Y); if(joy_x_val <=DIR_THRESH) currentDirection =LEFT; sonst if(joy_x_val>=1023-DIR_THRESH) currentDirection =RIGHT; else if(joy_y_val <=DIR_THRESH) currentDirection =UP; else if(joy_y_val>=1023-DIR_THRESH) currentDirection =DOWN;}void displaySegments(){ for(int segment=0; segment =MAX_LENGTH) endGame(); delay(50);}void endGame(){ segmentLength =1; headPosition[0] =63; headPosition[1] =31; beginGame();}

Kundenspezifische Teile und Gehäuse

Schaltpläne


Herstellungsprozess

  1. TinyML-Spracherkennung basierend auf Edge Impulse &Arduino
  2. Arduino-Gyroskop-Spiel mit MPU-6050
  3. Arduino Digital Dice
  4. DIY 37 LED-Roulette-Spiel
  5. Tragbarer Reichweitendetektor
  6. Arduino Audio Reactive Desk Light
  7. Galvanisieren mit Kupfer
  8. NeoMatrix Arduino Pong
  9. Lichtsequenz-Ersteller
  10. Smart Plug