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

Breadboard ke PCB Bagian 1 - Membuat Game Simon Says

Komponen dan persediaan

Arduino UNO
× 1
Ukuran Penuh Papan Tempat Memotong Roti Tanpa Solder
× 1
LED (generik)
× 4
Sakelar Tombol Tekan SparkFun 12mm
× 4
Buzzer
× 1
Kabel jumper (generik)
× 12
Resistor 10k ohm
× 4
Resistor 330 ohm
× 4
Kabel USB-A ke B
× 1

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Pendahuluan

Kita semua pernah melihat permainan Simon Says lama, di mana Anda mencoba menyalin urutan lampu dengan menekan tombol yang sesuai dengan urutan cahaya yang benar. Untuk Hackster Live kami memamerkan alat desain PCB yang disebut Upverter. Ini adalah proyek yang menyenangkan dan sederhana untuk dibuat dan diubah menjadi PCB. Di bawah ini adalah proyek dasar yang menunjukkan pembuatan game lengkap dengan perangkat keras dan kode.

Ada tiga bagian dari rangkaian proyek ini.

  • Bagian 1: Membuat Permainan Kata Simon
  • Bagian 2: Rancang PCB berdasarkan game Simon Says menggunakan Upverter
  • Bagian 3: Giling PCB Anda sendiri dari desain yang Anda buat di Upverter

Apa yang akan Anda pelajari dalam seri ini

  • Cara meletakkan proyek dasar di papan tempat memotong roti
  • Cara meletakkan PCB di Upverter
  • Cara menggiling PCB sendiri menggunakan mesin CNC

Perangkat Lunak

Jika Anda tidak memiliki Arduino IDE untuk menulis dan mengunggah kode ke Arduino Anda, unduh versi terbaru untuk sistem operasi Anda di sini.

Penyiapan Perangkat Keras

Saya menggunakan contoh Kit Penemu Sparkfun sebagai inspirasi untuk pengaturan perangkat keras saya dan sedikit menyesuaikannya. Perhatikan diagram Fritzing di bawah ini.

Kode

Hal yang menyenangkan dari game ini adalah Anda dapat memiliki begitu banyak variasi. Seperti yang saya sebutkan di atas, saya menggunakan contoh Sparkfun sebagai titik awal untuk pengaturan perangkat keras saya dan menulis kode dari awal. Jika menulis kode Anda sendiri bukanlah sesuatu yang Anda minati, Anda dapat menggunakan kode saya di bawah ini, gunakan kode Sparkfun dalam contoh yang disebutkan di atas dengan beberapa penyesuaian, atau cari permainan/kode lain yang dikatakan Simon yang akan bekerja dengan pengaturan perangkat keras Anda .

Saya menyertakan komentar mendetail dan debug serial print lines dalam kode saya, sehingga Anda dapat melihat apa yang terjadi di monitor Serial saat game sedang berjalan. Lihat video aksi game Simon Says di bawah ini!

Video Game Simon Says

*Catatan:Dalam video ini saya mengatur jumlah lampu berturut-turut yang saya butuhkan untuk menang menjadi 5. Ini dapat diubah untuk membuat permainan lebih sulit, tetapi saya ingin video saya tetap pendek :).

Sekarang Anda siap mengubah papan tempat memotong roti menjadi PCB! Pelajari caranya di Breadboard to PCB Part 2 - Mendesain PCB menggunakan Upverter.

Kode

  • Simon Mengatakan Kode Arduino
Simon Mengatakan Kode ArduinoArduino
 int ledArray[] ={12, 9, 5, 2};// ledArray[0] berwarna hijau, ledArray[1] berwarna merah, ledArray[2] berwarna kuning, dan ledArray[3] berwarna biru. int buttonArray[] ={13, 10, 6, 3};// buttonArray[0] berwarna hijau, buttonArray[1] berwarna merah, buttonArray[2] berwarna kuning, dan buttonArray[3] berwarna biru. int jumlah pin =4; //kedua ledArray dan buttonArray memiliki pinCount yang sama --> gunakan ini untuk kedua tombol dan led int buzzer =8; int keadaan led =0; int keadaan permainan =0; #define NUMBERTOWIN 5 //Jumlah lampu yang harus Anda cocokkan untuk menang --> Anda dapat mengubah nomor ini untuk membuat game lebih atau kurang menantang untuk memenangkan nilai game[NUMBERTOWIN]; int bilangan bulat =0; unsigned long beforeMillis =0; // membutuhkan ini untuk status pra-permainan agar lampu berkedip tanpa penundaan --> jika Anda menggunakan penundaan, tekan tombol Anda untuk memulai permainan mungkin tidak diperhatikan interval panjang yang tidak ditandatangani1 =500; //membutuhkan ini untuk waktu antara kedipan //deklarasikan fungsivoid setLed(int ledNum);void displayClue(int roundNum);boolean waitForInput(int buttonNum); void setup() {Serial.begin(9600);Serial.println("setup"); for(int Pin =0; Pin  function setLed() menyatakan bahwa jika ledNum <0 led berarti LOW setLed(-1); //mengatur angka putaran ke nol sehingga anda memulai putaran pertama putaranNum =0; penundaan (1000); //set gameState ke 1 gameState =1; } } if (keadaan game ==1) { gamePlay(); } if (keadaan permainan ==2) { //Kamu menang!! - mainkan suara pemenang dan gulir melalui led (winDisplay) 3 kali diikuti dengan tampilan kalah sekali untuk transisi yang baik. //delay untuk memberi pemain waktu untuk melepaskan tekan tombol sebelum memenangkan suara play delay(500); suara_menang(); winDisplay(); winDisplay(); winDisplay(); kehilangan Tampilan(); Serial.println("winDisplay"); //delay sebentar sebelum menjalankan pre_game delay (1000); //reset gameState ke nol untuk memanggil gameState pra_game =0; } if (gameState ==3) { //Anda kalah :( - mainkan suara yang hilang dan led flash (loseDisplay)3 kali untuk transisi yang baik. //tunda untuk memberi pemain waktu untuk melepaskan tekan tombol sebelum kehilangan suara, play delay(500); lose_sound(); loseDisplay(); loseDisplay(); loseDisplay(); Serial.println("loseDisplay"); //delay sebentar sebelum menjalankan pre_game delay (1000); //reset gameState ke nol untuk memanggil pre_game gameState =0 ( ledState ==0) { Serial.println("pre green"); setLed(0); ledState =1; } else if (ledState ==1) { Serial.println("pre red"); setLed(1); ledState =2; } else if (ledState ==2) { Serial.println("pre yellow"); setLed(2); ledState =3; } else if (ledState ==3) { Serial.println("pre blue "); setLed(3); ledState =0; } //reset waktu sebelumnyaMillis =saatMillis; }}//fungsi untuk saat game sedang dimainkanvoid gamePlay(){ Serial.println("gamePlay"); //pra-muat array dengan angka acak untuk permainan ( int i=0; i jika ada tombol yang ditekan pergi ke sisa kode if (!button0 || !button1 || !button2 || !button3) { //Tunda sebentar untuk menghindari tombol hitung ganda tekan tunda( 250); //menyalakan led yang sesuai saat tombol ditekan if (buttonNum ==0) { digitalWrite(ledArray[0], HIGH); penundaan (250); digitalWrite(ledArray[0], RENDAH); } else if (buttonNum ==1) { digitalWrite(ledArray[1], HIGH); penundaan (250); digitalWrite(ledArray[1], RENDAH); } else if (buttonNum ==2) { digitalWrite(ledArray[2], HIGH); penundaan (250); digitalWrite(ledArray[2], RENDAH); } else if (buttonNum ==3) { digitalWrite(ledArray[3], HIGH); penundaan (250); digitalWrite(ledArray[3], RENDAH); } //periksa apakah tombol yang ditekan benar if (buttonNum ==0 &&button0 ==0) { Serial.println("0 Pressed"); kembali benar; } else if (buttonNum ==1 &&button1 ==0) { Serial.println("1 Ditekan"); kembali benar; } else if (buttonNum ==2 &&button2 ==0) { Serial.println("2 Ditekan"); kembali benar; } else if (buttonNum ==3 &&button3 ==0) { Serial.println("3 Ditekan"); kembali benar; } else { kembali salah; } } }}//setelah menang - lampu scroll dengan cepatvoid winDisplay(){digitalWrite(ledArray[0], HIGH);delay(75);digitalWrite(ledArray[0], LOW);delay(75);digitalWrite(ledArray [1], HIGH);delay(75);digitalWrite(ledArray[1], LOW);delay(75);digitalWrite(ledArray[2], HIGH);delay(75);digitalWrite(ledArray[2], LOW );delay(75);digitalWrite(ledArray[3], HIGH);delay(75);digitalWrite(ledArray[3], LOW);delay(75);digitalWrite(ledArray[2], HIGH);delay(75 );digitalWrite(ledArray[2], LOW);delay(75);digitalWrite(ledArray[1], HIGH);delay(75);digitalWrite(ledArray[1], LOW);delay(75);digitalWrite(ledArray [0], HIGH);delay(75);digitalWrite(ledArray[0], LOW);delay(75);}void win_sound(void){ //tone (nomor pin, frekuensi - saya mencari ini secara online untuk menemukannya frekuensi nada yang saya inginkan, durasi nada) Serial.println("buzzer1"); nada (bel, 294, 250); penundaan (200); nada (bel, 294, 250); penundaan (200); nada (bel, 294, 250); penundaan (200); nada (bel, 392, 500); penundaan (500); Serial.println("kedua 392"); nada (buzzer, 392, 250); penundaan (200); nada (bel, 440, 250); penundaan (200); nada (buzzer, 392, 250); penundaan (200); nada (bel, 440, 250); penundaan (200); tone(buzzer, 494, 500);}void loseDisplay(){ digitalWrite(ledArray[0], HIGH); digitalWrite(ledArray[1], TINGGI); digitalWrite(ledArray[2], TINGGI); digitalWrite(ledArray[3], TINGGI); penundaan (200); digitalWrite(ledArray[0], RENDAH); digitalWrite(ledArray[1], RENDAH); digitalWrite(ledArray[2], RENDAH); digitalWrite(ledArray[3], RENDAH); delay(200);}void lost_sound(void){ Serial.println("losing_sound"); nada (buzzer, 98, 250); penundaan (250); nada (buzzer, 93, 250); penundaan (250); nada (bel, 87, 250); delay(250);}

Skema

simon_says_fritzing_Yb8EdKPqD4.fzz

Proses manufaktur

  1. Game Arduino Gyroscope dengan MPU-6050
  2. Arduino Digital Dice
  3. Game Roulette LED 37 DIY
  4. Pengontrol Game Arduino
  5. Game Joystick
  6. Detektor Jangkauan Portabel
  7. Game Pixel Chaser
  8. Elektroplating dengan Tembaga
  9. Manufaktur 101:Menjadi Bagian dari Industri Dirgantara
  10. Proses yang Terlibat dalam Pembuatan PCB 4 lapis – Bagian 2