Hacer un juego de alambre zumbido con un arduino

En este proyecto divertido, vamos a aprender cómo hacer un juego de alambre zumbido con el Arduino. Muchas de las piezas necesarias se pueden encontrar en un kit de inicio (lo que está en un kit de inicio?) Y alrededor de la casa. Este proyecto utiliza un Arduino, si bien se puede utilizar casi cualquier microcontrolador que tiene a su alrededor (echar un vistazo a esta comparación entre $ 5 microcontroladores un poco de inspiración).Qué se incluye en un kit de iniciación Arduino? [Explica MakeUseOf]Qué se incluye en un kit de iniciación Arduino? [Explica MakeUseOf]He introducido previamente el hardware libre Arduino aquí en MakeUseOf, pero vas necesitan algo más que el Arduino real para construir algo de él y de hecho empezar. Arduino "kits de iniciación" son...Lee mas

Mira el resultado final - que incluso reproduce música:

Vídeo: Construye tu Juego de Ingenio Casero con Alambre (II)

Que necesitas

Aquí están las piezas de la base que necesita para completar este proyecto:

  • 1 x UNO Arduino o similar.
  • 1 x percha Metal.
  • 2 x 220 ohmios.
  • 1 x placa.
  • 1 zumbador x Piezo.
  • 2 clips x cocodrilo.
  • Surtido de tubo de contracción por calor.
  • Hombre-a macho cables de conexión.
Elenco TL-6 Alligator Lead Set, 10 piezas, 14 pulgadasElenco TL-6 Alligator Lead Set, 10 piezas, 14 pulgadas10 Cables de prueba en 5 colores para una fácil identificación Ahora comprar en Amazon $ 2.69

Aquí hay algunas piezas adicionales para mejorar la construcción:

  • 1 x zumbador piezo adicional.
  • 1 varilla x Dowel.
  • 1 x Quad pantalla de siete segmentos.
  • 1 x 220 ohm resistor.
  • 1 x botón momentáneo.
  • Hombre-a-hembra cables de conexión.
  • Tablón de madera (por caso).
  • tornillos para madera surtidos.

Casi cualquier Arduino va a funcionar, siempre que tenga suficientes pines. Echa un vistazo a esta guía de compra Si no está seguro de lo que necesita.Arduino Guía de compra: ¿Qué Junta debe llegar?Arduino Guía de compra: ¿Qué Junta debe llegar?Hay tantos tipos diferentes de placas Arduino por ahí, que sería perdonado por ser confundidos. ¿Qué debe usted comprar para su proyecto? Vamos a ayudarle, con esta guía de compra Arduino!Lee mas

El Plan de Construir

Arduino BuzzWire Completado

Si bien esto puede parecer complejo, en realidad es un proyecto bastante simple. Voy a empezar con el juego básico y, a continuación, añadir componentes adicionales para aumentar la complejidad. Se puede “elegir” a medida que desee en función de los componentes que tiene disponible.

El mecánico núcleo consiste en una forma de alambre y un bucle en un mango. El jugador tiene que guiar el lazo alrededor del curso sin tocar los dos. Si los dos tacto, el circuito se completa y suena el timbre. Por supuesto, es posible construir este circuito sin usar microcontrolador, pero ¿dónde está la diversión en eso (y cómo más se puede llegar a escuchar “Flying Circus”, tema musical de Monty Python)?

El curso

Arduino Curso BuzzWire

Esta es la forma que el jugador tendrá que guiar su ronda de bucle. Es la base de todo el juego, por lo que sea bueno! Elegí tener una pequeña gota, seguido de una gran subida. Doblar una percha de metal en la forma que necesita. Latón alambre o tubo de cobre funcionarán igual de bien, a pesar de una percha puede ser el más barato.

Puede que tenga que llevar guantes y el uso de alicates o un martillo para hacer las cosas perfectas. Cortar cualquier exceso con cizallas. Dejar dos montantes verticales para empujar a través de la base. Usted manera quiere presentar los extremos cortados para la seguridad. Finalmente, cortar dos trozos de tubo de contracción por calor y el lugar sobre los extremos de la siguiente manera:

Arduino BuzzWire Aislamiento

Esto aislará el bucle del curso, proporcionando una zona de inicio / final o la seguridad. Como alternativa, la cinta o incluso una paja harán si usted no tiene ninguna tubería del encogimiento del calor.

Ahora conectar un cable a un final del curso. Usted tiene dos opciones: usted puede o soldadura, o el uso de una pinza de cocodrilo. Una pinza de cocodrilo es la opción más fácil, pero la soldadura es una opción más confiable y de largo plazo. Asegúrese de “áspero” la superficie de la percha primero con papel de lija, y el uso de un montón de flujo. (Nunca soldada antes? Aprender a aquí.)Aprender cómo soldar, con estos sencillos consejos y ProyectosAprender cómo soldar, con estos sencillos consejos y Proyectos¿Es usted un poco intimidados por la idea de una plancha caliente y el metal fundido? Si desea empezar a trabajar con la electrónica, vas a tener que aprender a soldar. Vamos a ayudarle.Lee mas

Dependiendo del tamaño del agujero se perfora en la base en el siguiente paso, puede que tenga que pasar el cable a través del orificio de montaje en primer lugar. El uso de dos alambres trenzados entre sí aumentará la durabilidad:

Vídeo: Construye tu Juego de Ingenio casero.

Arduino torcida del alambre
Usando un taladro para hacer esto ayuda mucho:

Portabrocas Wire Twisting

La base

Caso BuzzWire Arduino

Es el momento de crear la base. Esto sirve para mantener el curso en una posición vertical, así como proporcionar un lugar para anclar el sistema electrónico a. He utilizado algunos recortes de pino, aunque se podría usar lo que tiene en la casa - incluso una caja de cartón.

Cortar tres piezas para formar una “n” forma. Simplemente el tornillo (o cola) estas tres piezas juntas. Recuerde que debe perforar un agujero piloto en las piezas laterales primero para evitar que la división. Es posible que desee para avellanar los tornillos (especialmente si va a ser llenado y luego la pintura), y recomiendo encarecidamente una broca de avellanado. Si usted no tiene un agujero herramienta de avellanado o un taladro, una broca de diámetro más grande va a hacer el truco.

Perforar dos agujeros lo suficientemente separados para los fines del curso para sentarse en. Avellanar la lista inferior para el encolado.

El mango

Mango Arduino BuzzWire
Ahora es el momento de hacer el bucle / controlador. Girar un pequeño trozo de la percha en un extremo para crear un bucle con un mango de metal pequeño. Asegúrese de que usted presenta el borde del corte, y luego cubrir con cinta adhesiva / espuma si es necesario.

Arduino BuzzWire Loop
Esto formará la otra mitad del circuito - cuando este bucle toca el supuesto que va a completar el circuito (exactamente como un interruptor). Soldar (o usar una pinza de cocodrilo) otro cable a la parte inferior de esta, exactamente igual que lo hizo anteriormente para el curso.

Cortar una pequeña longitud de espiga para el asa real. Este bucle de metal se ranura en este mango. Si usted no tiene ningún taco, puede redondear un pedazo de madera de coníferas cuadrado usando una lijadora de banda o disco (también se puede usar papel de lija, pero tendrían que pasar mucho tiempo).

Perforar un agujero a través de este mango. Esto tiene que ser lo suficientemente grande para encajar el bucle de metal y el alambre a través de:

Arduino BuzzWire Agujero Empuñadura
Esto es posible hacerlo en un taladro de columna, aunque es difícil. Un torno va a hacer el trabajo a la perfección:

Mango pasador Torno BuzzWire

Sí, soy muy consciente de que este es un torno de metal (para cualquier persona interesada, es una relojería torno Boley de la década de 1930. Creo que es un 3C, pero me encantaría saber de usted si sabe nada más acerca de él).

También es posible usar un bolígrafo con el centro eliminado.

Por último, el uso de pegamento caliente para asegurar el cable y el bucle en el mango. pegamento caliente proporcionará un accesorio fuerte (pero no permanente), así que es perfecto para esto.

terminando

Insertar el curso de alambre en los orificios de la base. No se olvide de añadir el bucle / controlador primero. Utilice pegamento caliente de nuevo para garantizar el curso a la base mediante el llenado de los agujeros avellanados en el lado inferior de la base de la siguiente manera:

Vídeo: COMO HACER JUEGO DE ROMPECABEZAS EN ALAMBRE, EL MALABARISTA

Soldadura Arduino BuzzWire

El circuito

Aquí está el circuito completo. Usted no tiene que hacer el suyo tan complejo como éste - como leer en desglosamos cada parte.

Arduino BuzzWire Circuito completa
En primer lugar, conecte los dos elementos piezoeléctricos a los pines digitales 10 y 11. La polaridad no importa:

Arduino Circuito Piezo
Usted no tiene que utilizar dos piezos - la única razón por la que he hecho hasta es tener un sonido de zumbido mucho más fuerte cuando los cables se toquen. Conecte un lado al pin digital, y el otro a tierra.

Ahora el enchufe en el curso de metal y mango:

Arduino Circuito BuzzWire
Una vez más, no importa la forma redonda que estos dos están cableados. Esta parte del circuito es exactamente como un botón o interruptor - el jugador completa el circuito cuando el bucle toca el curso. Asegúrese de incluir ambas resistencias.

Se vincula las resistencias del circuito a tierra (llamada una resistencia pull-down), asegurándose de que no es “flotante” (esto permite que el Arduino para detectar el cambio de circuito). El otro resistor protege el Arduino. Cuando las dos partes se tocan, + 5V entra en el pin digital. Si esta resistencia no estaba presente habría un muerto corta - el equipo sería desconectar el enchufe USB para llamar demasiado la actual si tienes suerte.

Conectar el cable de señal (púrpura, en el diagrama) para pin digital 9.

A continuación, conectar un pulsador para pin digital 2:

Arduino piezoeléctrico Circuito Botón

Vídeo: solucion rompecocos

Finalmente, conectar la pantalla LED de siete segmentos:

Arduino Siete circuito de segmento
Este modelo en particular es de Seeed. Este utiliza un TM1637 para conducir cuatro pantallas - esto significa que sólo se necesitan dos pines digitales. Conectar GND al suelo y Arduino VCC a Arduino + 5V. Conectar D10 a Arduino pin digital 13 y CLK al pin digital 12.

El código

Para que este proyecto funcione se necesitan dos archivos adicionales. El primero se llama pitches.h. Este archivo simplemente asigna nombres de las notas a su valor piezoeléctrico. Esto hace que sea mucho más fácil de escribir una canción, ya que simplemente puede decir “NOTE_C3” en lugar de “31”, por ejemplo. Esto es de dominio público y se encuentra disponible en el sitio web de Arduino aquí. Siga las instrucciones para crear un nuevo archivo llamado pitches.h (Alternativamente, pegue el código en su secuencia de comandos existente).

A continuación, se necesita un método para jugar realmente notas / melodías en el piezoeléctrico. Esta GIST por Anthony DiGirolamo en Github contiene el código que necesita. Copia todo entre “zumbido vacío” y “}}” y pegarlo en el archivo principal. Como referencia, aquí está:

vacío zumbido(int targetPin, largo frecuencia, largo longitud) {/ * Función del zumbador ejemplo por Rob Faludihttp: //faludi.comhttps: //gist.github.com/AnthonyDiGirolamo/1405180*/largo delayValue = 1000000/frecuencia/2- // Calcular el valor de retardo entre las transiciones//// pena de 1 segundo de microsegundos, dividida por la frecuencia, después se divide a la mitad desde//// hay dos fases de cada ciclolargo numCycles = frecuencia * longitud/ 1000- // calcular el número de ciclos de tiempo adecuado//// frecuencia se multiplican, que es realmente ciclos por segundo, por el número de segundos para//// obtener el número total de ciclos para producirpara (largo yo=0- yo lt; numCycles- yo++){ // para la longitud de tiempo calculado ...digitalWrite(targetPin,ALTO)- // escribir el pasador de timbre alto para empujar el diafragmadelayMicroseconds(delayValue)- // esperar a que el valor de retardo calculadodigitalWrite(targetPin,BAJO)- // escribir la baja pin timbre para tirar de la membranadelayMicroseconds(delayValue)- // esperar de nuevo para el valor de retardo calculado}}

La última biblioteca que necesita es controlar la pantalla de siete segmentos - puede omitir este paso si no está utilizando uno. Esta biblioteca se llama TM1637 y fue creado por Seeed, la misma compañía que creó la tarjeta de control.

En el IDE de Arduino, vaya a “Administrar bibliotecas” (Bosquejo gt; incluir Biblioteca gt; administrar bibliotecas). Con ello se abre el gestor de bibliotecas. Permitir un par de segundos para actualizar y luego buscar en el cuadro de búsqueda arriba a la derecha “TM1637”. Dos bibliotecas se pueden encontrar - que quiere “TM1637” y no “TM1637Display”. Seleccione y haga clic en “instalar”.

Una última tarea con esta biblioteca - no es completa! En su forma actual, la biblioteca sólo puede mostrar números 0-9 y las letras A-F. Si esto cubre todo lo que desea mostrar, entonces puede saltarse este paso. Si no es así, tendrá que modificar el código. ¡Relajarse! Esto no es tan difícil como parece, y si se puede escribir código que utiliza el IDE de Arduino, usted puede hacer esto.

En primer lugar, abrir la carpeta de biblioteca. Esto será en su carpeta de Arduino. En Mac OS X, esto es en / Users / Joe / Documentos / Arduino / Bibliotecas. Abra la carpeta llamada TM1637. Tendrá que editar el archivo llamado TM1637.cpp - puede ignorar el otro archivo con la extensión .marido. Abrir este archivo en tu editor de texto favorito (para mí, eso es Sublime Text 3), Bloc de notas o el IDE de Arduino.

Modificar la tercera línea de código de esto:

estático int8_t TubeTab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7D,0x07,0x7f,0x6F,0x77,0x7c,0x39,0x5E,0x79,0x71}-// 0 ~ 9, A, B, C, D, E, F

A esto:

estático int8_t TubeTab[] = {/ * * Por defecto /0x3f, // 0 0x06, // 10x5b, // 20x4f, // 3 0x66, // 40x6d, // 50x7D, // 60x07, // 7 0x7f, // 8 0x6F, // 90x77, // A - 100x7c, // b - 110x39, // C - 120x5E, // d - 130x79, // E - 140x71, // F - 15/ * Adicional * /0X174, // h - 160x176, // H - 170x138, // L - 180x15, // M - 190x137, // n - 200x73, // P - 210x67, // Q - 220x131, // r - 230x78, // t - 240x240 // - 25}-

Ahora puede guardar y cerrar el archivo. Después de cada elemento, el comentario describe qué personaje se trata. La siguiente parte del comentario es el índice del elemento.

Es hora de que el código real. En primer lugar, son las dos bibliotecas se mencionó anteriormente:

#incluir #incluir 

Ahora crea el objeto de visualización:

TM1637 *_monitor = nuevo TM1637(12, 13)-

No se preocupe si usted no entiende la sintaxis - esta línea le dice al Arduino que los pines 12 y 13 están conectados a una pantalla de siete segmentos, y que configurarlo adecuadamente.

La canción se almacena en melodía y tempo. Estos contienen todas las notas y la duración de la nota de la música. Si desea cambiar la música, modificar estas matrices (aunque, no es tan simple como pegar en los valores de las notas, el tiempo es una parte muy importante de la música). los songState variables simplemente almacena la posición de la última nota reproducida. Esto asegura la melodía se juega de principio a fin, en lugar de saltar alrededor inconsistente:

int songState = 0-int melodía[] = {NOTE_F4,...}int tempo[] = {8,...}

Tenga en cuenta que he eliminado el contenido de las matrices, a continuación encontrará el código completo.

Este código es no bloqueante - esto significa que el Arduino puede realizar múltiples tareas al mismo tiempo. Echa un vistazo a esta explicación para más información. Así es como los temporizadores son de configuración:Función Arduino retardo, y por qué no se debe utilizarFunción Arduino retardo, y por qué no se debe utilizarMientras retardo () es útil para demostraciones básicos de cómo funciona Arduino, que realmente no debería estar utilizando en el mundo real. He aquí por qué, y lo que debe utilizar en su lugar.Lee mas

no firmado largo previousMillis1 = 0-const largo interval1 = 1500-

La variable previousMillis1 se actualizará en una etapa posterior para almacenar la hora actual. los interval1 variable almacena el tiempo de espera entre la ejecución de código - en este caso, de 1,5 segundos. Se define como const, lo que significa que es constante y nunca va a cambiar - esto permite que el Arduino para optimizar aún más el código.

Dentro de preparar() la función hay algunas cosas que suceden. En primer lugar, las entradas y salidas son configurados. Esto se tiene que hacer, por lo que el Arduino sabe lo que está conectado a cada uno de ellos de pines:

pinMode(9, ENTRADA)- // circuito de configuraciónpinMode(10, SALIDA)- // configura timbre 1pinMode(11, SALIDA)- // configura timbre 2pinMode(2, ENTRADA)- // botón de configuración

Ahora la pantalla necesita configurar:

_monitor-gt;conjunto(5)- // luminosidad ajustado_monitor-gt;punto(falso)- // eliminar de colon_monitor-gt;en eso()- // inicia la pantalla

Los métodos conjunto, punto, y en eso están todos contenidos dentro de la _monitor objeto. En lugar de un punto, un puntero ( “-gt;”) se utiliza para acceder a ellos. Una vez más, no se preocupe acerca de la sintaxis (aunque, si desea obtener más información, consultar C ++ punteros).

El bucle principal tiene dos modos de juego: reto y el juego libre. libre juego permite al jugador jugar una cantidad ilimitada de veces. el modo de desafío establece un temporizador de 20 segundos utilizando el showCountdown método. Utiliza el botón para iniciar y detener el temporizador. Actualmente, la única manera de cambiar los modos de juego es editar manualmente la variable llamada modo. Ver si se puede añadir otro botón para hacer esto y modificar el código de forma apropiada.

los zumbido método reproduce las notas que dan a la misma. Esto se utiliza en conjunción con canta. El método Sing pasa a través de cada nota y lo reproduce. Este método se llama con regularidad, aunque sólo se reproducirá la siguiente nota cuando ha transcurrido suficiente tiempo desde el último juego. Una vez que la canción ha llegado al final, se restablece la canción al verso 1 (songState = 14). También podemos establecer esto a cero para iniciar la canción al principio, sin embargo, la razón para hacer esto es saltarse la introducción. La introducción se reproduce una vez después de que el Arduino se ha encendido, y entonces no se juega de nuevo.

los showFree y showPlay métodos simplemente escriben las palabras “libre” y “PLAY” para la pantalla. Observe cómo la “r” en minúscula es libre, cuando todos los demás caracteres están en mayúsculas. Esta es una de las limitaciones de siete pantallas de segmento. No pueden mostrar cada letra del alfabeto, y algunos de los caracteres que pueden mostrar que estar en mayúsculas y minúsculas.

los toggleFreePlay método parpadea la pantalla entre “libre” y “PLAY”. Una vez más, lo hace de un modo no-bloqueo.

Otro método útil es mostrar numero. Esto escribe un número a la mitad dos caracteres de la pantalla como esta:

Arduino BuzzWire Display

La pantalla no es lo suficientemente inteligente como para saber cómo mostrar un gran número, que tiene que ser explícitamente les diga qué hacer. Este método utiliza una lógica sencilla para mostrar el número que corresponda en cada personaje.

El último método utilizado se llama showCountdown. Esto inicia un contador en 20, y la disminuye en uno cada segundo. Si esto llega a cero, zumba tres veces, para indicar que el tiempo se ha agotado.

Aquí está todo ese código armar:

#incluir  // incluir biblioteca de presentación#incluir  // incluir emplazamientosTM1637 *_monitor = nuevo TM1637(12, 13)- // crear objeto de visualización, 12 = CLK (reloj), 13 = D10 (datos)// músicaint songState = 0-int melodía[] = {NOTE_F4, NOTE_E4, NOTE_D4, NOTE_CS4,NOTE_C4, NOTE_B3, NOTE_AS3, NOTE_A3,NOTE_G3, NOTE_A3, NOTE_AS3, NOTE_A3,NOTE_G3, NOTE_C4, 0,NOTE_C4, NOTE_A3, NOTE_A3, NOTE_A3,NOTE_GS3, NOTE_A3, NOTE_F4, NOTE_C4,NOTE_C4, NOTE_A3, NOTE_AS3, NOTE_AS3,NOTE_AS3, NOTE_C4, NOTE_D4, 0,NOTE_AS3, NOTE_G3, NOTE_G3, NOTE_G3,NOTE_FS3, NOTE_G3, NOTE_E4, NOTE_D4,NOTE_D4, NOTE_AS3, NOTE_A3, NOTE_A3,NOTE_A3, NOTE_AS3, NOTE_C4, 0,NOTE_C4, NOTE_A3, NOTE_A3, NOTE_A3,NOTE_GS3, NOTE_A3, NOTE_A4, NOTE_F4,NOTE_F4, NOTE_C4, NOTE_B3, NOTE_G4,NOTE_G4, NOTE_G4, NOTE_G4, 0,NOTE_G4, NOTE_E4, NOTE_G4, NOTE_G4,NOTE_FS4, NOTE_G4, NOTE_D4, NOTE_G4,NOTE_G4, NOTE_FS4, NOTE_G4, NOTE_C4,NOTE_B3, NOTE_C4, NOTE_B3, NOTE_C4, 0}-int tempo[] = {8, dieciséis, 8, dieciséis,8, dieciséis, 8, dieciséis,dieciséis, dieciséis, dieciséis, 8,dieciséis, 8, 3,12, dieciséis, dieciséis, dieciséis,8, dieciséis, 8, dieciséis,8, dieciséis, 8, dieciséis,8, dieciséis, 4, 12,12, dieciséis, dieciséis, dieciséis,8, dieciséis, 8, dieciséis,8, dieciséis, 8, dieciséis,8, dieciséis, 4, 12,12, dieciséis, dieciséis, dieciséis,8, dieciséis, 8, dieciséis,8, dieciséis, 8, dieciséis,8, dieciséis, 4, dieciséis,12, 17, 17, 17,8, 12, 17, 17,17, 8, dieciséis, 8,dieciséis, 8, dieciséis, 8, 1}-configuración no bloqueo //// juego gratisno firmado largo previousMillis1 = 0- // palabras cambian de tiempo pasadoconst largo interval1 = 1500- // intervalo entre cambiar// músicano firmado largo previousMillis2 = 0- // tiempo de los últimos modificadosconst largo interval2 = 100- // intervalo entre notasint displayStatus = 0- // realizar un seguimiento de lo que se muestraint modo = 0- // no perder de vista el modo de juego - el cambio a 0 ó 1 para los diferentes modosbool cuenta regresiva = falso-no firmado largo previousMillis3 = 0- // tiempo de los últimos modificadosconst largo interval3 = 1000- // intervalo entre cuenta atrásint contar = 20- // temporizador de modo de desafíovacío preparar() {// poner su código de configuración aquí, para ejecutar una vez:pinMode(9, ENTRADA)- // circuito de configuraciónpinMode(10, SALIDA)- // configura timbre 1pinMode(11, SALIDA)- // configura timbre 2pinMode(2, ENTRADA)- // botón de configuración_monitor-gt;conjunto(5)- // luminosidad ajustado_monitor-gt;punto(falso)- // eliminar de colon_monitor-gt;en eso()- // inicia la pantalla}vacío lazo() {// ponga su código principal aquí, para ejecutar repetidamente:Si(modo == 0) {// modo DesafíoSi(digitalRead(2) == ALTO) {retrasar(25)-Si(digitalRead(2) == ALTO) {cuenta regresiva = cierto- // detener la cuenta atrás}más {cuenta regresiva = falso- // detener la cuenta atrás}}Si(cuenta regresiva) {showCountdown()- // cuenta atrás de antemano}}más {// juego gratistoggleFreePlay()-}Si(digitalRead(10) == ALTO) {retrasar(25)-Si(digitalRead(10) == ALTO) {mientras(digitalRead(10) == ALTO) {zumbido(11, NOTE_B0, 1000/24)-}}}máscanta()-}vacío showCountdown() {// cuenta atrás del tiempo restanteno firmado largo currentMillis = Millis()- // hora actualSi (currentMillis - previousMillis3 gt; = interval3) {previousMillis3 = currentMillis---contar-mostrar numero(contar)-Si(contar == 0) {// juego terminadocuenta regresiva = falso-contar = 20-// reiniciarlo// zumbido 3 veceszumbido(11, NOTE_B0, 1000/24)-retrasar(100)-zumbido(11, NOTE_B0, 1000/24)-retrasar(100)-zumbido
Artículos Relacionados