¡Pew pew! Cómo construir una torreta láser con un Arduino
¿Estas aburrido? También podría construir una torreta láser. Ya sabes - uno que va banco de banco, dispara una viga roja en muchas direcciones diferentes, y tal vez incluso lanza una máquina de humo? Si, una de ellas.
Que necesitarás
- Arduino
- 2 servos
- Módulo láser, como uno de este kit de sensores.
- Zumbador piezo u otro dispositivo de salida pequeño
- Alambre de metal y bridas para fijación.
- Hembra larga-> cables de salto macho, más cables de salto regulares
Opcionalmente, se necesita una máquina de humo: el láser tiene un vatiaje bastante bajo, por lo que no podrá ver el rayo sin humo incluso en una habitación oscura.
Plan de construcción
La idea básica de la torreta es colocar el módulo láser en la parte superior de un servo para proporcionar rotación horizontal; luego monte ese paquete en otro servo colocado en un ángulo de 90 grados para proporcionar movimiento vertical. Tenemos un piezo para proporcionar la banco de banco efectos de sonido, y estoy tirando en una máquina de humo para una buena medida.
Pruebas de servo
Dependiendo de su servo, los cables pueden tener un color diferente, pero en general:
- El rojo es el cable positivo, y en mis dos servos era el centro de tres: para conectarse a un riel de + 5v.
- Marrón o negro es el negativo, para conectarse a GND en el Arduino.
- Blanco o naranja es el cable de señal, que se conecta a un pin de E / S digital compatible con PWM (9 y 10 en la demostración a continuación).
Una vez que hayas conectado tus dos servos, sube el siguiente código de muestra. He nombrado un servo “hori” para controlar el movimiento horizontal, y el otro “vert”. Cada uno debe realizar un rango completo de movimiento (aproximadamente 60 grados, en mi caso).
#incluir Servo vert, hori; // crear un objeto servo para controlar un servo // se puede crear un máximo de ocho objetos servo int pos = 0; // variable para almacenar la posición del servo void setup () hori.attach (9); vert.attach (10); // conecta el servo en el pin 9,10 a los objetos servo vert.write (0); hori.write (0); void loop () for (pos = 0; pos < 180; pos += 10) // goes from 0 degrees to 180 degrees // in steps of 10 degrees vert.write(pos); hori.write(pos); // tell servo to go to position in variable 'pos' delay(100); // waits 100ms for the servo to reach the position for(pos = 180; pos>= 1; pos- = 10) // retrocede de 180 grados a 0 grados vert.write (pos); // Dígale al servo que vaya a la posición en la variable 'pos' hori.write (pos); retraso (100); // espera 100 ms a que el servo alcance la posición
¿Todo bien? Pasar a continuación.
Probando el láser y Pew Pew Sonar
El módulo láser es como un LED, pero tiene una resistencia integrada en el módulo, por lo que podemos conectarlo directamente a una E / S digital, muy simple. Si estás usando el mismo módulo láser que yo, el “-” va a GND, la S va al pin 12. Modifique el código de ejemplo anterior para hacer que el pin 12 sea una salida:
láser int = 12; PinMode (láser, SALIDA);
Luego encienda y apague el pin en cada bucle usando el estándar escritura digital () método.
Solo usaremos PWM para manejar el timbre piezoeléctrico a un nivel de sonido cómodo; puede experimentar con el uso de la biblioteca de tonos si lo desea, pero todo lo que necesito es un simple ruido. Conecte el cable negro a tierra y el cable rojo al pin 11. Defina su zumbador en el pin relevante, configúrelo en modo de salida y active usando analogwrite (zumbador, 100) (o cualquier número que desee hasta 254); y analogwrite (zumbador, 0) apagar.
El código de muestra completo modificado para barrer dos servos, activar un láser y reproducir el sonido molesto, se puede encontrar aquí.
Todos sus componentes deberían estar funcionando, ahora necesitamos unirlos todos..
Creando la torreta
Usando abrazaderas de cables, conecte un servo al otro; realmente no importa cuál, solo asegúrate de que uno se mueva en la horizontal y el otro que se mueva en la vertical. Puede sacar la pala del rotor y volver a colocarla durante la prueba si el ángulo no es el correcto.
Use un cable de modelado rígido para fijar el módulo láser a la hoja del otro servo, de esta manera:
Finalmente, até todo a una pata de escritorio con aún más ataduras de cables y un poco de madera de desecho..
Programando la torreta
No sé sobre ti, pero mi idea de una torreta láser proviene de innumerables películas de ciencia ficción y episodios de Star Trek. Invariablemente alguien volará más allá de una torreta y poco banca los disparos saldrán volando en un patrón de barrido, siempre milisegundos demasiado lento para que nuestro protagonista no sea realmente golpeado. Eso es lo que estoy tratando de replicar, aunque no dude en modificar la rutina principal para adaptarla a su idea de lo que debería hacer una torreta.
Aquí está el pseudo código que terminé usando para el bucle principal:
- Aleatorizar el tiempo entre ráfagas y el tiempo entre cada disparo individual.
- Aleatorizar la posición inicial y final para cada servo, vert y hori.
- Aleatorizar el número de disparos para tomar.
- Calcule el número de grados de cambio después de cada disparo como la diferencia entre las posiciones inicial y final dividida por el número de disparos.
- Mueva los servos a las posiciones iniciales y espere un poco para que lleguen allí (100 ms)
- Repita hasta que se hayan realizado todos los disparos, cada vez que mueva los servos un poco como se calculó anteriormente; mover y disparar, mover y disparar.
- Repetir.
También he añadido un separado fuego() Método para estructurar el código un poco mejor. Ajustar los rangos de todos aleatorio() funciones para acelerar o ralentizar cada parámetro; o aumentar el número de tomas para una mayor vibra del club de baile. Desplácese hacia abajo para ver un video del código en acción.!
#incluir Servo vert, hori; // crear un objeto servo para controlar un servo int pos = 0; // variable para almacenar la posición del servo int laser = 12; zumbador int = 11; configuración de vacío () hori.attach (9); vert.attach (10); // conecta el servo en el pin 9 al modo servo pinMode (láser, SALIDA); pinMode (zumbador, SALIDA); void loop () int timeBetweenBursts = random (200,1000); int timeBetweenShots = random (50,200); int vertStart = aleatorio (1,180); int vertEnd = random (1,180); int horiStart = aleatorio (1.180); int horiEnd = aleatorio (1,180); int numShots = aleatorio (5,20); int vertChange = (vertEnd - vertStart) / numShots; // cuánto mover el eje vertical por cada disparo int horiChange = (horiEnd - horiStart) / numShots; vert.write (vertStart); // deje que llegue a la posición inicial primero, espere un poco hori.write (horiStart); retraso (100); para (tiro int. = 0; tiro
En acción
No creo que haya un uso práctico para este pequeño juguete, pero es muy divertido y hay muchas variables que puedes modificar para obtener el efecto deseado. Tal vez sea útil para una película casera de LEGO.?
Explorar más sobre: Arduino.