«

»

Dic 18

Corso Arduino – Lezione 7 – Accensione luci con il buio Arduino

Come visto nella lezione precedente il ruolo del relay è di un interruttore. Per comandare il relay abbiamo usato un pulsantino! Questa tecnica non è il massimo, altrimenti avremmo continuato a usare i vecchi interruttori. In una casa domotica risulta molto più utile una luce automatica che si accende al passaggio di una persona o con il buio. Tutto ciò è facilmente implementabile con un semplice fotoresistore al posto dell’interruttore e un rilevatore di presenza.

Senza entrare in dettagli tecnici, il fotoresistore è un componente che varia la sua resistenza in modo inversamente proporzionale alla luce incidente sulla sua superficie. Pertanto, se la luce incidente è molto elevata la resistenza diventa molto bassa, viceversa in caso di luce bassa la resistenza sarà elevata. Generalmente i fotoresistori hanno resistenze che variano da 1MOhm o più a 100ohm o meno. La variazione generalmente non è lineare ma può approssimare bene la realtà. Useremo in accoppiata una resistenza da 10KOhm. Vedremo in seguito a cosa servirà! Io userò un fotoresistore appartenente al robottino DeAgostini che si rivela sempre utile per questi test. Le specifiche sono grossomodo quelle elencate sopra e non ci interessa essere troppo precisi, ci occuperemo di calibrare i valori di soglia secondo i nostri gusti e ci interessa vedere principalmente come funziona. Il suo dovere lo farà!

Ciò che ci interessa fare è usare questo sensore come interruttore! Come potremmo fare? Il fatto che la sua resistenza vari con la luce ci fa capire che la sua tensione ai capi può variare in caso di corrente mantenuta a valori costanti. Sappiamo per certo che i pin analogici di Arduino possono rappresentare la tensione con 1024 valori da 0 a 1023. Pertanto se colleghiamo il fotoresistore a uno di questi pin potremo leggerne la tensione ai capi e accorgerci se la resistenza è alta o bassa e pertanto se la luce è variata.

La resistenza da 10KOhm serve per realizzare un partitore di tensione. Sappiamo infatti che se due resistenze sono in serie e connesse ai capi di una batteria la tensione si ripartirà su di esse in modo proporzionale al valore della resistenza.

Per chi non avesse le basi di elettrotecnica necessarie, sinteticamente, la corrente circolante in una maglia se non ci sono ramificazioni deve essere sempre la stessa. Infatti la corrente entrate in un nodo (connessione di due o più rami di bipoli (componente dotato di due poli in un circuito) deve essere pari a quella uscente e la somma delle differenze di potenziale in una maglia deve essere pari a zero. Pertanto se la maglia (percorso chiuso) è una sola e ai capi delle due resistenze applico la 5V di Arduino avrò che la tensione ai poli delle due resistenze sommata deve equivalere quella del generatore di tensione (Arduino a 5V) anche perché le uniche connessioni nodali avvengono tra bipoli e quindi ciò che entra da un ramo deve uscire dall’altro e avremo la stessa corrente in tutto il percorso della maglia e in tutti i componenti. 

Detto ciò, connettendo in partitore di tensione la fotoresistenza e la resistenza da 10KOhm potremo leggere la tensione ai capi della nostra resistenza variabile fotoresistiva. Il tutto avviene collegando il punto di contatto fra le due resistenze anche al pin A0 (o Aqualsiasinumerovogliate). Imposteremo un valore di tensione di soglia sullo sketch Arduino e in caso si verifichi un abbassamento luminoso tale da causare il raggiungimento del valore di tensione di soglia potremmo chiudere il relay inviando un segnale da un pin digitale, come visto nella precedente lezione. Il collegamento lo attueremo in modo da avere un’innalzamento della tensione in caso di buio e viceversa (non spiegherò il perchè dato che è abbastanza intuitivo :) ). Abbiamo considerato il livello di tensione letto come un indicatore di buio. Valori alti molto buio, valori bassi meno buio o molta luce. Se preferite leggere i valori invertiti basterà invertire di posto resistenza e foto resistore nel partitore di tensione.

A tutto questo dobbiamo aggiungere il controllo di presenza tramite il sensore PIR, un sensore dotato di 3 pin. Un pin per il controllo digitale del sensore e due per l’alimentazione, positivo al 5v e negativo al GND. Un potenziometro sul sensore consente la regolazione del tempo di permanenza. In pratica, regolando il potenziometro si decide quanto tempo debba passare prima di tornare dallo stato HIGH a LOW (e quindi spegnere) senza rilevare alcun movimento. Il sensore è in grado di rilevare ostacoli fino a 7metri secondo le specifiche del produttore.

COSTI

Fotoresistore ( a volte chiamato LDR) € 1 circa

Sensore PIR € 3,5 circa

Totale di 5 euro circa

Fritzing

Come potete vedere nell’immagine seguente ho collegato un polo della resistenza da 10KOhm alla 5V di Arduino e l’altro polo al fotoresistore. A sua volta il fotoresistore è connesso a massa. Il punto di connessione fra i due resistori è collegato al pin A0 per la lettura. A sua volta il relay è collegato alla 5V e alla massa GND. Il pin digitale per l’attivazione/disattivazione è rimasto quello delle altre lezioni. E infine il sensore PIR è connesso all’alimentazione con la 5V e la massa e con un filo ad un pin digitale. In caso di rilevamento di presenza il pin digitale del PIR passa al valore HIGH, pertanto leggendo tale valore sapremo se c’è o meno una presenza. Il potenziometro sul PIR serve a rallentare il passaggio da HIGH a LOW in caso di assenza di movimento. Un valore più lungo del può essere utile per non spegnere la luce immediatamente dopo il passaggio di una persona, fastidioso! 😀

Vi prego di non tener conto del verso del LED, del fatto che abbia usato il LED nell’immagine per rappresentare una lampadina. Naturalmente ricordate che se volete usare un LED dovete mettere in serie una resistenza adeguata (non di certo potete usare la 220V ma magari un pacco batterie per alimentarlo interrompendo il negativo del pacco batterie con il relay, oppure potete usare la 5V di Arduino sull’anodo e agganciare il catodo al relay che deve andare con un altro filo a massa). Anche il PIR è diverso e possiete 4 pin. Seguite lo schema del vostro sensore per collegare correttamente la 5V e la massa.

fritzing relay fotoresistore

Codice Arduino IDE

Il circuito è il medesimo del caso con interruttore ma stavolta non leggeremo lo stato alto e basso del pulsante ma il livello di tensione sul pin analogico. Il comando per fare ciò è analogRead(valoreFotoresistore) e con il controllo if decidiamo se inviare il segnale al relay o meno. In questo caso non necessitiamo di mantenere lo stato del pulsante come nel caso precedente perchè a mantenere lo stato sarà il fotoresistore. Il loop si occuperà di leggerlo e mantenere il relay chiuso. Naturalmente abbiamo anche inserito un rilevatore di presenza! Conviene pertanto inserire come primo if, annidando il precedente, una riga di codice che controlli lo stato del PIR. Se rileviamo una presenza entriamo nel secondo if e se siamo al crepuscolo inviamo un segnale di chiusura circuito al relay con il comando digitalWrite(pinRelay, HIGH).

 

#define pinPIR 3
#define pinLDR A0
#define pinRelay 2
#define soglia 800

void setup() {
 pinMode(pinPIR, INPUT);
 pinMode(pinRelay, OUTPUT);
 Serial.begin(9600);

}

void loop() {
  // se il pin del PIR è alto ho rilevato una persona
  if(digitalRead(pinPIR)==HIGH)
    // se il pin del fotoResistore è sottosoglia è buio
    if(analogRead(pinLDR) >= soglia){
      // accendo la luce con il relay
      digitalWrite(pinRelay , HIGH);
    }
  }else{
    digitalWrite(pinRelay , LOW);
}