Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan

Komponen dan perlengkapan

ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan
Microchip Technology ATtiny85
×1
ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan
Graphic OLED, 128 x 64
×1
ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan
SparkFun microB USB Breakout
×1
ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan
Arduino Nano R3
×1

Alat dan mesin yang diperlukan

ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan
Pakuat solder (umum)
ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan
Printer 3D (umum)

Aplikasi dan layanan online

ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan
Autodesk Fusion 360
ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan
Arduino IDE

Tentang proyek ini

Inspirasi dan Proyek Lalu

Pada Desember 2017, saya membuat Konsol Pong Arduino Tangan yang menggunakan Arduino Nano dan layar OLED, bersama dengan dua tombol.

ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan

Ini cukup baik pada saat itu, tetapi konsol agak terlalu besar dan merepotkan. Namun akhir-akhir ini, saya telah mencoba merekreasi beberapa proyek saya sebelumnya. Kali ini, saya ingin membuat konsol yang sangat kecil yang dapat dimainkan orang untuk bermain snake.

ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan

Komponen yang Dipilih

Untuk membuat konsol kecil, saya tidak dapat menggunakan papan dev Arduino apa pun, itulah mengapa saya memilih ATtiny85.

ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan

Ia memiliki cukup I/O untuk menjalankan game, termasuk dua pin ADC dan port I2C, dan pin GPIO. Saya memilih untuk menggunakan modul joystick/switch 2-axis sederhana, karena mudah untuk dihubungkan dan hanya membutuhkan 3 pin untuk sinyal.

ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan

Terakhir, saatnya untuk memutuskan layar mana yang diperlukan. Karena layar OLED 128 x 64 DFRobot memiliki ukuran kecil tetapi resolusi yang cukup, saya memilihnya.

ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan

Menyolder Sistem

Untuk memulai, saya memasang ATtiny85 ke PCB breakout SOP-8 ke DIP-8 dan menyoldernya ke potongan perf-board kecil. Kemudian, saya menyolder dua header- satu untuk pemrograman dan yang lain untuk layar. Setelah melakukan itu, saya menghubungkan pin joystick analog ke perf-board dan menyalurkannya sesuai. Untuk langkah akhir, saya menyalurkan breakout board micro USB ke bagian sistem lainnya untuk daya.

ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan
ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan

Mendesain Enclosure

Enclosure dirancang di Fusion 360. Saya memulai dengan membuat dan menata komponen yang saya gunakan dalam pembangunan sebenarnya, lalu saya membuat enclosure di sekitarnya.

ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan
ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan

Saya ingin meniru kotak arcade dari tahun 80-an, tetapi tetap mempertahankan ukuran yang sangat kecil. Di bawah ini beberapa render enclosure:

ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan
ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan

Memrogram Game

Snake adalah game yang cukup mudah untuk diprogram. Saya menetapkan panjang snake maksimum 30 untuk menghemat RAM, berarti setelah snake memakan 29 piksel, pemain menang. Untuk melacak segmen snake, saya membuat array 2 dimensi yang menyimpan pasangan terurut untuk setiap segmen.

ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan

Setiap kali kepala pindah ke lokasi baru, posisinya sebelumnya akan runtuh ke bawah. Setiap kali segmen dikonsumsi, segmen baru akan muncul di titik acak. Pemeriksaan tabrakan dilakukan dengan mengiterasi koordinat setiap segmen dan melihat apakah koordinat kepala sama. Selain itu, mengenai dinding snake akan menyebabkan pemain kalah juga.

ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan

Memainkan Snake

Saya memulai dengan menyalakan konsol dan menunggu layar memuat makanan dan segmen pertama snake. Kemudian saya hanya mengarahkan snake dengan memindahkan joystick ke arah yang benar sambil melihatnya memakan makanan. Game ini menyenangkan untuk dimainkan dan adalah pembunuh kebosanan yang hebat dalam paket kecil.

ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan

Kode

Kode ATTiny85C/C++
Pastikan untuk menginstal U8g2lib terlebih dahulu
//#include <TinyWireM.h> #include <U8g2lib.h> U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g(U8G2_R0,/* clock=/ 2, / data=/ 0, / reset=*/ U8X8_PIN_NONE); #define MAX_LENGTH 30 //30 segmen maksimal #define X 0 #define Y 1 #define JOYSTICK_X 2 #define JOYSTICK_Y 3 #define DIR_THRESH 300 //Nilai harus 0-300 atau 723-1023 untuk dihitung uint8_t segmentPositions[MAX_LENGTH][2]; uint8_t headPosition[2] = {63, 31}; //Letakkan snake di awal untuk memulai uint8_t foodPosition[2]; //Di mana makanan berada uint8_t tempPosition0[2]; //Simpan posisi segmen sebelumnya untuk diteruskan ke segmen berikutnya uint8_t tempPosition1[2]; //Simpan posisi segmen sebelumnya untuk diteruskan ke segmen berikutnya int 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<segmentLength; i++){ if(segmentPositions[i][X] == headPosition[X]){ if(segmentPositions[i][Y] == headPosition[Y]){ return 1; } } } if(headPosition[X] <= 0 || headPosition[X] >= 128) return 1; else if(headPosition[Y] <= 0 || headPosition[Y] >= 64) return 1; return false; } 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; else 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 < segmentLength; segment++){ u8g.drawPixel(segmentPositions[segment][X], segmentPositions[segment][Y]); } u8g.drawPixel(foodPosition[X], foodPosition[Y]); } void gameUpdate(){ updateDirection(); tempPosition0[X] = headPosition[X]; tempPosition0[Y] = headPosition[Y]; switch(currentDirection){ case UP: headPosition[Y] -= 1; break; case DOWN: headPosition[Y] += 1; break; case LEFT: headPosition[X] -= 1; break; case RIGHT: headPosition[X] += 1; break; } //Update posisi setiap segmen relatif terhadap kepala for(int segment=1; segment < segmentLength; segment+= 2){ tempPosition1[X] = segmentPositions[segment][X]; tempPosition1[Y] = segmentPositions[segment][Y]; segmentPositions[segment][X] = tempPosition0[X]; segmentPositions[segment][Y] = tempPosition0[Y]; tempPosition0[X] = segmentPositions[segment+1][X]; tempPosition0[Y] = segmentPositions[segment+1][Y]; segmentPositions[segment+1][X] = tempPosition1[X]; segmentPositions[segment+1][Y] = tempPosition1[Y]; } displaySegments(); checkFoodEaten(); if(checkCollisions()) endGame(); if(segmentLength>= MAX_LENGTH) endGame(); delay(50); } void endGame(){ segmentLength = 1; headPosition[0] = 63; headPosition[1] = 31; beginGame(); } 

Bagian dan enclosure kustom

Skematik

ATtiny85 Mini Arcade: Snake – Buat Konsol Game OLED Tangan

Proses manufaktur

  1. Detektor Bahasa TinyML dengan Edge Impulse pada Arduino Nano 33 BLE Sense
  2. Buat Game Gyroskop Real-Time dengan Arduino Nano & Sensor MPU-6050
  3. Proyek Dadu Digital Arduino: Buat Generator Angka Acak berbasis LCD
  4. Buat Sendiri Game Roulette 37 LED dengan Arduino Nano
  5. Detektor Jarak Portabel – Kit DIY Arduino Nano dengan HC‑SR04, Baterai 18650, dan Kotak Cetak 3D
  6. Membuat Lampu Meja Reaktif Audio dengan Arduino Nano
  7. Proyek Pelapisan Tembaga: Bangun Sistem Cerdas dengan Arduino UNO
  8. Pong Matriks NeoPixel pada Arduino Nano: Buat Game Pong Neon
  9. Buat Urutan Lampu Menakjubkan dengan Arduino Shift Register
  10. Smart Plug: Kontak Pintar 120V Berbasis Arduino dengan Jam Real-Time