Belaidis termometras naudojant 433 MHz RF ryšį naudojant „Arduino“

Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas





Šiame įraše sukursime „Arduino“ pagrindu veikiantį belaidį termometrą, kuris gali stebėti kambario temperatūrą ir išorinę aplinkos temperatūrą. Duomenys perduodami ir priimami per 433 MHz RF ryšį.

Naudojant 433MHz RF modulį ir DHT11 jutiklį

Siūlomame projekte Arduino naudojamas kaip smegenys ir širdis 433 MHz siųstuvo / imtuvo modulis .



Projektas yra padalintas į dvi atskiras grandines, vieną su 433 MHz imtuvu, LCD ekranu ir DHT11 jutikliu, kurios bus patalpintos kambaryje, taip pat matuoja kambario temperatūrą .

Kitoje grandinėje yra 433MHz siųstuvas, DHT11 jutiklis lauko temperatūrai matuoti. Abiejose grandinėse yra po vieną arduino.



Kambario viduje esančioje grandinėje bus rodomi vidiniai ir išoriniai temperatūros rodmenys LCD ekrane.

Dabar pažvelkime į 433 MHz siųstuvo / imtuvo modulį.

433 MHz siųstuvo / imtuvo modulis.

Siųstuvo ir imtuvo moduliai yra pavaizduoti aukščiau, jis gali valdyti vienpusį ryšį (į vieną pusę). Imtuvas turi 4 „Vcc“, „GND“ ir „DATA“ kaiščius. Yra du DATA kaiščiai, jie yra vienodi ir mes galime išvestis duomenis iš bet kurio iš dviejų kaiščių.

Siųstuvas yra daug paprastesnis, jame yra tik Vcc, GND ir DATA įvesties kaištis. Mes turime prijungti anteną prie abiejų modulių, kurie aprašyti straipsnio pabaigoje, be antenos ryšio tarp jų nebus galima už kelių colių.

Dabar pažiūrėkime, kaip šie moduliai bendrauja.

Dabar tarkime, kad siųstuvo duomenų įvesties kaiščiui taikome 100Hz taktinį impulsą. Imtuvas gaus tikslią signalo kopiją imtuvo duomenų smeigtuke.

Tai paprasta tiesa? Taip ... bet šis modulis veikia AM ir yra jautrus triukšmui. Autoriaus pastebėjimu, jei siųstuvo duomenų kaištis be jokio signalo liko ilgiau nei 250 milisekundžių, imtuvo duomenų išvesties kaištis sukuria atsitiktinius signalus.

Taigi, jis tinkamas tik nekritiniams duomenims perduoti. Tačiau šis projektas labai gerai veikia su šiuo moduliu.

Dabar pereikime prie schemų.

GAVĖJAS:


arduino į LCD ekraną. 10K potenciometras

Pirmiau nurodyta grandinė yra arduino ir LCD ekrano jungtis. 10K potenciometras yra skirtas LCD ekrano kontrastui reguliuoti.

Belaidis termometras naudojant 433 MHz RF Link ir „Arduino“

Aukščiau yra imtuvo grandinė. Skystųjų kristalų ekranas turėtų būti prijungtas prie šio „arduino“.

Prieš sudarydami kodą, atsisiųskite šiuos bibliotekos failus

Radijo vadovas: github.com/PaulStoffregen/RadioHead

DHT jutiklių biblioteka: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Imtuvo programa:

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

Siųstuvas:

Belaidis termometro siųstuvas

Aukščiau pateikiama siųstuvo schema, kuri yra gana paprasta kaip imtuvas. Čia mes naudojame kitą „arduino“ plokštę. DHT11 jutiklis pajus išorinę aplinkos temperatūrą ir nusiųs atgal į imtuvo modulį.

Atstumas tarp siųstuvo ir imtuvo neturėtų būti didesnis kaip 10 metrų. Jei tarp jų yra kokių nors kliūčių, perdavimo diapazonas gali sumažėti.

Siųstuvo programa:

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

Antenos statyba:

Jei kuriate projektus naudodami tai 433 MHz moduliai , griežtai laikykitės toliau pateiktų konstrukcinių detalių, kad būtų geras diapazonas.

433 MHz RF antena

Naudokite viengyslę vielą, kuri turėtų būti pakankamai tvirta šiai konstrukcijai palaikyti. Lydmetalio sujungimui taip pat galite naudoti izoliuotą varinę vielą, kurios apačioje nuimta izoliacija. Padarykite du iš jų, vieną siųstuvui ir kitą imtuvui.

Autoriaus belaidžio termometro prototipas naudojant „Arduino“ ir 433 MHz RF nuorodą:

Belaidžio termometro prototipas naudojant 433 MHz RF Link ir „Arduino“


Pora: Antikoroziniai vandens lygio reguliatoriaus zondai Kitas: „L293 Quad Half-H“ tvarkyklės IC kištukas, duomenų lapas, taikymo grandinė