Pew Pew! Cómo construir una torreta láser con un Arduino

¿Estas aburrido? También podría construir una torreta láser.

¿Estas aburrido?  También podría construir una torreta láser.
Anuncio

¿Estas aburrido? También podría construir una torreta láser. Ya sabes, uno que va al banco de la banca, dispara un rayo rojo en muchas direcciones diferentes, y tal vez incluso arroja una máquina de humo. Sí, uno de ellos.

Que necesitarás

  • Arduino
  • 2 servos
  • Módulo láser, como uno de este kit de sensores
  • Zumbador piezoeléctrico u otro dispositivo de salida pequeño
  • Alambre de metal y ataduras de cables para la fijación
  • Cables largos de salto hembra-macho, más cables de salto regulares

Opcionalmente, se necesita una máquina de humo: el láser tiene una potencia bastante baja, por lo que no podrás ver el haz sin humo incluso en una habitación oscura.

componentes

Plan de compilación

La idea básica de la torreta es colocar el módulo láser encima 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 los efectos de sonido del banco del banco, y estoy arrojando una máquina de humo por si acaso.

Prueba servo

Dependiendo de su servo, los cables pueden ser de diferente color, pero en general:

  • El rojo es el cable positivo, y en ambos mis servos era el centro de tres, para ser conectado a un raíl de + 5v.
  • Marrón o negro es el negativo, para ser conectado a GND en el Arduino.
  • Blanco o naranja es el cable de señal que se conectará a un pin de E / S digital con capacidad PWM (9 y 10 en la demostración siguiente).

Una vez que haya conectado sus dos servos, cargue 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 barrido de movimiento (aproximadamente 60 grados, en mi caso).

#include Servo vert, hori; // create servo object to control a servo // a maximum of eight servo objects can be created int pos = 0; // variable to store the servo position void setup() { hori.attach(9); vert.attach(10); // attaches the servo on pin 9, 10 to the servo objects vert.write(0); hori.write(0); } void loop() { for(pos = 0; pos =1; pos-=10) // goes back from 180 degrees to 0 degrees { vert.write(pos); // tell servo to go to position in variable 'pos' hori.write(pos); delay(100); // waits 100ms for the servo to reach the position } } 

¿Todo bien? Pasar a continuación.

Probando el sonido de Laser y Pew Pew

El módulo láser es como un LED, pero tiene una resistencia integrada en el módulo para que podamos conectarlo directamente a una E / S digital, muy simple. Si está utilizando el mismo módulo de láser que yo, el " - " va a GND, el S va al pin 12. Modifique el código de muestra anterior para que el pin 12 sea una salida:

 int laser = 12; pinMode(laser, OUTPUT); 

Luego, encienda y apague el pin cada ciclo utilizando el método digitalWrite () estándar.

Simplemente usaremos PWM para controlar el zumbador piezoeléctrico a un nivel de sonido cómodo; podría experimentar con el uso de la biblioteca de tonos si lo desea, pero lo único 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 correspondiente, establezca el modo de salida, y actívelo usando analogWrite (zumbador, 100) (o cualquier número que desee hasta 254); y analogWrite (zumbador, 0) para 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 tenemos que atarlo todo.

Creando la Torreta

Usando ataduras de cables, conecte un servo a la otra; en realidad no importa cuál, solo asegúrate de que uno se moverá en la horizontal y el otro moverá la vertical. Puede extraer la pala del rotor y volver a colocarla durante la prueba si el ángulo no es el correcto.

servos

Utilice un cable rígido de modelado para fijar el módulo láser a la cuchilla del otro servo, así:

cable-para-módulo-láser

Finalmente, coloqué todo en una pata de escritorio con aún más ataduras de cables y un poco de madera.

adjuntar-torreta a la mesa

Programando la Torreta

No sé ustedes, 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 los pequeños disparos de las bancas saldrán volando en un patrón de barrido, siempre milisegundos demasiado lento para que nuestro protagonista no sea alcanzado. Eso es lo que trato de reproducir, 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 ciclo principal:

  • Aleatorice el tiempo entre ráfagas y el tiempo entre cada toma individual.
  • Aleatorice la posición inicial y final para cada servo, vert y hori.
  • Aleatorice la cantidad de disparos a 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 hasta que lleguen (100 ms)
  • Bucle hasta que se hayan tomado todas las tomas, cada vez moviendo los servos un poco como se calculó previamente; mover y disparar, mover y disparar.
  • Repetir.

También agregué un método fire () separado para estructurar el código un poco mejor. Ajuste los rangos de todas las funciones aleatorias () para acelerar o ralentizar cada parámetro; o aumente el número de disparos para una sensación más dance club. Desplácese hacia abajo para ver un video del código en acción.

 #include Servo vert, hori; // create servo object to control a servo int pos = 0; // variable to store the servo position int laser = 12; int buzzer = 11; void setup() { hori.attach(9); vert.attach(10); // attaches the servo on pin 9 to the servo object pinMode(laser, OUTPUT); pinMode(buzzer, OUTPUT); } void loop() { int timeBetweenBursts = random(200, 1000); int timeBetweenShots = random(50, 200); int vertStart = random(1, 180); int vertEnd = random(1, 180); int horiStart = random(1, 180); int horiEnd = random(1, 180); int numShots = random(5, 20); int vertChange = (vertEnd - vertStart) / numShots; //how much to move vertical axis by each shot int horiChange = (horiEnd - horiStart) / numShots; vert.write(vertStart);//let it get to start position first, wait a little hori.write(horiStart); delay(100); for(int shot = 0; shot  

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 LEGO casera?

In this article