
Gabriel Brooks
0
2987
175
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 capteur
- Sonnerie piézo ou autre petit périphérique de sortie
- Fils métalliques et attaches de 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).
#include 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 = 1; pos- = 10) // revient de 180 degrés à 0 degrés vert.write (pos); // dit au servo de se positionner 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, le 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 essayer d’utiliser la bibliothèque de sons si vous le souhaitez, 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éplace sur l'horizontale et l'autre sur la verticale. Vous pouvez retirer la pale du rotor et vous replacer pendant les tests 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 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’innombrables films de science-fiction et épisodes de 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 faisant la différence entre les positions de début et de fin divisée 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 soient pris, en déplaçant chaque fois un peu les servos tels que calculés précédemment; 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 augmentez le nombre de prises de vue pour créer une ambiance plus dance club. Faites défiler vers le bas pour une vidéo du code en action!
#include 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?