DIY Smart Home Sensors med Arduino, MySensors og OpenHAB

DIY Smart Home Sensors med Arduino, MySensors og OpenHAB / Smart Hjem

Smart hjemme sensorer koster en latterlig mengde penger. Ved $ 60 - $ 100 bare for en bevegelsessensor eller fuktighetssensor, blir ledningen et helt hus domenet til de med dumme mengder disponibel inntekt. La oss bygge vår egen.

Heldigvis har det harde arbeidet blitt gjort av de fine folkene bak MySensors.org. I dag skal jeg vise deg hvordan du bruker MySensors-rammeverket til å lage et billig utvalg av smarte hjemmesensorer som kan mate inn i en OpenHAB-installasjon (se vår guide til Komme i gang med OpenHAB på Raspberry Pi) Komme i gang med OpenHAB Home Automation on Raspberry Pi Komme i gang med OpenHAB Home Automation på Raspberry Pi OpenHAB er en moden, åpen kildekode hjemmeautomatiseringsplattform som kjører på en rekke maskinvare og er protokollabnostisk, noe som betyr at den kan koble til nesten hvilken som helst hjemmevirksomhets maskinvare på markedet i dag. Les mer . Jeg antar at du allerede har en fungerende MQTT-server, og forstår grunnleggende om MQTT-meldingsformatet; Hvis ikke, må du lese oppfølgeren til OpenHAB-veiledningen, som inneholder instruksjoner for installering av en MQTT-server. OpenHAB Begynnerhåndbok Del 2: ZWave, MQTT, Regler og kartlegging OpenHAB Begynnerhåndbok Del 2: ZWave, MQTT, Regler og kartlegging OpenHAB , open source-hjemmeautomatiseringsprogramvaren, overgår langt fra egenskapene til andre hjemmautomatiseringssystemer på markedet - men det er ikke lett å bli satt opp. Faktisk kan det være rett og slett frustrerende. Les mer .

Selv om jeg skal arbeide spesielt med å videresende MySensors-dataene fra et nettverk av Arduinos, ved hjelp av MQTT, til en OpenHAB-installasjon, skal jeg påpeke at MySensors-rammen kan mate inn i en rekke forskjellige hjemmautomatiseringsregulatorer. Jeg har presentert dette her som en komplett løsning som fungerer for meg, men sjekk ut MySensors-siden som du kanskje finner det også passer til ditt tilsvarende formål, men bruker litt annen maskinvare eller en annen meldingsprotokoll. Det er utrolig allsidig.

Maskinvarekostnaden for oppsettet mitt er mindre enn $ 10 per node (litt mer for gatewayen), men flere sensorer og aktuatorer kan legges for svært lite (DHT11 fuktighet og temperaturføler er for eksempel omtrent $ 1 hver, et høyspenningsrelé er rundt $ 3).

Hva vi gjør

Den grunnleggende ideen er at i stedet for å legge til på vårt eksisterende, overfylte lokale nettverk ved å bruke upålitelige Wi-Fi eller dyre Ethernet-skjermer, oppretter vi et helt eget nettverksbasert nettverk bare for Arduinos; deretter bro det til det lokale nettverket ved hjelp av en enkelt gateway node, som både har en Ethernet-tilkobling og en radioforbindelse til de andre Arduinos. Så vi lager et par sensor noder, som samler data; og en gateway node, som overfører dataene til OpenHAB serveren.

Igjen, dette er det som fungerer for meg, fordi Wi-Fi-mottaket mitt er så fryktelig, og jeg vil ikke rote det med unødvendige data. Hvis du er fornøyd med Wi-Fi, se på å bruke den lave prisen ESP8266 Arduino-kompatibel Møt Arduino Killer: ESP8266 Møt Arduino Killer: ESP8266 Hva om jeg fortalte deg at det er et Arduino-kompatibelt dev-kort med innebygd Wi -Fi for mindre enn $ 10? Vel, det er det. Les mer med innebygde Wi-Fi-kort - MySensors støtter dem også.

Viktig merknad for El Capitan-brukere og Arduino-kloner: Apple klarte å ødelegge serielle drivere som pleide å kommunisere med en rekke Arduino klonbrett i den siste utgivelsen av El Capitan takket være nye sikkerhetstiltak. For å se om du er berørt, se på bordet ditt og brikken nærmest USB-porten. Hvis det står CH340, blir du påvirket av dette. Følg instruksjonene her for å deaktivere driverkutt-signering, installer CH340 serielle drivere på nytt.

Komponenter nødvendig

For gatewayen trenger du:

  • Arduino Uno
  • Ethernet Shield (W5100 basert)
  • NRF24L01 modul - Jeg har brukt +PA + LNA versjoner over hele, som har et økt utvalg på opp til 1km. Ledningene er de samme som du velger.

For hver sensor knutepunkt:

  • Arduino Uno
  • NRF24L01 modul
  • Sensorer (til å begynne med, vil jeg foreslå en temperatur og fuktighet DHT11 eller DHT22 modul)

Ekstra / Valgfritt:

  • 10uF kondensatorer, en for hver RF modul du har (lenken er for en pakke med 50!)
  • Strømforsyning med 5v og 3.3v utgang (YwRobot MB102 fungerer bra og de er $ 1 hver) - kreves hvis du bruker en klone Arduino. Du trenger også en 9-12v DC strømforsyning for disse.
  • Prototyping Shields, eller korte mannlige-kvinnelige jumper-ledninger.

Arbeider med NRF24L01 moduler

La oss starte med NRF24L01-modulene, da de er mest komplekse del av prosjektet. Jeg gikk for den dyrere, lengre rekkevidde versjonen av disse: teknisk kjent som NRF24L01 + PA + LNA. De kommer med en innebygd signalforsterkningskrets og antenneforbindelse, selv om jeg foreslår at du prøver den billigere ikke-antennversjonen av modulene først hvis du har et vanlig hjem med vanlige vegger, ikke den meter-tykke, faste steinen slags veggen som Jeg gjør. Den påståtte rekkevidden av disse er omtrent en kilometer, mer enn nok for at jeg legger inn i hageskallen.

Men disse tingene er egentlig vanskelig å jobbe med; Hvis du går videre og koble til alt uten å lese disse tipsene først, blir du skuffet.

  • Modulen trenger 3.3v inngangseffekt til VCC-pin - ikke 5v. Hvis du legger inn 5v, vil du steke den.
  • Løs en 10uF kondensator over VCC / GND terminaler. Den solide grå linjen på kondensatoren indikerer den negative / GND-siden.
  • Bruk korte høykabler av høy kvalitet. eller bedre, lodd dem direkte til et prototypeskjold for å holde kabellengden til en minimum og solid tilkobling.
  • Hvis du bruker en Arduino klon, gir ikke spenningsregulatoren nok for dem på 3.3v pin - du må bruke et eksternt strømforsyningsbrett (koblet over), tilgjengelig for ca $ 1 hver. Disse gir en stabil 3,3v. Hvis du bruker en opprinnelig Arduino merke Uno, dette ser ikke ut til å være et problem.

Jeg anbefaler sterkt at du gjør noen grunnleggende tester først for å opprette radioen din som fungerer. Tre to radios opp som vist på MySensors-siden. Det spiller ingen rolle at deres diagram viser Arduino Micro boards - de samme pinnumrene brukes. Merk at diagrammet viser NRF24L01 fra topp; du vil faktisk plugge ting i fra undersiden. Mentalt justere tilsvarende. Ignorer den grå IRQ-pin, den brukes ikke for tiden. Oppsummert:

  • VCC går til 3.3v på din eksterne strømforsyning
  • GND går til felles jording
  • CE til pin 9
  • CSN / CS til pin 10
  • MOSI til pin 11
  • MISO til pin 12
  • SCK til pin 13

Du trenger to noder som er fullt kablet for å teste med. Last ned RF24-biblioteket og last det enkleste Starter eksempel. Slå på begge modulene, men la den være koblet over USB og åpne seriekonsollen. Type “T” og send, for å bytte den til overføringsmodus, på hvilket tidspunkt skal du få feilsøkingsmeldinger som sier at den har vellykket pinging en melding til den andre noden.

Bygg MySensors MQTT Client Gateway

Ok, nå som vi vet at RF24-radioene er koblet inn og fungerer riktig, fortsett og last ned utviklingsgrenen til MySensors Arduino-pakken. Denne opplæringen ble skrevet med versjon 1.5, men det burde være ok med senere versjoner også. Vi bruker utviklingsavdelingen fordi MQTT ved skrivingstidspunktet klient Gateway er ikke en del av hovedpakken.

Selv om MQTTGateway er tilgjengelig i hovedavdelingen, fungerer den som en server også, som vi ikke vil ha fordi vi allerede har en stabil MQTT-server som kjører på Raspberry Pi. Vi vil bare videresende MySensors dataene til det. Igjen, hvis dette ikke er det du vil ha - hvis du helst ikke vil bruke MQTT i det hele tatt - så se på EthernetGateway eller SerialGateway, som begge er kompatible med OpenHAB.

Det er verdt å merke seg at nedlastingspakken ikke bare inneholder viktige MySensors-filer, den inneholder også kompatible biblioteker som trengs for alle mulige sensorer. For å unngå konflikter foreslår jeg bare å sikkerhetskopiere hele nåværende bibliotekskatalogen og erstatte alt sammen med de i nedlastingspakken.

Kabling for inngangsporten er litt annerledes; Når du har Ethernet skjoldet, bruk følgende pinner for radiomodulen:

  • CE til pin 5
  • CSN til pin 6
  • SCK til pin A0
  • MOSI til pin A1
  • MISO til pin A2

Du må også aktivere #define SOFTSPI linje i bibliotek / mySensors / MyConfig.h fil. Gjør dette ved å fjerne // for å uncomment det, det er rundt linje 309 på min.

Vi må gjøre dette fordi både radiomodul og nettverksskjerm bruker SPI, og de er ikke kompatible. så vi bare skifte radiomodul SPI til noen andre pins og utføre SPI-kommunikasjon i programvare i stedet (dermed, myk SPI).

Last opp MySensors / GatewayW5100MQTTClient skisse. Hvis du ikke ser dette under MySensors-menyen, har du ikke utviklingsgren installert. Bruk lenken som er angitt ovenfor for å laste ned hele biblioteket.

Du må definere en statisk IP-adresse for kontrolleren, IP-adressen til nettverksrouteren og -nettverket, og IP-adressen til din eksisterende MQTT-server. Du kan også endre emneprefixene også hvis du vil. Last opp, og koble den tingen inn i nettverket. Kontroller kort seriellkonsollen for noen tydelige feil som ikke å koble til MQTT-serveren din, ellers sett den til side (men legg den på).

Å bygge sensorens nodene

Først, kommentere det #define SOFTSPI linje i MyConfig.h filen igjen ved å sette // tilbake i starten. Det er bare nødvendig for inngangsporten - vi bruker standard NRF24L01 ledninger for sensor noder, som bruker maskinvare SPI. Hvis du trenger påminnelse:

  • VCC går til 3.3v på din eksterne strømforsyning (eller på Arduino selv om det er en original og ikke en klone)
  • GND går til felles jording
  • CE til pin 9
  • CSN / CS til pin 10
  • MOSI til pin 11
  • MISO til pin 12
  • SCK til pin 13

Deretter kobler du til ditt valg av sensor; Jeg bruker DHT11 fuktighets- og temperatursensor til testing, men hvis du ruller ned til sensoren og aktuatorlisten på siden av MySensors-siden, finner du et stort utvalg av andre alternativer: dører, regnmåler, lys, bevegelse, jevn RFID - og laster mer. Du kan se jeg har også lagt til et relé til noden vist nedenfor, men mer om det senere.

Til slutt laster du opp HumiditySensor eksempel fra MySensors menyen og legg til følgende linje umiddelbart etter kommentarene.

#define MY_NODE_ID 2

Siden vi bruker en spesiell versjon av kontrolleren som bare videresender ting til vår egen MQTT-server, har den ikke standardkontrollfunksjonen som automatisk vil tilordne node-IDer til hver ny nod. I stedet skal vi bare definere det manuelt hver gang. Merk ned dette nummeret et sted for dine egne poster, og endre det for hver knute.

Aktiver feilsøkingsutgangen også:

#define MY_DEBUG

Endelig, kontroller datapinnen på DHT11-sensoren din riktig.

#define HUMIDITY_SENSOR_DIGITAL_PIN 7

Deretter laster du opp!

Det er verdt å åpne seriekonsollen for å ta en titt. Det avgjørende å se er st =, hvilken status er meldingen. st = mislykkes betyr at meldingen ikke ble sendt. Det er mulig at du ikke har definert en unik node-ID, eller at gatewayen din er offline. Jeg faked disse feilene ved ganske enkelt å koble fra gatewayen:

Hvis alt fungerer, bør du begynne å se at noen dataavlesninger kommer inn på MQTT-serveren din. Å sette dem inn i OpenHAB er utenfor omfanget av denne opplæringen, men dekket i del 2 i OpenHAB-veiledningen. OpenHAB Beginners Guide Del 2: ZWave, MQTT, Regler og kartlegging OpenHAB Beginners Guide Del 2: ZWave, MQTT, Regler og kartlegging OpenHAB, open source-hjemmeautomatiseringsprogramvaren, langt overgår kapasiteten til andre hjemmeautomatiseringssystemer på markedet - men det er ikke lett å bli satt opp. Faktisk kan det være rett og slett frustrerende. Les mer slik at du kan referere tilbake der.

Kombinere sensorkode

Selv om det er relativt enkelt å få en enkelt sensorknude oppover, blir det litt vanskeligere når du vil legge til flere sensorer til hver knute. I hovedsak skal du blande kodestykket fra to forskjellige eksempler. Den enkleste måten å vise deg dette på er med eksempel med en video! Her kombinerer jeg vår grunnleggende fuktighetssensor med et relé.

Du finner den fullførte koden for fuktighetsføler og relé her, som allerede er modifisert med en ikke-blokkerende sløyfe som jeg nevnte i videoen. For å lære mer om MQTT-kommandostrukturen som trengs for å aktivere reléet, sjekk Serial API-men det er nok å si at følgende kanal kontrollerer det første reléet i koden jeg har gitt (med en meldingskropp på 0 eller 1):

mysensors-i / 9/1/1/0/2

Din eneste begrensning er nå mengden minne på Arduino, og jeg vil si dette - de mest pålitelige sensorene i mitt smarte hjem er ikke de kommersielle Z-Wave-modulene som koster $ 80, men MySensors tilpassede.

Jeg avslutter det i dag, men hvis du har problemer, kan du spørre deg i kommentarene eller de svært aktive brukerforumene til MySensors. Vil du sette sammen dine egne billige sensor noder? Hvordan kommer ditt klare hjem?

Utforsk mer om: Arduino, Smart Sensor.