Med gradnjo projektov, ki temeljijo na mikrokontrolerjih, obstajajo primeri, ko bo potrebna komunikacija med dvema napravama, bodisi v dveh smereh (kjer lahko obe napravi oddajata in sprejemata hkrati, kar imenujemo dupleks) bodisi v enostavni komunikaciji, kjer je komunikacija enosmerna (sprejemna naprava ne more oddajati in oddajna naprava ne more sprejemati).
Obstaja več možnosti za izvajanje katerega koli od zgoraj omenjenih načinov komunikacije, izbira določene možnosti pa je običajno odvisna od specifikacije projekta, zlasti od razdalje med napravami in stroškov. Za nizkoproračunsko komunikacijo med dvema mikrokontrolerjema kratkega dosega je eden izmed najbolj zaželenih medijev komunikacija z radiofrekvenčnimi frekvencami (RF) z uporabo 433MHz oddajnih in sprejemnih modulov. V tokratnem članku bomo preučili, kako uporabiti te module za vzpostavitev komunikacije med dvema Arduino ploščama.
433 MHz oddajni in sprejemni moduli
Ta vsebina je samo za naročnike
Ti moduli so zaradi nizke cene in enostavnosti uporabe zelo priljubljeni med izdelovalci in ljubitelji DIY. Uporabljajo se v vseh oblikah kratkega dosega, na osnovi simpleksa, komunikacije med dvema mikrokontrolerjema, pri čemer eden od mikrokontrolerjev služi kot oddajnik, drugi pa kot sprejemnik. Ti moduli so ASK RF moduli (Amplitude Shift Keying) ali OOK (Of Hook Keying), kar pomeni, da običajno ne oddajajo moči pri oddajanju logične “ničle” in kot taki porabijo bistveno manj energije. Zaradi te nizke porabe energije so zelo uporabni pri izvedbah, ki se napajajo iz baterij.
Nekatere specifikacije oddajnika in sprejemnika so navedene spodaj.
Oddajni modul:
- Delovna napetost: 3V – 12V
- Delovni tok: manj kot 40mA max in min 9mA
- Resonančni način: (SAW)
- Modulacijski način: ASK
- Delovna frekvenca: 433,92MHz
- Izhodna moč: 25mW
- Frekvenčna napaka: + 150kHz (max)
- Hitrost: manj kot 10Kbps
- Doseg: 90m (na odprtem prostoru)
Sprejemni modul:
- Delovna napetost: 5,0 VDC + 0,5 V
- Delovni tok: ≤5,5 mA max
- Modulacijski način: OOK / ASK
- Delovna frekvenca: 433,92 MHz
- Širina pasu: 2 MHz
- Občutljivost: presega –100dBm (50Ω)
Za prikaz enostavnosti dodajanja brezžičnih zmogljivosti projektom z uporabo teh modulov bomo zgradili vremensko postajo z oddaljenim prikazom podatkov. Vremenska postaja bo sestavljena predvsem iz senzorja temperature in vlažnosti ter 433 MHz oddajniškega modula. Naprava bo izmerila temperaturo in vlažnost okolja ter jo preko RF-oddajnika poslala na prikazovalno enoto (sprejeto prek RF-sprejemniškega modula) na ST7735 1,8-palčnem TFT LCD zaslonu.
Potrebne komponente
Za izdelavo tega projekta so potrebne naslednje komponente:
- Arduino Uno
- Komplet 433 MHz oddajnik in sprejemnik
- DHT22
- 1,8-palčni barvni TFT
- Majhna prototipna plošča
- Žice
- Napajalnik ali baterija
- Jumper žice
- Držalo za baterijo
Električna shema
Za ta projekt obstajata dve shemi. Prva je namenjena oddajniku, ki iz okolice pridobiva temperaturo in vlago ter te podatke pošlje drugi polovici projekta – sprejemniku, ki podatke prikaže na zaslonu.
Električna shema oddajnika
Oddajniško vezje je sestavljeno iz Arduina, senzorja temperature in vlage DHT22 ter 433 MHz RF-oddajniškega modula. Za napajanje Arduina, ko je odklopljen od računalnika, lahko dodate baterijo. Priključite komponente, kot je prikazano na sliki 4.
Zaradi jasnosti so povezave med Arduinom in drugimi komponentami prikazane spodaj.
Arduino oddajnik:
- 5V – VCC
- 12 – Podatki
- GND – GND
Arduino DHT22:
- 5V – VCC
- D4 – Signal
- GND – GND
Električna shema za sprejemnik
Sprejemnik je sestavljen iz 433 MHz RF-sprejemniškega modula, 1,8-palčnega barvnega TFT zaslona ST7735 in Arduino Uno. Priključite komponente, kot je prikazano na sliki 5.
Zaradi razlike v razporedu priključkov zaslona od enega proizvajalca do drugega in zaradi jasnosti je povezava med Arduinom in drugimi komponentami, ki sestavljajo sprejemnik, prikazana spodaj:
1,8-palčni TFT – Arduino:
- LED – 3,3V
- SCK – D13
- SDA – D11
- DC – D9
- Ponastavitev – D8
- CS – D10
- GND – GND
- VCC – 5V
Arduino – 433 MHz Rx modul:
- 5V – VCC
- D12 – PODATKI
- GND – GND
Programska oprema
Za boljše razumevanje uporabe ST7735 1,8-palčnega barvnega zaslona z Arduinom si oglejte eno od prejšnjih vadnic avtorja o povezovanju zaslona z Arduino. Z vsemi opravljenimi povezavami lahko zdaj nadaljujemo s pisanjem kode za ta projekt.
Tako kot smo morali zgraditi dve napravi, bomo za ta projekt napisali dve različni kodi. Ena od kod je za nadzor oddajnika, druga pa za nadzor sprejemnika. Za lažje pisanje kode za ta članek bomo uporabili knjižnice, ki olajšajo krmiljenje vsakega dela projekta. Pri RF modulih bomo za pošiljanje in prejemanje podatkov uporabljali navidezno žično knjižnico, za prikaz prejetih podatkov pa knjižnice Adafruit GFX in Adafruit ST7735 za enostavno posodobitev LCD zaslona ST7735. Da bi ga omejili, bomo uporabili knjižnico senzorjev Adafruit DHT za enostavno pridobivanje podatkov o temperaturi in vlažnosti iz senzorja DHT22.
Algoritem za kodo je preprost. Za oddajnik pridobite vrednosti temperature in vlažnosti iz DHT22 in jih pošljite prek RF oddajnika na sprejemnik. Za sprejemnik pridobite vrednost temperature in vlažnosti, ki jo oddajnik pošlje z RF-sprejemniškim modulom in prikazovalnikom na LCD-ju. Kot ponavadi bom naredil kratko razlago kode za dve polovici projekta, začenši z oddajnikom .
Programska koda oddajnika
Najprej vključimo knjižnice, ki bodo uporabljene znotraj kode:
S1
Po tem določimo priključek Arduina, na katerega je povezan naš DHT, in določimo tudi vrsto uporabljenega DHT.
S2
Nato navedemo Arduino priključek, ki bo uporabljen kot naš priključek za prenos podatkov (ki je povezan z podatkovnim priključkom RF oddajniškega modula) in ustvarimo paket “struct”, ki bo uporabljen za pošiljanje podatkov.
S3
Nato določimo vrsto ohišja in ustvarimo primer razreda DHT za naslavljanje DHT senzorja.
S4
Po tem se premaknemo na funkcijo void setup (), kjer nastavimo TX priključek in druge parametre za inicializacijo RF modula.
S5
Naslednja je funkcija void loop (), kjer z uporabo funkcije branja senzorja pridobimo temperaturo in vlago. Po pridobitvi podatkov se pošljejo s funkcijo vw_send (). Izvede se čas zakasnitve 2000 ms, da se ustvari interval med podatki in zagotovi, da se eden pošlje pred drugim.
S6
Celotna koda je na voljo v viru [1] v razdelku za prenos.
Programska koda sprejemnika
Kot ponavadi začnemo z vključitvijo knjižnic, ki bodo uporabljene.
S7
Nato deklariramo Arduino priključke, na katere so priključeni LCD priključki.
S8
Nato deklariramo Arduino priključek (receive_pin), na katerega je priključen podatkovni priključek modula RF sprejemnika, in ustvarimo spremenljivke char za vrednosti temperature in vlažnosti.
S9
Nato kreiramo strukturni paket, podoben tistemu znotraj kode oddajnika.
S10
Po tem se premaknemo na funkcijo void setup (), kjer inicializiramo zaslon in RF sprejemniški modul, ki nastavi hitrost bitov in zažene sprejemnik.
Nato sledi funkcija void loop (). Funkcijo zaženemo s preverjanjem, ali je bilo s funkcijo vw_have_message () prejeto sporočilo. Če je bilo prejeto sporočilo, iz njega pridobimo podatke o temperaturi in vlažnosti ter jih prikažemo na LCD-prikazovalniku.
S11
Koda vključuje tudi funkcije, s katerimi so bili rezultati prikazani na uporabniku bolj prijazen način.
S12
Celotna koda sprejemnika je na voljo na [1], kjer je priložen v zip datoteki v razdelku za prenos tega projekta.
Delovanje
Naložite ustrezno kodo v sprejemni in oddajni Arduino. Obe Arduino plošči lahko napajate z baterijskim paketom. Nekaj minut po vklopu naprav bi se na LCD-prikazovalniku morali prikazati podatki o temperaturi in vlažnosti. Območje obsega delovanja oddajnika in sprejemnega modula 433 MHz je na splošno majhno, vendar bi lahko s spajkanjem zunanjih anten njihov domet še povečali.
Vir:
2021-294