Pan Pan! Comment construire une tourelle laser avec un Arduino
Vous ennuyez-vous? On pourrait aussi bien construire une tourelle laser. Vous savez - celui qui va pan Pan, tire un faisceau rouge dans beaucoup de directions différentes, et peut-être même jeter dans une machine à fumée? Oui, l'un d'entre eux.
Ce dont vous aurez besoin
- Arduino
- 2 servos
- Module laser, tel que celui de ce kit de capteurs
- Sonnerie piézo ou autre petit périphérique de sortie
- Attaches métalliques et câbles pour la fixation
- Longs câbles de jonction femelle -> mâle, plus des câbles de jonction réguliers
En option, une machine à fumée est nécessaire - le laser est plutôt faible en watts, vous ne pourrez donc pas voir le faisceau sans fumée, même dans une pièce sombre.
Plan de construction
L’idée de base de la tourelle est de placer le module laser au-dessus d’un servo pour permettre une rotation horizontale; puis montez ce paquet sur un autre servo placé à un angle de 90 degrés pour permettre un mouvement vertical. Nous avons un piézo pour fournir le pan Pan effets sonores, et je jette dans une machine à fumée pour faire bonne mesure.
Essais 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 mes deux servos il était au centre de trois - être connecté au rail + 5v.
- Brown ou black est le négatif, à connecter à GND sur l’Arduino.
- Le fil de signal, blanc ou orange, doit être connecté à 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 le code exemple suivant. J'ai nommé un servo “Hori” pour contrôler le mouvement horizontal, et l'autre “vert”. Chacun doit effectuer un balayage complet du mouvement (environ 60 degrés, dans mon cas).
#comprendre Servo vert, hori; // créer un objet servo pour contrôler un servo // un maximum de huit objets servo peut être créé int pos = 0; // variable pour stocker la position du servo void setup () hori.attach (9); vert.attach (10); // attache le servo sur la broche 9,10 aux objets 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) // revient de 180 degrés à 0 degrés vert.write (pos); // dit au servo d'aller à la position dans la variable 'pos' hori.write (pos); délai (100); // attend 100ms que le servo atteigne la position
Tout bon? Passer ensuite.
Tester le laser et pan Pan Du son
Le module laser ressemble à une LED, mais il est doté d'une résistance intégrée qui permet de la connecter directement à une entrée / sortie numérique, ce qui est très simple. Si vous utilisez le même module laser que moi, le “-” va à GND, la S passe à la broche 12. Modifiez l'exemple de code ci-dessus pour que la broche 12 devienne une sortie:
int laser = 12; pinMode (laser, OUTPUT);
Faites ensuite clignoter la goupille de chaque boucle à l’aide de digitalWrite () méthode.
Nous utiliserons simplement PWM pour piloter l’avertisseur piézo-électrique à un niveau sonore confortable. Vous pouvez utiliser la bibliothèque de tonalités à votre guise, mais un simple bruit suffit. Connectez le fil noir à la terre et le fil rouge à la broche 11. Définissez votre avertisseur sonore sur la broche appropriée, mettez-le en mode de sortie et activez-le avec analogWrite (buzzer, 100) (ou n'importe quel nombre que vous voulez jusqu'à 254); et analogWrite (buzzer, 0) éteindre.
Vous trouverez ici le code complet de l'échantillon complet modifié pour balayer deux servos, activer un laser et reproduire le son gênant..
Tous vos composants doivent fonctionner - nous devons maintenant les associer tous ensemble.
Création de la tourelle
À l’aide de serre-câbles, fixez un servo à l’autre; peu importe lequel, assurez-vous simplement que l'un se déplacera sur l'horizontale et l'autre sur la verticale. Vous pouvez retirer la pale du rotor et vous replacer pendant les essais si l'angle n'est pas correct.
Utilisez un câble de modélisation rigide pour fixer le module laser à la lame de l’autre servo, comme ceci:
Finalement, j'ai attaché le tout à un pied de bureau avec encore plus de colliers de serrage et un peu de bois de récupération.
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 Star Trek. Invariablement, quelqu'un passera devant une tourelle et peu pan Pan les coups vont voler dans un schéma rapide, toujours millisecondes trop lent pour que notre protagoniste ne soit pas touché. C'est ce que j'essaie de reproduire, mais n'hésitez pas à modifier la routine principale pour l'adapter à votre idée de ce qu'une tourelle devrait faire..
Voici le pseudo-code que j'ai utilisé pour la boucle principale:
- Randomiser le temps entre les rafales et le temps entre chaque tir individuel.
- Aléatoire les positions de début et de fin pour chaque servo, vert et hori.
- Randomiser le nombre de coups à prendre.
- Déterminez le nombre de degrés de changement après chaque coup en divisant le nombre de positions de début et de fin par le nombre de coups..
- Déplacez les servos aux positions de départ et attendez un peu qu'ils y arrivent (100ms)
- Boucle jusqu’à ce que tous les coups aient été pris, en déplaçant légèrement les servos comme précédemment calculé; bouge et tire, bouge et tire.
- Répéter.
J'ai aussi ajouté un séparé Feu() méthode pour structurer le code un peu mieux. Ajuster les plages de tous au hasard() des fonctions pour accélérer ou ralentir chaque paramètre; ou augmenter le nombre de coups pour une ambiance plus dance club. Faites défiler vers le bas pour une vidéo du code en action!
#comprendre Servo vert, hori; // crée un objet servo pour contrôler un servo int pos = 0; // variable pour stocker la position du servo int laser = 12; sonnerie int = 11; void setup () hori.attach (9); vert.attach (10); // attache le servo sur la broche 9 à l'objet servo pinMode (laser, OUTPUT); pinMode (buzzer, OUTPUT); void loop () int timeBetweenBursts = random (200,1000); int timeBetweenShots = aléatoire (50 200); int vertStart = aléatoire (1 180); int vertEnd = random (1 180); int horiStart = aléatoire (1 180); int horiEnd = aléatoire (1 180); int numShots = random (5,20); int vertChange = (vertEnd - vertStart) / numShots; // combien il faut déplacer d’axe vertical pour chaque coup int horiChange = (horiEnd - horiStart) / numShots; vert.write (vertStart); // laissez-le commencer par la position de départ, attendez un peu hori.write (horiStart); délai (100); pour (int shot = 0; shot
En action
Je ne pense pas que ce petit jouet ait une utilité pratique, mais c’est très amusant et il ya beaucoup de variables que vous pouvez modifier pour obtenir l’effet souhaité. Peut-être que ça vous sera utile pour un film LEGO fait maison?
En savoir plus sur: Arduino.