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:Ular

Komponen dan persediaan

Teknologi Microchip ATtiny85
× 1
OLED Grafis, 128 x 64
× 1
SparkFun microB USB Breakout
× 1
Arduino Nano R3
× 1

Alat dan mesin yang diperlukan

Besi solder (generik)
Printer 3D (generik)

Aplikasi dan layanan online

Autodesk Fusion 360
Arduino IDE

Tentang proyek ini

Inspirasi dan Proyek Sebelumnya

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

Ini baik-baik saja pada saat itu, tetapi konsolnya agak terlalu besar dan tidak praktis. Namun, baru-baru ini, saya mencoba membuat ulang beberapa proyek saya sebelumnya. Kali ini, saya ingin membuat konsol yang sangat kecil yang bisa dimainkan oleh orang-orang.

Komponen yang Dipilih

Untuk membuat konsol menjadi kecil, saya tidak dapat menggunakan papan pengembang Arduino apa pun, itulah sebabnya saya menggunakan ATtiny85.

Ini memiliki fitur I/O yang cukup untuk menjalankan game, termasuk dua pin ADC dan, port I2C, dan pin GPIO. Saya memilih untuk menggunakan modul joystick/switch 2 sumbu sederhana, karena mudah untuk berinteraksi dan hanya membutuhkan 3 pin untuk pemberian sinyal.

Akhirnya, tiba saatnya untuk memutuskan tampilan mana yang dibutuhkan. Karena layar OLED 128 x 64 DFRobot berukuran kecil tetapi memiliki banyak resolusi, saya mengikutinya.

Menyolder Sistem

Untuk memulai, saya memasang ATtiny85 ke SOP-8 ke DIP-8 breakout PCB dan menyoldernya ke sepotong kecil papan perf. Selanjutnya, saya menyolder pada dua header- satu untuk pemrograman dan yang lainnya untuk layar. Setelah melakukan itu, saya menghubungkan pin joystick analog ke perf-board dan menghubungkannya dengan kabel yang sesuai. Untuk langkah terakhir, saya menghubungkan papan pemutus USB mikro ke seluruh sistem untuk mendapatkan daya.

Mendesain Enklosur

Enklosur dirancang di Fusion 360. Saya mulai dengan membuat dan meletakkan komponen yang saya gunakan di build sebenarnya, lalu saya membuat enklosur di sekelilingnya.

Saya ingin meniru kotak arcade dari tahun 80-an, tetapi tetap mempertahankan ukurannya yang sangat kecil. Berikut adalah beberapa render dari enklosur:

Memprogram Game

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

Setiap kali kepala bergerak ke lokasi baru, posisi sebelumnya mengalir ke bawah. Setiap kali segmen dikonsumsi, segmen baru muncul di titik acak. Pengecekan tumbukan dilakukan dengan iterasi melalui koordinat setiap segmen dan melihat apakah koordinat kepala sama. Selain itu, memukul ular di sepanjang dinding mana pun akan menyebabkan pemain kalah juga.

Bermain Ular

Saya mulai dengan menyalakan konsol dan menunggu layar memuat makanan dan segmen pertama ular. Kemudian saya mengemudikan ular itu dengan menggerakkan joystick ke arah yang benar sambil melihatnya memakan makanannya. Game ini menyenangkan untuk dimainkan dan merupakan pembunuh kebosanan yang hebat dalam paket kecil.

Kode

  • Kode ATTiny85
Kode ATTiny85C/C++
Pastikan untuk menginstal U8g2lib terlebih dahulu
//#include #include U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g(U8G2_R0,/* clock=/ 2, / data=/ 0, / reset=*/ U8X8);#define MAX_LENGTH 30 //30 segmen maks#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 menghitung posisi segmen8_t][[MAX_LENGTH] 2);uint8_t headPosition[2] ={63, 31}; //Tempatkan ular di awal startuint8_t foodPosition[2]; //Tempat makanan beradauint8_t tempPosition0[2]; //Menyimpan posisi segmen sebelumnya untuk diteruskan ke nextuint8_t tempPosition1[2]; //Menyimpan posisi segmen sebelumnya untuk diteruskan ke segmen berikutnyaLength =1;void gameUpdate();enum DIRECTIONS { RIGHT, DOWN, LEFT, UP} currentDirection;void setup() { //TinyWireM.begin(); u8g.mulai(); u8g.setPowerSave(0); pinMode(JOYSTICK_X, INPUT); pinMode(JOYSTICK_Y, INPUT); randomSeed(analogRead(0)); beginGame();}void loop() { u8g.firstPage(); lakukan { gameUpdate(); u8g.setColorIndex(1); } while(u8g.nextPage());}void beginGame(){ currentDirection =KANAN; spawnMakanan(); delay(1000);}bool checkCollisions(){ for(int i=1; i=128) kembalikan 1; else if(headPosition[Y] <=0 || headPosition[Y]>=64) kembalikan 1; return false;}void spawnFood(){ int randomX =random(5, 123); int acakY =acak(5, 60); posisi makanan[X] =randomX; foodPosition[Y] =randomY;}void checkFoodEaten(){ if(headPosition[X] ==foodPosition[X] || headPosition[Y] ==foodPosition[Y]){ segmentLength +=1; spawnMakanan(); }}void updateDirection(){ int joy_x_val =analogRead(JOYSTICK_X); int joy_y_val =analogRead(JOYSTICK_Y); if(joy_x_val <=DIR_THRESH) currentArah =KIRI; else if(joy_x_val>=1023-DIR_THRESH) currentDirection =KANAN; 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; posisi kepala[0] =63; posisi kepala[1] =31; beginGame();}

Suku cadang dan penutup khusus

Skema


Proses manufaktur

  1. Detektor Bahasa TinyML Berbasis Edge Impulse &Arduino
  2. Game Arduino Gyroscope dengan MPU-6050
  3. Arduino Digital Dice
  4. Game Roulette LED 37 DIY
  5. Detektor Jangkauan Portabel
  6. Lampu Meja Reaktif Audio Arduino
  7. Elektroplating dengan Tembaga
  8. NeoMatrix Arduino Pong
  9. Pembuat Urutan Ringan
  10. Smart Plug