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.
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.
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țătoruluiAntena 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.
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.
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.
#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.
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.
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 logiciiReț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.
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.
sudo raspi-config
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.
sudo pico / etc / inittab
#Părați un getty pe linia de porc Raspberry Pi # T0: 23: respawn: / sbin / getty -L ttyAMA0 115200 vt100
sudo pico /boot/cmdline.txt
Scriptul python care va completa receptorul va efectua mai multe funcții.
Pentru a realiza aceste funcții, va trebui să instalați modulele prealabile pentru a instala bibliotecile seriale și comunicațiile Xively.
sudo apt-get instalare python-serial python-setuptools sudo easy_install pip sudo pip instalare --pre xively-python mkdir ~ / scripts
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ă.
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.
Î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.
Raspberry Pi este acum gata să primească date folosind wirelessnetwork.py script-ul. Arduino trebuie să fie programat cu wirelessreceiver schiță.
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:
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.
cd / home / pi / scripts / ./wirelessnetwork.py
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 actualizatDeoarece Raspberry Pi va fi rulat fără cap, scenariul ar trebui setat să pornească automat când aparatul este alimentat.
sudo -u pi /home/pi/scripts/wirelessnetwork.py &
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
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.