Pew Pew! Come costruire una torretta laser con un Arduino

Pew Pew! Come costruire una torretta laser con un Arduino / Fai da te

Sei annoiato? Potrebbe anche costruire una torretta laser. Sai - uno che va Pew Pew, spara un raggio rosso in molte direzioni diverse, e magari lancia anche una macchina del fumo? Sì, uno di loro.

Di cosa avrai bisogno

  • Arduino
  • 2 servi
  • Modulo laser, come quello di questo kit di sensori
  • Cicalino piezoelettrico o altro piccolo dispositivo di uscita
  • Fili metallici e fascette per fissaggio
  • Lunghi cavi femmina-> salto maschile, più cavi di salto normali

Facoltativamente, è necessaria una macchina del fumo: il laser ha un wattaggio piuttosto basso, quindi non sarai in grado di vedere il raggio senza fumo anche in una stanza buia.

Piano di costruzione

L'idea di base della torretta è di mettere il modulo laser sopra un servo per fornire una rotazione orizzontale; quindi montare il pacchetto su un altro servo posizionato a un angolo di 90 gradi per fornire un movimento verticale. Abbiamo un piezo per fornire il Pew Pew effetti sonori, e sto gettando in una macchina del fumo per buona misura.

Test servo

A seconda del servo, i fili possono essere colorati in modo diverso, ma in generale:

  • Il rosso è il filo positivo, e su entrambi i miei servi era il centro di tre - da collegare a + 5v rail.
  • Marrone o nero è il negativo, per essere collegato a GND su Arduino.
  • Bianco o arancione è il filo del segnale, da collegare a un pin I / O digitale compatibile con PWM (9 e 10 nella demo di seguito).

Una volta cablati i due servi, carica il seguente codice di esempio. Ho chiamato un servo “hori” per controllare il movimento orizzontale e l'altro “vert”. Ognuno dovrebbe eseguire una gamma completa di sweep del movimento (circa 60 gradi nel mio caso).

#includere  Servo vert, hori; // crea un oggetto servo per controllare un servo // è possibile creare un massimo di otto oggetti servo int pos = 0; // variabile per memorizzare la posizione del servo void setup () hori.attach (9); vert.attach (10); // collega il servo sul pin 9,10 agli oggetti 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) // torna da 180 gradi a 0 gradi vert.write (pos); // dire al servo di andare in posizione nella variabile 'pos' hori.write (pos); ritardo (100); // aspetta 100ms affinché il servo raggiunga la posizione 

Tutto bene? Andando avanti allora.

Test del laser e Pew Pew Suono

Il modulo laser è proprio come un LED, ma ha una resistenza integrata nel modulo in modo che possiamo collegarlo direttamente a un I / O digitale - molto semplice. Se stai usando lo stesso modulo laser di me, il “-” va a GND, il S passa al pin 12. Modifica il codice di esempio sopra per rendere il pin 12 un output:

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

Quindi fai lampeggiare il pin su ciascun loop utilizzando lo standard digitalWrite () metodo.

Useremo il PWM per pilotare il cicalino piezo a un livello sonoro confortevole: potresti provare a utilizzare la libreria dei toni se lo desideri, ma è sufficiente un semplice rumore. Collegare il filo nero a terra e il filo rosso al pin 11. Definire il proprio cicalino sul relativo pin, impostare la modalità di uscita e attivare utilizzando analogWrite (cicalino, 100) (o qualsiasi numero che desideri fino a 254); e analogWrite (buzzer, 0) per disattivare.

L'intero codice di esempio modificato per spazzare due servo, attivare un laser e riprodurre il suono fastidioso, può essere trovato qui.

Tutti i componenti dovrebbero funzionare - ora dobbiamo legarli tutti insieme.

Creazione della torretta

Utilizzando le fascette, collegare un servo all'altro; non importa quale, ma assicurati che si muoverà sull'orizzontale e l'altro muoverà la verticale. È possibile estrarre la pala del rotore e riposizionarla durante i test se l'angolo non è corretto.

Utilizzare un filo di modellazione rigido per fissare il modulo laser alla lama dell'altro servo, in questo modo:

Alla fine, ho attaccato l'intera cosa a una gamba della scrivania con ancora più fascette e un po 'di legno di scarto.

Programmazione della torretta

Non so voi, ma la mia idea di una torretta laser proviene da innumerevoli film di fantascienza e episodi di star trek. Invariabilmente qualcuno sorvolerà una torretta e poco Pew Pew- gli scatti arriveranno volando in uno schema ampio, sempre in millisecondi troppo lenti, in modo che il nostro protagonista non venga colpito. Questo è quello che sto cercando di replicare, anche se sentiti libero di modificare la routine principale per adattarla alla tua idea di cosa dovrebbe fare una torretta.

Ecco lo pseudo-codice che ho usato per il ciclo principale:

  • Randomize tempo tra scoppi e tempo tra ogni singolo colpo.
  • Randomizza la posizione iniziale e finale per ogni servo, vert e hori.
  • Randomizza il numero di colpi da prendere.
  • Calcola il numero di gradi di variazione dopo ogni scatto come differenza tra la posizione iniziale e quella finale divisa per il numero di colpi.
  • Sposta i servi nelle posizioni di partenza e aspetta un po 'per loro per arrivarci (100ms)
  • Loop fino a quando non sono stati effettuati tutti i colpi, ogni volta spostando i servi un po 'come precedentemente calcolato; muovi e spara, muovi e spara.
  • Ripetere.

Ho anche aggiunto un separato fuoco() metodo per strutturare il codice un po 'meglio. Regola gli intervalli di tutti casuale() funzioni per accelerare o rallentare ciascun parametro; o aumentare il numero di colpi per un'atmosfera più da discoteca. Scorri verso il basso per un video del codice in azione!

#includere  Servo vert, hori; // crea un oggetto servo per controllare un servo int pos = 0; // variabile per memorizzare la posizione del servo int laser = 12; int buzzer = 11; void setup () hori.attach (9); vert.attach (10); // attacca il servo sul pin 9 all'oggetto servo 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; // quanto spostare gli assi verticali di ogni colpo int horiChange = (horiEnd - horiStart) / numShots; vert.write (vertStart); // lascia che arrivi prima alla posizione iniziale, aspetta un po 'hori.write (horiStart); ritardo (100); per (int shot = 0; colpo

In azione

Non penso che ci sia un uso pratico per questo piccolo giocattolo, ma è un sacco di divertimento e ci sono molte variabili che puoi modificare per ottenere l'effetto desiderato. Forse sarà utile per un film LEGO fatto in casa?

Scopri di più su: Arduino.