Perchè questo progetto
Come tutti i miei progetti, anche questo nasce da un’esigenza: automatizzare l’apertura della saracinesca del garage per parcheggiare l’auto senza dover scendere tutte le volte (sopratutto nei giorni di pioggia :).
Partendo da questa esigenza ho quindi realizzato il progetto che segue usando pochi ed economici componenti.
Materiali utilizzati
Ho usato ovviamente un Arduino Pro Mini ATMega 328 da 5v come in foto (prezzo inferiore a 2 €)
poi ovviamente avevo bisogno di relè che chiudessero i circuiti per eseguire il lavoro e ho optato per questi due tipi (0,60 – 0,80 € ciascuno)
ed infine ovviamente un modulo ricevitore RF 433 Mhz a 4 canali 4CH IC 2262/2272 con telecomando (circa 2 €)
Come funziona
Il progetto in sostanza alla pressione del primo tasto del telecomando attiva un relè per 18 secondi (il tempo utile per l’apertura della saracinesca), e alla pressione del secondo attiva il secondo relè per uguale durata utile per la chiusura della stessa. Ad ogni pressione ulteriore di qualsiasi dei due tasti durante la fase di movimento della saracinesca, ne ferma il processo. Ho preferito mettere questa opzione per sicurezza, non si sa mai cosa può succedere nel frattempo.
Nella fase di apertura ho anche configurato l’attivazione di ulteriori due relè in contemporanea per accendere la luce per 5 minuti (tempo utile per parcheggiare e uscire). Sono due perchè l’accensione della lampada del garage viene controllata da due deviatori e considerato che portare un ulteriore filo dalla lampada alla cassetta contenente l’arduino era un processo molto più lungo, mi sono sbrigato attivando semplicemente i due relè (uno dei due chiude necessariamente il circuito e accende la lampada).
Di seguito allego lo schema del circuito:
Come da schema ho aggiunto dei led di controllo, uno di presenza rete (power), due che si accendono durante il movimento della saracinesca e il quarto che mi indica la ricezione del segnale da parte del telecomando (collegato direttamente al pin VT del ricevitore RF).
Infine ho quindi raccolto tutto in una cassetta di plastica e fissata vicino al motore della saracinesca.
Sketch Arduino
Come per ogni progetto allego di seguito lo sketch che ho usato per configurare l’arduino:
/* Apertura - Chiusura saracinesca con attivazione luce */ int pulsante1 = 3; int pulsante2 = 4; int rele_apri = 11; int rele_chiudi = 12; int rele1_luce = 9; int rele2_luce = 10; int led_on = 13; int led_apertura = 7; int led_chiusura = 8; int timer_luce = 0; int seq1 = 0; int seq2 = 0; unsigned long counter_luce = 0; unsigned long time2 = 0; unsigned long time3 = 0; int button1 = 0; int button2 = 0; void setup(){ Serial.begin(9600); pinMode(rele_apri, OUTPUT); pinMode(rele_chiudi, OUTPUT); pinMode(rele1_luce, OUTPUT); pinMode(rele2_luce, OUTPUT); pinMode(led_on, OUTPUT); pinMode(led_apertura, OUTPUT); pinMode(led_chiusura, OUTPUT); digitalWrite(rele1_luce, HIGH); digitalWrite(rele2_luce, HIGH); digitalWrite(rele_apri, HIGH); digitalWrite(rele_chiudi, HIGH); } void loop(){ seq1 = 0; seq2 = 0; digitalWrite(led_on, HIGH); digitalWrite(led_apertura, LOW); digitalWrite(led_chiusura, LOW); if(timer_luce == 1 && counter_luce+300000 < millis()){ Serial.println("Spengo la luce"); digitalWrite(rele1_luce, HIGH); //Disattiva relè luce digitalWrite(rele2_luce, HIGH); timer_luce = 0; } /* APERTURA SARACINESCA */ button1 = digitalRead(pulsante1); Serial.println(button1); if(button1 == HIGH){ digitalWrite(rele_chiudi, HIGH);//Disattiva relè chiusura time2 = millis(); timer_luce = 1; counter_luce = millis(); Serial.println("Accendo la luce"); digitalWrite(rele1_luce, LOW); //Attiva relè luce digitalWrite(rele2_luce, LOW); delay(200); while(time2+18000 > millis()){ Serial.println("Apertura in corso..."); digitalWrite(led_apertura, HIGH); digitalWrite(rele_apri, LOW); //Attiva relè apertura button1 = digitalRead(pulsante1); button2 = digitalRead(pulsante2); if(button1 == HIGH || button2 == HIGH){ digitalWrite(rele_apri, HIGH); //Disattiva relè apertura; digitalWrite(rele_chiudi, HIGH); //Disattiva relè chiusura; Serial.println("Apertura bloccata!"); break; } } // fine WHILE digitalWrite(led_apertura, LOW); digitalWrite(led_chiusura, LOW); digitalWrite(rele_apri, HIGH); //Disattiva relè apertura; Serial.println("Apertura terminata."); delay(200); } // fine IF } // fine WHILE } // fine IF /* CHIUSURA SARACINESCA */ button2 = digitalRead(pulsante2); if(button2 == HIGH){ digitalWrite(rele_apri, HIGH); //Disattiva relè apertura; time3 = millis(); timer_luce = 1; counter_luce = millis(); Serial.println("Accendo la luce"); digitalWrite(rele1_luce, LOW); //Attiva relè luce digitalWrite(rele2_luce, LOW); delay(200); while(time3+18000 > millis()){ digitalWrite(rele_chiudi, LOW); //Attiva relè chiusura; Serial.println("Chiusura in corso..."); digitalWrite(led_chiusura, HIGH); button1 = digitalRead(pulsante1); button2 = digitalRead(pulsante2); if(button1 == HIGH || button2 == HIGH){ digitalWrite(rele_apri, HIGH); //Disattiva relè apertura; digitalWrite(rele_chiudi, HIGH); //Disattiva relè chiusura; Serial.println("Chiusura bloccata!"); break; } // fine IF } // fine WHILE digitalWrite(rele_chiudi, HIGH); //Disattiva relè chiusura; Serial.println("Chiusura terminata."); digitalWrite(led_chiusura, LOW); digitalWrite(led_apertura, LOW); delay(200); } // fine IF } // fine LOOP