Pew Pew! Hvordan bygge en laserturret med en Arduino

Kjeder du deg? Kan også bygge et lasertårn.

Kjeder du deg?  Kan også bygge et lasertårn.
Annonse

Kjeder du deg? Kan også bygge et lasertårn. Du vet - en som går med pew-pew, skyter en rød stråle i mange forskjellige retninger, og kanskje til og med kaste inn en røykmaskin? Ja, en av dem.

Hva du trenger

  • Arduino
  • 2 servos
  • Lasermodul, for eksempel en fra dette sensorsettet
  • Piezo-buzzer eller annen liten utgangsenhet
  • Metalltråd og kabelbinder for festing
  • Long female-> male jump kabler, pluss vanlige hoppekabler

Eventuelt er det nødvendig med en røykmaskin - laseren er ganske lav watt, slik at du ikke kan se strålen uten røyk selv i et mørkt rom.

komponenter

Bygg Plan

Den grunnleggende ideen til tårnet er å sette lasermodulen på toppen av en servo for å gi horisontal rotasjon; Monter deretter pakken på en annen servo plassert i 90 grader vinkel for å gi vertikal bevegelse. Vi har en piezo å gi pew pew lydeffekter, og jeg kaster inn en røyke maskin for godt mål.

Servotesting

Avhengig av din servo, kan ledningene være fargede forskjellig, men generelt:

  • Rød er den positive ledningen, og på begge servene var det midtpunktet på tre - for å være koblet til + 5v skinne.
  • Brun eller svart er det negative, for å være koblet til GND på Arduino.
  • Hvit eller oransje er signalledningen, som skal kobles til en PWM-kompatibel digital I / O-pin (9 og 10 i demoen nedenfor).

Når du har koblet til de to tjenestene dine, laster du opp følgende prøvekode. Jeg har kalt en servo "hori" for å styre den horisontale bevegelsen, og den andre "vert". Hver bør utføre et bredt spekter av bevegelsessvep (ca. 60 grader, i mitt tilfelle).

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

Helt fint? Flytter på da.

Testing av Laser og Pew Pew Sound

Lasermodulen er som en LED, men den har en motstand innebygd i modulen slik at vi kan koble den opp direkte til en digital I / O - veldig enkel. Hvis du bruker samme lasermodul som meg, går " - " til GND, S går til pin 12. Endre prøvekoden ovenfor for å gjøre pin 12 til en utgang:

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

Blink deretter pinnen på og av hver løkke ved hjelp av standard digitalWrite () -metoden.

Vi bruker bare PWM til å kjøre piezo summeren på et komfortabelt lydnivå. Du kan eksperimentere med å bruke tone biblioteket hvis du vil, men en enkel lyd er alt jeg trenger. Koble den svarte ledningen til jord og den røde ledningen til pin 11. Definer summen på den aktuelle pin, sett til utgangsmodus, og aktiver ved hjelp av analogWrite (summer, 100) (eller et hvilket som helst tall du vil ha opptil 254); og analog skriv (summer, 0) for å slå av.

Den fulle prøvekoden er modifisert for å feie to servo, aktivere en laser og spille irriterende lyden, finner du her.

Alle dine komponenter skal fungere - nå må vi knytte det hele sammen.

Opprette Turret

Ved hjelp av kabelbinder, fest en servo til den andre; det spiller ingen rolle noe som bare sørger for at man beveger seg på den horisontale og den andre vil bevege seg vertikalt. Du kan trekke av rotorbladet og sette på plass under test hvis vinkelen ikke er riktig.

servoer

Bruk litt stiv modelleringstråd for å fikse lasermodulen til den andre servoens blad, slik som:

wire-for-laser-modul

Til slutt festet jeg hele greia til et skrivebordsben med enda flere kabler og litt skrap.

feste-dreietåm-til-bord

Programmering av tårnet

Jeg vet ikke om deg, men ideen om en laserturret kommer fra utallige sci-fi-filmer og stjernetrekepisoder. Alltid vil noen fly forbi et tårn og små pew-pew skudd kommer å flyr ut i et feiende mønster, alltid millisekunder for sakte, slik at vår hovedperson ikke faktisk blir rammet. Det er det jeg prøver å replikere, men vær så snill å justere hovedrutinen for å passe til ideen om hva et tårn skal gjøre.

Her er pseudokoden jeg endte med å bruke for hovedløkken:

  • Randomize tid mellom utbrudd og tid mellom hvert enkelt skudd.
  • Tilfeldig start- og sluttposisjonen for hver servo, vert og horisont.
  • Randomize antall skudd å ta.
  • Trene ut antall grader av endring etter hvert skudd som forskjellen mellom start- og sluttposisjoner delt på antall skudd.
  • Flytt servoene til startposisjonene, og vent litt for dem å komme dit (100ms)
  • Loop til alle skuddene er tatt, hver gang servosene flyttes litt som tidligere beregnet; flytte og skyte, flytte og skyte.
  • Gjenta.

Jeg har også lagt til en egen brann () metode for å strukturere koden litt bedre. Juster rekkevidden til alle tilfeldige () -funksjonene for å øke eller senke hver parameter; eller øk antall skudd for en mer dance club vibe. Rull ned for en video av koden i aksjon!

 #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  

I aksjon

Jeg tror ikke det er en praktisk bruk for denne lille leken, men det er en veldig mye moro og det er mange variabler du kan justere for å få ønsket effekt. Kanskje det kommer til nytte for en hjemmelaget LEGO-film?

In this article