DIY Smart Home Sensors met Arduino, MySensors en OpenHAB

DIY Smart Home Sensors met Arduino, MySensors en OpenHAB / Slimme woning

Slimme huissensoren kosten een belachelijke hoeveelheid geld. Bij $ 60 - $ 100, alleen voor een bewegingsdetector of een vochtigheidssensor, wordt het bekabelen van een heel huis het domein van mensen met onnozele bedragen aan besteedbaar inkomen. Laten we onze eigen bouwen.

Gelukkig is het harde werk al gedaan door de fijne mensen achter MySensors.org. Vandaag laat ik je zien hoe je het MySensors-raamwerk kunt gebruiken om een ​​goedkope reeks slimme huissensoren te maken die kunnen worden ingevoerd in een OpenHAB-installatie (Aan de slag met OpenHAB Domotica op Raspberry) Pi Aan de slag met OpenHAB Home Automation op Raspberry Pi OpenHAB is een volwassen, open source domotica-platform dat op verschillende hardware draait en protocol-agnostisch is, wat betekent dat het verbinding kan maken met bijna elke huisautomatiseringshardware die momenteel op de markt is. Lees verder . Ik ga ervan uit dat je al een werkende MQTT-server hebt en begrijp de basis van het MQTT-berichtenformaat; als dat niet het geval is, lees dan eerst de follow-up van de OpenHAB-handleiding met instructies voor het installeren van een MQTT-server OpenHAB-beginnershandleiding Deel 2: ZWave, MQTT, regels en grafieken OpenHAB-beginnershandleiding Deel 2: ZWave, MQTT, regels en grafieken OpenHAB , de open source domotica-software, overtreft ruimschoots de mogelijkheden van andere domoticasystemen op de markt, maar het is niet eenvoudig om het in te stellen. In feite kan het ronduit frustrerend zijn. Lees verder .

Hoewel ik specifiek bezig zal zijn met het doorsturen van de MySensors-gegevens van een netwerk van Arduinos, met behulp van MQTT, naar een OpenHAB-installatie, moet ik erop wijzen dat het MySensors-framework kan worden gebruikt voor een aantal verschillende controllers voor de huisautomatisering. Ik heb dit hier gepresenteerd als een complete oplossing die voor mij werkt, maar kijk eens naar de MySensors-site omdat het mogelijk ook geschikt is voor hetzelfde doel, maar met iets andere hardware of een ander berichtenprotocol. Het is ongelooflijk veelzijdig.

De hardwarekosten voor mijn setup zijn minder dan $ 10 per knooppunt (iets meer voor de gateway), maar extra sensoren en actuators kunnen heel weinig worden toegevoegd (de DHT11-vochtigheids- en temperatuursensor bijvoorbeeld is elk ongeveer $ 1, een hoogspanningsrelais is ongeveer $ 3).

Wat we aan het maken zijn

Het basisidee is dat in plaats van toe te voegen aan ons bestaande overvolle lokale netwerk met behulp van onbetrouwbare Wi-Fi of dure Ethernet-schilden, we een geheel gescheiden netwerk met meshmogelijkheden creëren, alleen voor de Arduinos; vervolgens overbruggen dat naar het lokale netwerk met behulp van een enkele gateway node, die zowel een Ethernet-verbinding en een radioverbinding met de andere Arduinos heeft. Dus we maken een paar sensorknopen, die gegevens verzamelen; en een gatewayknooppunt, dat die gegevens doorgeeft aan de OpenHAB-server.

Nogmaals, dit is wat voor mij werkt, omdat mijn Wi-Fi-ontvangst zo verschrikkelijk is en ik wil het niet wemelen met onnodige gegevens. Als je tevreden bent met wifi, kijk dan eens naar de voordelige ESP8266 Arduino-compatibele Meet the Arduino Killer: ESP8266 Ontmoet de Arduino-moordenaar: ESP8266 Wat als ik je al zei dat er een Arduino-compatibel dev-bord is met ingebouwde Wi -Fi voor minder dan $ 10? Welnu, dat is er. Meer lezen met ingebouwde Wi-Fi-kaarten - MySensors ondersteunt die ook.

Belangrijke opmerking voor El Capitan-gebruikers en Arduino-klonen: Apple slaagde erin om de seriële drivers die worden gebruikt om te communiceren met een aantal Arduino-clonenborden te verbreken in de nieuwste versie van El Capitan dankzij nieuwe beveiligingsmaatregelen. Als u wilt zien of dit gevolgen heeft, kijkt u naar uw bord en de chip die zich het dichtst bij de USB-poort bevindt. Als er CH340 staat, heb je hier last van. Volg de instructies hier om driver kext signing uit te schakelen, installeer CH340 serial drivers opnieuw.

Benodigde componenten

Voor de gateway heeft u nodig:

  • Arduino Uno
  • Ethernet Shield (gebaseerd op W5100)
  • NRF24L01 module - Ik heb de +PA + LNA overal versies, die een verhoogd bereik van maximaal 1 km hebben. De bedrading is hetzelfde, welke u ook kiest.

Voor elk sensorknooppunt:

  • Arduino Uno
  • NRF24L01 module
  • Sensoren (om te beginnen zou ik een DHT11- of DHT22-module voor temperatuur en vochtigheid voorstellen)

Extra / optioneel:

  • 10uF condensatoren, één voor elke RF-module die u hebt (de link is voor een pakket van 50!)
  • Voeding met 5v en 3.3v output (YwRobot MB102 werkt goed en ze zijn $ 1 per stuk) - vereist bij gebruik van een kloon Arduino. Je hebt hiervoor ook een 9-12v DC-voeding nodig.
  • Prototypeschilden of korte mannelijk-vrouwelijke springerdraden.

Werken met NRF24L01-modules

Laten we beginnen met de NRF24L01-modules, omdat ze het meest complexe onderdeel van het project zijn. Ik ging voor de duurdere, langere versie van deze: technisch bekend als NRF24L01 + PA + LNA. Ze worden geleverd met een signaalversterkercircuit aan boord en een antenneaansluiting, maar ik raad aan om eerst de goedkopere niet-antenneversie van de modules te proberen als je een normaal huis met normale muren hebt, en niet de metersdikke massieve stenen soort muur die Ik doe. Het geclaimde bereik van deze is ongeveer een kilometer, meer dan genoeg voor mij in de tuinschuur.

Deze dingen zijn echter werkelijk moeilijk om mee te werken; als u doorgaat en alles aansluit zonder eerst deze tips te lezen, zult u teleurgesteld zijn.

  • De module heeft een ingangsvermogen van 3,3 V naar de VCC-pin nodig - niet 5v. Als je er 5v in doet, bak je het.
  • Soldeer een 10uF condensator over de VCC / GND-terminals. De effen grijze lijn op de condensator geeft de negatieve / GND-zijde aan.
  • Gebruik korte springkabels van hoge kwaliteit; of beter nog, soldeer ze direct aan een prototype-scherm om de kabellengte tot een minimum te beperken en solide verbindingen te maken.
  • Als je een Arduino-kloon gebruikt, levert de spanningsregelaar niet genoeg op voor hen op een pen van 3,3 volt - je zult een externe voedingskaart moeten gebruiken (hierboven gelinkt), beschikbaar voor ongeveer $ 1 per stuk. Deze zorgen voor een stabiele 3,3V. Als u een gebruikt origineel Arduino merk Uno, dit lijkt geen probleem te zijn.

Ik raad je ten sterkste aan eerst enkele basistests uit te voeren om vast te stellen dat je radio werkt. Bedraad twee radio's omhoog zoals weergegeven op de MySensors-pagina. Het maakt niet uit dat hun diagram Arduino Micro-kaarten toont - dezelfde pincodes worden gebruikt. Merk op dat het diagram de NRF24L01 van de toont top; je gaat echt dingen inpluggen van de onderkant. Pas het dienovereenkomstig aan. Negeer de grijze IRQ-pin, deze wordt momenteel niet gebruikt. Samengevat:

  • VCC gaat naar 3.3v op uw externe voeding
  • GND gaat naar common ground rail
  • CE naar pin 9
  • CSN / CS naar pin 10
  • MOSI naar pin 11
  • MISO naar pin 12
  • SCK naar pin 13

Je hebt twee nodes nodig die volledig bedraad zijn om mee te testen. Download de RF24-bibliotheek en laad de eenvoudigste Ermee beginnen voorbeeld. Schakel beide modules in, maar laat er een aangesloten via USB en open de seriële console. Type “T” en verstuur, om het in de verzendmodus te veranderen, op welk moment je debug-berichten moet krijgen die zeggen dat het met succes een bericht naar het andere knooppunt pingt.

De MySensors MQTT Client Gateway bouwen

Oké, nu we weten dat de RF24-radio's goed zijn aangesloten en correct werken, kun je de ontwikkelingstak van het MySensors Arduino-pakket downloaden. Deze tutorial is geschreven met versie 1.5, maar zou ook goed moeten zijn voor latere versies. We gebruiken de ontwikkelingstak omdat op het moment van schrijven de MQTT cliënt gateway maakt nog geen deel uit van het hoofdpakket.

Hoewel MQTTGateway beschikbaar is in de mastertak, fungeert het ook als een server, wat we niet willen omdat we al een stabiele MQTT-server hebben die op de Raspberry Pi draait. We willen alleen de MySensors-gegevens daarover doorsturen. Nogmaals, als dit niet is wat je wilt - als je liever geen MQTT gebruikt - kijk dan eens naar EthernetGateway of SerialGateway, die beide ook compatibel zijn met OpenHAB.

Het is vermeldenswaard dat het downloadpakket niet alleen essentiële MySensors-bestanden bevat, maar ook compatibele bibliotheken die nodig zijn voor elke mogelijke sensor. Om conflicten te voorkomen, zou ik willen voorstellen gewoon een back-up te maken van je hele map met huidige bibliotheken en deze allemaal te vervangen door die in het downloadpakket.

Bedrading voor de gateway is een beetje anders; Zodra u uw Ethernet-shield hebt, gebruikt u de volgende pinnen voor de radiomodule:

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

U moet ook de #define SOFTSPI regel in de libraries / mySensors / MyConfig.h het dossier. Doe dit door het verwijderen van de // om het op te zeggen, het is rond lijn 309 op het mijne.

We moeten dit doen omdat zowel de radiomodule als het netwerkscherm SPI gebruiken, en ze zijn incompatibel; dus we verplaatsen de SPI van de radiomodule naar een aantal andere pinnen en voeren SPI-communicatie uit in software (vandaar, zacht SPI).

Laad de MySensors / GatewayW5100MQTTClient schetsen. Als u dit niet ziet onder het MySensors-menu, hebt u niet de ontwikkelingstak geïnstalleerd. Gebruik de bovenstaande link om de hele bibliotheek opnieuw te downloaden.

U moet een statisch IP-adres voor de controller, het IP-adres van uw netwerkrouter en subnet en het IP-adres van uw bestaande MQTT-server definiëren. U kunt de onderwerpvoorvoegsels ook wijzigen als u dat wilt. Upload en sluit dat ding aan op het netwerk. Controleer de Seriële console kort op eventuele flagrante fouten zoals het niet kunnen verbinden met uw MQTT-server, anders zet u deze opzij (maar laat hem aan).

De sensornodes bouwen

Ten eerste, maak daar commentaar op #define SOFTSPI regel in de MyConfig.h bestand opnieuw door de // terug aan het begin te zetten. Het is alleen nodig voor de gateway - we gebruiken de standaard NRF24L01-bedrading voor de sensorknopen, die hardware-SPI gebruiken. Als je eraan wilt herinneren:

  • VCC gaat naar 3.3v op uw externe voeding (of op de Arduino zelf als het een origineel is en geen kloon)
  • GND gaat naar common ground rail
  • CE naar pin 9
  • CSN / CS naar pin 10
  • MOSI naar pin 11
  • MISO naar pin 12
  • SCK naar pin 13

Sluit vervolgens uw sensorkeuze aan; Ik gebruik de DHT11 vocht- en temperatuursensor voor testen, maar als je naar beneden scrolt naar de sensoren en actorenlijst in de zijbalk van de MySensors-pagina, zul je een enorme selectie andere opties vinden: deuren, regenmeter, licht, beweging, zelfs RFID - en nog veel meer. Je kunt zien dat ik ook een relais heb toegevoegd aan het knooppunt dat hieronder is afgebeeld, maar daarover later meer.

Eindelijk, laad de HumiditySensor voorbeeld uit het MySensors-menu en voeg de volgende regel direct na de opmerkingen toe.

#define MY_NODE_ID 2

Omdat we een speciale versie van de controller gebruiken die dingen doorstuurt naar onze eigen MQTT-server, heeft deze niet de standaardcontrollerfunctie die automatisch knooppunt-ID's toewijst aan elk nieuw knooppunt. In plaats daarvan gaan we het elke keer handmatig definiëren. Noteer dit nummer ergens voor uw eigen records en wijzig dit voor elk knooppunt.

Schakel ook de foutopsporingsoutput in:

#define MY_DEBUG

Controleer ten slotte of de gegevenspen van uw DHT11-sensor correct is.

#define HUMIDITY_SENSOR_DIGITAL_PIN 7

Upload dan!

Het is de moeite waard om de seriële console te openen om een ​​kijkje te nemen. Het cruciale stukje om te kijken is st =, wat de status van het bericht is. st = fail betekent dat het bericht niet is verzonden. Het is mogelijk dat u geen unieke knooppunt-ID heeft gedefinieerd of dat uw gateway offline is. Ik heb deze fouten gefingeerd door simpelweg de gateway te ontkoppelen:

Als alles werkt, moet je beginnen met het zien van sommige datalezingen op je MQTT-server. Het plaatsen van deze in OpenHAB valt buiten het bestek van deze tutorial, maar werd behandeld in deel 2 van de OpenHAB-gids OpenHAB Beginner's Guide Deel 2: ZWave, MQTT, regels en grafieken OpenHAB Beginner's Guide Deel 2: ZWave, MQTT, regels en grafieken OpenHAB, de open source domotica-software overtreft veel meer dan de mogelijkheden van andere domoticasystemen op de markt, maar het is niet eenvoudig om deze in te stellen. In feite kan het ronduit frustrerend zijn. Lees meer zodat u daarnaar terug kunt verwijzen.

Combinatie van sensorcode

Hoewel het relatief simpel is om een ​​enkel sensorknooppunt te gebruiken, wordt het een beetje lastiger wanneer u meerdere sensoren aan elk knooppunt wilt toevoegen. In essentie ga je de codefragmenten uit twee verschillende voorbeelden samenvoegen. De eenvoudigste manier om dit te laten zien, is bijvoorbeeld met een video! Hier combineer ik onze basisvochtigheidssensor met een relais.

Je kunt de ingevulde code voor vochtigheidssensor en relais hier vinden, die al is gewijzigd met een niet-blokkerende lus zoals ik in de video heb genoemd. Voor meer informatie over de MQTT-opdrachtstructuur die nodig is om het relais te activeren, vinkt u de seriële API aan, maar het volstaat om te zeggen dat het volgende kanaal het eerste relais bestuurt in de code die ik heb gegeven (met een berichttekst van 0 of 1):

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

Je enige beperking is nu de hoeveelheid geheugen op de Arduino, en ik zal dit zeggen - de meest betrouwbare sensoren in mijn slimme huis zijn niet de commerciële Z-Wave-modules die $ 80 kosten, maar de MySensors aangepaste degenen.

Ik zal het daar vandaag beëindigen, maar als je problemen hebt, kun je vragen stellen in de opmerkingen of de zeer actieve gebruikersforums van MySensors. Zult u uw eigen goedkope sensorknopen samenstellen? Hoe komt je slimme huis aan??

Ontdek meer over: Arduino, Smart Sensor.