.

Smart Home by Emanuele Signoretta


Il mio progetto consiste in un apparato che raccoglie dati di varia natura dall’ambiente circostante. Queste informazioni vengono poi inserite su una pagina Web e sono quindi accessibili a qualsiasi dispositivo dotato di una connessione Internet.

Le componenti che ho utilizzato sono le seguenti:

  • Fishino Uno;
  • sensori digitali di temperatura (Dallas ds18b20);
  • sensore pir, per rilevare i movimenti;
  • sensore pioggia;
  • sensore digitale di umidità (DHT 11);
  • sensore di contatto reed(per le finestre);
  • magnete per il sensore;
  • led (di diversi colori);
  • resistenza da 4.7 KΩ;
  • breadboard ;
  • jumpers.

Ho posizionato tutti i sensori e i led sulla breadboard ed effettuato i collegamenti con i jumpers rigidi in modo da non fare confusione sulla breadboard.

P_20160331_203011-400x300 Smart Home by Emanuele Signoretta

Per i sensori di temperatura ho dovuto prestare particolare attenzione nella fase di assemblaggio perché essi comunicano grazie al protocollo 1-Wire: quest’ultimo consente di collegare più sensori sullo stesso pin di Fishino. Tra i pin del polo positivo e del segnale bisogna aggiungere la resistenza di pull-up. Per quanto riguarda le finestre, sulla pagina web risulta la voce al plurale anche se c’è solo un sensore: non vi è alcun problema poiché eventuali altri sensori verrebbero collegati in serie formando una corona, e quest’ultima potrebbe monitorare tutte le finestre del perimetro della casa. Ho successivamente collegato tutti i sensori ed attuatori alla board Fishino (la piedinatura è disponibile nello sketch) e iniziato la stesura del programma.

P_20160331_202951-400x300 Smart Home by Emanuele Signoretta

Il programma è piuttosto semplice, ma molto efficace: in pratica Fishino raccoglie tutti i dati dai sensori e tramite la shield wireless li invia in rete.

Lo Sketch su Fischino

#include <DallasTemperature.h>
#include <OneWire.h>
#include "DHT.h"
#include <SPI.h>

#include <Fishino.h>
#define pin_onewire 6

OneWire oneWire(pin_onewire);
DallasTemperature sensors(&oneWire);



double tempin;
double tempout;
double soggiorno;
boolean rain;
#define DHTPIN 3 

#define MY_SSID	"NETGEAR22"
#define MY_PASS	"redonion730"
#define IPADDR	192, 168, 0, 101


#ifdef IPADDR
IPAddress ip(IPADDR);
#endif

String readString;
int out1 = 14;
int out2 = 15;
int out3 = 16;

int reed = 2;
int pioggia = 4; 
int pir = 5;
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

FishinoServer server(80);
void setup()
{
pinMode(pioggia,INPUT);
pinMode(pir, INPUT);
pinMode(reed, INPUT);
pinMode(out1, OUTPUT);
pinMode(out2, OUTPUT);
pinMode(out3, OUTPUT);


sensors.begin();
sensors.setWaitForConversion(false); 
sensors.setResolution(12); 
sensors.requestTemperatures();
dht.begin();	
	
	
	Serial.begin(115200);

	// initialize SPI:
	SPI.begin();
	SPI.setClockDivider(SPI_CLOCK_DIV2);
Fishino.reset();
Fishino.setPhyMode(PHY_MODE_11B);
#ifdef STANDALONE_MODE
Fishino.setMode(STATION_MODE);
Fishino.softApStartDHCPServer();
#else
Fishino.setMode(STATION_MODE);
Fishino.begin(F(MY_SSID), F(MY_PASS));
#ifdef IPADDR
Fishino.config(ip);
#else
Fishino.staStartDHCP();
#endif
#endif
server.begin();}

void loop()
{
	
sensors.requestTemperatures();
tempin = sensors.getTempCByIndex(0);
tempout = sensors.getTempCByIndex(1);
soggiorno = sensors.getTempCByIndex(2);

FishinoClient client = server.available();
if (client) {
while (client.connected()) {   
if (client.available()) {
char c = client.read();
if (readString.length() < 100) {
readString += c;}
if (c == '\n'){
Serial.println(readString); 
client.println("HTTP/1.1 200 OK"); 
client.println("Content-Type: text/html");
client.println("Refresh: 5");
client.println();     
client.println("<HTML>");
client.println("<HEAD>");
client.println("<meta name='theme-color' content='  red'>");
client.println("<link rel='stylesheet' type='text/css' href='http://arduinosmarthome.altervista.org/arduino.css' />");

client.println( "<meta charset=\"utf-8\"><meta name=\"apple-mobile-web-app-capable\" content=\"yes\" /><meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\"><meta name=\"viewport\" content=\"width=device-width, user-scalable=no\">");
client.println("<TITLE>SmartHome</TITLE>");
client.println("</HEAD>");
client.println("<BODY>");
client.println("<hr />");
client.println("<br />");  
client.print("<center>");
client.print("<font color='teal'>");
client.print("<h1>Smart Home</h1>"); 
client.print("</font>");   
client.print("<h2>Temperatura interna: "); 
client.print(tempin);
client.print(" C <h2/>");
client.print("</h2>");
client.print("<h2>Temperatura esterna: "); 
client.print(tempout);
client.print(" C <h2/>");
client.print("<h2>Temperatura soggiorno: "); 
client.print(soggiorno);
client.print(" C <h2/>");
client.print("</h2>");

client.print("<h2>Finestre: ");
if (digitalRead(reed)==HIGH){
client.print("Chiuse<h2/>");}
else{client.print("Aperte<h2/>");
}

client.print("<h2>Movimenti: ");
if(digitalRead(pir)==HIGH){
client.print("Si<h2/>");}
else{
client.print("No<h2/>");}
client.print("<h2>Pioggia: "); 
rain = digitalRead(pioggia);
if(rain==true){
client.print("No </h2>");}
if(rain==false){
client.print("Si </h2>");}
client.print("<h2>Umidita': ");
client.print(dht.readHumidity());
client.print("% </h2>");
client.println("<a href=\"/?1on\"\">Led 1 ON</a>");
client.println("<a href=\"/?1off\"\">Led 1 OFF</a><br />");   
client.println("<br />"); 
client.print("<br>");    
client.println("<a href=\"/?button2on\"\">Led 2 ON</a>");
client.println("<a href=\"/?button2off\"\">Led 2 OFF</a><br />");    
client.println("<br />");
client.print("<br>");         
client.println("<a href=\"/?button3on\"\">Led 3 ON</a>");
client.println("<a href=\"/?button3off\"\">Led 3 OFF</a><br />");            
client.println("<br />"); 
client.print("</center> </BODY> </html>");

break;}}}
delay(250);
client.stop();

if (readString.indexOf("?1on") >0){
digitalWrite(out1, HIGH);}
if (readString.indexOf("?1off") >0){
digitalWrite(out1, LOW);}
if (readString.indexOf("?button2on") >0){
digitalWrite(out2, HIGH);}
if (readString.indexOf("?button2off") >0){
digitalWrite(out2, LOW);}
if (readString.indexOf("?button3on") >0){
digitalWrite(out3, HIGH);}
if (readString.indexOf("?button3off") >0){
digitalWrite(out3, LOW);}               


readString="";
        
        
      }
    }

Per rendere molto più agevole la lettura dei dati ho fatto in modo che la pagina si adatti allo schermo del device mobile che la visualizza e che, visualizzando la pagina su Google Chrome su un device Android, l’intera barra degli indirizzi assuma un unico colore.

Screenshot_2016-03-30-21-54-35-169x300 Smart Home by Emanuele Signoretta

Nel mio caso, ho utilizzato il rosso, ma ovviamente vi sono numerose altre alternative: basta usare un numero esadecimale per indicare il colore. Da qualsiasi device sono inoltre comandabili tre led(o relè) con tutti i comandi per ciascun output nella stessa pagina. Ho fatto anche in modo che venisse caricata una pagina .css da internet (www.arduinosmarthome.altervista.org/arduino.css ) cosicché i pulsanti che gestiscono il controllo dei led possano assumere un aspetto o un colore differente a seconda dei gusti di ciascuno.

CSS utilizzato nel mio esempio

body{
margin:60px 0px; padding:0px;
text-align:center;
}
h1
{
text-align: center;
font-family:Arial, "Trebuchet MS", Helvetica, sans-serif;
}
h2
{
text-align: center;
font-family:Arial, "Trebuchet MS", Helvetica, sans-serif;
}
a
{
text-decoration:none;
width:75px;
height:50px;
border-color:black;
border-top:2px solid;
border-bottom:2px solid;
border-right:2px solid;
border-left:2px solid;
border-radius:10px 10px 10px;
-o-border-radius:10px 10px 10px;
-webkit-border-radius:10px 10px 10px;
font-family:"Trebuchet MS",Arial, Helvetica, sans-serif;
-moz-border-radius:10px 10px 10px;
background-color:#0099cd;
padding:8px;
text-align:center;
}
a:link {color: white;}      
a:visited {color: white;} 
a:hover {color: white;} 
a:active {color: white;}

Un problema che si può riscontrare è il mancato caricamento della pagina: ciò è dovuto alla memoria Ram satura. Può inoltre verificarsi il caricamento simultaneo di più pagine, ossia la ripetizione di un contenuto (ad esempio un messaggio) all’interno di una stessa pagina web

 

10 pensieri riguardo “Smart Home by Emanuele Signoretta

  • 14/06/2016 in 22:19
    Permalink

    Grande progetto mister Signoretta… anche la descrizione breve semplice e fatta bene..

    Risposta
  • 12/07/2016 in 10:03
    Permalink

    Molte proposte sono interessanti, questa può essere anche concretamente utile.
    Bravo

    Risposta
    • 17/07/2016 in 12:06
      Permalink

      Si, infatti sto incrementando delle funzioni e sto creando un’app specifica per questo progetto.
      Grazie????

      Risposta
      • 18/07/2016 in 22:18
        Permalink

        Le ottime intenzioni solleticano: spero si concretizzino presto.
        Credo che molti le aspettino con interesse.
        Buon lavoro.

        Risposta
  • 22/11/2016 in 10:07
    Permalink

    Molto Bello, una piccola domanda per capirci meglio io..
    E’ possibile integrare il file css nello sketch senza utilizzare file esterni? Come si potrebbe fare?

    Risposta

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.