Termômetro sem fio usando link RF de 433 MHz usando Arduino

Experimente Nosso Instrumento Para Eliminar Problemas





Neste post, vamos construir um termômetro sem fio baseado em Arduino que pode monitorar a temperatura ambiente e externa. Os dados são transmitidos e recebidos via link RF de 433 MHz.

Usando Módulo RF 433MHz e Sensor DHT11

O projeto proposto utiliza Arduino como cérebro e o coração como Módulo transmissor / receptor 433 MHz .



O projeto está dividido em dois circuitos distintos, aquele com receptor 433 MHz, display LCD e sensor DHT11 que será colocado dentro da sala e também mede a temperatura ambiente .

Outro circuito tem transmissor de 433 MHz, Sensor DHT11 para medir a temperatura ambiente externa. Ambos os circuitos possuem um arduino cada.



O circuito colocado dentro da sala exibirá as leituras de temperatura interna e externa no LCD.

Agora vamos dar uma olhada no módulo transmissor / receptor de 433 MHz.

Módulo transmissor / receptor de 433 MHz.

Os módulos transmissor e receptor são mostrados acima e são capazes de comunicação simplex (unidirecional). O receptor possui 4 pinos Vcc, GND e DATA. Existem dois pinos de DADOS, eles são iguais e podemos enviar os dados de qualquer um dos dois pinos.

O transmissor é muito mais simples, tem apenas Vcc, GND e pino de entrada DATA. Temos que conectar uma antena a ambos os módulos que é descrito no final do artigo, sem antena a comunicação entre eles não será estabelecida além de alguns centímetros.

Agora vamos ver como esses módulos se comunicam.

Agora suponha que estamos aplicando pulso de clock de 100 Hz ao pino de entrada de dados do transmissor. O receptor receberá uma réplica exata do sinal no pino de dados do receptor.

Isso é simples, certo? Sim ... mas este módulo funciona em AM e é suscetível a ruídos. A partir da observação do autor, se o pino de dados do transmissor saiu sem qualquer sinal por mais de 250 milissegundos, o pino de saída de dados do receptor produz sinais aleatórios.

Portanto, é adequado apenas para transmissões de dados não críticos. No entanto, este projeto funciona muito bem com este módulo.

Agora vamos passar para os esquemas.

RECEPTOR:


Arduino para conexão de display LCD. Potenciômetro 10K

O circuito acima é um arduino para a conexão do display LCD. O potenciômetro de 10K é fornecido para ajustar o contraste do display LCD.

Termômetro sem fio usando link RF de 433 MHz e Arduino

O acima é o circuito receptor. O display LCD deve ser conectado a este arduino.

Baixe os seguintes arquivos de biblioteca antes de compilar o código

Cabeça de rádio: github.com/PaulStoffregen/RadioHead

Biblioteca de sensores DHT: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Programa para receptor:

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

Transmissor:

Transmissor de termômetro sem fio

O acima é o esquema do Transmissor, que é bastante simples como receptor. Aqui estamos usando outra placa Arduino. O sensor DHT11 detectará a temperatura ambiente externa e enviará de volta ao módulo receptor.

A distância entre o transmissor e o receptor não deve ser superior a 10 metros. Se houver obstáculos entre eles, o alcance da transmissão pode ser reduzido.

Programa para transmissor:

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

Construção da Antena:

Se você está construindo projetos usando este Módulos de 433 MHz , siga os detalhes de construção abaixo estritamente para um bom alcance.

Antena RF 433 MHz

Use um fio de núcleo único que deve ser resistente o suficiente para suportar esta estrutura. Você também pode usar fio de cobre isolado com o isolamento removido na parte inferior para a junção de solda. Faça dois destes, um para transmissor e outro para receptor.

Protótipo de termômetro sem fio do autor usando Arduino e link de RF de 433 MHz:

Protótipo de termômetro sem fio usando link RF de 433 MHz e Arduino


Anterior: Sondas anticorrosão para controlador de nível de água Próximo: Pinagem IC do driver L293 Quad Half-H, folha de dados, circuito de aplicação