Tutorial: Shield I/O comandare luci esterne

In un precedente articolo dedicato alla shield I/O hai visto come assemblarla passo passo e provato un primo sketch dimostrativo delle potenzialità della shield stessa.

shield Input Output

Ripartendo proprio da quell’articolo ho realizzato un video con 6 led ad alta luminosità che si accendono e spengono in sequenza, ma non vorrai fermarti a questo …

Immagina di utilizzare al posto dei led delle luci, i relè montati sulla scheda supportano fino a 125v e 0.5A questo è un po’ limitante se vuoi utilizzare lampade classiche a 220v ma se scegli di utilizzare illuminazione a led per la domotica può essere una buona base da cui sviluppare il tuo progetto.

Iniziamo dal video demo:

Il collegamento dei led in questo caso è stato molto semplice tutti i poli negativi ( massa) sono collegati tra loro e attraverso una resistenza di 470Ω al polo negativo della shield. Tutti i terminali positivi sono collegati ad uno ad uno ai relè che hanno come terminale comune il polo positivo, una foto è senza dubbio migliore di 1000 parole per cui ecco quello che ti ho descritto:

In questa configurazione l’accensione e lo spegnimento dei led ( o luci a led della vostra abitazione ) è pilotato solo dallo sketch che ho caricato su Arduino:

int out=0;

long interval = 1000;

void setup() {
  for (int out=8; out<=13; out++){
    pinMode(out, OUTPUT);
  }
}

void loop()
{
  for (int out=8; out<=13; out++){
    digitalWrite(out, HIGH);
    delay(interval);
  }

  delay(interval);    

  for (int out=8; out<=13; out++){
    digitalWrite(out, LOW);
    delay(interval);
  }

  delay(interval);
}

Come avrai già notato è una semplificazione dello sketch mostrato nell’articolo precedente perchè il suo scopo è pilotare solo le 6 uscite digitali (8-13).

Per ottenere questo effetto nella funzione loop() hai due cicli identici di tipo for 13-16 e 20-23, il primo ciclo:

linea 13: definisci un ciclo di tipo for da 8 a 13, i pin a cui sono connessi i relè;

linea 14: per ciascun pin invia il segnale HIGH al pin corrispondente;

linea 15: attendi un intervallo di 1 sec. (definito alla linea  03) prima di passare al pin successivo;

Allo stesso modo le linee 20-23 rieseguono un ciclo da 8 a 13 inviando il segnale LOW ad ogni uscita (linea  21);

… Il divertimento arriva ora …

Di uno sketch come quello visto fino ad ora te ne fai poco, puoi al massimo fare una demo ai tuoi amici.

Vorrai utilizzare questa shield in modo più utile, un primo suggerimento è prendere tutta la serie di articoli sui giochi di luce di Natale ed adattarla per essere utilizzata con la shield I/O otterrai dei fantastici giochi di luce per il tuo prossimo Natale 🙂

Una seconda e più interessante applicazione è collegare alle 6 porte di ingresso digitale (pin 2-7 di Arduino) degli interruttori classici da parete ed inserire il tuo progetto nella scatola di derivazione elettrica di casa, potrai accendere le luci di casa attraverso Arduino, il vantaggio immediato è che puoi utilizzare dei pulsanti al posto degli interruttori tradizionali e quindi avere più combinazioni e scenari programmabili, ad esempio potresti decidere che con un solo pilsante vuoi che si accendano le luci dell’ingresso e del salotto o con un’altro quelle della cucina e della kappa.

Ecco uno sketch che accende una luce alla pressione del pulsante corrispondente e la spegne ad una nuova pressione:

int out[6]={8,9,10,11,12,13};
int in[6]={2,3,4,5,6,7};
int stato[6]={0,0,0,0,0,0};

long interval = 1000;

void setup() {
  for (int i=0; i<6; i++){
    pinMode(out[i], OUTPUT);
    pinMode(in[i], INPUT);
  }
}

void loop()
{
  for (int i=0; i<6; i++){
    if (digitalRead(in[i]) == LOW) {
      if (stato[i] == 0) { stato[i] = 1; }
      else               { stato[i] = 0; }
      delay(300);
    }
    digitalWrite(out[i], stato[i]);
  }
}

Il codice non è complesso, tuttavia ti invito a prestare attenzione ad alcuni passaggi:

linea 01: definisci un array di tipo int (out[6]) in cui inserisci i pin di  Output di Arduino utilizzati dalla scheda;

linea 02: similmente alla linea 1, definisci i pin di tipo INPUT, quelli che accettano i segnali digitali provenienti dai pulsanti;

linea 03: definisci un array di tipo int il cui scopo è memorizzare lo stato delle 6 uscite o luci corrispondenti;

linee 07-12: definisci la funzione setup() in cui con un ciclo da 0 a 6 per ciascun valore degli array in e out imposti la modalità di INPUT o OUTPUT per i pin corrispondenti;

linee 14-16: definisci la funzione di loop() e il ciclo for identico a quello visto per la funzione setup(), lo scopo del ciclo for è quello di eseguire per ciascun loop dello sketch delle verifiche ed operazioni su tutti i pin di input ed output;

linea 17: alla pressione di uno dei pulsanti collegati agli ingressi 2-7, Arduino rileva un segnale LOW in quanto avrai avuto cura di connettere a massa ( GND ) il terminale collegato all’uscita, la pressione del pulsante porta a LOW (massa o GND) il rispettivo pin;

linee 18-19: sei in questa condizione se hai premuto un pulsante, verifichi lo stato dell’uscita corrispondente e lo reimposti al valore contrario, se lo stato è 0 lo imposti ad 1, se lo stato è 1 lo imposti a 0;

linea 20:  attendi 300 millisecondi prima di procedere al controllo successivo sul pin seguente, questo tempo puoi variarlo a piacimento, regola il tempo di attesa in cui la pressione del pulsante non ha effetto, è quello che qualcuno chiama ritardo di pressione, in pratica con tempi molto piccoli non fai in tempo a rilasciare il pulsante prima che Arduino rilevi il nuovo stato, considera che Arduino lavora a 16MHz;

Curiosità: il tempo di reazione di una persona è normalmente di 1 sec, 1000 millisecondi;

linea 22: è la linea che fa tutto, invia lo stato al pin di output corrispondente, premo il pulsante connesso al pin 3 si accende o spegne la luce connessa al pin 9.

Ed ecco un video dimostrativo:

Buon divertimento.

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/tutorial-shield-io-comandare-luci-esterne.html

11 pings

Skip to comment form

  1. […] è molto differente da quello che hai letto in questo articolo “Tutorial: Shield I/O comandare luci esterne” ho apportato alcune modifiche allo sketch per poter utilizzare dei normali interruttori e non dei […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.