Pew Pew! Wie man einen Laser-Revolver mit einem Arduino baut

Bist du gelangweilt? Könnte auch einen Laserturm bauen.

Bist du gelangweilt?  Könnte auch einen Laserturm bauen.
Werbung

Bist du gelangweilt? Könnte auch einen Laserturm bauen. Weißt du, einer, der von der Kirchenbank geht, einen roten Strahl in viele verschiedene Richtungen schießt und vielleicht sogar eine Nebelmaschine hineinwirft? Ja, einer von ihnen.

Was wirst du brauchen

  • Arduino
  • 2 Servos
  • Lasermodul, wie eines von diesem Sensor-Kit
  • Piezo-Summer oder ein anderes kleines Ausgabegerät
  • Metalldraht und Kabelbinder zur Befestigung
  • Lange weibliche-> männliche Springseile, plus normale Springseile

Optional wird eine Rauchmaschine benötigt - der Laser hat eine ziemlich geringe Wattleistung, so dass Sie den Strahl auch in einem dunklen Raum nicht rauchfrei sehen können.

Komponenten

Bauplan

Die Grundidee des Revolvers besteht darin, das Lasermodul auf einem Servo zu platzieren, um eine horizontale Rotation zu ermöglichen. Dann montieren Sie dieses Paket auf ein anderes Servo, das in einem Winkel von 90 Grad angeordnet ist, um eine vertikale Bewegung zu ermöglichen. Wir haben einen Piezo, um die Pew-Pew- Sound-Effekte zu erzeugen, und ich werfe eine Rauchmaschine für ein gutes Maß ein.

Servotests

Abhängig von Ihrem Servo können die Drähte unterschiedlich gefärbt sein, aber im Allgemeinen:

  • Rot ist der positive Draht, und an beiden meinen Servos war es das Zentrum von drei - um mit + 5v Schiene verbunden zu werden.
  • Braun oder Schwarz ist das Negativ, das auf dem Arduino mit GND verbunden wird.
  • Weiß oder Orange ist die Signalleitung, die an einen PWM-fähigen digitalen I / O-Pin angeschlossen wird (9 und 10 in der Demo unten).

Nachdem Sie Ihre beiden Servos angeschlossen haben, laden Sie den folgenden Beispielcode hoch. Ich habe ein Servo "hori" genannt, um die horizontale Bewegung zu steuern, und das andere "vert". Jeder sollte einen vollen Bereich der Bewegungsabtastung durchführen (in meinem Fall ungefähr 60 Grad).

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

Alles gut? Weiter so.

Testen des Pew- Sounds von Laser und Pew

Das Lasermodul ist wie eine LED, aber es ist ein Widerstand in das Modul eingebaut, so dass wir es direkt an ein digitales I / O anschließen können - sehr einfach. Wenn Sie das gleiche Lasermodul wie ich verwenden, geht das " - " auf GND, das S geht auf Pin 12. Ändern Sie den obigen Beispielcode, um Pin 12 zu einem Ausgang zu machen:

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

Dann blink den Pin an und aus jeder Schleife mit Standard- DigitalWrite () -Methode.

Wir werden nur PWM verwenden, um den Piezo-Summer mit einem angenehmen Klangpegel zu betreiben - Sie könnten mit der Ton-Bibliothek experimentieren, wenn Sie wollten, aber ein einfaches Geräusch ist alles was ich brauche. Schließen Sie das schwarze Kabel an Masse und das rote Kabel an Pin 11 an. Definieren Sie Ihren Summer an dem entsprechenden Pin, stellen Sie den Ausgangsmodus ein und aktivieren Sie ihn mit analogWrite (Summer, 100) (oder einer beliebigen Zahl von bis zu 254); und analogWrite (Summer, 0) zum Ausschalten.

Der vollständige Beispielcode, der modifiziert wurde, um zwei Servos zu schwenken, einen Laser zu aktivieren und den lästigen Ton zu spielen, kann hier gefunden werden.

Alle Ihre Komponenten sollten funktionieren - jetzt müssen wir alles zusammenbinden.

Erstellen des Revolvers

Befestigen Sie mit einem Kabelbinder ein Servo an dem anderen; Es spielt keine Rolle, ob man sich in der Horizontalen bewegt und die andere die Vertikale bewegt. Sie können das Rotorblatt abziehen und während des Tests wieder einsetzen, wenn der Winkel nicht stimmt.

Servos

Verwenden Sie einen steifen Modellierdraht, um das Lasermodul an der Klinge des anderen Servos zu befestigen.

Draht-für-Laser-Modul

Schließlich befestigte ich das Ganze an einem Tischbein mit noch mehr Kabelbindern und ein wenig Altholz.

befestigen-Revolver-zu-Tisch

Programmieren des Revolvers

Ich weiß nicht wie es euch geht, aber meine Idee eines Laserturms kommt von unzähligen Science-Fiction Filmen und Star Trek Episoden. Ausnahmslos wird jemand an einem Turm vorbeifliegen, und kleine Pew-Pew- Schüsse werden in einem ausladenden Muster herausfliegen, immer Millisekunden zu langsam, so dass unser Protagonist nicht wirklich getroffen wird. Das ist, was ich versuche zu replizieren, obwohl Sie frei sind, die Hauptroutine zu zwicken, um Ihrer Vorstellung davon zu entsprechen, was ein Revolver tun sollte.

Hier ist der Pseudo-Code, den ich für die Hauptschleife verwendet habe:

  • Randomize Zeit zwischen Bursts und Zeit zwischen jedem einzelnen Schuss.
  • Randomize die Anfangs- und Endposition für jedes Servo, vert und hori.
  • Randomize die Anzahl der Aufnahmen zu nehmen.
  • Berechnen Sie die Anzahl der Änderungsgrade nach jedem Schuss als Differenz zwischen Anfangs- und Endposition geteilt durch die Anzahl der Schüsse.
  • Bewege die Servos in die Ausgangspositionen und warte ein wenig, bis sie da sind (100ms)
  • Schleife, bis alle Aufnahmen gemacht wurden, jedes Mal die Servos ein wenig bewegen, wie vorher berechnet; Bewegen und schießen, bewegen und schießen.
  • Wiederholen.

Ich fügte auch eine separate fire () -Methode hinzu, um den Code etwas besser zu strukturieren. Stellen Sie die Bereiche aller Zufallsfunktionen () so ein, dass die einzelnen Parameter schneller oder langsamer werden. oder erhöhen Sie die Anzahl der Aufnahmen für mehr Dance Club Vibe. Scrollen Sie nach unten für ein Video des Codes in Aktion!

 #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  

In Aktion

Ich denke nicht, dass es für dieses kleine Spielzeug einen praktischen Nutzen gibt, aber es macht unglaublich viel Spaß und es gibt viele Variablen, die man optimieren kann, um den gewünschten Effekt zu erzielen. Vielleicht wird es für einen selbst gemachten LEGO Film nützlich sein?

In this article