Allarme laser fai da te con Arduino
Billy non mi dire che non hai mai visto quegli impianti laser di cui sono pieni tutti i film che riguardano anche solo lontanamente delle rapine di qualsiasi tipo. Ad ogni modo, questo video (oltre ad essere tratto da un fantastico film) ti rinfrescherà la memoria:
Anche se in versione molto ridotta è senza tutto quel movimento, oggi andremo a ricreare uno strumento dalle stesse funzionalità (anche se il principio di funzionamento è diversissimo).
Occorrente
Abbiamo bisogno, oltre all'Arduino e alla millefori, di:
- un led rosso ed uno verde
- un buzzer
- un pulsante/bottone
- un laser
- un fotoresistore
Tutto è acquistabile online per una spesa complessiva di meno di cinque euro, un prezzo più che accettabile.
Il codice
Bisogna ora dire ad Arduino cosa fare. Per prima cosa ho deciso di utilizzare un pulsante che mi permetta di scegliere se il sistema è acceso o spento, e conseguentemente accendere il led rosso o quello verde. Per fare questo dobbiamo scrivere qualcosa come il codice:
const int rosso = 9; const int verde = 8; const int pulsante = 7; int stato=0; // All'inizio il sistema è spento. int val=0; // Memorizza il valore dello stato tra un ciclo e l'altro void setup() { pinMode(verde, OUTPUT); // Inizializzo l'uscita dei pin verdi. pinMode(rosso, OUTPUT); // Inizializzo l'uscita dei pin rossi. pinMode(pulsante, INPUT); // Inizializzo l'uscita dei pin del pulsante } void loop() { val = digitalRead(pulsante); // Leggo lo stato del segnale delay(10); if (val == HIGH) { // E' un trucchetto per conservare il stato = 1 - stato; // valore della scelta fatta col pulsante. } if (stato == HIGH) { // Se ho premuto il pulsante accendo il sistema digitalWrite(rosso, LOW); digitalWrite(verde, HIGH); else { // Se non ho premuto il pulsante accendo il red rosso digitalWrite(verde, LOW); digitalWrite(rosso, HIGH); } }
In questo modo abbiamo un programma che ci permette, tramite la pressione di un pulsante, di scegliere tra due «stati» del sistema, che per noi saranno acceso e spento. Andiamo ora quindi a dettagliare cosa deve fare il sistema quando viene acceso: bisogna far sì che il laser si accenda e che il fotoresistore, in caso di mancanza di luce (che gli forniremo puntando il laser contro lo stesso) faccia suonare il buzzer come se fosse scattato l'allarme. Per fare questo, implementiamo il nuovo codice (Listing 2.)
// Definiamo delle costanti per semplificare il linguaggio: const int giallo = 11; const int rosso = 9; const int verde = 8; const int pulsante = 7; const int transistor = 5; int stato=0; // All'inizio il sistema è spento. int val=0; // Memorizza il valore dello stato tra un ciclo e l'altro int luce; void setup() { pinMode(verde, OUTPUT); // Inizializzo l'uscita dei pin verdi. pinMode(rosso, OUTPUT); // Inizializzo l'uscita dei pin rossi. pinMode(pulsante, INPUT); // Inizializzo l'uscita dei pin del pulsante pinMode(transistor, OUTPUT); pinMode(A0,INPUT); } void loop() { val = digitalRead(pulsante); // Leggo lo stato del segnale (se o cliccato o no) delay(10); if (val == HIGH) { // E' un trucchetto per conservare il valore stato = 1 - stato; // della scelta fatta col pulsante. } if (stato == HIGH) { // Se ho premuto il pulsante accendo il sistema digitalWrite(rosso, LOW); digitalWrite(verde, HIGH); digitalWrite(transistor, 1); luce = analogRead(A0); if (luce<100) { tone(3, 440); } else noTone(3); // Da eliminare nel caso spiegato nel paragrafo "All'opera" } else { // Se non ho premuto il pulsante accendo il red rosso noTone(3); digitalWrite(verde, LOW); digitalWrite(rosso, HIGH); digitalWrite(transistor, 0); } }
Il circuito
Se avete capito il codice (e non è molto difficile dato che l'ho riempito di commenti) vi sarete già fatti un'idea di come assemblare il tutto. A scanso di equivoci io ho dato il mio circuito (da prendere con le pinze perchè fatto in notte inoltrata):
All'opera!
Nella prova il sistema era collegato ad un computer ed ho dovuto utilizzare uno specchio per far sì che il laser colpisse il fotodiodo. In realtà, avendo la possibilità di saldare o semplicemente collegare dei fili più lunghi è possibile rimuovere il problema dello specchio e utilizzando l'alimentazione esterna avere un vero e proprio sistema di allarme.
PS: per comodità nel progetto ho fatto in modo che «l'allarme» si spenga quando il laser torni ad incidere sul fotodiodo. Questa scelta non è molto coerente con un impianto di allarme, ma visto che dovevo fare delle prove in casa (dove non abito da solo) per la salvaguardia del clima pacifico ho impostato questa cosa. Per modificare questa opzione basta eliminare il noTone(3) che ho commentato (sì lo so sono troppo buono).
Buona fortuna Billy!
Commenti