
Michael Cain
0
4099
427
¿Estas aburrido? También podría construir una torreta láser. Ya sabes, uno que va banco de banco, dispara un rayo rojo en muchas direcciones diferentes, y tal vez incluso arrojar 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 sensor
- Zumbador piezoeléctrico u otro dispositivo de salida pequeño
- Alambres metálicos y bridas para fijar
- Cables de salto largos 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á ver el haz 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 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 el banco de banco efectos de sonido, y estoy tirando en una máquina de humo por si acaso.
Prueba 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 fue el centro de tres, para conectarse al riel de + 5v.
- Marrón o negro es lo negativo, estar conectado a GND en el Arduino.
- El cable de señal es blanco o naranja, para conectarse a un pin de E / S digital con capacidad PWM (9 y 10 en la demostración a continuación).
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 barrido de rango completo de movimiento (aproximadamente 60 grados, en mi caso).
#incluye Servo vert, hori; // crea un servo objeto para controlar un servo // se puede crear un máximo de ocho servo objetos int pos = 0; // variable para almacenar la posición del servo void setup () hori.attach (9); vert.attach (10); // adjunta el servo en el pin 9,10 a los objetos del servo vert.write (0); hori.write (0); void loop () for (pos = 0; pos = 1; pos- = 10) // retrocede de 180 grados a 0 grados vert.write (pos); // decirle al servo que vaya a la posición en la variable 'pos' hori.write (pos); retraso (100); // espera 100 ms para que el servo alcance la posición
¿Todo bien? Pasar a continuación.
Probar 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 para que podamos conectarlo directamente a una E / S digital, muy simple. Si está utilizando el mismo módulo láser que yo, el “-” va a GND, la S va al pin 12. Modifique el código de muestra anterior para hacer que el pin 12 sea una salida:
int laser = 12; pinMode (láser, SALIDA);
Luego parpadea el pin dentro y fuera de cada bucle usando estándar digitalWrite () método.
Simplemente usaremos PWM para conducir el zumbador 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 ruido simple. Conecte el cable negro a tierra y el cable rojo al pin 11. Defina su zumbador en el pin correspondiente, ajústelo al modo de salida y actívelo 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.
Creando la torreta
Usando bridas, conecte un servo al otro; en realidad no importa cuál, solo asegúrese de que uno se moverá en horizontal y el otro se moverá en vertical. Puede quitar la pala del rotor y volver a colocarlo 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 cuchilla del otro servo, así:
Finalmente, conecté todo a una pata de escritorio con más ataduras de cables y un poco de chatarra.
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 siéntase libre de modificar la rutina principal para adaptarla a su idea de lo que debe hacer una torreta.
Aquí está el pseudo código que terminé usando para el bucle principal:
- Aleatorice el tiempo entre ráfagas y el tiempo entre cada disparo individual.
- Aleatorice la posición inicial y final de cada servo, vert y hori.
- Aleatoriza la cantidad de disparos que debes tomar.
- Calcule la cantidad de grados de cambio después de cada disparo como la diferencia entre las posiciones de inicio y finalización dividida por la cantidad de disparos.
- Mueva los servos a las posiciones iniciales y espere un poco para que lleguen (100 ms)
- Haga un bucle hasta que se hayan tomado todas las fotos, moviendo cada vez los servos un poco como se calculó previamente; mover y disparar, mover y disparar.
- Repetir.
También agregué un separado fuego() Método para estructurar el código un poco mejor. Ajusta los rangos de todos aleatorio() funciones para acelerar o ralentizar cada parámetro; o aumentar el número de disparos para un ambiente más club de baile. Desplácese hacia abajo para ver un video del código en acción!
#incluye Servo vert, hori; // crea un servo objeto para controlar un servo int pos = 0; // variable para almacenar la posición del servo int laser = 12; zumbador int = 11; configuración vacía () hori.attach (9); vert.attach (10); // adjunta el servo en el pin 9 al servo objeto pinMode (laser, OUTPUT); pinMode (zumbador, SALIDA); 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 = 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 primero a la posición inicial, espere un poco hori.write (horiStart); retraso (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 ajustar para obtener el efecto deseado. Tal vez sea útil para una película casera de LEGO?