DIY Smart Home Sensors cu Arduino, MySensors și OpenHAB
Smart senzorii de acasă costă o sumă ridicolă de bani. La $ 60- $ 100 doar pentru un detector de mișcare sau un senzor de umiditate, cablarea unei case întregi devine domeniul celor cu cantități proaste de venit disponibil. Să ne construim propria noastră.
Din fericire, munca grea a fost deja făcută de oamenii buni din spatele MySensors.org. Astăzi vă voi arăta cum să utilizați cadrul MySensors pentru a crea o gamă ieftină de senzori home smart care se pot alimenta într-o instalare OpenHAB (a se vedea ghidul nostru de a începe cu OpenHAB pe Raspberry Pi) Noțiuni de bază cu OpenHAB Home Automation on Raspberry Pi De la început cu OpenHAB Home Automation pe Raspberry Pi OpenHAB este o platformă matură, open source de automatizare acasă, care rulează pe o varietate de hardware și este agnostic protocol, adică se poate conecta la aproape orice hardware de automatizare de acasă de pe piață astăzi. Citeste mai mult . Presupun că aveți deja un server de lucru MQTT și înțelegeți elementele de bază ale formatelor de mesaje MQTT; dacă nu, asigurați-vă că ați citit următorul ghid pentru OpenHAB, care include instrucțiuni pentru instalarea unui server MQTT. Ghidul începătorului OpenHAB Partea 2: ZWave, MQTT, Reguli și cartografiere Ghidul începătorului OpenHAB Partea 2: ZWave, MQTT, reguli și cartografiere OpenHAB , software-ul de acasă open source, depășește cu mult capabilitățile altor sisteme de automatizare de acasă de pe piață - dar nu este ușor de configurat. De fapt, poate fi frustrant. Citeste mai mult .
Deși mă voi ocupa în special de transmiterea datelor MySensors dintr-o rețea de Arduinos, folosind MQTT, la o instalare OpenHAB, ar trebui să subliniez faptul că cadrul MySensors poate fi alimentat într-un număr de diverși controlori de automatizare a locuinței. Am prezentat acest lucru aici ca o soluție completă care funcționează pentru mine, dar vă rugăm să verificați site-ul MySensors, pentru că s-ar putea să fie de asemenea potrivit scopului dvs. similar, dar folosind hardware ușor diferit sau un protocol de mesagerie diferit. Este incredibil de versatil.
Costul hardware al configurației mele este mai mic de 10 USD pe nod (mai puțin pentru gateway), dar pot fi adăugați senzori și actuatori suplimentari pentru foarte puține (senzorul de umiditate și temperatură DHT11, de exemplu, este de aproximativ 1 USD fiecare, un releu de înaltă tensiune este de aproximativ 3 USD).
Ce facem
Ideea de bază este că, mai degrabă decât adăugarea pe rețeaua noastră locală aglomerată existentă, utilizând rețele Wi-Fi nesigure sau scuturi Ethernet scumpe, vom crea o rețea separată, cu posibilități diferite, pentru rețeaua Arduinos; apoi conectați-l la rețeaua locală utilizând un singur nod de gateway, care are o conexiune Ethernet și o conexiune radio cu celălalt Arduinos. Așa că facem câteva noduri senzoriale, care adună date; și un nod de gateway, care transmite acele date către serverul OpenHAB.
Din nou, aceasta este ceea ce funcționează pentru mine, deoarece recepția Wi-Fi este atât de îngrozitoare și nu vreau să o dezamăgesc cu date inutile. Dacă sunteți mulțumit cu Wi-Fi, uitați-vă la utilizarea costului scăzut ESP8266 Arduino-compatibil Meet the Killer Arduino: ESP8266 Faceți cunoștință cu Killer Arduino: ESP8266 Ce-ar fi dacă ți-am spus că există o placă de disc compatibilă cu Arduino cu built-in Wi -Fi pentru mai puțin de 10 $? Ei bine, există. Citiți mai multe cu plăcile Wi-Fi încorporate - MySensors le suportă și pe acestea.
Notă importantă pentru utilizatorii El Capitan și clonele Arduino: Apple a reușit să spargă șoferii de serie folosiți pentru a comunica cu un număr de placi de clona Arduino în cea mai recentă versiune a lui El Capitan datorită noilor măsuri de securitate. Pentru a vedea dacă sunteți afectat, uitați-vă la placa dvs. și la cipul cel mai apropiat de portul USB. Dacă scrie CH340, ești afectat de asta. Urmați instrucțiunile de aici pentru a dezactiva semnarea kext a driverului, instalați din nou driverele seriale CH340.
Componentele necesare
Pentru poarta de acces, veți avea nevoie de:
- Arduino Uno
- Ecranul Ethernet (bazat pe W5100)
- Modul NRF24L01 - Am folosit funcția +PA + LNA versiuni de ansamblu, care au o gamă mărită de până la 1 km. Cablajul este același, indiferent de ce alegeți.
Pentru fiecare nod senzor:
- Arduino Uno
- Modulul NRF24L01
- Senzori (pentru început, aș sugera un modul de temperatură și umiditate DHT11 sau DHT22)
Adițional / Opțional:
- 10uF condensatori, unul pentru fiecare modul RF pe care îl aveți (linkul este pentru un pachet de 50!)
- Alimentare cu ieșire de 5V și 3.3V (YwRobot MB102 funcționează bine și sunt câte 1 $ fiecare) - necesară în cazul utilizării unei clone Arduino. De asemenea, veți avea nevoie de o sursă de alimentare de 9-12V DC pentru acestea.
- Prototyping Shields sau fire scurte de tip male-female.
Lucrul cu modulele NRF24L01
Să începem cu modulele NRF24L01, deoarece acestea sunt partea cea mai complexă a proiectului. M-am dus la versiunea mai scumpa, mai lunga a acestor produse: cunoscuta sub numele de NRF24L01 + PA + LNA. Acestea vin cu un circuit de amplificare a semnalului de la bord și o conexiune la antenă, deși vă sugerez să încercați mai întâi versiunea mai ieftină de non-antenă a modulelor dacă aveți o locuință normală cu pereți obișnuiți, nu un fel de perete solid, Fac. Gama revendicată a acestora este de aproximativ un kilometru, mai mult decât suficient pentru a fi pus în grădina.
Cu toate acestea, aceste lucruri sunt într-adevăr dificil de a lucra cu; dacă mergeți înainte și conectați totul fără să citiți mai întâi aceste sfaturi, veți fi dezamăgiți.
- Modulul are nevoie de o putere de intrare de 3.3V la pinul VCC - nu 5v. Dacă puneți în 5v, îl veți prăji.
- Lipiți un condensator de 10uF peste bornele VCC / GND. Linia gri solidă de pe condensator indică partea negativă / GND.
- Utilizați cabluri scurte de înaltă calitate; sau mai bine, le lipiți direct pe un scut de prototip pentru a menține lungimea cablului la o conexiune minimă și solidă.
- Dacă utilizați o clonă Arduino, regulatorul de tensiune nu oferă suficient pentru ele pe pinul 3.3v - va trebui să utilizați o placă externă de alimentare (legată mai sus), disponibilă pentru aproximativ 1 $ fiecare. Acestea oferă o valoare stabilă de 3.3V. Dacă utilizați un original Arduino marca Uno, acest lucru nu pare a fi o problemă.
Vă sugerăm să faceți mai întâi câteva teste de bază doar pentru a stabili că radioul funcționează. Introduceți două radiouri în sus, așa cum se arată pe pagina MySensors. Nu contează că diagrama lor arăta Arduino Micro boards - aceleași numere de pin sunt folosite. Rețineți că diagrama indică NRF24L01 din top; de fapt, veți conecta lucrurile din partea inferioară. Adaptați mental corespunzător. Ignorați pinul IRQ gri, nu este utilizat în prezent. În concluzie:
- VCC merge la 3.3v pe sursa de alimentare externa
- GND merge la calea ferată comună
- CE să fixeze 9
- CSN / CS la pin 10
- MOSI la pin 11
- MISO la pin 12
- SCK la pin 13
Veți avea nevoie de două noduri complet cablate pentru a testa cu. Descărcați biblioteca RF24 și încărcați cea mai simplă Noțiuni de bază exemplu. Porniți ambele module, dar lăsați unul conectat prin USB și deschideți consola seria. Tip “T” și trimiteți, pentru ao comuta în modul de transmisie, moment în care ar trebui să primiți mesaje de depanare spunând că reușește să pingă un mesaj către celălalt nod.
Construirea gateway-ului client MQTT MySensors
Ok, acum că știm că radiofoanele RF24 sunt conectate și funcționează corect, continuați și descărcați ramura de dezvoltare a pachetului MySensors Arduino. Acest tutorial a fost scris folosind versiunea 1.5, dar ar trebui să fie ok și cu versiuni ulterioare. Folosim ramura de dezvoltare deoarece, la momentul scrisului, MQTT client gateway-ul nu este încă o parte a pachetului principal.
Deși nu există MQTTGateway disponibilă în ramura master, acesta funcționează și ca server, ceea ce nu dorim pentru că avem deja un server MQTT stabil care rulează pe Raspberry Pi. Vrem doar să transmitem datele MySensors pe asta. Din nou, dacă acest lucru nu este ceea ce doriți - dacă nu doriți să utilizați deloc MQTT - atunci uitați-vă la EthernetGateway sau SerialGateway, ambele fiind compatibile și cu OpenHAB.
Merită menționat faptul că pachetul de descărcări nu include doar fișiere esențiale MySensors, ci include și biblioteci compatibile necesare pentru fiecare senzor posibil. Pentru a evita conflictele, aș sugera doar copierea de rezervă a întregului folder curent al bibliotecilor și înlocuirea acestuia cu cele din pachetul de descărcare.
Cablarea gateway-ului este puțin diferită; odată ce aveți ecranul Ethernet, utilizați următoarele pini pentru modulul radio:
- CE la pin 5
- CSN la pin 6
- SCK pentru a activa A0
- MOSI la pinul A1
- MISO la pin A2
De asemenea, trebuie să activați funcția # definește SOFTSPI linie în biblioteci / mySensors / MyConfig.h fişier. Faceți acest lucru prin eliminarea // pentru a o dezmembra, este în jurul liniei 309 pe a mea.
Trebuie să facem acest lucru deoarece atât modulul radio, cât și ecranul de rețea folosesc SPI și sunt incompatibile; așa că am schimbat modulul SPI radio la alte pini și am efectuat comunicarea SPI în software (în loc, moale SPI).
Încărcați MySensors / GatewayW5100MQTTClient schiță. Dacă nu vedeți acest lucru sub meniul MySensors, nu aveți ramură de dezvoltare instalat. Utilizați linkul furnizat mai sus pentru a descărca din nou întreaga bibliotecă.
Va trebui să definiți o adresă IP statică pentru controler, adresa IP a router-ului de rețea și subrețea și adresa IP a serverului MQTT existent. Simțiți-vă liber să modificați prefixele subiectului dacă doriți. Încărcați și conectați acel lucru la rețea. Verificați scurt consolă serial pentru orice erori glaring ca imposibilitatea de a vă conecta la serverul dvs. MQTT, altfel lăsați-l deoparte (dar lăsați-l aprins).
Construirea nodurilor senzorilor
În primul rând, spuneți acest lucru # definește SOFTSPI linie în MyConfig.h fișier din nou prin punerea // înapoi la început. Este necesar doar pentru gateway - folosim cablajul standard NRF24L01 pentru nodurile senzorilor care folosesc SPI hardware. Dacă aveți nevoie să reamintiți:
- VCC merge la 3.3v pe sursa de alimentare externa (sau pe Arduino în sine dacă este un original și nu o clonă)
- GND merge la calea ferată comună
- CE să fixeze 9
- CSN / CS la pin 10
- MOSI la pin 11
- MISO la pin 12
- SCK la pin 13
Apoi, conectați-vă la alegerea senzorului; Folosesc senzor de umiditate și temperatură DHT11 pentru testare, dar dacă parcurgeți lista de senzori și actuatori pe bara laterală a paginii MySensors, veți găsi o mare varietate de alte opțiuni: uși, gabarit, lumină, mișcare, chiar RFID - și încarcă mai mult. Puteți vedea că am adăugat de asemenea un releu la nodul prezentat mai jos, dar mai mult despre asta mai târziu.
În cele din urmă, încărcați Senzor de umiditate de exemplu din meniul MySensors și adăugați următoarea linie imediat după comentarii.
#define MY_NODE_ID 2
Deoarece folosim o versiune specială a controlerului care doar înaintează lucrurile pe propriul server MQTT, nu are caracteristica standard a controlerului care ar atribui automat ID-urile nodurilor la fiecare nod nou. În schimb, o să o definim manual de fiecare dată. Notați acest număr undeva pentru propriile dvs. înregistrări și modificați-l pentru fiecare nod.
Activează și debitul de depanare:
#define MY_DEBUG
În cele din urmă, verificați dacă pinul de date al senzorului dvs. DHT11 este corect.
#define HUMIDITY_SENSOR_DIGITAL_PIN 7
Apoi, încărcați!
Merită să deschideți consola seria pentru a arunca o privire. Este crucial să privim st =, care este starea mesajului. st = nu înseamnă că mesajul nu a fost trimis. Este posibil să nu fi definit un ID de nod unic sau ca gateway-ul să fie offline. Am falsificat aceste defecțiuni prin simpla deconectare a gateway-ului:
Dacă totul funcționează, ar trebui să începeți să vedeți câteva citiri de date care vin în serverul dvs. MQTT. Punerea acestora în OpenHAB se află în afara scopului acestui tutorial, dar a fost inclusă în partea a 2 a Ghidului OpenHAB OpenHAB Ghidul începătorului Partea 2: ZWave, MQTT, Reguli și cartografiere OpenHAB Ghidul începătorului Partea 2: ZWave, MQTT, Reguli și cartografiere OpenHAB, software-ul open source pentru automatizarea acasă, depășește cu mult capabilitățile altor sisteme de automatizare a locuințelor de pe piață - dar nu este ușor de configurat. De fapt, poate fi frustrant. Citiți mai multe pentru a vă putea referi acolo.
Combinarea codului senzorului
Deși obținerea unui singur nod de senzori este relativ simplă, devine puțin mai dificil atunci când doriți să adăugați mai mulți senzori la fiecare nod. În esență, veți combina fragmentele de cod din două exemple diferite. Cea mai ușoară modalitate de a vă arăta acest lucru este, de exemplu, cu un videoclip! Aici combinam senzorul de umiditate de bază cu un releu.
Puteți găsi codul completat pentru senzor de umiditate și releu aici, care a fost deja modificat cu o buclă fără blocare așa cum am menționat în videoclip. Pentru a afla mai multe despre structura de comandă MQTT necesară activării releului, verificați API-ul Serial - dar este suficient să spui că următoarele canale controlează primul releu din codul pe care l-am dat (cu un mesaj de 0 sau 1):
mysensors-in / 9/1/1/0/2
Singura dvs. limitare acum este cantitatea de memorie de pe Arduino și voi spune asta - cei mai fiabili senzori din casa mea inteligentă nu sunt modulele comerciale Z-Wave care costă 80 $, dar MySensors personalizate.
Voi termina acolo astăzi, dar dacă aveți probleme puteți întreba în comentariile sau forumurile foarte active ale utilizatorilor MySensors. Îți vei pune propriile noduri ieftine de senzori? Cum vine casa ta inteligentă?
Explorați mai multe despre: Arduino, Smart Sensor.