Бежични термометар који користи 433 МХз РФ везу користећи Ардуино

Испробајте Наш Инструмент За Елиминисање Проблема





У овом посту ћемо направити бежични термометар заснован на Ардуину који може надгледати собну температуру и спољну температуру околине. Подаци се преносе и примају путем РФ везе 433 МХз.

Коришћење 433МХз РФ модула и ДХТ11 сензора

Предложени пројекат користи Ардуино као мозак и срце Модул предајника / пријемника од 433 МХз .



Пројекат је подељен у два одвојена круга, онај са 433 МХз пријемником, ЛЦД дисплејем и ДХТ11 сензором који ће бити смештени у соби, а такође мери собну температуру .

Друго коло има предајник од 433МХз, ДХТ11 сензор за мерење спољне температуре околине. Оба кола имају по један ардуино.



Струјни круг смештен унутар просторије приказаће очитавања унутрашње и спољне температуре на ЛЦД-у.

Погледајмо сада модул предајника / пријемника од 433 МХз.

Модул предајника / пријемника од 433 МХз.

Модули предајника и пријемника су приказани изнад и он је способан за једноставну комуникацију (једносмерни). Пријемник има 4 пина Вцц, ГНД и ДАТА пинова. Постоје два ДАТА пина, они су исти и податке можемо да изнесемо са било ког од два пина.

Предајник је много једноставнији, има само Вцц, ГНД и ДАТА улазни пин. Морамо да повежемо антену на оба модула, што је описано на крају чланка, без да се антенска комуникација између њих неће успоставити дуже од неколико центиметара.

Сада да видимо како ови модули комуницирају.

Сада претпоставимо да примењујемо импулс такта од 100Хз на пин за унос података предајника. Пријемник ће добити тачну копију сигнала на пин података пријемника.

То је једноставно зар не? Да ... али овај модул ради на АМ и подложан је буци. Из ауторовог запажања ако је пин података предајника остао без икаквог сигнала дуже од 250 милисекунди, излазни пин података пријемника производи случајне сигнале.

Дакле, погодан је само за некритични пренос података. Међутим, овај пројекат веома добро функционише са овим модулом.

Пређимо сада на шеме.

ПРИЈЕМНИК:


прикључак ардуино на ЛЦД екран. 10К потенциометар

Горњи круг је повезивање ардуино-ЛЦД дисплеја. За подешавање контраста ЛЦД екрана обезбеђен је 10К потенциометар.

Бежични термометар који користи 433 МХз РФ везу и Ардуино

Горе је приказано коло пријемника. ЛЦД екран треба да буде повезан са овим ардуином.

Молимо преузмите следеће датотеке библиотеке пре састављања кода

Радио глава: гитхуб.цом/ПаулСтоффреген/РадиоХеад

Библиотека ДХТ сензора: хттпс://ардуино-инфо.викиспацес.цом/филе/детаил/ДХТ-либ.зип

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

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

Предајник:

Бежични предајник термометра

Изнад је шема за одашиљач, који је прилично једноставан као пријемник. Овде користимо другу ардуино плочу. ДХТ11 сензор ће осетити спољну температуру околине и послати натраг у модул пријемника.

Удаљеност између предајника и пријемника не би требало да буде већа од 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 МХз , стриктно следите доње детаље о конструкцији ради доброг домета.

433 МХз РФ антена

Користите једножилну жицу која треба да буде довољно чврста да подупире ову структуру. Такође можете користити изоловану бакарну жицу са изолацијом уклоњеном одоздо за спајање. Направите два од њих, један за предајник и други за пријемник.

Ауторски прототип бежичног термометра који користи Ардуино и 433 МХз РФ везу:

Прототип бежичног термометра који користи РФ везу 433 МХз и Ардуино


Претходни: Сонде против корозије за регулатор нивоа воде Следеће: Л293 Четвороструки полу-Х управљачки програм пиноут, таблица података, круг апликација