DIY Smart Home Sensors med Arduino, MySensors och OpenHAB

DIY Smart Home Sensors med Arduino, MySensors och OpenHAB / Smart hem

Smart hemsensorer kostar en löjlig summa pengar. Vid $ 60- $ 100 bara för en rörelsedetektor eller luftfuktighetssensor blir ledningen ett helt hus domänen med dumma mängder disponibel inkomst. Låt oss bygga våra egna.

Lyckligtvis har det hårda arbetet redan gjorts av de fina folket bakom MySensors.org. Idag visar jag dig hur du använder MySensors-ramen för att skapa en billig uppsättning smarta hemsensorer som kan matas in i en OpenHAB-installation (se vår guide till Komma igång med OpenHAB på Raspberry Pi) Komma igång med OpenHABs hemautomatisering om hallon Pi Komma igång med OpenHAB Home Automation på Raspberry Pi OpenHAB är en mogen, öppen källkodsautomatiseringsplattform som körs på en mängd olika hårdvaror och är protokoll agnostic, vilket innebär att den kan anslutas till nästan vilken hemautomatiseringsutrustning som helst på marknaden idag. Läs mer . Jag antar att du redan har en fungerande MQTT-server och förstår grunderna i MQTT-meddelandesformatet; om inte, läs följningen till OpenHAB-guiden, som innehåller instruktioner för installation av en MQTT-server. OpenHAB Beginners Guide Del 2: ZWave, MQTT, Regler och kartläggning OpenHAB Beginners Guide Del 2: ZWave, MQTT, Regler och kartläggning OpenHAB , open source-hemautomatiseringsprogrammet, överstiger möjligheterna för andra hemautomatiseringssystem på marknaden - men det är inte lätt att få igång. Faktum är att det kan vara rättvist frustrerande. Läs mer .

Även om jag kommer att hantera specifikt att vidarebefordra MySensors-data från ett nätverk av Arduinos, med MQTT, till en OpenHAB-installation, ska jag påpeka att MySensors-ramen kan mata in i ett antal olika hemautomatiseringsinställningar. Jag har presenterat det här här som en komplett lösning som fungerar för mig, men kolla in MySensors webbplats, eftersom du kanske tycker att den också passar ditt liknande syfte, men använder lite annat hårdvara eller ett annat meddelandeprotokoll. Det är otroligt mångsidigt.

Hårdvarukostnaden för min inställning är mindre än $ 10 per nod (lite mer för porten), men ytterligare sensorer och manöverdon kan tillsättas för mycket lite (DHT11 fuktighet och temperaturgivare är till exempel ca $ 1 vardera, ett högspänningsrelä är runt $ 3).

Vad vi gör

Grundtanken är att vi istället för att lägga till på vårt befintliga lokala nätverk med hjälp av otillförlitliga Wi-Fi eller dyra Ethernet-sköldar skapar ett helt separat nätverksskyddat nätverk bara för Arduinos; sedan överbrygga det till det lokala nätverket med en enda gateway nod som har både en Ethernet-anslutning och en radioanslutning till de andra Arduinos. Så vi gör ett par sensornoder, som samlar data; och en gatewaynod som reläerar data till OpenHAB-servern.

Återigen, det här är vad som fungerar för mig, eftersom min Wi-Fi-mottagning är så hemsk och jag vill inte röra den med onödiga data. Om du är nöjd med Wi-Fi, se till att använda den låga kostnaden ESP8266 Arduino-kompatibel Träffa Arduino Killer: ESP8266 Träffa Arduino Killer: ESP8266 Vad händer om jag sa till dig att det finns en Arduino-kompatibel dev-kort med inbyggd Wi -Fi för mindre än $ 10? Jo, det finns det. Läs mer med inbyggda Wi-Fi-kort - MySensors stöder dem också.

Viktig anteckning för El Capitan användare och Arduino kloner: Apple lyckades bryta seriella drivrutiner som används för att kommunicera med ett antal Arduino klonkort i den senaste versionen av El Capitan tack vare nya säkerhetsåtgärder. För att se om du är påverkad, kolla på din bräda och chipet som är närmast USB-porten. Om det står CH340 påverkas du av detta. Följ instruktionerna här för att inaktivera drivrutinssignering, installera CH340 seriella drivrutiner igen.

Komponenter behövs

För porten behöver du:

  • Arduino Uno
  • Ethernet Shield (W5100 baserat)
  • NRF24L01-modulen - jag har använt +PA + LNA versioner i hela, som har ett ökat intervall på upp till 1km. Kablarna är desamma som du väljer.

För varje sensornod:

  • Arduino Uno
  • NRF24L01-modulen
  • Sensorer (till att börja med, föreslår jag en temperatur och fuktighet DHT11 eller DHT22 modul)

Extra / Valfritt:

  • 10uF kondensatorer, en för varje RF-modul du har (länken är för ett paket på 50!)
  • Strömförsörjning med 5v och 3.3v utgång (YwRobot MB102 fungerar bra och de är $ 1 vardera) - krävs om man använder en klon Arduino. Du behöver även en 9-12v likström för dessa.
  • Prototyping Shields, eller korta man-kvinnliga jumper-ledningar.

Arbetar med NRF24L01 moduler

Låt oss börja med NRF24L01-modulerna, eftersom de är mest komplexa delen av projektet. Jag gick till den dyrare, längre räckviddsversionen av dessa: tekniskt känd som NRF24L01 + PA + LNA. De har en inbyggd signalförstärkningskrets och antennanslutning, men jag föreslår att du försöker få den billigaste icke-antennversionen av modulerna först om du har ett vanligt hem med vanliga väggar, inte den meter tjocka solida stenens vägg som Jag gör. Det påstådda intervallet av dessa är ungefär en kilometer, mer än tillräckligt för att jag sätter i trädgårdsskuren.

Men dessa saker är verkligen svårt att arbeta med; om du går och kopplar in allt utan att läsa dessa tips först kommer du att bli besviken.

  • Modulen behöver 3.3 V ingångseffekt till VCC-stiftet - inte 5v. Om du lägger in 5v, stekar du det.
  • Löd en 10UF kondensator över VCC / GND terminalerna. Den solida grå linjen på kondensatorn indikerar den negativa / GND-sidan.
  • Använd korta höjkablar av hög kvalitet. eller ännu bättre, löd dem direkt till en prototypskärm för att hålla kabellängden till ett minimum och solida anslutningar.
  • Om du använder en Arduino-klon, ger spänningsregulatorn inte tillräckligt för dem på 3,3 V-pin - du måste använda ett externt nätaggregat (länkat ovanför), tillgängligt för ca $ 1 vardera. Dessa ger en stabil 3,3v. Om du använder en original- Arduino varumärke Uno, det verkar inte vara ett problem.

Jag föreslår starkt att du gör några grundläggande test först för att fastställa att din radio fungerar. Dra två radioer upp som visas på MySensors-sidan. Det spelar ingen roll att deras diagram visar Arduino Micro boards - samma stiftnummer används. Observera att diagrammet visar NRF24L01 från topp; du kommer faktiskt att plugga saker i från undersidan. Mentalt justera därefter. Ignorera den grå IRQ-pinen, den används inte för närvarande. Sammanfattningsvis:

  • VCC går till 3.3v på din externa strömförsörjning
  • GND går till gemensam markskena
  • CE till stift 9
  • CSN / CS till pin 10
  • MOSI till pin 11
  • MISO till pin 12
  • SCK till stift 13

Du behöver två noder som är helt trådbundna för att testa med. Ladda ner RF24-biblioteket och ladda det enklaste Komma igång exempel. Sätt på båda modulerna, men lämna en ansluten via USB och öppna seriekonsolen. Typ “T” och skicka, för att växla det till sändningsläge, vid vilken tidpunkt ska du få felsökningsmeddelanden som säger att det har lyckats pinga ett meddelande till den andra noden.

Bygga MySensors MQTT Client Gateway

Okej, nu när vi vet att RF24-radioerna är anslutna och fungerar korrekt, fortsätt och ladda ner utvecklingsgrenen i MySensors Arduino-paketet. Denna handledning skrevs med version 1.5, men borde vara ok med senare versioner också. Vi använder utvecklingsbranschen eftersom MQTT vid skrivningstidpunkten klient Gateway är ännu inte en del av huvudpaketet.

Även om det finns MQTTGateway tillgängligt i huvudgrenen, fungerar det som en server också, vilket vi inte vill ha eftersom vi redan har en stabil MQTT-server som körs på Raspberry Pi. Vi vill bara vidarebefordra MySensors data till det. Återigen, om det inte är det du vill ha - om du hellre inte vill använda MQTT alls - titta på EthernetGateway eller SerialGateway, vilka båda är kompatibla med OpenHAB.

Det är värt att notera att nedladdningspaketet inte bara innehåller viktiga MySensors-filer, det innehåller också kompatibla bibliotek som behövs för alla möjliga sensorer. För att undvika konflikter skulle jag föreslå att jag bara säkerhetskopierar hela din nuvarande biblioteksmapp och ersätter allt med dem i hämtningspaketet.

Anslutning för porten är lite annorlunda; När du har din Ethernet-skärm, använd följande stiften för radiodelen:

  • CE till stift 5
  • CSN till pin 6
  • SCK för att stifta A0
  • MOSI till pin A1
  • MISO till pin A2

Du måste också aktivera #define SOFTSPI linje i bibliotek / mySensors / MyConfig.h fil. Gör detta genom att ta bort // för att inte kommentera det, det är runt linje 309 på min.

Vi måste göra det eftersom både radiomodulen och nätverksskärmen använder SPI, och de är oförenliga. så vi ändrar bara radion modulen SPI till några andra stift och utför SPI-kommunikation i mjukvara istället (därmed, mjuk SPI).

Ladda upp MySensors / GatewayW5100MQTTClient skiss. Om du inte ser detta under MySensors meny har du inte utvecklingsgren installerad. Använd länken ovan för att ladda ner hela biblioteket.

Du måste definiera en statisk IP-adress för styrenheten, din nätverksrouter och delnätets IP och IP-adressen för din befintliga MQTT-server. Du kan också ändra ämnesprefixerna om du vill. Ladda upp och anslut den till nätverket. Kontrollera kort seriekonsolen för eventuella skarpa fel som att inte kunna ansluta till din MQTT-server, annars ställ den åt sidan (men lämna den).

Att bygga sensornoderna

Först, kommentera det #define SOFTSPI linje i MyConfig.h filen igen genom att sätta // tillbaka i början. Det behövs bara för porten - vi använder standardnät NRF24L01 för sensornoder, som använder maskinvaru SPI. Om du behöver påminna:

  • VCC går till 3.3v på din externa strömförsörjning (eller på Arduino själv om det är ett original och inte en klon)
  • GND går till gemensam markskena
  • CE till stift 9
  • CSN / CS till pin 10
  • MOSI till pin 11
  • MISO till pin 12
  • SCK till stift 13

Därefter koppla upp ditt val av sensor; Jag använder DHT11 fukt- och temperatursensor för testning, men om du rullar ner till sensorns och aktuatorns lista på sidorna på MySensors-sidan hittar du ett stort urval av andra alternativ: dörrar, regnmätare, ljus, rörelse, jämn RFID - och laddar mer. Du kan se att jag också lagt till ett relä till noden bilden nedan, men mer om det senare.

Slutligen ladda upp Fuktighetssensor exempel från MySensors menyn och lägg till följande rad omedelbart efter kommentarerna.

#define MY_NODE_ID 2

Eftersom vi använder en speciell version av regulatorn som bara vidarebefordrar saker till vår egen MQTT-server har den inte standardkontrollfunktionen som automatiskt skulle tilldela nod-ID till varje ny nod. Istället kommer vi bara att manuellt definiera det varje gång. Notera ner det här numret någonstans för dina egna poster, och ändra det för varje nod.

Aktivera även felsökningsutmatningen:

#define MY_DEBUG

Slutligen, kontrollera datapinnen på din DHT11-sensor är korrekt.

#define HUMIDITY_SENSOR_DIGITAL_PIN 7

Ladda sedan upp!

Det är värt att öppna seriekonsolen för att ta en titt. Den avgörande bit att se är st =, vilket är status för meddelandet. st = misslyckas betyder att meddelandet inte skickades. Det är möjligt att du inte har definierat ett unikt nod-ID, eller att din gateway är offline. Jag misslyckade dessa misslyckanden genom att helt enkelt dra ur porten:

Om allting fungerar bör du börja se några datavärden komma in i din MQTT-server. Att sätta dem i OpenHAB ligger utanför ramen för denna handledning, men omfattas av OpenHABs del 2, OpenHAB Beginners Guide Del 2: ZWave, MQTT, Regler och kartläggning OpenHAB Beginners Guide Del 2: ZWave, MQTT, Regler och kartläggning OpenHAB, open source-hemautomatiseringsprogrammet, överstiger möjligheterna för andra hemautomatiseringssystem på marknaden - men det är inte lätt att få igång. Faktum är att det kan vara rättvist frustrerande. Läs mer så att du kan referera tillbaka där.

Kombinera sensorkod

Trots att det är relativt enkelt att få en enda sensorkod, är det ganska enkelt, det blir lite svårare när du vill lägga till flera sensorer till varje nod. I huvudsak kommer du att blanda kodsekvenserna från två olika exempel. Det enklaste sättet att visa dig detta är exempel med en video! Här kombinerar jag vår grundläggande fuktighetsgivare med ett relä.

Du hittar den färdiga koden för fuktighetsgivare och relä här, som redan har modifierats med en icke-blockerande slinga som jag nämnde i videon. För att lära dig mer om MQTT-kommandostrukturen som behövs för att aktivera reläet, kolla Serial API-men tillräckligt för att säga att följande kanal kontrollerar det första reläet i koden jag har gett (med en meddelandekod på 0 eller 1):

mysensors-in / 9/1/1/0/2

Din enda begränsning är nu mängden minne på Arduino, och det säger jag - de mest pålitliga sensorerna i mitt smarta hem är inte de kommersiella Z-Wave-modulerna som kostar $ 80, men MySensors anpassade.

Jag avslutar det där idag, men om du har problem kan du fråga dig i kommentarerna eller MySensors aktiva användarforum. Kommer du att sätta ihop dina egna billiga sensornoder? Hur är din smarta hemkomst?

Utforska mer om: Arduino, Smart Sensor.