Беспроводной термометр с использованием радиочастотного канала 433 МГц с использованием Arduino

Попробуйте наш инструмент устранения неполадок





В этом посте мы собираемся создать беспроводной термометр на базе Arduino, который может контролировать температуру в помещении и температуру окружающей среды. Данные передаются и принимаются по радиочастотному каналу 433 МГц.

Использование радиочастотного модуля 433 МГц и датчика DHT11

Предлагаемый проект использует Arduino как мозг, а сердце как Модуль передатчика / приемника 433 МГц .



Проект разделен на две отдельные схемы: одна с приемником 433 МГц, ЖК-дисплеем и датчиком DHT11, который будет размещен внутри комнаты, а также измеряет температуру в помещении .

Другая схема имеет передатчик 433 МГц, Датчик DHT11 для измерения температуры наружного воздуха. Обе схемы имеют по одному Arduino.



Схема, размещенная внутри комнаты, будет отображать показания внутренней и внешней температуры на ЖК-дисплее.

Теперь давайте посмотрим на модуль передатчика / приемника 433 МГц.

Модуль передатчика / приемника 433 МГц.

Модули передатчика и приемника показаны выше, они могут поддерживать одностороннюю связь (одностороннюю). Приемник имеет 4 контакта Vcc, GND и DATA. Есть два контакта DATA, они одинаковые, и мы можем выводить данные с любого из двух контактов.

Передатчик намного проще, он имеет только входной контакт Vcc, GND и DATA. Мы должны подключить антенну к обоим модулям, что описано в конце статьи, без антенны связь между ними не будет установлена ​​за пределами нескольких дюймов.

Теперь давайте посмотрим, как эти модули взаимодействуют.

Теперь предположим, что мы подаем тактовый импульс 100 Гц на входной контакт передатчика. Приемник получит точную копию сигнала на выводе данных приемника.

Это просто, правда? Да… но этот модуль работает в AM и чувствителен к шумам. По наблюдениям автора, если вывод данных передатчика остается без сигнала в течение более 250 миллисекунд, вывод данных приемника генерирует случайные сигналы.

Таким образом, он подходит только для некритических передач данных. Однако этот проект очень хорошо работает с этим модулем.

Теперь перейдем к схемам.

ПРИЕМНИК:


подключение arduino к ЖК-дисплею. Потенциометр 10K

Вышеупомянутая схема предназначена для подключения Arduino к ЖК-дисплею. Потенциометр 10K предназначен для регулировки контрастности ЖК-дисплея.

Беспроводной термометр с использованием радиочастотной связи 433 МГц и Arduino

Выше приведена схема приемника. ЖК-дисплей должен быть подключен к этому Arduino.

Пожалуйста, загрузите следующие файлы библиотеки перед компиляцией кода

Радиоголовка: 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 МГц строго следуйте приведенным ниже деталям конструкции для обеспечения хорошего диапазона.

ВЧ антенна 433 МГц

Используйте одножильный провод, который должен быть достаточно прочным, чтобы поддерживать эту конструкцию. Вы также можете использовать изолированный медный провод с удаленной снизу изоляцией для соединения пайкой. Сделайте два из них: один для передатчика, а другой для приемника.

Прототип авторского беспроводного термометра с использованием Arduino и радиочастотной связи 433 МГц:

Прототип беспроводного термометра с использованием RF Link 433 МГц и Arduino


Предыдущая статья: Антикоррозионные датчики для контроллера уровня воды Следующая: L293 Quad Half-H Driver IC Pinout, Datasheet, Application Circuit