Pan Pan! Comment construire une tourelle laser avec un Arduino

Vous ennuyez-vous? Autant construire une tourelle laser.

Vous ennuyez-vous?  Autant construire une tourelle laser.
Publicité

Vous ennuyez-vous? Autant construire une tourelle laser. Vous savez, celui qui fait un banc de bancs, tire un rayon rouge dans plusieurs directions différentes et peut-être même lance une machine à fumée? Oui, l'un d'entre eux.

Ce dont tu auras besoin

  • Arduino
  • 2 servos
  • Module laser, comme celui de ce kit de capteurs
  • Buzzer piezo ou autre petit dispositif de sortie
  • Fil métallique et serre-câbles pour la fixation
  • Longue femelle-> câbles de saut mâles, plus des câbles de saut réguliers

En option, une machine à fumée est nécessaire - le laser est assez faible en watts, de sorte que vous ne serez pas en mesure de voir le faisceau sans fumée, même dans une pièce sombre.

Composants

Construire un plan

L'idée de base de la tourelle est de placer le module laser au-dessus d'un servo pour assurer une rotation horizontale; puis montez ce paquet sur un autre servo placé à un angle de 90 degrés pour fournir un mouvement vertical. Nous avons un piezo pour fournir des effets sonores de banc de pew, et je jette dans une machine à fumée pour faire bonne mesure.

Test de servo

Selon votre servo, les fils peuvent être colorés différemment, mais en général:

  • Le rouge est le fil positif, et sur les deux servos c'était le centre de trois - à connecter au rail + 5v.
  • Le brun ou le noir est le négatif, à connecter à GND sur l'Arduino.
  • Blanc ou orange est le fil de signal, à brancher à une broche d'E / S numérique compatible PWM (9 et 10 dans la démo ci-dessous).

Une fois que vous avez câblé vos deux servos, téléchargez l'exemple de code suivant. J'ai nommé un servo "hori" pour contrôler le mouvement horizontal, et l'autre "vert". Chacun devrait effectuer une gamme complète de balayage de mouvement (environ 60 degrés, dans mon cas).

#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 } } 

Tout bon? Passant alors.

Test du laser et Pew Pew Sound

Le module laser est juste comme une LED, mais il a une résistance intégrée dans le module afin que nous puissions l'accrocher directement à une E / S numérique - très simple. Si vous utilisez le même module laser que moi, le " - " va à GND, le S va à la broche 12. Modifiez l'exemple de code ci-dessus pour faire de la broche 12 une sortie:

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

Ensuite, faites clignoter la broche à chaque boucle en utilisant la méthode standard digitalWrite () .

Nous utiliserons simplement PWM pour piloter le buzzer piezo à un niveau sonore confortable - vous pouvez expérimenter avec la bibliothèque de sons si vous le souhaitez, mais un simple bruit est tout ce dont j'ai besoin. Connectez le fil noir à la terre et le fil rouge à la broche 11. Définissez votre sonnerie sur la broche correspondante, réglez sur le mode de sortie, et activez en utilisant analogWrite (buzzer, 100) (ou tout nombre que vous voulez jusqu'à 254); et analogWrite (buzzer, 0) pour éteindre.

Le code échantillon complet modifié pour balayer deux servo, activer un laser, et jouer le son ennuyeux, peut être trouvé ici.

Tous vos composants devraient fonctionner - maintenant nous devons lier tous ensemble.

Créer la tourelle

En utilisant des attaches de câble, attachez un servo à l'autre; cela n'a pas vraiment d'importance, assurez-vous que l'un bouge horizontalement et l'autre verticalement. Vous pouvez retirer la pale du rotor et la remettre en place pendant l'essai si l'angle n'est pas correct.

servos

Utilisez un fil de modélisation rigide pour fixer le module laser à la lame de l'autre servo, comme ceci:

fil-pour-laser-module

Enfin, j'ai attaché le tout à une jambe de bureau avec encore plus de serre-câbles et un peu de bois de ferraille.

attach-tourelle-à-table

Programmation de la tourelle

Je ne sais pas pour vous, mais mon idée d'une tourelle laser vient d'un nombre incalculable de films de science-fiction et d'épisodes de star trek. Invariablement quelqu'un passera devant une tourelle et de petits coups de pew-pew viendront voler dans un modèle de balayage, toujours des millisecondes trop lents pour que notre protagoniste ne soit pas vraiment frappé. C'est ce que j'essaie de reproduire, mais n'hésitez pas à modifier la routine principale en fonction de votre idée de ce que devrait faire une tourelle.

Voici le pseudo code que j'ai fini par utiliser pour la boucle principale:

  • Randomize temps entre les rafales, et le temps entre chaque tir individuel.
  • Randomisez la position de début et de fin pour chaque servo, vert et hori.
  • Aléatoire le nombre de coups à prendre.
  • Calculer le nombre de degrés de changement après chaque tir comme la différence entre les positions de départ et de fin divisé par le nombre de coups.
  • Déplacez les servos aux positions de départ, et attendez un peu pour qu'ils y arrivent (100ms)
  • Boucle jusqu'à ce que tous les coups aient été pris, chaque fois que vous déplacez les servos un peu comme précédemment calculé; bouge et tire, bouge et tire.
  • Répéter.

J'ai également ajouté une méthode fire () séparée pour mieux structurer le code. Réglez les plages de toutes les fonctions aléatoires () pour accélérer ou ralentir chaque paramètre; ou augmenter le nombre de coups pour une ambiance de club de danse plus. Faites défiler vers le bas pour une vidéo du code en action!

 #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 action

Je ne pense pas qu'il y ait une utilisation pratique pour ce petit jouet, mais c'est très amusant et il y a beaucoup de variables que vous pouvez modifier pour obtenir l'effet désiré. Peut-être que ça va être utile pour un film LEGO fait maison?

In this article