1. decembra, 2019

Arduino brezžična vremenska postaja

ha 300x80 - Arduino brezžična vremenska postajaHackster Inc.
Avtor: Nick Koumaris
2019_280_39

V tem članku vam bom predstavil kako zgraditi brezžično vremensko postajo z velikim 3,2 palčnim barvnim TFT zaslonom in Arduino ploščico.

Gradnja brezžične vremenske postaje bo odlična učna izkušnja. Ko boste končali ta projekt, boste bolje razumeli kako brezžična komunikacije deluje, kako delujejo senzorji in kako zmogljiva je lahko Arduino platforma. S tem projektom kot osnovo in pridobljenimi izkušnjami boste lahko zgradili tudi bolj kompleksne projekte v prihodnosti.

Hardverske komponente Količina
Arduino Due ali Arduino Mega 1 kos
3,2“ TFT HX8357C displej 1 kos
DS3231 Real Time Clock modul 1 kos
DHT22 Temperaturni sensor 1 kos
SparkFun Transceiver ploščico – nRF24L01+ 1 kos
Razvojno ploščo 1 kos
Moške letvice 36 priključek (0.1“) 7 pinov
Povezovalne žice nekaj kosov
Arduino Nano R3 1 kos
Xiaomi Powerbank 1 kos

Vremenska postaja je naprava, ki zbira podatke o vremenu in okolju s pomočjo razlićnih senzorjev. Merimo lahko sledeče spremenljivke:

  • Temperatura
  • Vlaga
  • Veter
  • Zračni tlak
  • UV indeks
  • Dež

V vremenski postaji, ki jo bomo zgradili, bomo merili temperaturo in vlago na dveh lokacijah, hkrati pa bomo prikazovali trenuten čas. Gradnja vremenske postaje je izjemno enostavna. Vendar se postavi vprašanje, ali lahko vsak sam zgradi vremensko postajo, ki bo primerljiva s komercialnimi vremenskimi postajami? Odgovor je DA! S pomočjo odprtokodnih programov in hardvera si lahko vsak enostavno naredi impresivno vremensko postajo!

Projekt je sestavljen iz dveh delov: oddajnika in sprejemnika.

Oddajnik je sestavljen iz termometra in merilnika vlage. Izmerjene podatke brezžično pošilja v sprejemnik. Sprejemnik sprejme te podatke in jih prikaže na velikem barvnem TFT displeju.

Zgradimo torej ta projekt!
1. korak: nabavite vse potrebne komponente
Komponente, ki jih potrebujemo za izdelavo projekta:

Cena vseh komponent znaša približno 40€. To ceno lahko še dodatno znižate za 5€, če namesto Arduino Due uporabite Arduino Mega. Jaz sem izbral Arduino Due zato, ker sem jo že imel, je zelo hitra plošča in ima veliko spomina. To bo zelo koristno kasneje, če bomo dodajali več funkcionalnosti v projekt.

2. korak: senzor za merjenje temperature in vlage – DHT22
DHT22 je zelo popularen senzor temperature in vlage. Je poceni, enostaven za uporabo in specifikacije nakazujejo dobro preciznost in natančnost.
DHT senzorji so narejeni iz dveh delov: kapacitivnega senzorja vlage in termistorja. Znotraj senzorja se nahaja tudi čip, ki opravlja analogno-digitalno pretvorbo in na svojem izhodu generira digitalni signal, ki vsebuje informacijo o izmerjeni temperaturi in vlagi. Digitalni signal precej enostavno preberemo z uporabo mikrokontrolerja.

Karakteristike DHT22:

  • Je poceni
  • Na
  • Poraba znaša največ 2,5mA med pretvorbo
  • Merjenje vlage v razponu od 0-100% pri 2-5% točnosti
  • Merjenje temperature od -40 do 125°C pri ±0.5°C točnosti
  • Meritve so počasne
  • Povezava na Arduino je izjemno enostavna. Priključek na senzorju, ki je označen s + povežemo na + 5V oziroma 3,3V izhod na Arduino. Priključek na senzorju označen z – povežemo na maso (GROUND). Na koncu povežemo priključek OUT na senzorju na kateri koli digitalni priključek na Arduino plošči.
  • Če želimo, da bo naš program tudi deloval z DHT22 senzorjem, potem moramo uporabiti tudi DHT knjižnico, ki jo najdemo na spodnjem naslovu: https://github.com/adafruit/DHT-sensor-library

3. korak: DS3231 modul ure realnega časa
DS3231 je modul ure realnega časa (RTC). Z uporabo baterije lahko zagotavlja točen čas več let, saj je njegova poraba minimalna.
DS3231 je poceni in izjemno točen I2C RTC z integriranim temperaturno kompenziranim kristalnim oscilatorjem in kristalom. Vezje vsebuje vhod za baterijo in zagotavlja točen čas za primer, ko zmanjka glavne napajalne napetosti. Integracija kristalnega resonatorja zagotavlja natančnost v daljšem času hkrati pa tudi zmanjšuje število potrebnih komponent pri proizvodnji.

RTC zagotavlja informacijo o sekundah, minutah, urah, dnevu, datumu, mesecu in letu. Datum in konec meseca se avtomatično nastavljata za mesece, ki imajo manj kot 31 dni vključno s prestopnimi leti. Ura deluje bodisi v 24 ali 12-urnem formatu z AM/PM indikatorjem. Dva programabilna alarma in programabilen izhod s pravokotnim signalom so omogočeni. Naslov in podatki se prenašajo preko I2C vodila dvosmerno.

Cena modula je izjemno nizka: stane samo 2€ vključno z baterijo! Ta modul bomo uporabili zato, da bomo imeli točen čas na naši vremenski postaji.

4. korak: NRF24L01+: brezžični moduli
RF24L01 modul je poceni dvosmerni VF transiver, ki stane manj kot 3€! Deluje na 2,4 GHz področju in zmore prenašati do 2Mbits! Impresivno kajne?
Modul uporablja SPI vmesnik za komunikacijo z Arduino, zato ga je zelo lahko uporabiti. Povezati moramo 7 odosmih priključkov modula tako, da bodo delovali z Arduino ploščo.

Na žalost modula ne moremo enostavno vtakniti v razvojno ploščo, zato bomo morali uporabiti povezovalne žice, ki imajo moške in ženske konektorje na eni in drugi strani. Priključek št. 1 je GND, ki ga je potrebno priključiti na Arduino GND. Naslednji priključek je Vcc, ki ga je potrebno priključiti na 3,3V priključek na Arduino Uno. Bodite pozorni! Ne priključite modula na 5V, saj ga boste s tem uničili!

Naslednji priključek je CE, ki ga lahko priključite na kateri koli digitalni priključek. V tem primeru sem ga priključil na digitalni priključek 7. Četrti priključek je CS, ki ga ravno tako lahko priključimo na kateri koli digitalni priključek. Jaz sem ga priključil na digitalni priključek 8. Naslednji je SCK priključek, ki ga priključite na digitalni priključek 13 na Arduino Uno. Naslednji priključek je MOSI, ki se ga priključi na digitalni priključek 11 in zadnji MISO, ki se ga priključi na digitalni priključek 12. To je vse!

Da bi bilo vse še bolj enostavno uporabimo Arduino knjižnico, ki jo najdemo na tem naslovu: https://github.com/TMRh20/RF24

V kolikor še niste uporabljali NRF24L01+ modulov si oglejte video na koncu tega članka zato, da bi videli, kako ga uporabiti pri gradnji enostavnih projektov. Video vam bo pomagal razumeti kako modul deluje.

5. korak: gradnja oddajnika

Najprej zgradimo oddajnik, kar je zelo enostavno. Za oddajnik potrebujemo:

  • Arduino Nano
  • DHT22 senzor
  • NRF24L01+ brezžični modul
  • Razvojno ploščo
  • Nekaj povezovalnih žic

Povežimo izhodni priključek senzorja na digitalni priključek 4 na Arduino Nano. Povežimo GND in Vcc in že smo pripravljeni. Zdaj moramo samo še povezati NRF24L01 brezžični modul.
Povežite ga tako, kot je prikazano v videu, ki sem ga omenil. To je to, vaš oddajnik je pripravljen, pojdimo naprej k sprejemniku.

6. korak: zgradimo sprejemnik

Za gradnjo sprejemnika bomo potrebovali sledeče:

  • Arduino Due ali Arduino Mega
  • DS3231 RTC modul
  • DHT22 senzor temperaturein vlage
  • NRF24L01+ brezžični modul
  • 3,2″barvni TFT displej
  • Razvojno ploščo
  • 7 priključek konektor
  • Nekaj povezovalnih žic

Najprej ukrivimo povezovalni konektor in dva pina vtaknemo v Arduino Due. Potrebujemo ju za GND in +3,3V. Nadalje potrebujemo dva na I2C priključkih. Potem potrebujemo še 3 digitalne priključke od 6 do 8. Prispajkati moramo tri žice na hardverske SPI priključke na Arduino Due. Potrebujemo MOSI, MISO in SCK. Pazljivo preverite povezovalno shemo. Povežite žice na konektorje in že smo pripravljeni na priklop displeja.

Povezovanje DS3231:

  • VCC priključek na Arduino 3,3V izhod
  • GND priključek na Arduino GND
  • SDA (Serial Data Line) priključek na Arduino SDA priključek
  • SCL (Serial Clock Line) priključek na Arduino SCL priključek

Povezovanje the DHT22 Sensor:

  • VCC priključek na Arduino 3,3V izhod
  • GND priključek na Arduino GND in
  • izhodni priključek na Arduino digitalni priključek 8

Povezovanje the NRF24L01 modula:

  • GND priključek na Arduino GND
  • VCC priključek na Arduino 3,3V
  • 3. priključek na Arduino digitalni priključek 6
  • 4. priključek na Arduino digitalni priključek 7
  • 5. priključek na SCK priključek, ki smo ga prispajkali
  • 6. priključek na MOSI priključek, ki smo ga prispajkali
  • 7. priključek na MISO priključek, ki smo ga prispajkali
  • 7. korak: program oddajnika

Najprej si moramo naložiti RF24 knjižnico, da bo naše življenje lažje, ko bomo delali z NRF23L01 brezžičnimi moduli. Potrebujemo tudi DHT knjižnico za DHT22 senzor.

DHT22 knjižnico najdemo na naslovu: https://github.com/adafruit/DHT-sensor-library

Najprej si poglejmo kodo oddajnika. Program pošilja enostavne podatkovne strukture, ki vsebujejo dve spremenljivki: temperaturo in vlažnost.
Da bi vzpostavili komunikacijsko povezavo, moramo vzpostaviti »kanal« med dvema moduloma. Ta kanal potrebuje naslov. Oba modula morata brati in pisati na isti naslov, da bosta lahko komunicirala. Torej moramo najprej definirati naslov. Naslov definiramo kot »0«. Nato definiramo VF kanal, na katerem želimo komunicirati z drugimi moduli. NRF24L01 modul podpira do 126 različnih VF kanalov. Oba modula morata uporabljati isti VF kanal zato, da lahko medsebojno komunicirata. V našem primeru sem uporabil VF kanal 115. Nato sem definiral maksimalno izhodno moč modula. Res je, da ta nastavitev pomeni večjo porabo energije, vendar pa hkrati tudi poveča doseg komunikacije. Nato definiramo podatkovno hitrost, kar sem nastavil na 250 Kbps, kar je najnižja možna hitrost s katero lahko zagotovim dober doseg. Naslednje je, da odprem komunikacijski kanal, na katerega bom pisal kasneje.

V programski zanki beremo vrednosti temperature in vlažnosti s senzorjev, shranimo te podatke v podatkovno strukturo in jo pošljemo na kanal. To je to. Program FU361QHIQFCEYSE.inonajdete na spletni strani tega projekta.

8. korak: program sprejemnika
Poglejmo si zdaj kodo sprejemnika. Potrebovali bomo 4 knjižnice. Najprej naložimo knjižnico za displej iz naslova:  https://github.com/Bodmer/TFT_HX8357_Due
Ko smo to naredili, moramo odpreti datoteko User_Setup.h. Zakomentirajte 13. in odkomentirajte 14. vrstico, saj ima displej, ki ga uporabljamo, HX8357C krmilnik. Zdaj lahko nadaljujemo s tremi ostalimi knjižnicami. Potrebujemo eno knjižnico za uro realnega časa, eno za DHT22 senzor in eno za brezžični modul.:

Poglejmo si program. Najprej moramo nastaviti čas na RTC s funkcijo  setRTCTname , odkomentirajte setRTCTname v vrstici 54 in naložite program v Arduino. Zdaj je čas določen. Nato moramo zakomentirati setRTCTname in ponovno naložiti Arduino program.

Program sprejemnika deluje tako: v funkciji nastavitev nastavimo vse senzorje in module ter na displeju prikažemo uporabniški vmesnik. Nato v glavni zanki nenehno preverjamo sprejete brezžične podatke. V kolikor se pojavi nov podatek, shranimo datum in spremenljivko ter oboje prikažemo na displeju. Temperaturo in vlažnost beremo vsako minuto in displej osvežimo le v primeru novih podatkov. Na ta način se znebimo utripanja zaslona. Pripravil sem tudi verzijo programa za prikaz temperature v stopinjah Fahrenheit. Obe verziji lahko najdete na spletni strani tega projekta:

  • F053BTXIQFCEZ09.ino
  • FNV3X4LIQFCEZ0C.ino

9. korak: testiranje projekta
Zadnji korak je priklop na napajanje in pregled, če vse deluje kot pričakovano. Če je tako, potem boste na vrhu displeja videli trenutni datum in uro. Na dnu displeja boste videli temperaturo in vlažnost tako iz oddaljenih kot lokalnih senzorjev.
V kolikor podatki niso prikazani iz oddaljenih senzorjev, premaknite oddajnik bližje – morda je izven dosega. V kolikor problem ostaja, preverite vse povezave še enkrat – gotovo je tukaj nekaj narobe.

Zaključek
Kot lahko vidite je projekt odlična demonstracija česa je odprtokodni projekt zmožen. V nekaj urah boste lahko zgradili ta impresiven projekt! Seveda je to samo začetek. Projektu lahko dodamo veliko novih funkcij. Kmalu bom dodal tipko, s katero bom prikazoval grafe in različne načine delovanja. Lahko dodamo tudi več senzorjev, shranjevanje podatkov, spletno povezavo in še veliko drugega. Projekt si lahko ogledate tudi na mojem Youtube kanalu.

Program
Program se nahaja na Github:https://github.com/adafruit/DHT-sensor-library
Arduino knjižnica za DHT11, DHT22, itd več branja na:https://learn.adafruit.com/dht

Vir:https://www.hackster.io/nickthegreek82/arduino-wireless-weather-station-dad470

www.hackster.io
Tags: