Vezeték nélküli hőmérő 433 MHz RF Link használatával Arduino használatával

Próbálja Ki A Műszerünket A Problémák Kiküszöbölésére





Ebben a bejegyzésben Arduino alapú vezeték nélküli hőmérőt fogunk készíteni, amely figyelemmel kíséri a helyiség hőmérsékletét és a külső környezeti hőmérsékletet. Az adatokat 433 MHz-es RF kapcsolaton keresztül továbbítják és fogadják.

433MHz RF modul és DHT11 érzékelő használata

A javasolt projekt Arduino-t mint agyat és szívet használja 433 MHz-es adó / vevő modul .



A projekt két külön áramkörre oszlik, az egyik 433 MHz-es vevővel, LCD kijelzővel és DHT11 szenzorral, amelyeket a helyiségben helyeznek el, valamint méri a helyiség hőmérsékletét .

Egy másik áramkörben 433 MHz-es adó van, DHT11 érzékelő külső környezeti hőmérséklet mérésére. Mindkét áramkör egy-egy arduino-val rendelkezik.



A helyiségben elhelyezett áramkör a belső és a külső hőmérséklet-értékeket jeleníti meg az LCD-n.

Most vessünk egy pillantást a 433 MHz-es adó / vevő modulra.

433 MHz-es adó / vevő modul.

Az adó és a vevő modulok a fenti ábrán láthatók, képesek szimplex kommunikációra (egyirányú). A vevő 4 érintkezős Vcc, GND és DATA tűvel rendelkezik. Két DATA érintkezõ van, ezek megegyeznek, és az adatokat két csap bármelyikébõl ki tudjuk adni.

Az adó sokkal egyszerűbb, csak Vcc, GND és DATA bemeneti tűvel rendelkezik. Csatlakoztatnunk kell egy antennát mindkét modulhoz, amelyet a cikk végén ismertetünk, anélkül, hogy az antennakommunikáció néhány hüvelyknél tovább létrejönne.

Most nézzük meg, hogyan kommunikálnak ezek a modulok.

Tegyük fel, hogy 100 Hz-es órajel impulzust alkalmazunk az adó adatbemeneti tűjére. A vevő megkapja a jel pontos másolatát a vevő adattüskéjén.

Ez egyszerű, igaz? Igen ... de ez a modul AM-n működik, és érzékeny a zajra. A szerző megfigyelése alapján, ha az adó adatcsapja jel nélkül maradt 250 milliszekundumnál tovább, a vevő adatkimeneti tűje véletlenszerű jeleket produkál.

Tehát csak nem kritikus adatátvitelre alkalmas. Ez a projekt azonban nagyon jól működik ezzel a modullal.

Most térjünk át a sematikára.

FOGADÓ:


arduino - LCD kijelző kapcsolat. 10K potenciométer

A fenti áramkör az arduino és az LCD kijelző közötti kapcsolat. 10K potenciométer áll rendelkezésre az LCD kijelző kontrasztjának beállításához.

Vezeték nélküli hőmérő 433 MHz RF Link és Arduino segítségével

A fentiek a vevő áramköre. Az LCD kijelzőt ehhez az arduino-hoz kell csatlakoztatni.

Kérjük, töltse le a következő könyvtárfájlokat a kód fordítása előtt

Rádióvezető: github.com/PaulStoffregen/RadioHead

DHT szenzortár: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Program a vevő számára:

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

Adó:

Vezeték nélküli hőmérő adó

A fenti az adó vázlata, amely meglehetősen egyszerű, mint vevő. Itt egy másik arduino táblát használunk. A DHT11 érzékelő érzékeli a külső környezeti hőmérsékletet, és visszaküldi a vevőegységnek.

Az adó és a vevő közötti távolság nem haladhatja meg a 10 métert. Ha akad köztük akadály, az átviteli tartomány csökkenhet.

Program az adó számára:

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

Az antenna építése:

Ha ezt használó projekteket épít 433 MHz-es modulok , szigorúan kövesse az alábbi konstrukciós részleteket a jó hatótávolság érdekében.

433 MHz RF antenna

Használjon egymagú vezetéket, amelynek elég erősnek kell lennie ahhoz, hogy ezt a szerkezetet megtámassza. A forrasztáshoz szigetelt rézhuzalt is használhat, amelynek alul levett szigetelése van. Készítsen ebből kettőt, egyet az adó és egy a vevő számára.

A szerző vezeték nélküli hőmérő prototípusa Arduino és 433 MHz RF Link használatával:

Vezeték nélküli hőmérő prototípus 433 MHz RF Link és Arduino használatával


Korábbi: Korróziógátló szondák a vízszint-szabályozóhoz Következő: L293 Quad Half-H meghajtó IC kivezetése, adatlap, alkalmazási áramkör