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

Breadboard to PCB Teil 1 – Das Simon sagt Spiel machen

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
Lötfreies Steckbrett in voller Größe
× 1
LED (generisch)
× 4
SparkFun Drucktastenschalter 12 mm
× 4
Summer
× 1
Jumper (generisch)
× 12
Widerstand 10k Ohm
× 4
Widerstand 330 Ohm
× 4
USB-A-zu-B-Kabel
× 1

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Einführung

Wir alle kennen das alte Simon Says-Spiel, bei dem Sie versuchen, eine Lichtsequenz zu kopieren, indem Sie die Taste drücken, die der richtigen Lichtsequenz entspricht. Für Hackster Live haben wir ein PCB-Design-Tool namens Upverter vorgestellt. Dies ist ein unterhaltsames und einfaches Projekt zum Erstellen und Verwandeln in eine Leiterplatte. Unten ist das grundlegende Projekt, das die Spielerstellung mit Hardware und Code zeigt.

Diese Projektreihe besteht aus drei Teilen.

  • Teil 1: Das Simon sagt Spiel machen
  • Teil 2: Entwerfen Sie eine Leiterplatte basierend auf dem Simon Says-Spiel mit Upverter
  • Teil 3: Fräsen Sie Ihre eigene Leiterplatte aus dem Design, das Sie auf Upverter erstellt haben

Was Sie in dieser Serie lernen werden

  • Wie man ein grundlegendes Projekt auf einem Steckbrett anlegt
  • So legen Sie eine Leiterplatte in Upverter an
  • So fräsen Sie Ihre eigene Leiterplatte mit einer CNC-Maschine

Software

Wenn Sie nicht über die Arduino-IDE zum Schreiben und Hochladen von Code auf Ihr Arduino verfügen, laden Sie hier die neueste Version für Ihr Betriebssystem herunter.

Hardware-Setup

Als Inspiration für mein Hardware-Setup habe ich das Inventor’s Kit-Beispiel von Sparkfun verwendet und leicht angepasst. Sehen Sie sich das folgende Fritzing-Diagramm an.

Code

Das Lustige an diesem Spiel ist, dass Sie so viele Variationen haben können. Wie oben erwähnt, habe ich das Beispiel von Sparkfun als Ausgangspunkt für mein Hardware-Setup verwendet und den Code von Grund auf neu geschrieben. Wenn Sie nicht daran interessiert sind, Ihren eigenen Code zu schreiben, können Sie meinen unten verwenden, den Code von Sparkfun im oben genannten Beispiel mit ein paar Anpassungen verwenden oder nach anderen Simon sagt-Spielen/Codes suchen, die mit Ihrem Hardware-Setup funktionieren .

Ich habe ausführliche Kommentare und die Debugging-Serial-Druckzeilen in meinen Code eingefügt, damit Sie sehen können, was auf dem Serial-Monitor passiert, während das Spiel läuft. Sehen Sie sich das Video des Simon Says-Spiels in Aktion unten an!

Simon sagt Spielvideo

*Hinweis:In diesem Video habe ich die Anzahl der Lichter in einer Reihe, die ich zum Gewinnen benötigte, auf 5 gesetzt. Dies kann geändert werden, um das Spiel schwieriger zu machen, aber ich wollte mein Video relativ kurz halten :).

Jetzt können Sie Ihr Steckbrett in eine Leiterplatte verwandeln! Erfahren Sie, wie in Breadboard to PCB Teil 2 - PCB mit Upverter entwerfen.

Code

  • Simon sagt Arduino-Code
Simon sagt Arduino-CodeArduino
 int ledArray[] ={12, 9, 5, 2}; // ledArray[0] ist grün, ledArray[1] ist rot, ledArray[2] ist gelb und ledArray[3] ist blau. int buttonArray[] ={13, 10, 6, 3}; // buttonArray[0] ist grün, buttonArray[1] ist rot, buttonArray[2] ist gelb und buttonArray[3] ist blau. int pinCount =4; // sowohl ledArray als auch buttonArray haben denselben PinCount --> verwenden Sie dies für beide Tasten und LEDs Int Summer =8; int ledState =0; int gameState =0; #define NUMBERTOWIN 5 //Anzahl der Lichter, die Sie treffen müssen, um zu gewinnen --> Sie können diese Zahl ändern, um das Spiel mehr oder weniger herausfordernd zu machen int gameValues[NUMBERTOWIN]; int roundNum =0; unsigned long previousMillis =0; // benötige dies für den Status vor dem Spiel für blinkende Lichter ohne Verzögerung --> Wenn Sie Verzögerung verwenden, wird Ihr Knopfdruck zum Starten des Spiels möglicherweise nicht bemerkt unsigned long interval1 =500; // benötige dies für die Zeit zwischen den Blinkvorgängen // Deklariere Funktionenvoid setLed (int ledNum);void displayClue (int roundNum); boolean waitForInput (int buttonNum); void setup () {Serial.begin (9600); Serial.println ("setup"); for(int Pin =0; Pin  Funktion setLed () gibt an, dass wenn ledNum <0 ist, LED LOW ist setLed (-1); // Setze die Rundenzahl auf Null, damit du mit der ersten Runde startest roundNum =0; Verzögerung (1000); // setze gameState auf 1 gameState =1; }} if (gameState ==1) {gamePlay(); } if (gameState ==2) {//Sie gewinnen!! - Spielen Sie den gewinnenden Sound und scrollen Sie dreimal durch die LEDs (winDisplay), gefolgt von der Verlieren-Anzeige einmal für einen guten Übergang. // Verzögerung, um dem Spieler Zeit zu geben, den Knopfdruck loszulassen, bevor der gewinnende Sound abgespielt wird Verzögerung (500); wining_sound(); winDisplay(); winDisplay(); winDisplay(); loseDisplay(); Serial.println("winDisplay"); // kurz verzögern, bevor pre_game delay (1000) ausgeführt wird; // setze gameState auf null zurück, um pre_game gameState =0 aufzurufen; } if (gameState ==3) { // Du verlierst :( - Spiel verlieren Sound und Flash-LEDs (loseDisplay) 3 Mal für einen guten Übergang. // Verzögerung, um dem Spieler Zeit zu geben, die Taste loszulassen, bevor der Sound verloren geht Verzögerung (500); loss_sound(); loseDisplay(); loseDisplay(); loseDisplay(); Serial.println("loseDisplay"); // kurz verzögern, bevor pre_game delay (1000) ausgeführt wird; // gameState auf null zurücksetzen, um pre_game gameState =0 . aufzurufen; 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; } // Zeit zurücksetzen previousMillis =currentMillis; }} // Funktion für während des Spielsvoid gamePlay () { Serial.println ( "gamePlay"); // Array mit Zufallszahlen für das Spiel vorladen für ( int i=0; i wenn eine Taste gedrückt wird, gehe zum Rest des Codes if (!button0 || !button1 || !button2 || !button3) { // Kurz verzögern, um Doppelzählungen zu vermeiden Tastendruckverzögerung ( 250); // die entsprechende LED aufleuchten, wenn eine Taste gedrückt wird if (buttonNum ==0) { digitalWrite (ledArray [0], HIGH); Verzögerung (250); digitalWrite(ledArray[0], LOW); aufrechtzuerhalten. Sonst if (buttonNum ==1) { DigitalWrite (ledArray[1], HIGH); Verzögerung (250); digitalWrite (ledArray[1], LOW); aufrechtzuerhalten. Sonst if (buttonNum ==2) { DigitalWrite (ledArray [2], HIGH); Verzögerung (250); digitalWrite (ledArray [2], LOW); aufrechtzuerhalten. Sonst if (buttonNum ==3) { DigitalWrite (ledArray[3], HIGH); Verzögerung (250); digitalWrite (ledArray[3], LOW); } // überprüfen, ob die richtige Taste gedrückt wurde if (buttonNum ==0 &&button0 ==0) {Serial.println ("0 gedrückt"); true zurückgeben; aufrechtzuerhalten. Sonst if (buttonNum ==1 &&button1 ==0) { Serial.println ("1 gedrückt"); true zurückgeben; aufrechtzuerhalten. Sonst if (buttonNum ==2 &&button2 ==0) {Serial.println ("2 gedrückt"); true zurückgeben; aufrechtzuerhalten. Sonst if (buttonNum ==3 &&button3 ==0) {Serial.println ("3 gedrückt"); true zurückgeben; aufrechtzuerhalten. Sonst { false zurückgeben; } } }} // nach dem Gewinn - Lichter schnell scrollen lassenvoid 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 wining_sound(void){ //Ton (Pinnummer, Frequenz - ich habe das online nachgeschlagen, um es zu finden .) die Frequenz für die gewünschten Noten, Dauer der Melodie) Serial.println ("buzzer1"); Ton (Summer, 294, 250); Verzögerung (200); Ton (Summer, 294, 250); Verzögerung (200); Ton (Summer, 294, 250); Verzögerung (200); Ton (Summer, 392, 500); Verzögerung (500); Serial.println("zweite 392"); Ton (Summer, 392, 250); Verzögerung (200); Ton (Summer, 440, 250); Verzögerung (200); Ton (Summer, 392, 250); Verzögerung (200); Ton (Summer, 440, 250); Verzögerung (200); Ton (Summer, 494, 500);}void loseDisplay(){ DigitalWrite (ledArray[0], HIGH); digitalWrite (ledArray[1], HIGH); digitalWrite (ledArray[2], HIGH); digitalWrite (ledArray[3], HIGH); Verzögerung (200); digitalWrite(ledArray[0], LOW); digitalWrite (ledArray[1], LOW); digitalWrite (ledArray [2], LOW); digitalWrite (ledArray[3], LOW); Verzögerung (200);}void lossing_sound (void) {Serial.println ("losing_sound"); Ton (Summer, 98, 250); Verzögerung (250); Ton (Summer, 93, 250); Verzögerung (250); Ton (Summer, 87, 250); Verzögerung(250);}

Schaltpläne

simon_says_fritzing_Yb8EdKPqD4.fzz

Herstellungsprozess

  1. Arduino-Gyroskop-Spiel mit MPU-6050
  2. Arduino Digital Dice
  3. DIY 37 LED-Roulette-Spiel
  4. Arduino-Gamecontroller
  5. Joystick-Spiel
  6. Tragbarer Reichweitendetektor
  7. Pixel-Chaser-Spiel
  8. Galvanisieren mit Kupfer
  9. Manufacturing 101:Ein Teil der Luft- und Raumfahrtindustrie werden
  10. Prozesse bei der Herstellung von 4-lagigen Leiterplatten – Teil 2