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

Virtual Arduino Tennis

Komponen dan persediaan

Arduino Nano R3
× 2
Stik Sensor SparkFun 9DoF
× 1
Kabel jumper (generik)
× 1
strip NeoPixel
× 1
Modul Bluetooth HC-05
× 1
Baterai 9V (generik)
× 1

Alat dan mesin yang diperlukan

Besi solder (generik)

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Proyek ini memiliki 3 bagian:papan/tampilan game, pengontrol, dan router master (skrip Python).

Bagian 1 - Tampilan

Layarnya adalah matriks neopiksel 15x10 yang menggunakan Arduino Nano. Ini menangani logika permainan dan input dari Skrip Python yang dijalankan dari komputer host. Ini menampilkan bola yang tumbuh dan bergerak lebih jauh ke bawah matriks - memberikan ilusi kedalaman dan bola datang ke arah Anda. Jika mendeteksi bahwa bola terkena bola akan digambar ulang pergi 'menjauh' dari Anda.

Poin

Arah bola (baik kiri atau kanan) berubah dengan setiap pukulan. Jika Anda melewatkan bola, COM mendapat poin, tetapi jika COM meleset (peluang 25%), Anda mendapatkan poin. Desain game ini mirip dengan tenis versi Wii Sports. Poin ditampilkan setiap kali skor COM melawan pemain.

Skor Tinggi

Ada skor tinggi yang sedang berjalan yang disimpan di EEPROM I2C, di alamat 0x04. Itu membuat byte yang memegang skor tinggi. Jika skor Anda lebih tinggi dari skor tinggi sebelumnya, alamat tersebut akan ditimpa. Jika COM mendapat skor 10, maka game over ... Jika membingungkan, saya membuat bagan logika:

Buat Matriksnya

Membuat matriks akan memakan waktu, jadi ikuti panduan yang saya buat di sini.

Bagian 2 - Pengendali

Pengontrolnya adalah Arduino Nano lain yang memiliki stik 9DoF (hanya 3v3!) dan modul HC-05 BLE yang terpasang padanya. Jika percepatan sumbu x atau y lebih besar dari ambang batas yang ditentukan, ia mengirimkan '1' melalui serial ke PC host, di mana ia akan diteruskan ke layar. Nano mengambil pembacaan akselerometer x dan y pada interval yang ditentukan di mana ia kemudian memeriksa apakah nilainya jatuh di atas atau di bawah 1,5 gram. Untuk mengakses stick I2C 9 DoF, Anda harus menginstal perpustakaan Sparkfun yang dapat diunduh di sini. Ada juga tutorial tentang cara menghubungkan sensor dan menjalankan program dasar dengannya di sini.

Untuk membuat raket saya menggunakan kotak dan kemudian memotong bentuk raket di selembar karton. Dari sana itu mudah - cukup letakkan selembar kertas putih di atas potongan karton dan gambar desain di atas kertas. Saya menggunakan baterai 9v untuk menyalakan pengaturan, pastikan untuk menjalankan baterai melalui pin Vin pada Nano, atau itu akan menjadi 9v yang tidak diatur! Berikut adalah gambar bagian dalam raket:

Berkomunikasi melalui Bluetooth

Jadi sekarang Anda mungkin bertanya-tanya, apa yang mengendalikan operasi kompleks ini? Bagaimana cara raket berbicara dengan layar? Inilah rahasianya:mereka tidak berbicara satu sama lain! Ada skrip Python sederhana yang menggunakan port COM Bluetooth masuk dan port COM matriks untuk menyampaikan informasi di antara keduanya. Ini juga membantu untuk menyinkronkan kedua sistem, karena keduanya mengatur ulang saat port serial diinisialisasi. Raket mengirimkan '1' ke skrip Python melalui Bluetooth, dan kemudian skrip Python mengirimkan '1' ke matriks. Ada debounce 1 detik sehingga port serial tidak membuat buffer mereka meluap (mereka hanya memiliki buffer 32 bit).

Raket

Klik pada gambar untuk menelusuri cara saya membuat raket:

Bersenang-senanglah dengan game tenis baru Anda!

Video tenis sedang dimainkan:

Kode

  • Kode Matriks
  • Kode Raket
  • Kode Python
Kode MatriksC/C++
Masuk ke Arduino yang terpasang pada matriks.
#include #include #include #include #include #define PIN 6 //Pin data untuk matriks#define EEPROM_ADR 0x50 //Alamat I2C dari EEPROM#define HS_ADR 0x02 //Alamat byte highscore di EEPROM#define NOTE_C1 33#define SPKR_PIN 3Adafruit_NeoMatrix matrix =Adafruit_NeoMatrix(15, 10, PIN, NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG, NEO_GRB + NEO_KHZ800); int bola_x =7; //koordinat X bola ball_y =2; //jari-jari koordinat Y bola =1; //jari-jari bolaint r_incr =1; //Berapa meningkatkan radius bybool isSwung =false; //Apakah raket berayun ball_x_dir =1; //Arah X Bolaint ball_y_dir =1; //Bola arah Y bola isDirRight =true;int skor =0; //Skor game saat ini COM_score =0;int highscore =0; //Nilai tertinggi dari semua gameint framerate =50; //Berapa ms antara setiap frameint serial_data;String score_string ="";uint16_t colors[] ={matrix.Color(255,0,0),matrix.Color(0,255,0),matrix.Color(150,200,0) };int melodi[] ={0};int tempo[] ={0};static unsigned long lastFrame =0;void setup(){ Serial.begin(9600); matriks.mulai(); matrix.fillScreen(0); matrix.setTextColor(warna[1]); randomSeed(analogRead(A2)); tampilan_skor(); skor tinggi =read_HS(); Serial.println (skor tinggi, DES); matrix.setCursor(0,1); matrix.print("HS:"); matriks.tampilkan(); penundaan (1000); matrix.fillScreen(0); matrix.setCursor(0,1); matrix.print(skor tinggi, DES); matriks.tampilkan(); penundaan (1000); score_string ="";}void loop(){ if((lastFrame+framerate)=5 &&ball_y <7 &&isSwung){ if(isDirRight){ ball_x_dir =-1; bola_y_dir =-1; } else if(!isDirRight){ ball_x_dir =1; bola_y_dir =-1; } r_incr =-1; } else if(bola_y>=8){ COM_score +=1; akhir_putaran(); } else if(ball_y <=2){ isDirRight =!isDirRight; int randNum =acak(4); Serial.println(randNum); if(randNum ==2){ //25% kemungkinan skor COM hilang +=1; if(skor> highscore){ write_HS(); } akhir_putaran; } else{ if(isDirRight){ ball_x_dir =1; bola_y_dir =1; } else if(!isDirRight){ ball_x_dir =-1; bola_y_dir =1; } r_incr =1; } } bola_x +=bola_x_dir; bola_y +=bola_y_dir; radius +=r_incr; matrix.fillScreen(0); matrix.fillCircle(ball_x,ball_y,radius,colors[2]); matrix.show();}void end_round(){ if(COM_score>=10){ end_game(); } isDirRight =benar; r_incr =1; bola_x_dir =1; bola_y_dir =1; bola_x =7; bola_y =2; jari-jari =1; tampilan_skor(); matrix.fillScreen(0); matrix.fillCircle(ball_x,ball_y,radius,colors[2]); matriks.tampilkan(); }void end_game(){ matrix.fillScreen(0); matrix.setCursor(0,1); matrix.setTextColor(warna[0]); matrix.drawLine(3,0,12,9,warna[0]); matrix.drawLine(11,0,2,9,warna[0]); matriks.tampilkan(); penundaan (500); while(1){ }}void display_scores(){ matrix.fillScreen(0); matrix.setTextColor(warna[1]); matrix.setCursor(0,1); score_string =String(skor) + "-" + String(COM_score); scrollText(score_string); matrix.fillScreen(0); penundaan(2000); matrix.show();}void scrollText(String text){ int pass =0; int x =matriks.lebar(); for(int i=0;i<24;i++){ matrix.fillScreen(0); matrix.setCursor(x,2); matrix.print(teks); x -=1; matriks.tampilkan(); penundaan(150); }}void write_HS(){ EEPROM.write(0x04,int(score));}int read_HS(){ byte HS =EEPROM.read(0x04); //Baca dari alamat 4 kembali HS;}
Kode RaketC/C++
#include #include #include LSM9DS1 imu;#define LSM9DS1_M 0x1E // Akan menjadi 0x1C jika SDO_M LOW#define LSM9DS1_AG 0x6B // Akan menjadi 0x6A jika SDO_AG LOW#define PRINT_SPEED 10 // 10 ms antara checksstatic unsigned long lastPrint =0; // Melacak print timefloat accelx =0;float accely =0;void setup() { // letakkan kode setup Anda di sini, untuk dijalankan sekali:Serial.begin(9600);imu.settings.device.commInterface =IMU_MODE_I2C; imu.settings.device.mAddress =LSM9DS1_M; imu.settings.device.agAddress =LSM9DS1_AG; if (!imu.begin()) { //gagal saat (1); }}void loop() { if ((lastPrint + PRINT_SPEED) =1.5){ Serial.print(1); penundaan (600); } else if(akses <=-1.5 || akses>=1.5){ Serial.print(1); delay(600);}}
Kode PythonPython
import serialimport timematrix_port ="COM3"raquet_port ="COM9"matrix =serial.Serial(matrix_port, 9600)racquet =serial.Serial(raquet_port,9600)time.sleep(10) while 1:data =racquet.read( ) print data if data =="1":print "hit" matrix.write("1") time.sleep(1) time.sleep(.05)

Skema


Proses manufaktur

  1. Detektor Bahasa TinyML Berbasis Edge Impulse &Arduino
  2. Game Arduino Gyroscope dengan MPU-6050
  3. Arduino Digital Dice
  4. Iron Man
  5. Temukan Saya
  6. Kontrol Humidifier Arduino
  7. Sonar menggunakan arduino dan ditampilkan pada pemrosesan IDE
  8. MobBob:Robot Arduino DIY Dikendalikan oleh Smartphone Android
  9. Lampu Meja Reaktif Audio Arduino
  10. NeoMatrix Arduino Pong