lunedì 3 agosto 2015

Primo abbozzo del domotic center con Arduino

Oggi presento il primo abbozzo del mio Domotic Center con Arduino...
Ovvero, Arduino collegato ad Internet tramite Ethernet Shield, dotato di pagina web propria all'indirizzo 192.168.1.105, dove visualizzerà la temperatura e l'umidità di casa ed un tasto con il quale farà partire, tramite infrarosso, il robot aspirapolvere Samsung Navibot.


Prima di tutto bisogna scaricare la libreria per l'infrarosso di Shirriff:
http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html

Per quanto riguarda la parte hardware, bisogna collegare un led emettitore IR sul pin3, in questo sketch recupererò anche la temperatura ambientale e l'umidità tramite il sensore DHT (http://playground.arduino.cc/Main/DHTLib) per uso futuro (prima o poi collegherò Arduino alla caldaia, per poter accendere/spegnere il riscaldamento da remoto)...

Questo lo sketch:

#include <SPI.h>
#include <Ethernet.h>
#include <IRremote.h>
#include <dht.h>
#define dht_dpin A0
dht DHT;

int valori[5]; //Array in cui ci salvi i valori letti
int T_campionamento;
int somma;
float temperaturamedia;
float umido;

IRsend irsend;
int pos = 0; 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 
IPAddress ip(192, 168, 1, 105);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
EthernetServer server(80);     
String readString;

void setup() {
  delay(500);
  Serial.begin(9600);
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  Serial.print("Il WebServer è all'indirizzo ");
  Serial.println(Ethernet.localIP());
  lettura();
}

void loop() {
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {   
      if (client.available()) {
        char c = client.read();
     
        //read char by char HTTP request
        if (readString.length() < 100) {
          //store characters to string
          readString += c;
         }

         //if HTTP request has ended
         if (c == '\n') {          
           Serial.println(readString); //print to serial monitor for debuging
     
           client.println("HTTP/1.1 200 OK"); //send new page
           client.println("Content-Type: text/html");
           client.println();     
           client.println("<HTML>");
           client.println("<HEAD>");
           client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
           client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
           client.println("<link rel='stylesheet' type='text/css' href='http://randomnerdtutorials.com/ethernetcss.css' />");
           client.println("<TITLE>Smartgatto domotic house</TITLE>");
           client.println("</HEAD>");
           client.println("<BODY>");
           client.println("<H1>Smartgatto domotic house</H1>");
           client.println("<hr />");
           client.println("<br />");  
           client.println("<H2>Avvia ciclo di pulizia con Navibot</H2>");
           client.println("<br />");  
           client.println("<a href=\"/?button1on\"\">Avvia pulizia casa</a>");
           client.println("<br />");     
           client.println("<br />"); 
           client.println("<br />");client.println("<H3>Home temperature is: ");
           client.println(temperaturamedia);
           client.println("C");
           client.println("<br />"); 
           
           client.println("Humidity is: ");
           client.println(umido);
           client.println("%");
           client.println("<br /></H3>");
           client.println("<br />"); 
           client.println("<br />"); 
                      
           client.println("<p>Creato da Smartgatto 2015</p>");  
           client.println("<br />"); 
           client.println("</BODY>");
           client.println("</HTML>");
     
           client.stop();
           //controls the Arduino if you press the buttons
           if (readString.indexOf("?button1on") >0){
               inviair();
           }
        
            //clearing string for next read
            readString="";  
           
         }
       }
    }
}
}

void inviair() {
    unsigned int Auto[68] = {4590, 4590, 590, 1690, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590,590, 590, 1690, 590, 1690, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 1690, 590, 590, 590, 1690, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 1690, 590, 590, 590, 1690, 590, 1690, 590, 1690, 590, 1690, 590, 1690, 590, 1690, 590, 65750};
    irsend.sendRaw(Auto, 68, 38);
    Serial.print("Codice infrarosso inviato");
 }


void lettura() {
    for(int i=0; i<5; i++){
    DHT.read11(dht_dpin);  
    umido = DHT.humidity;
    valori[i] = DHT.temperature;
    delay(500); //se vuoi fare una lettura ogni tot millisecondi
                            //non è necessario
  } 
    somma = 0; // devi essere sicuro che il primo valore sia zero, altrimenti poi sballa tutto
    for(int i=0; i<5; i++)
    somma = somma + valori[i];
    temperaturamedia = somma / 5;
  
}

Nessun commento:

Posta un commento