Albero di Natale Arduinizzato

Scritto da Roberto Messa on . Postato in ROBOTICA

Ciao a tutti e bentornati, oggi vedremo come automatizzare il nostro albero di natale con Arduino.

intro

Qualche giorno fá il mio amico Denny mi ha detto “Vorrei automatizzare l’accensione del mio albero di natale, che ne pensi se realizziamo il tutto con il mio Arduino?”.
L’idea era molto allettante e poi molto in tema natale e visto che le festività si avvicinano ci siamo messi all’opera.
L’idea fondamentale è quella di usare pochi componenti ed avere l’albero di natale acceso in automatico senza usare il timer ds1307 che ha il contro di aver bisogno di una batteria tampone che vá cambiata ogni 6 mesi se il circuito non è alimentato.
Sò che non vedete l’ora di iniziare come in tutti gli esperimenti iniziamo dall’elenco del materiale:
– scheda Arduino uno o 2009 (va bene anche un clone)
– relay shield (nel nostro caso ne abbiamo usata una doppia)
– cavo USB
– contenitore ermetico (13×9)
– presa con filo elettrico
– spina elettrica
– cavetti patch di collegamento

Iniziamo con il collegare Arduifarecon la relay shield secondo lo schema sotto (semplice no?)

Schema_rele

Dovremmo ritrovarci con la relay shield montata come nella foto sotto

IMG_20141211_091142

Per adesso non collegheremo ancora nulla al relè, passiamo a caricare lo sketch sotto che è stato creato da Denny.

const int LED_PIN = 13;
const int RELE_1_PIN = 11;
const int RELE_2_PIN = 12;
 
int ledState = LOW;
int releState = HIGH;
 
// Generally, you shuould use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;
unsigned long interval = 0;
 
 
 
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(LED_PIN, OUTPUT);
  pinMode(RELE_2_PIN, OUTPUT);
  Serial.begin(9600); //inizializza la porta seriale (per il log)
  //Serial.println("Initialized"); //scrive sulla porta seriale (per il log)
}
 
void loop() {
  unsigned long currentMillis = millis();
  Serial.print(currentMillis - previousMillis); Serial.print("/"); Serial.print(interval);
  Serial.println();
  if(currentMillis - previousMillis >= interval) {
 
    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW){
      ledState = HIGH;
      releState = LOW;
      interval = getMillisecondiFromOre(9); // attende 9 ore prima di spegnere (dalle 18.00 alle 03.00)
    }
    else{
      ledState = LOW;
      releState = HIGH;
      interval = getMillisecondiFromOre(15); // attende 15 ore prima di riaccendere (dalle 03.00 alle 18.00)
    }
 
    digitalWrite(LED_PIN, ledState);
    digitalWrite(RELE_2_PIN, releState);
 
    // save the last time you blinked the LED
    previousMillis = currentMillis;
  }
/*
  digitalWrite(LED_PIN, HIGH);
  digitalWrite(RELE_2_PIN, LOW);
 
  // attende 9 ore prima di spegnere (dalle 18.00 alle 03.00)
  for(int i = 0; i < getSecondiFromOre(9); i++){
    delay(1000);
  }
  
  digitalWrite(LED_PIN, LOW);
  digitalWrite(RELE_2_PIN, HIGH);
 
  // attende 15 ore prima di riaccendere (dalle 03.00 alle 18.00)
  for(int i = 0; i < getSecondiFromOre(15); i++){
    delay(1000);
  }
*/
}
 
unsigned long getMillisecondiFromOre(unsigned long ore){
  return ore * 60 * 60 * 1000;
}

Dallo sketch potete notare 2 importanti accorgimenti:
Il primo è che non si fá uso di un ciclo for per generare un ritardo ma si sfrutta direttamente il loop principale, questo accorgimento serve per non rallentare troppo la CPU di Arduino che con troppi ritardi si bloccherebbe (visto che deve tenere aperto il contatto per 9 ore si bloccherebbe ).
Altro accorgimento è quello che è stata creata una funzione per convertire le ore in millisecondi in modo da rendere più pratico l’uso del timer.
Ora non resta che testare che dopo 9 ore il relè si spegne e dopo 5 si riaccende.
Dopo il test possiamo cominciare a preparare il cavo elettrico per l’alimentazione delle luci dell’albero, prendiamo il cavo tagliamo a metà uno dei due fili e lo facciamo passare per il relè ( sul contatto normalmente aperto come in foto).
IMG_20141212_075515
Colleghiamo all’altro capo del cavo una presa alla quale possiamo collegare le luci dell’albero.
Ora per questioni di sicurezza (visto che con la 220v non si scherza sistemiamo all’interno di una scatola ermetica Arduino, la relay shield e il cavo interrotto.
IMG_20141212_140536
Ora possiamo passare al test effettivo a cura del mio amico, so che ci state chiedendo “ma come alimentate Arduino?”
Semplice il mio amico ha pensato “ho il router ADSL vicino all’albero di natale e il router ha una porta USB, perché non lo alimento con quello?”.
Quindi dopo averlo collegato alla porta USB del router ecco che l’albero di natale diventa intelligente grazie al nostro Arduino.

montaggioTerminato

Ecco il sistema in funzione

Dopo aver ammirato la creazione del mio amico mi viene in mente una citazione presa dalla sua app (che cade proprio a pennello)

“Un giorno le macchine riusciranno a risolvere tutti i problemi, ma mai nessuna di esse potrà porne uno.”
Albert Einstein

Per oggi è tutto, con questo post natalizio auguro a tutti voi un felice natale.
Arrivederci al prossimo post

Le operazioni svolte nell’articolo possono provocare danni notevoli agli apparecchi e alla persona qualora chi le esegue non abbia una certa familiarità con l’elettricità, la meccanica, l’elettronica ecc.. ci si astenga quindi eventualmente dal metterle in pratica qualora non si abbia affinità con le materie predette. In ogni caso lo scrivente non si ritiene responsabile di eventuali danni provocati dai progetti e dal loro utilizzo a cose e/o persone.

Tags:

Trackback dal tuo sito.

Commenti (1)

  • ciccio88

    |

    Ottimo esperimento! Tanti auguri e complimenti per il sito!

    Rispondi

Lascia un commento