MICHELEPISANI.IT
 

Domotica con Arduino: per la casa o per l'ufficio

Accendere e Spegnere la Luce con Arduino Battendo le Mani

arduino - accendere e spegnere la luce battendo le mani o schioccando le dita
May 23
07:002017

Con l'utilizzo di Arduino e di un solo sensore, e un po' di inventiva nel realizzare l'apposito sketch, è possibile realizzate un circuito che permette di accendere e spegnere la luce (di cucina, di sala, di camera, ecc...) battendo le mani... o schioccando le dita, in modo da poter gestire l'illuminazione comodamente seduto su una sedia o in relax sul divano senza la necessità di alzarsi per farlo tramite il classico interruttore.

Nel caso specifico ho utilizzato un rilevatore sonoro (LM393) ed un led che andrà a simulare l'ipotetica lampadina.

Quello che succederà una volta che Arduino sarà alimentato è che battendo due volte le mani in un breve intervallo di tempo il sensore sonoro, dovutamente regolato in termini di sensibilità tramite il suo potenziometro integrato, rileverà il rumore emesso permettendo così ad Arduino, tramite lo sketch caricato, di intercettare il segnale acquisito e dare l'impulso di accensione (ed in modo reciproco di spegnimento) del led.

Di seguito lo schema elettrico del progetto:

arduino - accendere e spegnere la luce battendo le mani o schioccando le dita
Fig. 1 - Schema per Arduino - Accendere e Spegnere la Luce Battendo le Mani o Schioccando le Dita

Ed ecco la parte più interessante del progetto, lo sketch:

const int sensor_sound = A2;
const int sensor_light = 12;

int sensor_sound_status = 0;
int cnt_clap = 0;
long millis_current = 0;
long millis_start = 0;
long millis_range = 0;
const int millis_delay_fix = 50;
const int millis_delay_check = 400;
boolean sensor_light_status = false;
 
void setup() {
  pinMode(sensor_sound, INPUT);
  pinMode(sensor_light, OUTPUT);
}
 
void loop() {
  millis_current = millis();
  sensor_sound_status = digitalRead(sensor_sound);
  if (sensor_sound_status == 1) {
    if (cnt_clap == 0) {
      millis_start = millis_current;
      millis_range = millis_start;
      cnt_clap = cnt_clap + 1;
    }
    else if (cnt_clap > 0 && millis_current-millis_range >= millis_delay_fix) {
      millis_range = millis_current;
      cnt_clap = cnt_clap + 1;
    }
  }
  if (millis_current-millis_start >= millis_delay_check) {
    if (cnt_clap == 2) {
      if (!sensor_light_status) {
          sensor_light_status = true;
          digitalWrite(sensor_light, HIGH);
        }
        else if (sensor_light_status) {
          sensor_light_status = false;
          digitalWrite(sensor_light, LOW);
        }
    }
    cnt_clap = 0;
  }
}

Di seguito una breve dimostrazione del funzionamento del progetto di accensione e spegnimento di un led schioccando le dita:

Nota: in base alla regolazione del potenziometro integrato sul sensore viene gestita oltre alla sensibilità del sensore stesso anche il valore in input che sarà 0 di default e che, nel momento in cui viene rilevato un suono, varrà '1' come nel caso dell'esempio in questione (ovvero quando sul sensore si trova acceso in modo fisso il piccolo led rosso) e, di contro, varrà '1' di default e '0' in caso di rilevamento sonoro nel caso in cui il led sopra il sensore sia spento. Questo perchè il progetto presentato è stato realizzato basandosi sul valore '1' in ingresso ovvero con led del sensore acceso, di conseguenza nel caso in cui la regolazione del potenziometro sia opposta lo sketch non funzionerà ma per abilitarlo, in questo caso, sarà necessario sostituire 'sensor_sound_status == 1' con 'sensor_sound_status == 0'.

Il progetto è senz'altro migliorabile ed ampliabile integrandolo in un contesto di unità abitativa per la gestione completa dell'illuminazione o localizzato solo per luci di cortesia.

Per consigli, suggerimenti o chiarimenti sentitevi liberi di lasciare un commento!

Tags

Autore

Michele Pisani

Michele Pisani

Ho uno spiccato orientamento al problem-solving, se è troppo facile non mi diverto :)
Credo nella volontà e nel cambiamento perchè hanno fatto della mia passione il mio pane quotidiano.
Se devo descrivermi con una sola parola direi... "Concretezza", la mia stretta di mano è una garanzia.

2 Commenti

  1. Gioele Wednesday, April 11, 2018 alle ore 16:07

    Interessante e utile ma puoi specificare cosa sono millis_delay_check e millis_delay_fix?

    Rispondi a questo commento
    • Michele PisaniAutore Wednesday, April 11, 2018 alle ore 21:41

      Ciao Gioele,
      'millis_delay_fix' è un valore relativamente arbitrario di correzione per evitare anomalie dovute a rumori di ritorno che possono essere interpretati dal sensore come il secondo battito di mani (o schiocco di dita), mentre 'millis_delay_check' è un valore che ho definito io in modo che se il secondo battito di mani (o schiocco di dita) supera quella soglia allora viene azzerato il conteggio dell'input ricevuto dal sensore.

      Rispondi a questo commento

Scrivi un Commento

Il tuo indirizzo email non sarà pubblicato.
I campi contrassegnati da un * sono obbligatori

Articoli e Argomenti correlati

Il Canale YouTube in ITALIANO

1 VIDEO GRATIS ogni 2 settimane! ISCRIVITI!

Entra a far parte della community su Facebook

Categorie popolari

Iscriviti alla mia newsletter

La tua e-mail con me sarà al sicuro.
Non fornirò mai le tue informazioni a nessuno!

Ultimi commenti

Michele Pisani

Hai verificato se succede per tutte le pagine da un certo periodo di tempo in poi o solo su alcune?

Tecnowiz

Sono amministratore di un blog pure io... Intanto ti faccio i complimenti per questo articolo. …

Michele Pisani

Ciao Antonio, grazie per la fiducia :) In caso di più fogli è necessario inserire il codice del …

Antonio

Ciao Michele, ho acquistato il tuo libro che unitamente ai tuoi video sta diventando il mio corso …