lunedì 22 settembre 2014

Domotica - Controllo remoto

Il controllo remoto delle luci è ottenuto grazie all’utilizzo della scheda aggiuntiva di Arduino chiamata “Ethernet Shield”. Impostando l’indirizzo IP del router a cui è collegato Arduino, ci si potrà , grazie ad una connessione internet e un browser, collegare al sistema  e comandare l’accensione e lo spegnimento delle luci all’interno della casa.
Grazie al controllo remoto è possibile controllare la nostra abitazione anche a distanza, ad esempio chi possiede una casa in montagna può attivare il riscaldamento a distanza in modo da trovare una temperatura accogliente una volta raggiunta la destinazione.

PROGRAMMA ARDUINO

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {192, 168, 9, 55 };
byte subnet[] = {255, 255, 255, 0 };
EthernetServer server(80);
String readString;
byte out_1 = 7;
byte out_2 = 6;
byte out_3 = 5;
byte out_4 = 4;
byte out_5 = 3;

void setup() {

Ethernet.begin(mac, ip);

pinMode (out_1, OUTPUT);
pinMode (out_2, OUTPUT);
pinMode (out_3, OUTPUT);
pinMode (out_4, OUTPUT);
pinMode (out_5, OUTPUT);
}

void loop() {

EthernetClient  client = server.available();

  if (client) {
    boolean currentLineIsBlank = true;

    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        readString.concat(c);  
        if (c == '\n' && currentLineIsBlank) {

          if(readString.indexOf("on_1") > 0) {
            digitalWrite(out_1, HIGH);
            delay(325);
            digitalWrite(out_1, LOW);
            }       
          if(readString.indexOf("off_1") > 0) {
            digitalWrite(out_1, HIGH);
            delay(325);
            digitalWrite(out_1, LOW);
            }         
          if(readString.indexOf("on_2") > 0) {
            digitalWrite (out_2, HIGH);
            delay (325);
            digitalWrite (out_2, LOW);
            }       
          if(readString.indexOf ("off_2") > 0) {
            digitalWrite (out_3, HIGH);
            delay (325);
            digitalWrite (out_3, LOW);
            }
          if(readString.indexOf ("on_3") > 0) {
            digitalWrite (out_3, HIGH);
            delay (325);
            digitalWrite (out_3, LOW);
            }
          if(readString.indexOf ("off_3") > 0) {
            digitalWrite (out_4, HIGH);
            delay (325);
            digitalWrite (out_4, LOW);
            }
          if(readString.indexOf ("on_4") > 0) {
            digitalWrite (out_4, HIGH);
            delay (325);
            digitalWrite (out_4, LOW);
            }
          if(readString.indexOf ("off_4") > 0) {
            digitalWrite (out_4, HIGH);
            delay (325);
            digitalWrite (out_4, LOW);
            }
          if(readString.indexOf ("on_5") > 0) {
            digitalWrite (out_5, HIGH);
            delay (325);
            digitalWrite (out_5, LOW);
            }       
          if(readString.indexOf ("off_5") > 0) {
            digitalWrite (out_5, HIGH);
            delay(325);
            digitalWrite (out_5, LOW);
            }

Parte dedicata al rilevamento della selezione dalla pagina HTML all'azionamento vero e proprio dell'azione fisica, accensione/spegnimento luci.

          client.println("HTTP/1.1 200 OK");
          client.println ("Content-Type: text/html");
          client.println ();
          client.print ("<html><head><title>CASA DOMOTICA</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");
          client.print("<BR><BR>");
          client.print ("<h2>Controllo remoto</h2>");
          client.print ("<p>");
          client.print ("<br>");
          if (digitalRead(2)== true) client.print ("<a href=/?off_1><strong>PULSANTE</strong>"); 
          else client.print ("<a href=/?on_1><strong>PULSANTE</strong>");
          client.print ("<-- LUCE BAGNO");
          client.print ("<br>");
          if (digitalRead(3)== true) client.print ("<a href=/?off_2><strong>PULSANTE</strong>"); 
          else client.print ("<a href=/?on_2><strong>PULSANTE</strong>");
          client.print ("<-- LUCE CORRIDOIO");
          client.print ("<br>");
          if (digitalRead(4)== true) client.print ("<a href=/?off_3><strong>PULSANTE</strong>"); 
          else client.print ("<a href=/?on_3><strong>PULSANTE</strong>");
          client.print ("<-- LUCE CAMERA");
          client.print ("<br>");
          if (digitalRead(5)== true) client.print ("<a href=/?off_4><strong>PULSANTE</strong>"); 
          else client.print ("<a href=/?on_4><strong>PULSANTE</strong>");
          client.print ("<-- LUCE CUCINA");
          client.print ("<br>");
          if (digitalRead(6)== true) client.print ("<a href=/?off_5><strong>PULSANTE</strong>"); 
          else client.print ("<a href=/?on_5><strong>PULSANTE</strong>");
          client.print ("<-- LUCE SALOTTO");
          client.print ("<br>");
          client.println("</body></html>");

          readString="";
          delay(5);

          client.flush();
          client.stop();
        }
      }
    }

}

Parte di programma utilizzata per la creazione della pagina HTML, visualizzabile dal browser, per l'accensione e lo spegnimento delle luci da remoto. Il risultato ottenuto è questo:

Nessun commento:

Posta un commento