Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Breadboard to PCB Part 1 - Making the Simon Says Game

Componentes y suministros

Arduino UNO
× 1
Protoboard sin soldadura de tamaño completo
× 1
LED (genérico)
× 4
Interruptor de botón SparkFun de 12 mm
× 4
Buzzer
× 1
Cables de puente (genéricos)
× 12
Resistencia de 10k ohmios
× 4
Resistencia de 330 ohmios
× 4
Cable USB-A a B
× 1

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

Introducción

Todos hemos visto el viejo juego Simon Says, en el que intentas copiar una secuencia de luces presionando el botón que corresponde a la secuencia de luces correcta. Para Hackster Live presentamos una herramienta de diseño de PCB llamada Upverter. Este es un proyecto divertido y simple de crear y convertir en un PCB. A continuación se muestra el proyecto básico que muestra la creación del juego completa con hardware y código.

Esta serie de proyectos consta de tres partes.

  • Parte 1: Hacer el juego Simón dice
  • Parte 2: Diseñe una PCB basada en el juego Simon Says usando Upverter
  • Parte 3: Fresa tu propia PCB a partir del diseño que creaste en Upverter

Qué aprenderá en esta serie

  • Cómo diseñar un proyecto básico en una placa de pruebas
  • Cómo diseñar una PCB en Upverter
  • Cómo fresar su propia PCB con una máquina CNC

Software

Si no tiene el IDE de Arduino para escribir y cargar código en su Arduino, descargue la última versión para su sistema operativo aquí.

Configuración de hardware

Utilicé el ejemplo del kit de inventor de Sparkfun como inspiración para la configuración de mi hardware y lo ajusté ligeramente. Consulte el diagrama de Fritzing a continuación.

Código

Lo divertido de este juego es que puedes tener muchas variaciones. Como mencioné anteriormente, utilicé el ejemplo de Sparkfun como punto de partida para la configuración de mi hardware y escribí el código desde cero. Si escribir su propio código no es algo que le interese, puede usar el mío a continuación, usar el código de Sparkfun en el ejemplo mencionado anteriormente con algunos ajustes, o buscar otros juegos / códigos de Simon dice que funcionarán con la configuración de su hardware .

Incluí comentarios detallados y las líneas de impresión de serie de depuración en mi código, para que pueda ver lo que está sucediendo en el monitor de serie mientras se ejecuta el juego. ¡Mira el video del juego Simon Says en acción a continuación!

Video del juego Simon Says

* Nota:En este video configuré el número de luces seguidas que necesitaba para ganar a 5. Esto se puede cambiar para hacer el juego más difícil, pero quería que mi video fuera relativamente corto :).

¡Ahora está listo para convertir su placa de pruebas en una PCB! Aprenda cómo en Placa de pruebas a PCB Parte 2:Diseño de una PCB usando Upverter.

Código

  • Simon dice código Arduino
Simon dice código Arduino Arduino
 int ledArray [] ={12, 9, 5, 2}; // ledArray [0] es verde, ledArray [1] es rojo, ledArray [2] es amarillo y ledArray [3] es azul. int buttonArray [] ={13, 10, 6, 3}; // buttonArray [0] es verde, buttonArray [1] es rojo, buttonArray [2] es amarillo y buttonArray [3] es azul. int pinCount =4; // tanto ledArray como buttonArray tienen el mismo pinCount -> use esto para ambos botones y leds int buzzer =8; int ledState =0; int gameState =0; #define NUMBERTOWIN 5 // Número de luces que debes igualar para ganar -> Puedes cambiar este número para hacer que el juego sea más o menos desafiante para ganar int gameValues ​​[NUMBERTOWIN]; int roundNum =0; unsigned long previousMillis =0; // Necesito esto para el estado previo al juego para que las luces parpadeen sin demora -> si usa la demora, es posible que no se note el botón para iniciar el juego sin firmar intervalo largo1 =500; // Necesito esto para el tiempo entre parpadeos // declarar functionsvoid setLed (int ledNum); void displayClue (int roundNum); boolean waitForInput (int buttonNum); configuración vacía () {Serial.begin (9600); Serial.println ("configuración"); for (int Pin =0; Pin  la función setLed () indica que si ledNum es <0, el led es LOW setLed (-1); // establece el número de ronda en cero para comenzar en la primera ronda roundNum =0; retraso (1000); // establece gameState en 1 gameState =1; }} if (gameState ==1) {gamePlay (); } if (gameState ==2) {// ¡¡Tú ganas !! - reproducir el sonido ganador y desplazarse por los leds (winDisplay) 3 veces seguido de perder la pantalla una vez para una buena transición. // retraso para dar tiempo al jugador para que suelte el botón antes de que suene el sonido ganador delay (500); sonido_ganador (); winDisplay (); winDisplay (); winDisplay (); loseDisplay (); Serial.println ("winDisplay"); // demora brevemente antes de ejecutar pre_game delay (1000); // restablece gameState a cero para llamar a pre_game gameState =0; } if (gameState ==3) {// Pierdes :( - reproduce el sonido perdido y parpadea los leds (loseDisplay) 3 veces para una buena transición. // demora para que el jugador tenga tiempo de soltar la pulsación del botón antes de perder la reproducción de sonido delay (500); lose_sound (); loseDisplay (); loseDisplay (); loseDisplay (); Serial.println ("loseDisplay"); // demora brevemente antes de ejecutar pre_game delay (1000); // restablece gameState a cero para llamar a pre_game gameState =0;}} // pre_gamevoid pre_game () {// Verifica si ha transcurrido suficiente tiempo entre los leds encendidos unsigned long currentMillis =millis (); if (currentMillis - previousMillis> interval1) {// si ha transcurrido suficiente tiempo update se enciende if ( ledState ==0) {Serial.println ("pre verde"); setLed (0); ledState =1;} else if (ledState ==1) {Serial.println ("pre rojo"); setLed (1); ledState =2;} else if (ledState ==2) {Serial.println ("pre amarillo"); setLed (2); ledState =3;} else if (ledState ==3) {Serial.println ("pre azul "); setLed (3); ledState =0;} // restablecer tiempo previousMillis =currentMillis; }} // función para mientras el juego está jugandovoid gamePlay () {Serial.println ("gamePlay"); // precargar la matriz con números aleatorios para el juego para (int i =0; i  si se presiona cualquier botón, vaya al resto del código if (! button0 ||! button1 ||! button2 ||! button3) {// Retraso brevemente para evitar el doble recuento al presionar el botón ( 250); // enciende el led correspondiente cuando se pulsa un botón if (buttonNum ==0) {digitalWrite (ledArray [0], HIGH); retraso (250); digitalWrite (ledArray [0], LOW); } else if (buttonNum ==1) {digitalWrite (ledArray [1], HIGH); retraso (250); digitalWrite (ledArray [1], LOW); } else if (buttonNum ==2) {digitalWrite (ledArray [2], HIGH); retraso (250); digitalWrite (ledArray [2], LOW); } else if (buttonNum ==3) {digitalWrite (ledArray [3], HIGH); retraso (250); digitalWrite (ledArray [3], LOW); } // verifica si se presionó el botón correcto if (buttonNum ==0 &&button0 ==0) {Serial.println ("0 Pressed"); devuelve verdadero; } else if (buttonNum ==1 &&button1 ==0) {Serial.println ("1 Pressed"); devuelve verdadero; } else if (buttonNum ==2 &&button2 ==0) {Serial.println ("2 Pressed"); devuelve verdadero; } else if (buttonNum ==3 &&button3 ==0) {Serial.println ("3 Pressed"); devuelve verdadero; } else {devolver falso; }}}} // después de ganar - hacer que las luces se desplace rápidamente evite 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); retardo (75); digitalWrite (ledArray [1], HIGH); retardo (75); digitalWrite (ledArray [1], LOW); retardo (75); digitalWrite (ledArray [0], HIGH); delay (75); digitalWrite (ledArray [0], LOW); delay (75);} void ganar_sonido (void) {// tono (número de pin, frecuencia - busqué esto en línea para encontrar la frecuencia de las notas que quería, duración de la melodía) Serial.println ("buzzer1"); tono (zumbador, 294, 250); retraso (200); tono (zumbador, 294, 250); retraso (200); tono (zumbador, 294, 250); retraso (200); tono (zumbador, 392, 500); retraso (500); Serial.println ("segundo 392"); tono (zumbador, 392, 250); retraso (200); tono (zumbador, 440, 250); retraso (200); tono (zumbador, 392, 250); retraso (200); tono (zumbador, 440, 250); retraso (200); tono (zumbador, 494, 500);} void loseDisplay () {digitalWrite (ledArray [0], HIGH); digitalWrite (ledArray [1], ALTO); digitalWrite (ledArray [2], ALTO); digitalWrite (ledArray [3], HIGH); retraso (200); digitalWrite (ledArray [0], LOW); digitalWrite (ledArray [1], LOW); digitalWrite (ledArray [2], LOW); digitalWrite (ledArray [3], LOW); delay (200);} void lose_sound (void) {Serial.println ("lose_sound"); tono (zumbador, 98, 250); retraso (250); tono (zumbador, 93, 250); retraso (250); tono (zumbador, 87, 250); retraso (250);} 

Esquemas

simon_says_fritzing_Yb8EdKPqD4.fzz

Proceso de manufactura

  1. Juego de giroscopio Arduino con MPU-6050
  2. Dados digitales Arduino
  3. Juego de ruleta DIY 37 LED
  4. Controlador de juego Arduino
  5. Juego de joystick
  6. Detector de alcance portátil
  7. Pixel Chaser Game
  8. Galvanoplastia con cobre
  9. NeoMatrix Arduino Pong
  10. Manufactura 101:convertirse en parte de la industria aeroespacial
  11. Procesos involucrados en la fabricación de PCB de 4 capas - Parte 2