Termometru fără fir folosind 433 MHz RF Link folosind Arduino

Încercați Instrumentul Nostru Pentru Eliminarea Problemelor





În acest post vom construi un termometru wireless pe bază de Arduino care poate monitoriza temperatura camerei și temperatura ambientală externă. Datele sunt transmise și primite prin intermediul legăturii RF de 433 MHz.

Folosind modulul RF de 433 MHz și senzorul DHT11

Proiectul propus utilizează Arduino ca creier și inima ca Modul emițător / receptor 433 MHz .



Proiectul este împărțit în două circuite separate, cel cu receptor de 433 MHz, afișaj LCD și senzor DHT11 care vor fi plasate în interiorul camerei și, de asemenea, măsoară temperatura camerei .

Un alt circuit are un transmițător de 433 MHz, Senzor DHT11 pentru măsurarea temperaturii mediului exterior. Ambele circuite au câte un arduino fiecare.



Circuitul plasat în interiorul camerei va afișa citirile de temperatură interne și externe pe ecranul LCD.

Acum, să aruncăm o privire la modulul transmițător / receptor de 433 MHz.

Modul emițător / receptor 433 MHz.

Modulele emițător și receptor sunt prezentate mai sus, fiind capabil de comunicații simplex (într-un singur sens). Receptorul are 4 pini Vcc, GND și pini DATA. Există doi pini DATA, aceiași și putem scoate datele de la oricare dintre cei doi pini.

Transmițătorul este mult mai simplu, are doar pinul de intrare Vcc, GND și DATA. Trebuie să conectăm o antenă la ambele module, care este descrisă la sfârșitul articolului, fără ca antena să comunice între ele nu va fi stabilită peste câțiva centimetri.

Acum să vedem cum comunică aceste module.

Acum presupunem că aplicăm impulsul de ceas de 100Hz pinului de intrare de date al emițătorului. Receptorul va primi replica exactă a semnalului la pinul de date al receptorului.

Este simplu, nu? Da ... dar acest modul funcționează pe AM și este susceptibil la zgomot. Din observația autorului, dacă pinul de date al emițătorului a rămas fără niciun semnal pentru mai mult de 250 de milisecunde, pinul de ieșire a datelor receptorului produce semnale aleatorii.

Deci, este potrivit numai pentru transmisiile de date non-critice. Cu toate acestea, acest proiect funcționează foarte bine cu acest modul.

Acum să trecem la schemă.

RECEPTOR:


conexiune arduino la afișaj LCD. Potențiometru 10K

Circuitul de mai sus este o conexiune de afișare arduino la LCD. Potențiometrul de 10K este prevăzut pentru reglarea contrastului afișajului LCD.

Termometru fără fir folosind 433 MHz RF Link și Arduino

Cel de mai sus este circuitul receptorului. Afișajul LCD ar trebui să fie conectat la acest arduino.

Vă rugăm să descărcați următoarele fișiere de bibliotecă înainte de a compila codul

Radio Head: github.com/PaulStoffregen/RadioHead

Biblioteca senzorului DHT: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Program pentru receptor:

//--------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-----//

Transmiţător:

Transmițător termometru fără fir

Cele de mai sus sunt schema pentru Transmițător, care este destul de simplă ca receptor. Aici folosim o altă placă arduino. Senzorul DHT11 va detecta temperatura mediului exterior și se va trimite înapoi la modulul receptor.

Distanța dintre emițător și receptor nu trebuie să depășească 10 metri. Dacă există obstacole între ele, raza de transmisie se poate reduce.

Program pentru emițător:

//------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----//

Construcția antenei:

Dacă construiți proiecte folosind acest lucru Module de 433 MHz , urmați detaliile de construcție de mai jos strict pentru o gamă bună.

Antenă RF de 433 MHz

Utilizați un fir cu un singur miez care ar trebui să fie suficient de robust pentru a susține această structură. De asemenea, puteți utiliza sârmă de cupru izolată cu izolație îndepărtată în partea de jos pentru îmbinarea prin lipire. Faceți două dintre acestea, unul pentru emițător și altul pentru receptor.

Prototip de termometru fără fir al autorului folosind Arduino și 433 MHz RF Link:

Prototip de termometru wireless folosind 433 MHz RF Link și Arduino


Precedent: Sonde anticorozive pentru regulatorul de nivel al apei Următorul: L293 Quad Half-H Driver IC Pinout, Foaie de date, Circuit de aplicație