Sistema de monitoramento de umidade e temperatura sem fio (Parte 23/23)

Sistemas de monitoramento de umidade e temperatura são bastante comuns nas indústrias. Esses fatores ambientais necessitam de supervisão constante para manter a confiabilidade e a eficiência dos dispositivos industriais. Os sistemas de monitoramento usados ​​nas indústrias são geralmente conectados onde a unidade do sensor e o sistema de monitoramento do sensor se conectam através de um cabo. Os sistemas de monitoramento de umidade e temperatura podem ser feitos sem fio usando os módulos 434 RF. Com conectividade sem fio, o sensor e os sistemas de monitoramento podem ser instalados separadamente e os equipamentos industriais podem ser supervisionados remotamente. Além disso, o custo da instalação extensa de cabos também é economizado.

Os módulos RF 434 têm um alcance operacional de 50-60 metros e podem ser estendidos para 300-350 metros usando uma antena e aumentando a potência de transmissão. Portanto, os módulos RF conectados à antena podem ser facilmente instalados em qualquer lugar e podem realizar comunicação de dados sem fio com um alcance impressionante. (Mesmo um roteador Wi-Fi tem alcance limitado a 45 metros em ambientes internos e 92 metros em ambientes externos).

Este projeto usa um sensor de umidade e temperatura DHT11 e é construído no Arduino Pro Mini. Os módulos RF têm interface direta com placas Arduino para implementação sem fio. As leituras do sensor são exibidas em uma tela LCD 16X2.

Componentes necessários

Sr. Não. Componentes necessários Quantidade
1. Módulo RF Rx (434 MHz) 1
2 Módulo RF Tx (434Mhz) 1
3 Arduino pro mini 2
4 DHT11 1
5 LCD 1
6 Bateria – 9V 2
7 Tábua de ensaio 2
8 Conectando fios

Sistema de monitoramento de umidade e temperatura sem fio - Diagrama de blocos

Fig. 1: Diagrama de blocos do monitor de umidade e temperatura sem fio baseado em Arduino

Conexões de Circuito

Existem dois circuitos no projeto – a) Circuito sensor de temperatura e umidade e b) Circuito display de leitura do sensor. No circuito do sensor, o pino de dados (pino 2) do sensor DHT11 é conectado ao pino analógico A2 do Arduino Pro Mini. Os pinos VCC (Pino 1) e Terra (Pino 4) são conectados ao VCC e ao terra respectivamente. Um transmissor RF faz interface com a placa Arduino com seu pino de entrada serial (pino 2) conectado ao pino 12 da placa Arduino. Uma antena é conectada ao pino 4 do transmissor para extensão de alcance.

No circuito de exibição, um receptor RF é conectado a outro Arduino Pro Mini com pino de saída serial (pino 2) do receptor conectado ao pino 11 do Arduino. Uma antena é conectada ao pino 8 do receptor para extensão de alcance. Um LCD é conectado à placa Arduino para exibir leituras de temperatura e umidade. O display LCD 16X2 é conectado à placa Arduino conectando seus pinos de dados aos pinos 7 a 4 da placa Arduino. Os pinos RS e E do LCD estão conectados aos pinos 3 e 2 do Arduino Pro Mini, respectivamente. O pino RW do LCD está aterrado.

Fig. 2: Tabela listando conexões de circuito entre Character LCD e Arduino Uno

A biblioteca de códigos padrão para interface do Arduino UNO e Arduino Pro Mini é usada no projeto para programar o LCD com a placa.

Como funciona o circuito

O Sensor de Temperatura e Umidade DHT11 é um sensor digital com sensor de umidade capacitivo embutido e termistor. Ele transmite uma leitura de temperatura e umidade em tempo real a cada 2 segundos. O sensor opera com alimentação de 3,5 a 5,5 V e pode ler leituras de temperatura entre 0° C e 50° C e umidade relativa entre 20% e 95%.

Sistema de monitoramento de umidade e temperatura sem fio

Fig. 3: Protótipo de Monitor de Umidade e Temperatura Sem Fio

O sensor não pode ser conectado diretamente a um pino digital da placa, pois opera no protocolo de 1 fio que deve ser implementado no firmware. Primeiro, o pino de dados é configurado para entrada e um sinal de início é enviado a ele. O sinal de início compreende um BAIXO por 18 milissegundos seguido por um ALTO por 20 a 40 microssegundos seguido por um BAIXO novamente por 80 microssegundos e um ALTO por 80 microssegundos.

Depois de enviar o sinal de início, o pino é configurado para saída digital e os dados de 40 bits compostos pela leitura de temperatura e umidade são bloqueados. Dos dados de 5 bytes, os dois primeiros bytes são a parte inteira e decimal da leitura da umidade relativa, respectivamente, o terceiro e o quarto bytes são a parte inteira e decimal da leitura da temperatura e o último é o byte da soma de verificação. Ao fazer a interface do DHT11 com o Arduino, uma biblioteca de códigos já está disponível e os dados do sensor podem ser lidos pela função read11 da classe DHT.

Sistema de monitoramento de umidade e temperatura sem fio

Fig. 4: Imagem mostrando o Arduino usado no monitor de umidade e temperatura sem fio

No circuito do sensor, as leituras de temperatura e umidade relativa são primeiro obtidas pelo Arduino e sua representação de caracteres é armazenada em matrizes separadas. O buffer de caracteres é transmitido serialmente no RF usando a biblioteca VirtualWire do Arduino. Confira o código do programa Arduino do lado do transmissor para saber como o Arduino obtém o valor do sensor e os armazena em matrizes para transmissão de RF.

No circuito de exibição, a representação de caracteres das leituras do sensor é detectada pelo receptor RF e passada serialmente para a placa Arduino do lado do receptor. O código do programa na placa Arduino do lado do receptor lê o buffer de caracteres e o converte em formato inteiro para exibição no LCD. As funções padrão da biblioteca LCD são usadas para exibir leituras no LCD. Confira o código Arduino do lado do receptor para saber como os valores dos sensores são lidos no buffer e convertidos em um formato adequado para exibição na tela LCD.

Guia de programação

No lado do transmissor Arduino, primeiro, o código do programa importa as bibliotecas padrão necessárias. A biblioteca VirtualWire é necessária para conectar-se ao módulo RF e a biblioteca DHT é necessária para fazer a interface do sensor DHT11. Um objeto “DHT” é instanciado. As variáveis ​​globais ledPin e Sensor1Pin são declaradas e mapeadas para o pino 13 onde o LED indicador de progresso da transmissão está conectado e o pino A2 onde o pino de dados do sensor de temperatura e umidade DHT11 está conectado respectivamente. Uma variável Sensor1Data é declarada para armazenar a leitura do sensor e as matrizes de tipo de caractere Sensor1CharMsg e Sensor1CharMsg1 são declaradas para armazenar uma representação decimal da leitura de umidade relativa e temperatura.

#include
#incluir #define dht_dpin A0 //não; aqui. Definir igual ao sensor do canal está ligado dht DHT; //LEDs const int ledPin = 13; //Sensores const int Sensor1Pin = A2; int Sensor1Dados; char Sensor1CharMsg(4);
char Sensor1CharMsg1(4);

Uma função setup é chamada onde o pino do LED indicador é definido para saída enquanto o pino conectado ao sensor é definido para o modo de entrada usando a função pinMode . A taxa de transmissão do Arduino é definida para 9.600 bits por segundo usando a função serial.begin . As mensagens iniciais são enviadas para o buffer usando a função Serial.Println . A taxa de transmissão para saída serial é definida para 2.000 bits por segundo usando a função vw_setup da biblioteca VirtualWire.

Uma função de loop é chamada onde a leitura do sensor DHT11 é lida usando a função read11 no objeto DHT e a representação de caracteres da base decimal da leitura de umidade é armazenada no array Sensor1CharMsg e a representação de caracteres da base decimal da leitura de temperatura é armazenada na matriz Sensor1CharMsg1.

As leituras do sensor são emitidas em série como texto ASCII legível por humanos usando as funções Serial.print e Serial.println .

O LED indicador de progresso da transmissão é ligado passando um HIGH para o pino 13. A mensagem de caracteres contendo a leitura de temperatura e umidade é enviada serialmente usando a função vw_send e vw_wait_tx é usada para bloquear a transmissão até que uma nova mensagem esteja disponível para transmissão. O LED no pino 13 é desligado passando um LOW para indicar a transmissão bem-sucedida da mensagem.

Isso encerra o código Arduino do lado do transmissor.

No Arduino do lado do receptor, o código do programa primeiro importa as bibliotecas padrão necessárias. LiquidCrystal.h é importado para fazer interface com o LCD e a biblioteca VirtualWire é importada para ler a entrada serial do receptor RF. Os pinos 2 a 7 são mapeados para o LCD do objeto de cristal líquido.

O pino 13 onde o LED indicador de progresso da transmissão está conectado é atribuído à variável ledpin e duas variáveis ​​- “Sensor1Data” e “Sensor2Data” para capturar a leitura de DHT11 em formato inteiro e matrizes “Sensor1CharMsg1” e “Sensor1CharMsg2” para armazenar a representação de caracteres das leituras são declarados. Existem variáveis ​​contadoras “i” e “j” também declaradas.

Uma função setup é chamada onde a taxa de transmissão do Arduino é definida para 9600 bits por segundo usando a função Serial.begin . O objeto LCD é inicializado no modo 16X2. O pino conectado ao led e o pino conectado a RS e RW são definidos para o modo de saída usando a função pinMode .

O módulo transmissor e receptor de RF não possui pino Push To Talk. Eles ficam inativos quando nenhum dado está presente para transmitir ou receber, respectivamente. Portanto, vw_set_ptt_inverted(true) é usado para configurar a polaridade push to talk e solicitar que o receptor continue recebendo dados após buscar o primeiro caractere. A taxa de transmissão para entrada serial é definida para 2.000 bits por segundo usando a função vw_setup . A recepção dos dados é iniciada usando vw_rx_start .

Uma função loop é chamada dentro da qual são declaradas a matriz “buf ” para ler o buffer serial e a variável “buflen” para armazenar o comprimento do buffer. As variáveis ​​do contador são inicializadas em zero.

O buffer de caracteres é detectado usando a função vw_get_message ; se estiver presente, um contador “i” é inicializado. As leituras do buffer são primeiro armazenadas no array RxAray usando o loop for com o contador inicializado e após detectar o caractere nulo, as leituras do sensor de temperatura e umidade inseridas no RxAray são armazenadas separadamente nos arrays “SensorCharMsg1″ e ”SensorCharMsg2″.

O valor da variável junto com as strings relevantes incluídas é passado para o buffer do microcontrolador e passado para o LCD para exibição em um formato apresentável.

Isso encerra a função loop e o código Arduino do lado do receptor.

Código-fonte do projeto

###

#include 

#include 

#define dht_dpin A0 //no ; here. Set equal to channel sensor is on

dht DHT;

// LED's

const int ledPin = 13;

// Sensors 

const int Sensor1Pin = A2;

int Sensor1Data;

char Sensor1CharMsg(4); 

char Sensor1CharMsg1(4);

void setup  {

 // PinModes 

 // LED 

 pinMode(ledPin,OUTPUT);

 // Sensor(s)

 pinMode(Sensor1Pin,INPUT);

  Serial.begin(9600);

  delay(300);//Let system settle

  Serial.println("Humidity and temperaturenn");

  delay(700); 

  // VirtualWire setup

 vw_setup(2000);     // Bits per sec

}

void loop  {

  // Read and store Sensor 1 data

 // Sensor1Data = analogRead(Sensor1Pin);

   DHT.read11(dht_dpin);

    // Convert integer data to Char array directly 

  itoa(DHT.humidity,Sensor1CharMsg,10);

  itoa(DHT.temperature,Sensor1CharMsg1,10);

The sensor readings are serially out as human-readable ASCII text using the Serial.print  and Serial.println  function.

  // DEBUG

 Serial.print("Current humidity = ");

 Serial.print(DHT.humidity);

    Serial.print("%  ");

    Serial.print("temperature = ");

    Serial.print(DHT.temperature); 

    Serial.println("C  ");

  delay(800);

  // END DEBUG

digitalWrite(13, true); // Turn on a light to show transmitting

 vw_send((uint8_t *)Sensor1CharMsg, strlen(Sensor1CharMsg));

 vw_wait_tx ; // Wait until the whole message is gone

 delay(200);

  vw_send((uint8_t *)Sensor1CharMsg1, strlen(Sensor1CharMsg1));

 vw_wait_tx ; // Wait until the whole message is gone

digitalWrite(13, false); // Turn off a light after transmission

 delay(200);

} // END void loop...

#include 

#include 

LiquidCrystal  lcd(2, 3, 4, 5, 6, 7);

// LED's

int ledPin = 13;

// Sensors 

int Sensor1Data;

int Sensor2Data;

// RF Transmission container

char SensorCharMsg1(4); 

char rxAray(8);

char SensorCharMsg2(4); 

int j,k;

void setup  {

  Serial.begin(9600);

  lcd.begin(16, 2);

  // sets the digital pin as output

  pinMode(ledPin, OUTPUT);    

    pinMode(9, OUTPUT);

    pinMode(8, OUTPUT);

     // VirtualWire

    // Initialise the IO and ISR

    // Required for DR3100

    vw_set_ptt_inverted(true); 

    // Bits per sec

    vw_setup(2000);    

     // Start the receiver PLL running

    vw_rx_start ;       

} // END void setup

void loop {

    uint8_t buf(VW_MAX_MESSAGE_LEN);

    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    j = 0;

    k = 0;

// Non-blocking

    if (vw_get_message(buf, &buflen)) 

    {

    int i;

       // Message with a good checksum received, dump it. 

        for (i = 0; i < buflen; i++)

    {                 

      // Fill Sensor1CharMsg Char array with corresponding 

    // chars from buffer.   

         rxAray(i) = char(buf(i));

           }

        rxAray(buflen) = '';

       while( j < 2)

       {

          SensorCharMsg1(j++) = rxAray(j++);

       }

       while( j < 4)

        {

          SensorCharMsg2(k++) = rxAray(j++);

        }

// DEBUG

 Serial.print(" hum =  ");

 Serial.println(SensorCharMsg1);

 Serial.print(" temp =  ");

Serial.println(SensorCharMsg2);

 lcd.setCursor(0,0);

 lcd.print("Humidity =  ");

  lcd.print(SensorCharMsg1); // change the analog out value:

 lcd.setCursor(0,1 );

 lcd.print("Temparature = ");

 lcd.print(SensorCharMsg2); 

  // END DEBUG

 }

}

###

Diagramas de circuito

Projeto-23-Diagrama de Circuito

Vídeo do projeto

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.