Construirea unei rețele de senzori wireless în casa dvs.

Acest tutorial vă va învăța cum să creați o rețea de module de senzori wireless eficiente din punct de vedere al costurilor. Multe dintre modulele fără fir gata pot fi prea scumpe pentru a fi utilizate în mai multe unități de senzori. În timp ce modulele Wi-Fi și Zigbee sunt populare și ușor de utilizat, costurile lor pot face ca utilizarea lor într-o serie de senzori să fie impracticabilă. Există, totuși, module low-cost RF fără toate caracteristicile scumpe care vor funcționa foarte bine în aceste scopuri. Platforma Arduino poate utiliza module radio de ultimă generație pentru a comunica cu ușurință și în mod fiabil.  

Odată ce hardware-ul este asamblat, veți folosi platforma Raspberry Pi pentru a posta datele către serviciul Internet al obiectelor Xively, unde puteți urmări valorile în timp și declanșa în condiții de prag.

Adunați componentele și instrumentele

Acest proiect va cuprinde trei părți, două unități de transmițător și o unitate receptor. Transmițătoarele sunt alcătuite dintr-o placă Arduino, un senzor și un transmițător RF. Unitatea receptor este alcătuită dintr-o placă Arduino, un receptor RF, un convertor de nivel logic și o Zmeură Pi. 

Există o gamă largă de plăci compatibile Arduino care pot fi utilizate pentru acest proiect. Cerința minimă pentru placa pentru acest proiect este de două pini GPIO digital și un pin analogic. Selectați o placă compatibilă Arduino care se potrivește nevoilor de cost și simplitate pentru acest proiect.  

În acest tutorial am folosit un set de plăci Arduino Nano care se potrivesc bine într-un breadboard și sunt ușor de programat. Cu toate acestea, versiunile 5V ale lui Arduino pro mini sau Trinket vor funcționa bine și la un punct de preț mult mai mic. Cu toate acestea, acestea necesită o experiență puțin mai mare pentru programare și utilizare. Alege cu înțelepciune.


Receptor 

  • Zmeura Pi-Model B cu sursă de alimentare, carcasă și card SD - Asigurați-vă că pinii GPIO sunt accesibili în cazul în care alegeți
  • Pi adaptor Wi-Fi compatibil
  • Arduino
  • Plăci de sârmă de bord
  • Conectori de sex masculin la feminin
  • Convertizor de nivel logic
  • Receptor RF de 434 MHz
  • Half board

Transmițători (două unități)

  • 2 x Arduino
  • 2 x senzori de temperatură / umiditate
  • Transmițător RF de 2 x 434 MHz
  • 2 x Pâine prăjită
  • 2 x cârlig de prindere cu prindere de 2,1 mm DC
  • Adaptor de alimentare de 2 x 9V cu 2,1 mm x 5
  • Plăci de sârmă de bord

Unelte

  • PC / Mac cu IDE de programare Arduino instalat
  • Cablu USB pentru programarea plăcilor Arduino
  • Tastatură USB și mouse. Fie combinat, fie cu un hub, astfel încât ambele pot fi utilizate cu un singur port USB.
  • Pachetul sursă asociat acestui tutorial pe stația dvs. de programare

Asamblați transmițătorii

Transmițătorii înșiși sunt circuite relativ simple. Numai un pin este utilizat pentru a prelua informațiile de la senzorul de temperatură și umiditate și un pin este utilizat pentru a trimite aceste date către transmițătorul RF. Diagrama breadboard este prezentată mai jos.

Alimentarea cu curent de 9V se va atașa la conectorul cu care se realizează șinele de fund 9V. Regulatorul de putere din Arduino va produce 5V care este sigur pentru a fi folosit pentru radio și senzori, șina superioară a diagramei.

Senzorul vine cu un rezistor de 10k ohm, care conectează pinul de date la putere ca o rezistență de tracțiune în sus, în timp ce un alt cablu îl conectează la GPIO D3.  

Aveți grijă să urmați configurația de mai jos și asigurați-vă că verificați foaia de date pentru senzor și modulul RF pentru a vă asigura că componentele sunt poziționate corect în panoul de coasere, iar pinii de alimentare, de masă și de semnal sunt conectați la pinii drepți. Diagrama de fritzare este inclusă în pachetul sursă pentru mai multe detalii.

Diagrama transmițătorului

Antena este o parte importantă a plăcii deoarece modulul RF nu are o antenă construită. Am folosit un fir de sârmă de sex masculin de 6 inci conectat la pană și a funcționat suficient de bine pentru a permite recepția din toate părțile casei mele și puțin în afară. După cum se observă în diagrama, este de 6,5 inch optim pentru această antenă dacă aveți nevoie de o gamă suplimentară.

O notă despre utilizarea RF. Există legi și reguli diferite privind utilizarea frecvențelor în diferite țări. Asigurați-vă că sunteți în conformitate cu aceste reguli înainte de difuzare. Acestea fiind spuse, semnalele din aceste module sunt abia destul de puternice pentru a trece în afara casei. În condiții perfecte, aceste module pot transmite până la 500 de picioare.

Descărcați Biblioteci pentru componente

Emițătorul utilizează două biblioteci care nu sunt incluse în ID-ul Arduino. Descărcați bibliotecile așa cum este descris mai jos și le decomprimați în directorul dvs. de schiță într-un subdirector numit Biblioteci.

  • Descărcați VirtualWire sursă pentru acest tutorial și dezarhivați wirelesstransmitter sketch în Arduino schiță pliant
  • În wirelesstransmitter folder crea un folder numit Biblioteci
  • Descărcați cea mai recentă versiune a codului VirtualWire, de la această pagină, de la pagina de proiect
  • Extrageți VirtualWire dosar în wirelesstransmitter / Biblioteci / astfel încât să aveți un alt subfolder numit VirtualWire
  • Descărcați biblioteca de senzori DHT de pe pagina sa de proiectare
  • Extrageți folderul DHT și în folderul Biblioteci. Ar trebui să aveți acum cele două foldere necesare pentru bibliotecă DHT și VirtualWire în tine wirelesstransmitter / Biblioteci pliant.

Programați comitetul Arduino

Acest tutorial presupune că aveți o experiență cu Arduino și cum să le programați utilizând ID-ul Arduino. Dacă nu, există instrucțiuni foarte bune la site-ul oficial Arduino.

  • Deschide wirelesstransmitter schițați din arhiva sursă din IDE-ul Arduino și salvați o copie locală
  • Asigurați-vă că Arduino NU este conectat la alimentare prin conectorul barilului
  • Conectați placa la stația de lucru de programare cu un cablu USB corespunzător
  • Setați tipul plăcii la placa dvs. Arduino selectată sub Instrumente> Consiliul meniul
  • Setați portul serial la portul detectat atunci când ați conectat placa Arduino sub Instrumente> Port meniul
  • Asigurați-vă că setarea MYID este setată la 1 si TRANSPIN și DHTPIN sunt setate corespunzător la pinii conectați la modulul transmițător RF și respectiv la senzorul DHT. Dacă ați construit bordul pe diagrama de mai sus, acest lucru ar trebui să fie deja setat deja. Vedeți exemplul de cod de mai jos.  
  • Asigurați - vă că UNITATE este setat corespunzător pentru preferințele dvs. Fahrenheit sau Celsius
#define MYID 1 // numărul de identificare al acestui forum. Modificați acest lucru pentru fiecare placă pe care o bifați. // ID-ul va fi transmis împreună cu datele, astfel încât să puteți spune care dispozitiv transmite #define TRANSPIN 3 // ce pin să transmită pe #define DHTPIN 4 // ce PIN DHT este conectat la #define UNIT 0 // 0 pentru Fahrenheit și 1 pentru Celsius

Definirea MYID este un ID numeric pe care emițătorul îl folosește pentru a se identifica în mod unic. Deoarece veți avea mai multe emițătoare în locații diferite, este important să aveți un cod unic pentru fiecare. Acest număr va fi folosit din nou când configurați scriptul receptorului.

  • Verificați codul apăsând Control-R pentru a asigura că bibliotecile sunt incluse și compilate corespunzător.
  • Împingeți codul la bord făcând clic pe Încărcați de pe bara de instrumente. 
  • Deschide Monitor serial ferestre prin apăsarea tastei Control-Shift-M

Monitor serial fereastra resetează Arduino astfel încât ar trebui să vedeți o linie de cod pe ecran care arată ceva de genul:

Umiditate: 44.00% Temperatura: 60.80 * F Trimitere mesaj: ID: 1: TS: 23143: TF: 60.79: RH: 44.00

Mesajul este compus din Nume: Valoare perechi pe care receptorul le va manipula. Transmițătorul va citi și va difuza semnalul pe un interval aleatoriu lung. Senzorii nu se schimbă foarte mult sau frecvent, astfel încât transmisia mai des decât o dată pe minut nu aduce valoare. Timpul de așteptare aleatoriu este de a permite mai multor senzori să coexiste.  

Chiar dacă se înregistrează dublarea și se pierde semnalul de la ambele transmițătoare, intervalul aleatoriu va asigura că emisiunile următoare nu se vor suprapune. Semnificația aleatorie pentru acest interval este setată de la analogRead pe un port analogic nefolosit, care va returna valorile aleatoare pentru a se asigura că nici două emițătoare nu sunt pe același model.  

Codul exemplu care generează ieșirea de mai sus este setat să utilizeze Fahrenheit. Poti vedea TF: 60,79 identificator în șirul mesajului indicând faptul că laboratorul meu este într-adevăr doar un păr sub 61 de grade. Totuși, umiditatea relativă RH: 44.00 este un confortabil 44%. S-ar putea deduce din mediul rece umed că laboratorul meu este în subsolul meu. S-ar putea să ai dreptate.

Transmițătoarele sunt setate să aștepte 2 până la 5 minute între emisiuni în mod prestabilit. Dacă doriți să accelerați acest lucru pentru depanare, modificați apoi întârziere() valoare la sfârșitul schiței să fie mai mare de 5000 (ms). Este foarte recomandat să schimbați acest lucru înapoi și să încărcați din nou codul pe emițătoarele dvs. atunci când sunteți pregătit pentru utilizare în timp util.

  • Construiți a doua placă de transmițător
  • Modificați schița transmițătorului astfel încât ID-UL MEU define este setat la 2 
  • Încărcați codul în a doua placă
  • Deschide Monitor serial ferestre prin apăsarea tastei Control-Shift-M și verificați dacă ieșirea arată ca prima placă de transmițătoare, cu excepția faptului că mesajul transmis începe cu ID: 2

Construiți placa receptorului

Placa receptoare va fi responsabilă pentru recepționarea mesajului difuzat pe componenta receptorului RF și trimiterea mesajului pe fire de serie către Raspberry Pi. Placa Arduino este utilizată pentru a primi semnalul pentru câteva motive foarte importante. Codul VirtualWire utilizează natura în timp real a Arduino pentru a gestiona modularea și demodularea semnalului.  

Aceasta înseamnă că unitatea de recepție trebuie să funcționeze la aceeași frecvență. În plus, există puțin spațiu pentru bruiajul procesorului de primire, la care este predispusă raspberry Pi, datorită sistemului de operare preemptiv și non-real-time. Comparând costurile unui modul Arduino Pro Mini plus modulul receptorului RF cu cel al unui modul Zigbee care ar putea vorbi direct cu Raspberry Pi a arătat că utilizarea unui arduino extern a fost încă destul de economic.

Construiți placa de recepție pe diagrama Fritzing de mai jos.

Receptor Diagrama

În acest moment NU atașați conductorii de 5V și de masă de la Pi la panoul de paie. Păstrați cablurile jumperi la îndemână, dar nu doriți să alimentați Arduino atât de la portul USB, cât și de la Raspberry Pi.

Rețineți că convertorul de nivel logic din lista de materiale de mai sus nu este exact același cu cel din biblioteca Fritzing, dar ieșirile sunt bine etichetate, doar în locuri diferite. Asigurați-vă că firele corecte sunt conectate la pinii corecti de la convertorul de nivel logic real.  

Această componentă este necesară pentru a converti semnalul serial de 5V Arduino la un semnal serial de 3,3V Raspberry Pi și nu deteriora Pi. Vedeți imaginea de mai jos pentru ajutor suplimentar.

Cablarea convertorului de nivel real al logicii

Rețineți că firele RX și TX trec prin convertorul de nivel logic astfel încât TX-ul de la Arduino să intre în RX-ul lui Pi. Următorii pași implică înființarea programului Pi, veți reveni la programarea programului Arduino mai târziu.

Configurați Zmeura Pi

Există mai multe ghiduri pentru achiziționarea și instalarea unui sistem de operare pe zmeura Pi. Instalați ultimul sistem de operare Raspbian. Următorii pași descriu conectarea perifericelor la Pi și configurarea acestora.

Bacsis: Dacă trebuie să aflați mai multe despre flash-ul unui card SD, pentru Raspberry Pi, consultați tutorialele noastre: Cum de a bloca un card SD pentru Zmeura Pi și Cum se instalează NOOBS pe o piersică Pi cu un Mac.

  • Introduceți adaptorul USB Wi-Fi în portul USB superior de pe dispozitivul Pi
  • Conectați hub-ul USB la portul USB inferior de pe Pi
  • Conectați mouse-ul și tastatura la hub-ul USB
  • Conectați monitorul HDMI
  • Introduceți cardul SD
  • Conectați sursa de alimentare
  • Efectuați configurația de configurare pentru prima dată, lăsând opțiunea implicită pentru a porni la un desktop grafic
  • După ce Pi repornește pe un desktop, urmați aceste instrucțiuni despre cum să utilizați instrumentul GUI pentru a configura rețeaua Wi-Fi.
  • Deschideți o fereastră de terminal făcând dublu clic pe LXTerminal icoană.
  • Executați comanda sudo raspi-config
  • Selectează Activați Boot to Desktop / Scratch> Consola pentru consola text, care necesită login opțiune
  • Selectează Opțiuni avansate> SSH pentru a permite accesul la linia de comandă de rețea
  • Selectați finalizarea și permiteți lui Pi să se repornească la consola de text
  • Luați notă de adresa IP a rapoartelor Pi atunci când se încarcă. Acest lucru va fi folosit pentru SSH la Pi în etapele ulterioare. Pașii de mai jos pentru configurarea lui Pi sunt mai ușor de făcut dintr-o sesiune SSH la Pi.

Configurați zmeura Pi

Raspberry Pi utilizează în mod implicit portul său serial ca o consolă serială. Aparatul este numit ttyAMA0.  Când se încarcă, acesta anulează mesajele de boot la acest dispozitiv și stabilește o sesiune de conectare pe acesta. Pentru a le folosi pentru primirea datelor de la Arduino va trebui să dezactivați consola și sesiunea de serie.

  • Editați fișierul inittab care controlează sesiunea de autentificare a textului cu comanda de mai jos. Este întotdeauna recomandat să faceți o copie de siguranță a fișierului original înainte de a fi editat doar în cazul în care ceva nu merge bine.
sudo pico / etc / inittab
  • Localizați liniile din partea de jos a fișierului care se referă la dispozitiv ttyAMA0 și adăugați a # la începutul liniei care include numele acestui dispozitiv. Ar trebui să arate ca liniile de mai jos când ați terminat
#Părați un getty pe linia de porc Raspberry Pi # T0: 23: respawn: / sbin / getty -L ttyAMA0 115200 vt100
  • Editați /boot/cmdline.txt cu comanda de mai jos. Nu uitați să faceți o copie de rezervă doar pentru caz.
sudo pico /boot/cmdline.txt
  • Eliminați argumentele care fac trimitere ttyAMA0.  Partea pe care doriți să o eliminați arată astfel: consola = ttyAMA0,115200 kgdboc = ttyAMA0,115200
  • Salvați fișierul și reporniți fișierul Pi

Instalați Python Script și cerințe preliminare

Scriptul python care va completa receptorul va efectua mai multe funcții.

  1. Citiți de pe portul serial
  2. Parsați intrarea și asigurați-vă că este sănătoasă
  3. Interpretați datele seriale
  4. Postați datele în Xively în fluxul adecvat

Pentru a realiza aceste funcții, va trebui să instalați modulele prealabile pentru a instala bibliotecile seriale și comunicațiile Xively.  

  • Conectați-vă la Pi și executați comenzile de mai jos pentru a le instala.
sudo apt-get instalare python-serial python-setuptools sudo easy_install pip sudo pip instalare --pre xively-python mkdir ~ / scripts

  • Copiați scriptul wirelessnetwork.py din pachetul sursă pentru acest tutorial în directorul de scripturi pe care tocmai l-ați creat. Puteți face acest lucru prin copierea și lipirea conținutului sau prin scufundarea scenariului la Pi.
  • Asigurați-vă că scriptul este executabil cu comanda
chmod u + x wirelessnetwork.py

Următorii câțiva pași vă vor ajuta să vă stabiliți internetul Lucrurilor conturi care vă permit să înregistrați și să reacționați la datele pe care dispozitivul le înregistrează.

Configurați contul dvs. Xively pentru Pi

Xively este un serviciu care colectează date de la lucruri. Puteți să vă configurați și să vă înregistrați lucru sau Raspberry Pi cu Xively și datele pot fi împinse de la dvs. Pi la nor pentru urmărire și declanșare.

Configurați scriptul Python

În scopul de a posta date în mod XIV wirelessnetwork.py script-ul trebuie să aibă ID-ul feedului și Taste API pe care le-ați înregistrat mai sus. Editați scenariul utilizând pico sau instrumentul dvs. de editare preferat (nu vi vs emacs războaie aici, te rog). Consultați fragmentul de probă din partea de sus a paginii wirelessnetwork.py script pentru un exemplu de unde ați introduce variabilele. De asemenea, rețineți că puteți opri ieșirea scriptului prin comutarea REMEDIERE variabilă la 0.

#some definește pentru Xively FEED_ID = "FEED ID HERE" #enter ID-ul dvs. de feed aici API_KEY = "API KEY HERE" #set cheie API aici # inițialize api client api = xively.XivelyAPIClient (API_KEY) #Create maparea de la ID-ul transmițătorului numărul de nume. Acest lucru ar putea fi un DB într-o zi DEV = '1': 'Dormitor', '2': 'Subsol' DEBUG = Adevărat 

În timp ce editați scriptul, asigurați-vă că editați DEV variabil. Această variabilă este o mapare a numelui pentru ID-ulpe care modulele senzorilor le vor trimite. În acest exemplu, atunci când modulul senzor este ID-ul 1 trimite un mesaj, scriptul va posta pe un canal Xively cu numele prietenos Dormitor in loc de ID1.  În același mod, modulul senzor cu ID-ul 2 vor fi raportate în canal subsol.

Programați receptorul Arduino

Raspberry Pi este acum gata să primească date folosind wirelessnetwork.py script-ul. Arduino trebuie să fie programat cu wirelessreceiver schiță.

  • Deschide wirelessreceiver schiță din pachetul sursă și salvați o copie locală
  • Copiați VirtualWire biblioteca din wirelesstransmitter / Biblioteca director la Bibliotecă directorul noul wirelessreceiver director
  • Atașați receptorul receptorului Arduino la stația dvs. de programare și asigurați-vă că tipul de port și placă este setat corect.
  • Asigurați - vă că RXPIN define este setat la numărul de pin care este conectat la modulul receptor RF. Dacă este construită pe diagrama schița ar trebui să fie bine fără modificări.
  • Verificați și încărcați schița în Arduino
  • Deschide Monitor serial ferestre prin apăsarea tastei Control-Shift-M.  Dacă transmițătoarele nu funcționează, nu veți vedea afară.
  • Conectați unul din modulele de transmițător la alimentare utilizând adaptorul de perete de 9V și conectorul de butoi de pe panou. Ar trebui să vedeți acum mesajele primite de la Arduino. Va arata cam ca datele de mai jos.
ID: 1: TS: 23143: TF: 60.79: RH: 44.00 ID: 1: TS: 24532: TF: 60.79: RH: 44.00 ID: 1: TS: 29324: TF:
  • Deconectați cablul USB de la Arduino
  • Atașați jumperii de la sol și de putere de la Raspberry Pi

Testați scriptul receptorului

Acum, dacă aveți datele de la Arduino care primesc date de la un modul senzor, puteți testa scriptul pe Pi pentru a vă asigura că citiți corect datele și postați-l la Xively. Deschideți o sesiune SSH sau terminal pentru Pi pentru pașii următori.

  • Activați al doilea emițător wireless conectându-l cu al doilea adaptor de 9V
  • Executați scriptul wirelessnetwork.py din directorul / home / pi / scripts cu următoarele comenzi
cd / home / pi / scripts / ./wirelessnetwork.py
  • Examinați rezultatul în consola și pe site-ul Xively.  
 Intrare primită: ID: 1: TS: 154075: TF: 73.39: RH: 39.00 Date de prelucrare pentru: Dormitor Postarea temperaturii fahrenheit pentru dormitor Crearea fluxului de date Actualizarea feedului Xively cu valoarea: 73.39 Umiditatea relativă a dormitorului : 39.00 Intrare recepționată: ID: 2: TS: 522: TF: 60.79: RH: 44.00 Data prelucrării pentru: Subsol Temp fahrenheit pentru Subsolul Crearea fluxului de date Actualizare Feed Xively cu valoare: 60.79 Umiditate relativă pentru subsol cu o valoare: 44.00 

Scenariul va crea feed-uri pentru umiditate și temperatură la prima funcționare. Exemplul de mai sus arată scriptul care primește mesajele, le analizează și le publică pe Xively cu succes. Utilizare Control-C pentru a ieși din script înainte de a trece la pasul următor.

Treceți la ferestrele browserului în care ați creat contul și dispozitivul dvs. Xively. Noile date de acces și unele informații despre ele ar trebui să fie disponibile și arată ceva asemănător imaginii de mai jos.

Canalul actualizat actualizat

Setați scriptul pentru lansarea la boot

Deoarece Raspberry Pi va fi rulat fără cap, scenariul ar trebui setat să pornească automat când aparatul este alimentat.

  • Adăugați următoarea linie la /etc/rc.local fişier. Utilizați editorul dvs. preferat, dar asigurați-vă că sudo comanda de editare ca /etc/rc.local este un fișier rădăcină deținut. Scriptul în sine poate rula ca utilizator pi, mai degrabă decât ca root.
sudo -u pi /home/pi/scripts/wirelessnetwork.py &
  • Reporniți dispozitivul Pi
  • Conectați-vă la Pi după ce a repornit și verificați dacă scriptul rulează cu următoarea comandă.
ps ax | grep wirelessnetwork

Rezultatul ar trebui să arate ceva de genul fragmentului de mai jos.

22000 de puncte / 1 S + 0:02 / usr / bin / python /home/pi/scripts/wirelessnetwork.py

rezumat

Felicitări! Ați lucrat printr-un tutorial destul de lung și ați construit o rețea fără fir de senzori, foarte flexibilă și extensibilă. Ați exercitat o varietate de abilități, cum ar fi construirea circuitelor pe bază de arbori pe bază de Arduino, conectarea unui Arduino la o Zmeieră Pi, trimiterea și primirea în siguranță a datelor seriale între Arduino și Pi și trimiterea datelor senzorilor către Xively internetul Lucrurilor serviciu.

Există multe posibilități de extindere sau experimentare în continuare a acestui proiect. Puteți alege să construiți module suplimentare de senzori sau să adăugați senzori la modulele existente. Formatul mesajului radio este o cheie simplă: perechea de valori și scriptul python au comentarii cu privire la modul de adăugare a diferitelor tipuri de date. Încercați să construiți o locuință sau o locuință permanentă pentru emițătoare. Există multe posibilități de distracție în cazul în care să luați acest proiect.