Bezvadu termometrs, izmantojot 433 MHz RF saiti, izmantojot Arduino

Izmēģiniet Mūsu Instrumentu Problēmu Novēršanai





Šajā ziņojumā mēs izveidosim Arduino bāzes bezvadu termometru, kas var kontrolēt istabas temperatūru un ārējo apkārtējās vides temperatūru. Dati tiek pārraidīti un saņemti, izmantojot 433 MHz RF saiti.

Izmantojot 433MHz RF moduli un DHT11 sensoru

Ierosinātais projekts izmanto Arduino kā smadzenes un sirdi kā 433 MHz raidītāja / uztvērēja modulis .



Projekts ir sadalīts divās atsevišķās ķēdēs, vienā ar 433 MHz uztvērēju, LCD displeju un DHT11 sensoru, kas tiks izvietoti telpā, kā arī mēra istabas temperatūru .

Citā shēmā ir 433MHz raidītājs, DHT11 sensors ārējās apkārtējās temperatūras mērīšanai. Abās shēmās ir pa vienam arduino.



Telpā ievietotā shēma uz LCD parādīs iekšējās un ārējās temperatūras rādījumus.

Tagad apskatīsim 433 MHz raidītāja / uztvērēja moduli.

433 MHz raidītāja / uztvērēja modulis.

Raidītāja un uztvērēja moduļi ir parādīti virs tā, lai tas varētu veikt vienkāršo komunikāciju (vienā virzienā). Uztvērējam ir 4 tapas Vcc, GND un DATA. Ir divi DATA tapas, tie ir vienādi, un mēs varam izvadīt datus no jebkuras no divām tapām.

Raidītājs ir daudz vienkāršāks, un tam ir tikai Vcc, GND un DATA ievades tapa. Mums abiem moduļiem ir jāpievieno antena, kas aprakstīta raksta beigās, bez antenas sakari starp tiem netiks izveidoti tālāk par pāris collām.

Tagad redzēsim, kā šie moduļi sazinās.

Tagad pieņemsim, ka raidītāja datu ievades tapai tiek piemērots pulksteņa impulss 100Hz. Uztvērējs saņems precīzu signāla kopiju uztvērēja datu spraudnī.

Tas ir vienkārši labi? Jā ... bet šis modulis darbojas AM un ir uzņēmīgs pret troksni. Pēc autora novērojuma, ja raidītāja datu tapa atstāja bez signāla ilgāk par 250 milisekundēm, uztvērēja datu izvades tapa rada nejaušus signālus.

Tātad, tas ir piemērots tikai nekritiskai datu pārraidei. Tomēr šis projekts ļoti labi darbojas ar šo moduli.

Tagad pārejam pie shēmām.

UZŅĒMĒJS:


arduino uz LCD displeja savienojumu. 10K potenciometrs

Iepriekš minētā shēma ir arduino līdz LCD displeja savienojums. LCD displeja kontrasta pielāgošanai ir paredzēts 10K potenciometrs.

Bezvadu termometrs, izmantojot 433 MHz RF Link un Arduino

Iepriekš ir uztvērēja ķēde. LCD displejam jābūt savienotam ar šo arduino.

Pirms koda apkopošanas, lūdzu, lejupielādējiet šos bibliotēkas failus

Radio vadītājs: github.com/PaulStoffregen/RadioHead

DHT sensoru bibliotēka: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Uztvērēja programma:

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

Raidītājs:

Bezvadu termometra raidītājs

Iepriekš minētais ir raidītāja shēma, kas ir diezgan vienkārša kā uztvērējs. Šeit mēs izmantojam citu arduino dēli. DHT11 sensors uztvers apkārtējās vides temperatūru un nosūtīs to atpakaļ uz uztvērēja moduli.

Attālumam starp raidītāju un uztvērēju nedrīkst būt lielāks par 10 metriem. Ja starp tiem ir kādi šķēršļi, pārraides diapazons var samazināties.

Raidītāja programma:

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

Antenas konstrukcija:

Ja jūs veidojat projektus, izmantojot šo 433 MHz moduļi , stingri ievērojiet tālāk norādītās konstrukcijas detaļas, lai iegūtu labu diapazonu.

433 MHz RF antena

Izmantojiet viena kodola vadu, kam jābūt pietiekami izturīgam, lai atbalstītu šo konstrukciju. Lodēšanas savienošanai varat izmantot arī izolētu vara stiepli ar apakšā noņemtu izolāciju. Izveidojiet divus no tiem, vienu raidītājam un otru uztvērējam.

Autora bezvadu termometra prototips, izmantojot Arduino un 433 MHz RF Link:

Bezvadu termometra prototips, izmantojot 433 MHz RF Link un Arduino


Pāri: Pretkorozijas zondes ūdens līmeņa kontrolierim Nākamais: L293 Quad Half-H draivera IC izvilkums, datu lapa, lietojumprogrammas shēma