Questa lezione ruota ancora intorno al buzzer tuttavia, al contrario della precedente lezione, qui sarà utilizzato qualcosa di un po' più potente ovvero una sirena per allarme, inoltre, questa volta, sarà realizzato un progetto vero e proprio che potrà essere utilizzato nella vita di tutti i giorni, per proteggere case, uffici e capannoni. Vedremo infatti come costruire un vero allarme a laser con Arduino. Per la realizzazione del circuito verrà sfruttato un semplice ed economico puntatore laser da 650nm (nanometri) mod. KY-008 puntato contro una fotoresistenza appositamente predisposta sulla breadboard che fungerà da rilevatore di luce e farà scattare l'allarme in caso di intrusione.
Come funziona?
Il puntatore laser viene indirizzato contro la fotoresistenza. Questa sfrutta un fenomeno fisico chiamato effetto fotoconduttivo che, in parole povere, modifica la conducibilità elettrica (dalla quale è possibile estrapolare il valore ohmico) della fotoresistenza in base alla luce che rileva: più luce viene rilevata più la conducibilità aumenta. Sfruttando questo principio è quindi possibile, tramite un semplice algoritmo (che non farà altro che rilevare la quantità la quantità di luce), rivelare se e quando il fascio del laser viene interrotto. Potremo quindi dedurre il passaggio di una persona (ma anche di un animale se posto in posizioni più basse) e di conseguenza far scattare una sirena. Per questo progetto sono stati aggiunti due led e un pulsante a quattro vie: i led servono per segnalare quando l'allarme è spento (led rosso) oppure se è acceso (led verde). Il pullsante serve, ovviamente, ad accendere e spegnere l'allarme. Opportuno segnalare che la portata massima di questo laser sia di venti metri, è quindi consigliabile attestarsi a distanze minori.
Attenzione! I laser non sono giocattoli, anche se questo modello di laser non è particolarmente potente, è altamente consigliabile utilizzare occhiali di protezione che potete trovare in vendita su internet tramite la semplice ricerca "occhiali laser". Non bisogna assolutamente puntare il laser negli occhi perché è possibile danneggiarne la retina quindi è necessario prendere tutte le precauzioni del caso!
Ora che si sono gettate le basi sul funzionamento dell'allarme è il momento di passare oltre.
Assemblare il circuito
Il costo di questo allarme è di pochi euro e i collegamenti sono abbastanza semplici, anche per chi fosse ancora alle prime armi, il progetto è pertanto alla portata di tutti. Qualora lo si voglia utilizzare in un contesto reale, per essere funzionale, bisognerà utilizzare qualcosa di più saldo di una breadboard, nonché saldare i componenti su un vero circuito, altrimenti basterà un semplice "strappo" per disattivare l'intero allarme. Per ora, comunque, è bene concentrarsi sui collegamenti e sui componenti necessari alla realizzazione.
Lista dei componenti necessari:
- Arduino a scelta (UNO, Nano, cloni, ecc.)
- Breadboard
- 1 Resistenza da 10k ohm
- 3 Resistenze da 220 ohm
- 1 Led Rosso
- 1 Led Verde
- Fotoresistenza
- Pulsante a 4 vie
- Puntatore Laser KY-008
- Cavetti Jumper (ma vanno bene anche dei normali cavetti elettrici)
Una volta recuperati tutti i componenti elettronici basta collegare Arduino alla breadboard seguendo il seguente schema:
Due piccole note sullo schema:
La linea rossa disegnata sullo sketch, che parte dal laser
e arriva sino alla fotoresistenza, rappresenta il fascio luminoso del laser.
Il buzzer utilizzato nello sketch è in realtà una vera sirena per allarmi (come si vede nella foto sottostante).
I collegamenti sono concepiti come in tabella:
va collegato | |
---|---|
GND | a uno dei due poli negativi della breadboard |
5V | a uno dei due poli positivi della breadboard |
A5 | tra il polo della fotoresistenza e la resistenza da 200 ohm |
1 | all'uscita digitale del puntatore laser |
3 | al polo positivo della sirena |
5 | tra polo del puntatore e la resistenza da 10k ohm |
8 | al polo positivo del led verde |
9 | al polo positivo del led verde |
A integrazione di quanto in tabella il polo negativo della sirena va collegato con un polo negativo della breadboard, stessa cosa per i due poli del puntatore laser che andranno anch'essi collegati rispettivamente a un polo positivo e a uno negativo della breadboard. Occorre poi collegare le due estremità negative e positive della breadboard (il cavetto nero e quello rosso sulla breadboard che vanno da un lato a quello opposto).
Successivamente si collegherà un polo positivo della breadboard a un polo della fotoresistenza (non fa differenza, potete scegliere un polo qualsiasi della fotoresistenza) e all'altro polo della resistenza andrà invece collegata una resistenza da 220 ohm. Quest'ultimo collegamento richiede una spiegazione più dettagliata poiché la semplice aggiunta di questa resistenza permette ad Arduino di creare un partitore di tensione: in pratica Arduino può misurare solamente le tensioni in ingresso collegate ai suoi pin analogici, sarebbe quindi impossibile utilizzare una fotoresistenza, ma con un piccolo trucco è invece possibile misurare il reale valore resistivo attraverso la misura di una tensione. Basta infatti utilizzare una resistenza qualsiasi, a patto che se ne conosca il valore, e collegarla all'altro polo della resistenza e a un polo negativo della breadboard (oppure a direttamente a GND su Arduino), ottenendo cosi un partitore di tensione che permetterà ad Arduino di leggere la carica luminosa misurata dalla fotoresistenza. Dopodiché bisogna inserire due resistenze da 220 ohm tra due poli negativi della breadboard e quelli, anch'essi negativi, dei due led. Il pulsante va collegato a un polo positivo della breadboard, e su un altro polo si collega una resistenza da 10k ohm. Non rimane che collegare il polo negativo della sirena ad un polo negativo della breadboard e il gioco è fatto.
Parte Software
// Si definiscono tutte le costanti
const int ledrosso = 9;
const int ledverde = 8;
const int bottone = 5;
const int fasciolaser = 1;
int power=0; // l'allarme parte in stato di "power off"
int val=0;
int controlloluce;
void setup() {
pinMode(ledverde, OUTPUT); // si inizializza l'uscita del led verde.
pinMode(ledrosso, OUTPUT); // si inizializza l'uscita del led rosso.
pinMode(bottone, INPUT); // si inizializza lingresso in'entrata del bottone
pinMode(fasciolaser, OUTPUT); // si inizializza l'uscita del laser
pinMode(A5,INPUT); // si inizializza l'uscita analogica n. 5
}
void loop() {
val = digitalRead(bottone); // lettura dello stato del segnale
delay(5);
if (val == HIGH) { // si salva il valore del bottone in memoria
power = 1 - power;
}
if (power == HIGH) { // premendo il bottone il sistema viene acceso
digitalWrite(ledrosso, LOW);
digitalWrite(ledverde, HIGH);
digitalWrite(fasciolaser, 1);
controlloluce = analogRead(A5);
if (controlloluce<100) { // se il raggio del laser viene interrotto
tone(3, 500); // viene azionata la sirena
}
}
else { // premendo il bottone si accende il led rosso
noTone(3); // e si spegne l'allarme
digitalWrite(ledverde, LOW);
digitalWrite(ledrosso, HIGH);
digitalWrite(fasciolaser, 0);
}
}
Nella prima parte si definiscono le costanti dell'allarme (i led, il tasto, il laser, lo stato di accensione/spegnimento ed il controllo della quantità di luce), dopodiché comincia il semplice loop, prima di tutto esegue un controllo sullo stato di spegnimento/accensione dell'allarme. Viene letto lo stato del pulsante, se è stato premuto inizializza il sistema accendendo l'allarme, altrimenti rimane in attesa del click mantenendo l'allarme spento. Viene poi salvato lo stato in memoria. Se il sistema è acceso Arduino passa alla fase successiva del codice che è quella in cui legge l'intensità della luce e trasmette i risultati alla board, se la luce scende sotto un range d'intensità prestabilito scatta la sirena.
Quando viene testato il circuito è consigliabile non utilizzare la porta usb del computer in quanto si rischia un calo di tensione. Un normale alimentatore da smartphone o tablet dovrebbe andar bene.
Nelle prossime lezioni vedremo come ampliare le funzioni e migliorare le caratteristiche di questo sistema di allarme.