Безжичен термометър, използващ 433 MHz RF връзка, използващ Arduino

Опитайте Нашия Инструмент За Премахване На Проблемите





В тази публикация ще изградим базиран на Arduino безжичен термометър, който може да наблюдава стайната температура и външната температура на околната среда. Данните се предават и получават чрез 433 MHz RF връзка.

Използване на 433MHz RF модул и DHT11 сензор

Предложеният проект използва Arduino като мозък и сърце като Модул на предавател / приемник 433 MHz .



Проектът е разделен на две отделни вериги, тази с 433 MHz приемник, LCD дисплей и DHT11 сензор, които ще бъдат поставени вътре в стаята, а също измерва стайната температура .

Друга схема има 433MHz предавател, DHT11 сензор за измерване на външната околна температура. И двете вериги имат по един arduino.



Схемата, поставена вътре в стаята, ще покаже показанията на вътрешната и външната температура на LCD.

Сега да разгледаме 433 MHz модул на предавател / приемник.

Модул на предавател / приемник 433 MHz.

Модулите на предавателя и приемника са показани по-горе, той е в състояние да симплекс комуникация (еднопосочна). Приемникът има 4 пина Vcc, GND и DATA пина. Има два DATA пина, те са еднакви и можем да изведем данните от всеки от два пина.

Предавателят е много по-опростен, има само Vcc, GND и DATA входен щифт. Трябва да свържем антена към двата модула, което е описано в края на статията, без антенната комуникация между тях няма да бъде установена след няколко инча.

Сега нека видим как тези модули комуникират.

Сега приемете, че прилагаме тактов импулс от 100Hz към щифта за въвеждане на данни на предавателя. Приемникът ще получи точно копие на сигнала на извода за данни на приемника.

Това е просто нали? Да ... но този модул работи на AM и податлив на шум. От наблюдението на автора, ако изводът за данни на предавателя е останал без никакъв сигнал за повече от 250 милисекунди, изходният извод на данните на приемника произвежда произволни сигнали.

Така че, той е подходящ само за некритични предавания на данни. Този проект обаче работи много добре с този модул.

Сега да преминем към схемите.

ПОЛУЧАТЕЛ:


връзка с arduino към LCD дисплей. 10K потенциометър

Горната схема е свързана с arduino към LCD дисплей. Предвиден е 10K потенциометър за регулиране на контраста на LCD дисплея.

Безжичен термометър, използващ 433 MHz RF връзка и Arduino

Горното е схемата на приемника. LCD дисплеят трябва да бъде свързан към този ардуино.

Моля, изтеглете следните библиотечни файлове, преди да компилирате кода

Радио ръководител: github.com/PaulStoffregen/RadioHead

Библиотека на DHT сензор: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Програма за приемник:

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

Предавател:

Безжичен термометър предавател

Горното е схематично за предавател, който е доста прост като приемник. Тук използваме друга дъска arduino. DHT11 сензорът ще усети външната температура на околната среда и ще изпрати обратно към модула на приемника.

Разстоянието между предавателя и приемника не трябва да бъде повече от 10 метра. Ако има някакви препятствия между тях, обхватът на предаване може да намалее.

Програма за предавател:

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

Изграждане на антена:

Ако изграждате проекти, използвайки това Модули 433 MHz , следвайте строго конструктивните детайли за добър обхват.

433 MHz RF антена

Използвайте едножилен проводник, който трябва да е достатъчно здрав, за да поддържа тази структура. Можете също да използвате изолирана медна жица с отстранена изолация отдолу за спояване. Направете две от тях, една за предавател и друга за приемник.

Авторски прототип на безжичен термометър, използващ Arduino и 433 MHz RF връзка:

Прототип на безжичен термометър, използващ 433 MHz RF Link и Arduino


Предишна: Антикорозионни сонди за контролер на нивото на водата Напред: L293 Quad Half-H Driver IC Pinout, Datasheet, Application Circuit