Il codice scritto per il microprocessore ARDUINO MEGA gestisce i carichi elettrici di un'abitazione. In ogni stanza si installa un semplice pulsante che chiude un circuito in bassa tensione e afferisce ad una centralina elettronica comandata dal processore ATMEGA.
Il software realizzato permette di spegnere le luci dopo un tempo prefissato dall'accensione. L'opzione è molto utile visto che a volte si esce di casa frettolosamente e si rischia sempre di lasciare qualcosa acceso.
Con una pressione prolungata di uno qualsiasi dei pulsanti di una stanza, tutti i carichi stanze vengono spente.
Per comandare i carichi luce a 230 V bisogna utilizzare un modulo a relay di tipo monostabile
La tecnologia domotica che oggi può essere certificata oggigiorno deve utilizzare il protocollo KONNEX acquisito dai produttori più importanti.
Casella di testo
const int buttonPin_matrimoniale = 53;
const int ledPin_matrimoniale = 21;
const int buttonPin_soggiorno = 51;
const int ledPin_soggiorno = 20;
const int buttonPin_tinello = 49; // the pin that the pushbutton is attached to
const int ledPin_tinello = 19;
const int buttonPin_bagno = 31; // the pin that the pushbutton is attached to
const int ledPin_bagno = 17; // the pin that the LED is attached to
const int buttonPin_studio = 43; // the pin that the pushbutton is attached to
const int ledPin_studio = 16; // the pin that the LED is attached to
const int buttonPin_cameretta = 39; // the pin that the pushbutton is attached to
const int ledPin_cameretta = 7; // the pin that the LED is attached to
const int buttonPin_corridoio = 35; // the pin that the pushbutton is attached to
const int ledPin_corridoio = 3; // the pin that the LED is attached to
const int buttonPin_caldaia = 27; // the pin that the pushbutton is attached to
const int ledPin_caldaia = 6; // the pin that the LED is attached to
// Variables will change:
//int buttonState_matrimoniale = 0; // current state of the button
//int buttonState_soggiorno = 0; // current state of the button
//int buttonState_tinello = 0; // current state of the button
//int buttonState_bagno = 0; // current state of the button
//int buttonState_studio = 0; // current state of the button
int pinState_matrimoniale= 0;
int pinState_soggiorno= 0;
int pinState_tinello= 0;
int pinState_bagno = 0;
int pinState_studio= 0;
int pinState_cameretta= 0;
int pinState_corridoio= 0;
int pinState_caldaia = 0;
long tempo_matrimoniale = 0;
long tempo_bagno = 0;
long tempo_tinello = 0;
long tempo_cameretta = 0;
long tempo_studio = 0;
long tempo_corridoio = 0;
long tempo_soggiorno = 0;
long tempo_caldaia = 0;
long timer_matrimoniale = 7200000;
long timer_bagno = 3200000;
long timer_tinello = 7200000;
long timer_cameretta = 7200000;
long timer_studio = 7200000;
long timer_corridoio = 7200000;
long timer_soggiorno = 7200000;
long timer_caldaia = 7200000;
int val = 0;
void setup() {
pinMode(buttonPin_matrimoniale, INPUT);
pinMode(buttonPin_soggiorno, INPUT);
pinMode(buttonPin_tinello, INPUT);
pinMode(buttonPin_bagno, INPUT);
pinMode(buttonPin_studio, INPUT);
pinMode(buttonPin_cameretta, INPUT);
pinMode(buttonPin_caldaia, INPUT);
pinMode(ledPin_matrimoniale, OUTPUT);
digitalWrite(ledPin_matrimoniale, LOW);
pinMode(ledPin_soggiorno, OUTPUT);
digitalWrite(ledPin_soggiorno, HIGH);
pinMode(ledPin_tinello, OUTPUT);
digitalWrite(ledPin_tinello, HIGH);
pinMode(ledPin_bagno, OUTPUT);
digitalWrite(ledPin_bagno, LOW);
pinMode(ledPin_studio, OUTPUT);
digitalWrite(ledPin_studio, LOW);
pinMode(ledPin_cameretta, OUTPUT);
digitalWrite(ledPin_cameretta, LOW);
pinMode(ledPin_corridoio, OUTPUT);
digitalWrite(ledPin_corridoio, LOW);
pinMode(ledPin_caldaia, OUTPUT);
digitalWrite(ledPin_caldaia, LOW);
Serial.begin(9600);
}
void loop() {
int old_pinstate;
old_pinstate = pinState_matrimoniale;
pinState_matrimoniale = pulsante_schiacciato( buttonPin_matrimoniale, ledPin_matrimoniale, pinState_matrimoniale, tempo_matrimoniale, timer_matrimoniale);
if (pinState_matrimoniale == 1 && old_pinstate == 0) {
tempo_matrimoniale = millis();
}
old_pinstate = pinState_soggiorno;
pinState_soggiorno = pulsante_schiacciato( buttonPin_soggiorno, ledPin_soggiorno, pinState_soggiorno, tempo_soggiorno, timer_soggiorno);
if (pinState_soggiorno == 1 && old_pinstate == 0) {
tempo_soggiorno = millis();
}
old_pinstate = pinState_tinello;
pinState_tinello = pulsante_schiacciato( buttonPin_tinello, ledPin_tinello, pinState_tinello, tempo_tinello, timer_tinello);
if (pinState_tinello == 1 && old_pinstate == 0) {
tempo_tinello = millis();
}
old_pinstate = pinState_bagno;
pinState_bagno = pulsante_schiacciato( buttonPin_bagno, ledPin_bagno, pinState_bagno, tempo_bagno, timer_bagno);
if (pinState_bagno == 1 && old_pinstate == 0) {
tempo_bagno = millis();
}
old_pinstate = pinState_studio;
pinState_studio = pulsante_schiacciato( buttonPin_studio, ledPin_studio, pinState_studio, tempo_studio, timer_studio);
if (pinState_studio == 1 && old_pinstate == 0) {
tempo_studio = millis();
}
old_pinstate = pinState_cameretta;
pinState_cameretta = pulsante_schiacciato( buttonPin_cameretta, ledPin_cameretta, pinState_cameretta, tempo_cameretta, timer_cameretta);
if (pinState_cameretta == 1 && old_pinstate == 0) {
tempo_cameretta = millis();
}
old_pinstate = pinState_corridoio;
pinState_corridoio = pulsante_schiacciato( buttonPin_corridoio, ledPin_corridoio, pinState_corridoio, tempo_corridoio, timer_corridoio);
if (pinState_corridoio == 1 && old_pinstate == 0) {
tempo_corridoio = millis();
}
old_pinstate = pinState_caldaia;
pinState_caldaia = pulsante_schiacciato( buttonPin_caldaia, ledPin_caldaia, pinState_caldaia, tempo_caldaia, timer_caldaia);
if (pinState_caldaia == 1 && old_pinstate == 0) {
tempo_caldaia = millis();
}
}
int pulsante_schiacciato(int buttonPin, int ledPin, int stato_pin, long tempo_accensione, long timer_accensione){
int tasto_premuto = 0;
int reset_tutte_luci;
long debounceDelay = 100;
long lastDebounceTime;
int buttonState;
int buttonState_aggiornato;
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
Serial.println("entrato in High " );
Serial.println(buttonPin);
lastDebounceTime = millis();
reset_tutte_luci = 1;
tasto_premuto = 1;
Serial.println("Inizio lettura " );
while ((millis() - lastDebounceTime) < debounceDelay) {
buttonState_aggiornato = digitalRead(buttonPin);
Serial.println("lettura " );
if (buttonState_aggiornato != HIGH)
{
reset_tutte_luci = 0;
tasto_premuto = 0;
}
}
while ((millis() - lastDebounceTime) < 4000 && reset_tutte_luci == 1) {
buttonState_aggiornato = digitalRead(buttonPin);
if (buttonState_aggiornato != HIGH)
{
reset_tutte_luci = 0;
}
}
if (reset_tutte_luci == 1){
// il pulsante viene premuto a lungo per spegnere tutte le luci
tasto_premuto = 0;
digitalWrite(ledPin_corridoio, LOW);
delay(1000);
digitalWrite(ledPin_corridoio, HIGH);
delay(1000);
digitalWrite(ledPin_corridoio, LOW);
delay(1000);
digitalWrite(ledPin_corridoio, HIGH);
delay(1000);
digitalWrite(ledPin_matrimoniale, LOW);
digitalWrite(ledPin_soggiorno, LOW);
digitalWrite(ledPin_tinello, LOW);
digitalWrite(ledPin_bagno, LOW);
digitalWrite(ledPin_studio, LOW);
digitalWrite(ledPin_cameretta, LOW);
digitalWrite(ledPin_corridoio, LOW);
}
if (tasto_premuto == 1){
// Serial.println("off", buttonPin);
}
if (stato_pin == 1 && tasto_premuto == 1) {
tasto_premuto = 2;
stato_pin = 0;
digitalWrite(ledPin, LOW);
delay (1000);
}
if (stato_pin == 0 && tasto_premuto == 1) {
tasto_premuto = 2;
stato_pin = 1;
digitalWrite(ledPin, HIGH);
delay (1000);
}
}
if (stato_pin == 1 && tasto_premuto == 0 && (millis() - tempo_accensione) > timer_accensione) {
// qui si entra se è scaduto il tempo di accensione della stanza
digitalWrite(ledPin, LOW);
stato_pin = 0;
}
return stato_pin;