Tekniker som hjälper dig skapa ett smartare och tryggare hem.

Arduino – Bygg en multisensor till Vera.

Kategori:

, , ,

– Taggar:

Guiden visar hur enkelt det är att bygga egna multisensorer till Vera / Micasaverde med Arduino.

Har under några veckors tid kört en Arduino för att logga temperatur, luftfuktighet och ljus i ett rum hemma, informationen skickats till Veran via Ethernet. Detta möjliggör triggning av scenes, samt se aktuellt värde i Verans gränssnitt.

Arduinon har fungerat riktigt bra utan hängningar eller kommunikationsproblem.

Data rapporteras direkt till virtuella enheter i Vera via Ethernet (Enheterna skapas i Vera med följande guide). Data skickas med en fast intervall på var 5:e minut till Veran i min sketch.

Arduino-Givare2

 

 

 

 

 

Kommunikationen sker med Ethernet istället för Z-Wave.

 

Arduino-VeraGivare

 

 

Enheternas utseende i Vera

 

 

Jag kommer att byta DHT11 mot DS18B20 som temperaturgivare, eftersom dessa är mer exakta och går att ha flera på samma digitala port.

 

Komponenter:

 

Nyttjade portar på Arduino:

  • D10,D11,D12,D13 – Ethernet
  • D2 – Digital temperaturgivare
  • A0 – Ljussensor

Kopplingsschema:

DHT11

DHT11_Koppling

Pin 1 = 5 Volt Arduino

Pin 2 = Kopplas till Port 2 Arduinon. resistorn på 4,7K ohm kopplas mellan 5V och Port 2

Pin 3 = – Används ej

Pin 4 = Jord.

 

 

 

 

 LDR 

Arduino-LDR

Vänster sida av LDR kopplas till 5V på Arduino

Höger sida av LDR kopplas till A0 på Arduino,

på samma ben kopplas motståndet på 10K Ohm, resistorns högra ben kopplas mot jord.

 

 

 

Arduino-Givare2

 

 

 

 

 

 

Exempel på mitt färdigkopplade projekt. Snyggare paketering kommer att göras inom kort.

 

Arduino koden

Eftersom jag håller på att lära mig programmering med Arduino så får man ha överseende med koden! Det är en hel del klipp och klistra ännu tyvärr 🙂

För att kunna köra DHT11 så behövs ett extra library, mer info på Arduinos hemsida samt library finns att hämta på Github. biblioteket läggs sedan under ”Arduino-1.0.6\libraries\DHT11″  så vida du kör version 1.0.6, annars är det versionsnummet för din Arduino installation som gäller.

 

Jag har nyttjat Ehternet skissen som följer installationen av Arduino programvara, dock så har jag skrivit om denna för att passa min inrapportering till Vera. Jag har även utgått från DHT11_test för att fåtill temperatur och luftfuktighet med DHT11.

I början av koden så definieras alla variabler som behöver ändras. Eftersom jag definierar allt i början av koden så behöver man inte ner i koden och ändra för att göra flera givare. Utan det räcker att ändra några få rader. (IPAddress ip, mac[],  veraLjusID, veraHumidityID, veraTempid)

int sensorPin = A0;    // Analog port som ska nyttjas för att läsa analoga värden, dvs ljus
int sensorValue = 0;  //  Värdet för den analoga enheten ska sparas här.
float loopDelay   = 300000;  // Hur många ms loopen ska vänta. Har som default kör 300000ms, dvs 5 Minuter mellan rapporterna.
float tempgivaren;       // variabel för temperaturer.
float humiditygivaren;   // variabel för luftfuktighet.

 

Vera rapportering:

int veraLjusID = 81;          // ID på ljussensor i Vera
int veraHumidityID = 82;  // ID på luftfuktighetssensor i Vera
int veraTempid     = 83;    // ID på Temperaturgivare i Vera

Nätverkskortet
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xAF, 0xFE, 0xED }; // Ange en unik mac adress
char server[] = ”VeraIP”;    // Här ska namnet eller IP till din Vera registreras.

int Serverport = 3480;  // porten dit data ska rapporteras på vera. Detta är default så det ska inte behövas ändras.
IPAddress ip(10,10,10,123);  // Ange IP adressen din Arduino ska nyttja, bör vara på samma subnät som din Vera controller!

 

 

Förklaring av ”void loopen()”

Följande rad kommer att läsa värdet från pin2 på DHT11

int chk = DHT11.read(DHT11PIN);

 

Variabeln chk kontrolleras mot en switch funktion som kontrollerar hur läsningen gick, sedan skrivs detta ut på serieporten om denna är öppen.

  switch (chk)
  {
    case 0: Serial.println(”OK”); break;
    case -1: Serial.println(”Checksum error”); break;
    case -2: Serial.println(”Time out error”); break;
    default: Serial.println(”Unknown error”); break;
  }

 

Genom att anropa DHT11.humidity så returernas nuvarande värdet som ett flyttal till variabeln ”humiditygivaren” Temperatur givaren anropas genom att nyttja DHT11.temperature. Dessa värden skickas direkt till funktionen som rapporterar in till Vera.

humiditygivaren = (float)DHT11.humidity, 2;

tempgivaren = (float)DHT11.temperature, 2;

 

Genom att läsa det analoga värdet på ljussensorn och spara i sensorValue så får jag ett värde mellan 0 – 1024. Verans ljussensor visar data som procent, så värdet måste räknas om innan det skickas till Veran.

sensorValue = analogRead(sensorPin); 

För att räkna om värdet 0 – 1024 till procent så har jag nyttjat en formel jag hittade på på följande sida.
float percent = sensorValue / 1024.0 * 100;  // Värdet som avlästes delas med 1024 och multipliceras med 100 för att få procent.
sensorValue = floor(percent*100) / 100;

 

Rapportera till Vera

För att slippa ha så mycket kod i loopen så har jag gjort tre funktioner som rapporterar in data till Vera, Jag kommer att göra om detta till en enda funktion istället för tre senare. Jag skriven enbart om en nedan, eftersom de två andra ser i stort sett identiska ut.

 

VeraTempid” motsvarar det id enheten i Vera har. ”tempgivaren” innehåller nuvarande temperatur.

  httpTempRegister(veraTempid, tempgivaren);
  httpLjusRegister(veraLjusID, sensorValue);
  httpFuktRegister(veraHumidityID, humiditygivaren);

 

Funktionen httpTempRegister

Följande funktion gör ett webbsvar till Veran

void httpTempRegister(int GivarID, int MittValue) {
Om Arduinon lyckas koppla upp mot Veran på angiven port så skickas data
if (client.connect(server, Serverport)) {

client.print(”GET /data_request?id=variableset&DeviceNum=”); // bygger början av http strängen
client.print(GivarID);   // adderar ID som den ska rapportera till Vera
client.print(”&serviceId=urn:upnp-org:serviceId:TemperatureSensor1&Variable=CurrentTemperature&Value=”); lägger till strängen för temperaturschemat i Vera.
client.print(MittValue); // Lägger till temperaturen i slutet av strängen
client.println(” HTTP/1.1″); // avslutar raden med http version och postar
client.print(”Host: ”);
client.print(server);
client.println(”Connection: close”);
client.println();
Serial.println(”skickade temperatur till Vera, kopplar ner”);
client.stop();

}
else {
// skulle inte data ha skickats så görs det inte nått mer försöka att skicka igen förens om 5 minuter.
client.stop();
}
}

Skapade nyss en Arduino med hjälp av koden i guiden utan problem. Detta ger mig två Arduino som totalt rapporterar 6 sensorer direkt till Vera.

Arduno-Multisensor2

 

 

 

 

 

 

 

Koden: Komplett Arduino sketch

 

Jag kommer att fortsätta utveckla detta framöver.

Kommande funktioner i Arduino Projektet:

  • Rapportera ljus – check
  • Rapportera temperatur – check
  • Rapportera luftfuktighet – check
  • Byte av temperatursensor till DS18B20
  • PIR Sensor
  • Trigga på temperaturförändringar över X%
  • Trigga på förändringar i ljus
  • Trigga på förändringar i luftfuktighet
  • Varna om enheten ej kan kommunicera med Vera.
  • Konvertera till Wifi, förhoppningsvis ESP8266

Har jag tur med mitt googlade efter micasaverde så kanske jag hittar nått sätt att porta min strömmätande Arduino till Vera med!

// Markus

Har du precis börjat med smarta hem eller redan kommit en bit på resan? Läs mina dedikerade guider om smarta hem. Dom ger dig kunskaper och insikter som hjälper dig fatta rätt beslut i din resa.


Kommentarer

6 svar till ”Arduino – Bygg en multisensor till Vera.”

  1. […] Temperatur registreras i arduinon och skickas till Veran som en egen device. […]

  2. […] Att nyttja en egen kontroller som i vårat fall en Vera, kräver inte speciella kameror eller specifika Z-Wave sensorer för att fungera. De mesta fungerar men det kan vara bra att kontrollera Z-Wave kompatibilitetsguiden innan du köper till din kontroller, det kan nämligen variera lite i hur bra enheter fungerar med kontrollern. Kontrollers som tillåter mycket extern anpassning gör det även möjligt att bygga egna sensorer. […]

  3. […] du i framtiden att vilja bygga egna enheter med exempelvis Arduino eller EPS8266 och integrera liknande saker i ditt […]

  4. […] med just Z-UNO jämfört med ESP8266 eller Arduino är möjlighet att koppla hemmabyggda sensorer till kontrollers som enbart stödjer kommunikation […]

  5. […] att hålla nere priset men ändå få in temperaturer och liknande började jag bygga egna nätverkskopplade Arduinos som ett alternativ för att få temperatur och ljus. Utan allt för stor kostnad fick jag nu […]

  6. […] började med vera byggde jag en Multisensor med en Arduino som kommunicerade över nätverket ( Bygg en Multisensor till Vera ). Den rapporterade temperatur, ljus och rörelse. Detta var inte alls avancerat, men otroligt […]

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *



Vill du lära dig mer om smarta hem
och inte riskera missa några nyheter?
prenumerera då på bloggen via mail.

Taggar:

Gateway / Kontrollers & mjukvaror

Det finns idag en uppsjö tekniker och enheter på marknaden, tyvärr så finns det inte någon perfekt lösning ännu, utan varje lösning har sina styrkor och svagheter. För att du lättare ska kunna välja vilket spår som passar dig så har jag samlat alla tekniker jag testat och en bra sammanfattning om dom. Utifrån det kan du själv avgöra vad du anser mest lämpat. Är du osäker på vart du ska börja så kolla in min nybörjarguide om smarta hem, där får du tips på vad du ska leta efter och fundera över innan du kör igång.