Denne opplæringen vil lære deg hvordan du oppretter et nettverk av kostnadseffektive, trådløse sensormoduler. Mange av de ferdige trådløse modulene kan være for dyre for bruk i flere sensorenheter. Mens Wi-Fi og Zigbee-moduler er populære og enkle å bruke, kan deres kostnader gjøre bruk av dem i en rekke sensorer upraktiske. Det er imidlertid lave kostnader RF-moduler uten alle de dyre funksjonene som vil fungere fint disse formålene. Arduino-plattformen kan bruke enkle radiomoduler til å kommunisere lett og pålitelig.
Når maskinvaren er satt sammen, vil du utnytte Raspberry Pi-plattformen til å sende dataene til Xives tjeneste for Internett av ting der du kan spore verdiene over tid og utløse terskelforholdene.
Dette prosjektet vil inneholde tre deler, to sender enheter og en mottaker enhet. Senderen består av en Arduino bord, sensor og RF sender. Mottakerenheten består av et Arduino-kort, en RF-mottaker, en logisk nivåomformer og en Raspberry Pi.
Det finnes et bredt utvalg av Arduino-kompatible plater som kan brukes til dette prosjektet. Minimumskravet til styret for dette prosjektet er to digitale GPIO-pinner og en analog pinne. Velg et Arduino-kompatibelt kort som samsvarer med kostnadene og enkelhetsbehovene for dette prosjektet.
I denne opplæringen har jeg brukt et sett med Arduino Nano-brett som passer godt i et brettbrett og er enkle å programmere. Men 5V-versjonene av Arduino pro mini eller trinket vil også fungere godt og til et mye lavere prispunkt. Disse krever imidlertid litt mer erfaring å programmere og bruke. Velg smart.
Senderen selv er relativt enkle kretser. Det er bare en pinne som brukes til å hente informasjonen fra temperatur- og fuktighetssensoren, og en pinne brukes til å sende dataene til RF-senderen. Brødbrettdiagrammet er vist nedenfor.
9V strømforsyningen vil feste til fatningskoblingen som gjør bunnskinner 9V. Strømregulatoren i Arduino vil produsere 5V som er trygt å bruke til radio og sensorer, den øverste strømskinnen på diagrammet.
Sensoren leveres med en 10k ohm motstand som kobler datapinnen til strøm som en trekkmotstand mens en annen ledning kobler den til GPIO D3.
Vær forsiktig med å følge oppsettet under og sørg for at du dobbeltsjekker databladet for sensoren og RF-modulen for å sikre at komponentene er riktig plassert i brødbrettet og at strøm-, jord- og signalpinnene er koblet til høyre pinner. Fritzing-diagrammet er inkludert i kildepakken for flere detaljer.
SenderdiagramAntennen er en viktig del av brettet fordi RF-modulen ikke har en innebygd antenne. Jeg brukte en 6-tommers jente til mannlig jumper wire plugget i breadboard og det fungerte bra nok til å tillate mottak fra alle deler av mitt hjem og litt utenfor. Som angitt i diagrammet, er 6,5-tommers optimal for denne antennen hvis du trenger ekstra rekkevidde.
Et notat om RF-bruk. Det er forskjellige lover og regler om bruk av frekvenser i forskjellige land. Vennligst vær sikker på at du overholder disse reglene før kringkasting. Når det er sagt, er signalene fra disse modulene knapt kraftige nok til å passere utenfor ditt hjem. Under perfekte forhold kan disse modulene imidlertid sende opp til 500 fot.
Senderen bruker to biblioteker som ikke er bundet med Arduino IDE. Last ned bibliotekene som beskrevet nedenfor og dekomprimert dem inn i skissekatalogen din i en underkatalog kalt Biblioteker.
Denne opplæringen forutsetter at du har erfaring med Arduino og hvordan du programmerer dem ved hjelp av Arduino IDE. Hvis du ikke gjør det, er det veldig gode instruksjoner på det offisielle Arduino-nettstedet.
#define MYID 1 // ID-nummeret til dette forumet. Endre dette for hvert bord du blinker. // ID vil bli overført med dataene slik at du kan se hvilken enhet som overfører #define TRANSPIN 3 // hvilken pin som skal overføres på #define DHTPIN 4 // hvilken pin DHT er koblet til #define UNIT 0 // 0 for Fahrenheit og 1 for Celsius
MYID-definisjonen er en numerisk ID som senderen bruker for å identifisere seg selv. Fordi du vil ha flere sendere på forskjellige steder, er det viktig å ha en unik ID for hver enkelt. Dette nummeret vil bli brukt igjen når du konfigurerer mottakerskriptet.
De Seriell skjerm vinduet tilbakestiller Arduino slik at du bør se en linje med kode på skjermen som ser ut som:
Luftfuktighet: 44.00% Temperatur: 60.80 * F Sende melding: ID: 1: TS: 23143: TF: 60.79: RH: 44.00
Meldingen består av Navn: Verdi par som mottakeren vil håndtere. Senderen vil lese og sende signalet sitt på et langt tilfeldig intervaller. Sensorene endres ikke veldig mye eller ofte, slik at kringkasting oftere enn en gang i minuttet gir ingen verdi. Den tilfeldige ventetiden er å tillate at flere sensorer sameksisterer.
Selv om det er dobling og signalet fra begge sendere går tapt, vil tilfeldig intervall sikre at de neste sendingene ikke overlapper. Den tilfeldige frø for dette intervallet er satt fra en analogRead på en ubrukt analog port som vil returnere tilfeldige verdier for å sikre at ingen to sendere er i samme mønster.
Eksempelkoden som genererer utgangen ovenfor er satt til å bruke Fahrenheit. Du kan se TF: 60,79 identifikator i meldingsstrengen som indikerer at laboratoriet mitt egentlig er bare et hår under 61 grader. Men den relative fuktigheten RH: 44.00 er en behagelig 44%. Man kan komme fra det kjølige, fuktige miljøet som laboratoriet mitt ligger i kjelleren min. Det kan være riktig.
Senderen er satt til å vente 2 til 5 minutter mellom sendinger som standard. Hvis du ønsker å fremskynde dette for feilsøkingsformål, endrer du utsette() verdi på slutten av skissen for å være mer som 5000 (ms). Det anbefales på det sterkeste at du endrer dette tilbake og laster opp koden til senderen når du er klar for bruk i full tid.
Mottakerkortet vil være ansvarlig for å motta sendingsmeldingen på RF-mottakerkomponenten og sende den meldingen over serielle ledninger til Raspberry Pi. Arduino-brettet brukes til å motta signalet for et par svært viktige grunner. VirtualWire-koden bruker Arduino i sanntid for å administrere modulering og demodulering av signalet.
Dette betyr at mottakerenheten må fungere med samme frekvens. I tillegg er det lite rom for jitter på mottakerprosessoren, som Raspberry Pi er utsatt for, på grunn av sin preemptive, ikke-sanntids operativsystem. Sammenligning av kostnadene for en Arduino Pro Mini pluss RF mottakermodulen til en Zigbee-modul som kunne snakke direkte med Raspberry Pi viste at bruk av en ekstern Arduino fortsatt var ganske økonomisk.
Bygg mottakerbordet på Fritzing-diagrammet nedenfor.
Mottaker diagramPå dette punktet må du IKKE koble 5V og jordledningene fra Pi til brødbrettet. Hold jumperens ledninger praktisk, men du vil ikke koble Arduino fra både USB-porten og Raspberry Pi.
Legg merke til at logikknivåomformeren i materiallisten ovenfor ikke er akkurat den samme som i Fritzing-biblioteket, men pin-outs er godt merket, bare på forskjellige steder. Vær sikker på at de riktige ledningene er koblet til de riktige pinnene på den faktiske logiske nivåkonverteren.
Denne komponenten er nødvendig for å konvertere 5V Arduino serielt signal til et 3.3V Raspberry Pi serielt signal og ikke skade Pi. Se bildet nedenfor for mer hjelp.
Faktisk logisk nivåomformerkabelLegg merke til at RX- og TX-ledningene krysser gjennom logisk nivåomformeren slik at TX fra Arduino går inn i RX til Pi. De neste trinnene innebærer å sette opp Pi, du kommer tilbake til å programmere Arduino senere.
Det er flere guider for å kjøpe og installere et OS på Raspberry Pi. Installer det nyeste Raspbian-operativsystemet. Følgende trinn beskriver å koble til eksterne enheter til Pi og konfigurere.
Tips: Hvis du trenger å vite mer om å blinke et SD-kort, for din Raspberry Pi, bare se vår veiledning: Slik blar du et SD-kort for Raspberry Pi og Slik installerer du NOOBS på en Raspberry Pi med en Mac.
sudo raspi-config
Raspberry Pi bruker sin serielle port som standard som en seriekonsoll. Enheten er oppkalt ttyAMA0. Når den støtter det, dumper oppstartsmeddelelser til denne enheten og setter opp en innloggingsøkt på den. For å kunne bruke den til å motta data fra Arduino må du deaktivere seriekonsollen og økten.
sudo pico / etc / inittab
#Spawn a getty on Raspberry Pi seriell linje # T0: 23: respawn: / sbin / getty -L ttyAMA0 115200 vt100
sudo pico /boot/cmdline.txt
Python-skriptet som vil fullføre mottakeren, utfører flere funksjoner.
For å utføre disse funksjonene må du installere forutsetningsmodulene for å installere serielle biblioteker og Xively-kommunikasjon.
sudo apt-install install python-seriell python-setuptools sudo easy_install pip sudo pip installere - pre xively-python mkdir ~ / scripts
chmod u + x wirelessnetwork.py
De neste trinnene vil ta deg gjennom oppsettet Internett av ting kontoer som gjør at du kan ta opp og reagere på dataene enheten din registrerer.
Xively er en tjeneste som samler data fra tingene. Du kan sette opp og registrere din ting eller Raspberry Pi med Xively, og data kan skyves fra Pi til skyen for å spore og utløse.
For å sende data til Xively the wirelessnetwork.py Skriptet må ha Feed ID og API-nøkler som du har spilt inn over. Rediger skriptet ved hjelp av pico eller ditt favorittredigeringsverktøy (ikke vi vs emacs kriger her, vær så snill). Se prøvestykket fra toppen av wirelessnetwork.py Skript for et eksempel på hvor du vil sette inn variablene. Vær også oppmerksom på at du kan bytte utgangene til skriptet ved å bytte DEBUG variabel til 0.
#some definerer for Xively FEED_ID = "FEED ID HERE" #enter ditt feed ID nummer her API_KEY = "API KEY HERE" #sett API-nøkkelen her # initialiser api klient api = xively.XivelyAPIClient (API_KEY) #Create kartlegging fra sender ID nummer til navn. Dette kan være en DB noen dag DEV = '1': 'Soverom', '2': 'Kjeller' DEBUG = Sant
Mens du redigerer skriptet, må du sørge for å redigere DEV variabel. Denne variabelen er en navnekartlegging for IDs at sensormodulene skal sendes. I dette eksemplet når sensormodulen med ID 1 sender en melding, vil skriptet sende til en Xively-kanal med det vennlige navnet Soverom i stedet for ID1. På samme måte, sensormodulen med ID 2 vil bli rapportert til kanalen Kjeller.
Raspberry Pi er nå klar til å motta data ved hjelp av wirelessnetwork.py manus. Arduino må programmeres med wirelessreceiver skisse.
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: 60.79: RH: 44.00
Nå som du har Arduino mottatt data fra en sensormodul, kan du teste skriptet på Pi for å sikre at det er korrekt å lese dataene og sende det til Xively. Åpne en SSH eller terminal økt til Pi for følgende trinn.
cd / home / pi / scripts / ./wirelessnetwork.py
Mottatt inngang: ID: 1: TS: 154075: TF: 73.39: RH: 39.00 Prosessering av data for: Soverom Posting temp fahrenheit for Soverom Opprette datastream Oppdatere Xively feed med verdi: 73.39 Oppgi relativ luftfuktighet for soverom Funnet eksisterende datastream Oppdatere Xively feed with value : 39.00 Mottatt inngang: ID: 2: TS: 522: TF: 60.79: RH: 44.00 Prosessering av data for: Kjeller Posting temp fahrenheit for Kjeller Opprett datastream Oppdatere Xively feed with value: 60.79 Publisering av relative fuktighet for kjelleren Funnet eksisterende datastream Oppdaterer Xively feed med verdi: 44,00
Skriptet vil skape strømmer for fuktighet og temperatur første gang den går. Eksemplet ovenfor viser skriptet som mottar meldingene, analyserer dem og legger dem til Xively vellykket. Bruk Kontroll-C å gå ut av skriptet før du fortsetter til neste trinn.
Bytt til nettleservinduene der du opprettet din Xive-konto og -enhet. De nye datastreams og litt informasjon om dem skal være tilgjengelige og se noe som bildet nedenfor.
Xively Channel oppdatertFordi Raspberry Pi kommer til å bli kjørt hodeløst, bør skriptet settes til å starte automatisk når enheten er drevet.
sudo -u pi /home/pi/scripts/wirelessnetwork.py &
ps øks | grep wirelessnetwork
Utgangen skal se ut som utsnittet nedenfor.
22000 pts / 1 S + 0:02 / usr / bin / python / home/pi/scripts/wirelessnetwork.py
Gratulerer! Du har gjennomgått en ganske lang opplæring og bygget et svært fleksibelt og utvidbart trådløst nettverk av sensorer. Du har utøvd en rekke ferdigheter som å bygge Arduino-baserte brødbrett, kobler en Arduino til Raspberry Pi, sender og mottar seriell data trygt mellom Arduino og Pi, og sender deg sensordata til Xives Internett av ting service.
Det er mye potensial for utvidelse eller videre eksperimentering med dette prosjektet. Du kan velge å bygge flere sensormoduler eller legge til sensorer til de eksisterende modulene. Formatet på radiobeskjeden er en enkel nøkkel: verdi par og python skriptet har kommentarer om hvordan du legger til forskjellige datatyper. Prøv å bygge et fast bolig eller bolig for senderen. Det er mye moro potensial for hvor å ta dette prosjektet.