Bežični termometar koji koristi 433 MHz RF vezu pomoću Arduina

Isprobajte Naš Instrument Za Uklanjanje Problema





U ovom ćemo postu izraditi bežični termometar zasnovan na Arduinu koji može nadzirati sobnu temperaturu i vanjsku temperaturu okoline. Podaci se prenose i primaju putem RF veze od 433 MHz.

Korištenje 433MHz RF modula i DHT11 senzora

Predloženi projekt koristi Arduino kao mozak i srce kao Modul odašiljača / prijemnika od 433 MHz .



Projekt je podijeljen u dva odvojena kruga, onaj s prijemnikom od 433 MHz, LCD zaslonom i DHT11 senzorom koji će biti smješteni u sobi, a također mjeri sobnu temperaturu .

Drugi krug ima odašiljač od 433 MHz, DHT11 senzor za mjerenje vanjske temperature okoline. Oba kruga imaju po jedan arduino.



Krug smješten unutar prostorije prikazat će očitanja unutarnje i vanjske temperature na LCD-u.

Pogledajmo sada modul odašiljača / prijemnika od 433 MHz.

Modul odašiljača / prijemnika od 433 MHz.

Moduli odašiljača i prijamnika prikazani su gore, on je sposoban za jednostavnu komunikaciju (jedan smjer). Prijemnik ima 4 pina Vcc, GND i DATA pinova. Postoje dva DATA pina, isti su i podatke možemo iznijeti s bilo kojeg od dva pina.

Odašiljač je puno jednostavniji, ima samo Vcc, GND i DATA ulazni pin. Moramo spojiti antenu na oba modula što je opisano na kraju članka, bez da se antenska komunikacija između njih neće uspostaviti dulje od nekoliko centimetara.

Sada da vidimo kako ovi moduli komuniciraju.

Sada pretpostavimo da primjenjujemo impuls takta od 100Hz na pin za unos podataka odašiljača. Prijemnik će primiti točnu kopiju signala na podatkovni pin prijemnika.

To je jednostavno zar ne? Da ... ali ovaj modul radi na AM i osjetljiv je na buku. Iz autorovog promatranja ako je pin podataka odašiljača ostao bez ikakvog signala dulje od 250 milisekundi, izlazni pin podataka prijemnika proizvodi slučajne signale.

Dakle, prikladan je samo za nekritični prijenos podataka. Međutim, ovaj projekt vrlo dobro funkcionira s ovim modulom.

Krenimo sada na sheme.

PRIJAMNIK:


priključak arduino na LCD zaslon. 10K potenciometar

Gornji sklop je spoj arduino-LCD zaslona. Za podešavanje kontrasta LCD zaslona predviđen je 10K potenciometar.

Bežični termometar koji koristi RF vezu 433 MHz i Arduino

Iznad je sklop prijemnika. LCD zaslon trebao bi biti spojen na ovaj arduino.

Molimo preuzmite sljedeće datoteke knjižnice prije sastavljanja koda

Radio voditelj: github.com/PaulStoffregen/RadioHead

Biblioteka DHT senzora: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Program za prijamnik:

//--------Program Developed by R.Girish-----//
#include
#include
#include
#include
#define DHTxxPIN A0
LiquidCrystal lcd(12,11,5,4,3,2)
RH_ASK driver(2000, 7, 9, 10)
int ack = 0
dht DHT
void setup()
{
Serial.begin(9600)
lcd.begin(16,2)
if (!driver.init())
Serial.println('init failed')
}
void loop()
{
ack = 0
int chk = DHT.read11(DHTxxPIN)
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack = 1
lcd.setCursor(0,0)
lcd.print('INSIDE:')
lcd.print('NO DATA')
delay(1000)
break
}
if(ack == 0)
{
lcd.setCursor(0,0)
lcd.print('INSIDE:')
lcd.print(DHT.temperature)
lcd.print(' C')
delay(2000)
}
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN]
uint8_t buflen = sizeof(buf)
if (driver.recv(buf, &buflen))
{
int i
String str = ''
for(i = 0 i {
str += (char)buf[i]
}
lcd.setCursor(0,1)
lcd.print('OUTSIDE:')
lcd.print(str)
Serial.println(str)
delay(2000)
}
}
//--------Program Developed by R.Girish-----//

Odašiljač:

Bežični odašiljač termometra

Gore je shematski prikaz odašiljača, koji je prilično jednostavan kao prijemnik. Ovdje koristimo drugu arduino ploču. DHT11 senzor će osjetiti vanjsku temperaturu okoline i poslati natrag na modul prijemnika.

Udaljenost između odašiljača i prijamnika ne smije biti veća od 10 metara. Ako postoje bilo kakve prepreke, domet prijenosa može se smanjiti.

Program za odašiljač:

//------Program Developed by R.Girish----//
#include
#include
#define DHTxxPIN A0
#include
int ack = 0
RH_ASK driver(2000, 9, 2, 10)
dht DHT
void setup()
{
Serial.begin(9600)
if (!driver.init())
Serial.println('init failed')
}
void loop()
{
ack = 0
int chk = DHT.read11(DHTxxPIN)
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack = 1
const char *temp = 'NO DATA'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
break
}
if(ack == 0)
{
if(DHT.temperature == 15)
{
const char *temp = '15.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 16)
{
const char *temp = '16.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 17)
{
const char *temp = '17.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 18)
{
const char *temp = '18.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 19)
{
const char *temp = '19.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 20)
{
const char *temp = '20.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 21)
{
const char *temp = '21.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 22)
{
const char *temp = '22.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 23)
{
const char *temp = '23.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 24)
{
const char *temp = '24.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 25)
{
const char *temp = '25.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 26)
{
const char *temp = '26.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 27)
{
const char *temp = '27.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 28)
{
const char *temp = '28.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 29)
{
const char *temp = '29.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 30)
{
const char *temp = '30.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 31)
{
const char *temp = '31.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 32)
{
const char *temp = '32.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 33)
{
const char *temp = '33.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 34)
{
const char *temp = '34.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 35)
{
const char *temp = '35.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 36)
{
const char *temp = '36.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 37)
{
const char *temp = '37.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 38)
{
const char *temp = '38.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 39)
{
const char *temp = '39.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 40)
{
const char *temp = '40.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 41)
{
const char *temp = '41.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 42)
{
const char *temp = '42.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 43)
{
const char *temp = '43.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 44)
{
const char *temp = '44.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
delay(500)
if(DHT.temperature == 45)
{
const char *temp = '45.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 46)
{
const char *temp = '46.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 47)
{
const char *temp = '47.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 48)
{
const char *temp = '48.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 49)
{
const char *temp = '49.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 50)
{
const char *temp = '50.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
delay(500)
}
}
//------Program Developed by R.Girish----//

Izgradnja antene:

Ako gradite projekte koristeći ovo Moduli od 433 MHz , strogo slijedite donje konstrukcijske detalje radi dobrog raspona.

RF antena od 433 MHz

Upotrijebite jednožilnu žicu koja bi trebala biti dovoljno čvrsta da podupire ovu strukturu. Također možete koristiti izoliranu bakrenu žicu s izolacijom uklonjenom na dnu za lemljenje. Napravite dva od njih, jedan za odašiljač i drugi za prijemnik.

Autorski prototip bežičnog termometra koji koristi Arduino i 433 MHz RF vezu:

Prototip bežičnog termometra koji koristi RF vezu 433 MHz i Arduino


Prethodno: Protukorozijske sonde za regulator nivoa vode Dalje: L293 Četverostruki polu-H upravljački program IC Pinout, tablica podataka, krug aplikacije