«

»

Dic 18

Corso Arduino – Lezione 6 – Accendere luci con Arduino

L’accensione di una luce con Arduino può essere una cosa non troppo sicura, stiamo collegando un circuito digitale in corrente continua a bassa tensione alla tensione di rete di 220v in corrente alternata. Il rischio di rompere qualcosa è sempre dietro l’angolo. Fortunatamente esistono dei relay che funzionano con la 220v pilotabili in continua da Arduino a 5V. Tuttavia non saremo mai certi della qualità se prendiamo cinesate online, vi consiglio di affidarvi a prodotti affidabili. Io ho acquistato un prodotto che fa il suo dovere ma le piste non sembrano troppo distanti ed è piccolino. Perfetto per entrare in una presa a muro ma chissà se è sicuro! La cosa mi frena molto ma la studierò meglio. Tuttavia ci sono sicuramente prodotti ad elevata affidabilità in commercio! Puntate a quelli!

Come potete vedere il vantaggio di un sistema domotico programmabile è la modularità che consente di scegliere come abbassare i costi (escludere sensori) e di scegliere la qualità in funzione di ciò che si può fare! Sconsiglio di risparmiare quando si lavora con la 220!

L’accensione di una luce con Arduino, tuttavia è una procedura molto semplice! A meno di non avere interruttori multipli connessi alla stessa lampadina o altri relay! Generalmente l’uso di deviatori o relay richiede di variare il circuito che andremo ad affrontare fra poco ma è sempre possibile. Noi useremo questa lezione per accendere una luce con un pulsantino ma al posto dell’interruttore potremmo anche inserire un fotoresistore per rilevare l’abbassamento della luminosità in casa e accenderle automaticamente. Naturalmente il fotoresistore deve essere esposto alla luce per rilevare le variazioni luminose quotidiane. Vedremo in seguito come gestirlo! E anche come associarlo a un rilevatore di presenza per comandare la luce su un balcone soltanto in caso ci sia una persona in movimento sul balcone al crepuscolo!

COSTI

Relay 2,89+iva

Totale circa 3,5 euro.

Come funziona un relay?

Senza addentrarci in tecnicismi, generalmente, un relè, o relay, è un interruttore (o deviatore) magnetico azionato da un impulso elettrico.Il tutto avviene eccitando un circuito che si occupa di chiudere il contatto del neutro e della fase. È generalmente dotato di 3 connessioni:

– Comune: alla quale collegare la fase della 220V

– Normalmente Aperto o NO: dove possiamo collegare il neutro

– Normalmente Chiuso o NC: come sopra!

Naturalmente di questi utlimi due se ne usa soltanto uno! Si sceglie in funzione dei casi. Se inseriamo il filo nell’NC la corrente fluirà normalmente perchè il circuito rimarrà chiuso naturalmente e quando il relay scatterà invece staccherà il circuito. Viceversa usando il connettore NO, il relay manterrà staccati la Fase Comune e il Neutro su NO e per fare fluire la corrente sarà necessario chiudere il circuito eccitando il relay.

Di tutto ciò si occuperà Arduino che con un impulso sulla linea dei 5V farà chiudere o aprire il circuito. Sotto trovate una foto esplicativa del funzionamento di un tipo di relay pilotato tramite un pulsante ! (Immagine non mia – Fonte: http://www.aggiustatutto.it/images/stories/imma-elettricita/). Il funzionamento non è tanto diverso. Il circuito di comando è formato da Arduino e la sua 5V che con il segnale alto preme il pulsante e aziona il relay che a sua volta chiude il circuito fra fase e neutro!

relay funzionamento

Fritzing

ATTENZIONE, STATE MANEGGIANDO LA 220V PERTANTO USATE GUANTI DA LAVORO E STACCATE L’INTERRUTTORE GENERALE ONDE EVITARE DANNI PERSONALI. USATE ANCHE UN CERCA FASE PER VERIFICARE CHE NON VI SIA CORRENTE CIRCOLANTE. IL CERCAFASE E’ UN CACCIAVITE COLLEGATO A UN ELEVATA RESISTENZA E UNA LUCINA, TOCCANDO I FILI CON LA PUNTA DEL CACCIAVITE E LA PIASTRINA POSTA SUL MANICO LA LUCE SI ACCENDE IN PRESENZA DI CORRENTE. SE VERIFICATE CHE NONOSTANTE L’INTERRUTTORE STACCATO IL CERCAFASE SI ILLUMINA NON METTETE MANO AI FILI. TANTI ELETTRICISTI NON STACCANO NEANCHE IL CIRCUITO MA CIO’ NON TOGLIE CHE SI RISCHIA LA VITA O DANNI SERI E CHE SONO PROFESSIONISTI, DOTATI DI GUANTI DA LAVORO PROFESSIONALI E HANNO L’ESPERIENZA CHE MANCA A ME E A VOI PER POTER GESTIRE QUESTE SITUAZIONI. NON MI RITENGO RESPONSABILI DI DANNI PERSONALI, FISICI E QUANTO ALTRO. SIETE STATI AVVISATI!

Tenendo conto degli avvertimenti qui sopra passiamo al circuito e alle connessioni. Non avendo trovato il relay in mio possesso fra i componenti di Fritzing troverete sullo schema un relay con 5 pin il più possibile somigliante. Ho deciso di collegarlo come se fosse il nostro relay! Uno dei pin che va ad Arduino è mancante e ho fatto finta fosse presente, non fate caso al fatto che non è connesso a nulla. Ho anche inserito un LED al posto della lampadina per lo stesso motivo ed è connesso casualmente. Naturalmente, sul relay, il comune andrà connesso a uno dei fili della 220 e sarà al centro e l’altro filo andrà inserita in NO o NC a seconda che vogliate mantenere la luce accesa o spenta. Nel nostro caso preferiamo sia normalmente spenta pertanto inseriremo il filo in NO. Generalmente si preferisce interrompere la fase piuttosto che il neutro pertanto individuate la fase e inseritela nel comune (potrebbe essere benefico con alcune lampadine a risparmio energetico, che se rimangono connesse alla fase lampeggiano a causa di segnali spuri, masse non volute e cose simili). Gli altri pin del relay vanno connessi naturalmente alla 5V e alla GND per alimentarlo e il pin connesso al nulla è il nostro pin di segnalazione che va inserito in uno dei pin di Arduino! Scegliamo il 2.

relay fritzing

Codice Arduino IDE

Il codice è molto semplice, il relay ha un pin per inviare il segnale di chiusura o apertura del circuito e due pin di alimentazione, Vcc (5V) e GND (massa). Come vediamo dall’immagine Fritzing riuseremo lo stesso schema visto in precedenza per gestire il pulsante. Il pin di gestione del relay viene gestito tramite pinMode(pinRelay, OUTPUT) e digitalWrite(pinRelay, HIGH). In caso di segnale HIGH se il relay è collegato con il normalmente chiuso spegne la luce, se collegato con il normalmente aperto accende la luce perché chiude il circuito. Il nostro caso è naturalmente il secondo! Ho inserito anche un delay dopo il rilevamento del pulsante per evitare che in caso di pressione troppo lunga il pulsante venga rilevato nuovamente e venga spenta la luce. Se vi rendete conto che sentite il relay staccare e attaccare o la luce accendersi e spegnersi aumentate questo valore! La variabile backupVal serve a mantenere lo stato precedente. Se la luce è stata accesa in precedenza lo stato di val è stato HIGH e pertanto lo salvo. Se lo stato precedente era alto, la luce è accesa pertanto stacco il relay e riaggiorno il valore a LOW (spento).

int power_pin=9; // il pin del pulsantino
int relayPin=2;
 int val=0;
 int backupVal=LOW;
void setup() {
  Serial.begin(9600);

  pinMode(relayPin, OUTPUT);
  pinMode(power_pin, INPUT);
}

void loop() {
   val = digitalRead(power_pin); // leggo il valore del pulsante (PREMUTO = 1, NON PREMUTO = 0)
   Serial.print("Il valore è ");
   Serial.print(val);
   Serial.print(" Il backval è ");
   Serial.println(backupVal);
   
  // se è stato premuto
  if(val==HIGH && backupVal==LOW){
    backupVal=val;
    digitalWrite(relayPin, HIGH);
    delay(500);
  }else if(val==HIGH && backupVal==HIGH){
    backupVal=LOW;
    digitalWrite(relayPin,LOW);
    delay(500);
  } 
}

Nella prossima Lezione modificheremo il circuito inserendo un fotoresistore e un rilevatore di presenza per la gestione della luce sul balcone al crepuscolo. E in quella seguente useremo un rilevatore vocale per accendere la luce con la voce!

  • Lorenzo Andreani

    scusa,premetto che nn ho molta esperienza… ho provato a scrivere lo sketch ma andando a fare la verifica mi da errore ‘amp’ was not declared in this scope, potresti mica spiegarmi il perchè e/o dove sbaglio?
    Grazie mille !!

    • http://www.mariobonofiglio.it/ Mario Bonofiglio

      Ciao, purtroppo il blog wordpress ha aggiunto in automatico amp come codifica del testo. Per intenderci devi sostituire && con &&. Correggo subito il blog, grazie per la segnalazione. Fammi sapere se ci sono altri ptoblemi, mi fa piacere sapere di essere seguito ed essere stato utile 😉