Exemplo de rede de sensores sem fio usando Arduino

Uma Rede de Sensores Sem Fio (RSSF) consiste no seguinte:

  • Um receptor central (para monitoramento, armazenamento e controle)
  • Vários nós de sensores sem fio

O nó sensor sem fio é um circuito alimentado por bateria ou solar que detecta qualquer quantidade física (como temperatura, pressão, fluxo, umidade do solo, gás, fumaça, etc.) e transmite seu valor para um receptor remoto. Isso consiste de

  1. Um elemento sensor
  2. Unidade microcontroladora (MCU) (pode ser opcional em alguns casos)
  3. Modulador e transmissor (principalmente RF)
  4. Bateria (algum tempo alimentada por energia solar)

Muitos desses nós sensores são colocados a uma distância regular em uma grande área geográfica para cobrir toda a área. Todos eles enviam seus dados para um receptor que é colocado no sistema central de monitoramento e armazenamento de dados. Todos os nós sensores transmitem dados (valor do sensor) periodicamente. O receptor recebe os dados de todos esses nós e eles são armazenados e exibidos para fins de monitoramento e controle.

Basta dar uma olhada em um exemplo.

  • É necessário manter a temperatura definida em todos os cantos de toda a área de armazenamento refrigerado. Portanto, muitos pequenos nós sensores de temperatura sem fio são instalados em cantos diferentes. Juntos, eles detectam a temperatura ambiente e transmitem o valor detectado para a sala central de monitoramento e controle. Assim, o controlador central poderá obter as leituras de temperatura de todos os cantos da área de armazenamento e, com base nisso, tentará manter a mesma temperatura em todos os cantos.

Aqui neste projeto para o nó sensor, usei o sensor de gás MQ2 para detectar diferentes gases (como CO2, metano, GLP, propano, etc.) na atmosfera. A ideia é detectar vazamento de gás em qualquer ponto. Por exemplo:

  • Em uma linha de gás GLP muito longa, esses nós sensores são colocados a uma distância regular. portanto, sempre e onde quer que haja um vazamento em linha, o nó sensor o detecta e o transmite ao centro remoto para tomar medidas de controle imediatamente
  • Em uma indústria/planta de processamento químico, esses nós sensores são colocados em locais diferentes (como em câmaras de gás, tanques, caldeiras, etc.) para detectar vazamentos de gases perigosos. Eles detectam vazamento de gás e enviam imediatamente um sinal de alarme para uma sala de controle central. A sala de controle central toma as medidas necessárias e, assim, os efeitos catastróficos podem ser evitados.

O nó sensor também consiste em Arduino NANO como MCU e módulo transmissor ASK RF de 433 MHz. Pode haver muitos desses nós sensores, mas usei apenas 2 desses nós. O receptor inclui um módulo receptor ASK RF de 433 MHz e Arduino NANO MCU. Ambos os nós sensores transmitem dados de valores detectados de GAS. O receptor recebe valores de ambos os sensores e os transmite ao computador. O computador exibe esses valores e os armazena para uso futuro.

Portanto, vamos construir o sistema, começando primeiro com o diagrama de blocos, seguido por um diagrama de circuito, seu funcionamento e operação. O programa de software é fornecido no último

Diagrama de blocos do sistema

O sistema completo é dividido em dois blocos distintos

  1. Transmissor (também denominado nó sensor)
  2. Receptor

Pode haver qualquer número de nós sensores situados em locais diferentes, mas haverá apenas um receptor conectado a um sistema central de armazenamento de dados (computador).

O nó do sensor consiste em quatro coisas: (1) sensores diferentes, (2) microcontrolador, (3) transmissor de RF e (4) bateria. Aqui no nosso caso

  • O sensor é um sensor de gás MQ2 usado para detectar gás/fumaça na atmosfera circundante
  • A placa Arduino nano é usada como um microcontrolador que irá ler os dados do sensor de gás e transmiti-los usando um transmissor RF
  • Um módulo transmissor de RF baseado em ASK com frequência portadora de 433 MHz é usado para modular e transmitir os dados para o receptor
  • Bateria de 6V – 9V é usada para fornecer energia para completar o nó sensor
  • Também é fornecido um LED que piscará para indicar que o nó sensor está ativo e transmitindo dados

O receptor consiste em apenas duas coisas: (1) módulo receptor RF e (2) microcontrolador.

Aqui no nosso caso

  • Um módulo receptor RF baseado em ASK com frequência portadora de 433 MHz é usado para desmodular e receber dados transmitidos pelo módulo RF Tx do nó sensor
  • A placa Arduino NANO é usada como um microcontrolador que obtém os dados do módulo receptor RF e os entrega a um computador que os armazenará para uso futuro.
  • Um LED também é fornecido aqui e piscará para indicar que o receptor está ativo e recebendo dados

Diagrama de circuito do nó sensor

diagrama de circuito nó sensorConforme mostrado na figura, existem apenas 3 componentes principais no circuito

  • O sensor MQ2 possui apenas 4 pinos para interface. (1) Vcc (2) Gnd (3) A0 e (4) D0. O pino D0 é uma saída digital (0 ou 1) e não é usado. A0 é uma saída analógica e está conectada à entrada analógica A0 do Arduino. O pino Vcc está conectado à saída de 5 V da placa Arduino e Gnd está conectado ao terra comum
  • O módulo RF Tx de 433 MHz possui 4 pinos de interface. (1) Vcc (2) Gnd (3) data_in e (4) antena. O pino Vcc está conectado à saída de 5 V da placa Arduino e Gnd está conectado ao terra comum. O pino Data_in está conectado ao pino digital D11 da placa Arduino. uma antena é formada enrolando um fio de cobre de 1 mm a 35 cm de comprimento (núcleo único) que é conectado a um pino da antena
  • Um LED é conectado ao pino digital D12 através de um resistor limitador de corrente
  • Uma bateria de 9V é usada para alimentar a placa Arduino. O pino Vin da placa Arduino está conectado à bateria. Assim, a placa obterá tensão de trabalho e gerará alimentação de 5 V do chip regulador de tensão 7805 integrado, e isso é fornecido ao módulo DHT11 e RF Tx

Diagrama de circuito do receptor de dados remoto

Conforme mostrado na figura, existem apenas três componentes principais neste circuito receptor

  • O módulo RF Rx de 433 MHz possui 4 pinos de interface. (1) Vcc (2) Gnd (3) data_out e (4) antena. O pino Vcc está conectado à saída de 5 V da placa Arduino e Gnd está conectado ao terra comum. O pino Data_out está conectado ao pino digital D12 da placa Arduino. uma antena (igual ao lado do transmissor) está conectada ao pino da antena
  • Um LED é conectado ao pino digital D10 através de um resistor limitador de corrente
  • Uma campainha de 5V DC está conectada ao pino digital D7 conforme mostrado
  • A placa Arduino e o módulo RF Rx obtêm alimentação de laptop/desktop PC/computador com sistema de armazenamento central por meio de cabo USB. A placa Arduino também registra dados e se comunica com o computador usando o mesmo cabo USB

Trabalho e operação

Nó sensor
Se eu quiser dizer a operação do nó sensor em uma única linha, direi: “ele detectará gases periodicamente e os transmitirá”. Mas não é tão simples. Pode haver 2, 3, 5, 10 ou N números de nós sensores, como vimos no diagrama de blocos. Todos eles estão fazendo a mesma coisa. Mais de um nó pode transmitir dados ao mesmo tempo. Outra questão é: “como o receptor saberia que os dados recebidos são de um nó específico (digamos, nó 1, nó 2, etc.)?”

Para superar estes problemas, é necessário tomar medidas especiais. Todos os nós sensores serão sincronizados a tempo para que dois nós não transmitam simultaneamente. De qualquer forma, se isso acontecer, o receptor aceitará qualquer dado do sensor. Além disso, todos os nós recebem números (digamos de 1 a N) e, antes de transmitirem os dados, eles transmitem o número do nó. Portanto, o receptor saberia que esses dados são do nó sensor X.

  • O sensor de gás MQ2 fornece saída de tensão analógica diretamente proporcional ao nível de gás na atmosfera circundante. Isso significa que sua tensão de saída aumenta à medida que a concentração de gás aumenta. O Arduino converte essa tensão analógica em valor digital (entre 0 a 1023) e mapeia-a entre 0 – 99%. Finalmente, ele converte este valor% em caracteres ASCII
  • Ele forma uma string (matriz de caracteres) de 4 caracteres como

número do nó + concentração de gás

(2 caracteres) (2 caracteres)

  • E então passe para o módulo RF Tx através do pino D11
  • O módulo RF Tx obtém esta string de 10 caracteres (podemos chamá-la de pacote), modula-o usando portadora de 433 MHz e transmite-o usando antena
  • Sempre que um pacote é transmitido, o microcontrolador pisca o LED para indicar que os dados são transmitidos
  • Este ciclo se repete continuamente após o período de tempo definido (digamos 3, 5 ou 10 segundos)

Receptor de dados remoto

  • O módulo RF Rx recebe pacotes de cada nó. Ele demodula e entrega este pacote ao microcontrolador Arduino
  • O microcontrolador obtém o pacote e extrai o valor do nível de gás (em%) junto com o número do nó
  • Ele envia esses dados em série para o computador através de USB como

Nó x

Nível de gás: XXX%

  • O microcontrolador pisca o LED para indicar que os dados foram recebidos
  • Se o nível de gás em qualquer nó for superior ao nível limite, a campainha soará continuamente para indicar problema de vazamento de gás
  • Este processo se repete para cada pacote recebido de qualquer nó a qualquer momento. porque todos os nós estão sincronizados no tempo, todos eles transmitem dados um após o outro
  • Assim, o receptor obterá dados de todos os nós, um por um, e atualizará as leituras de qualquer nó após o período de tempo definido
Sensor node program:
#include <VirtualWire.h>
#define MQ2_pin A0

const int led_pin = 12;
const int transmit_pin = 11;
char str1(2);
char node(3) = "01"; // node number. change this node number for
char trnsmit_str(4);// different node
void setup 
{
    vw_set_tx_pin(transmit_pin);    
    vw_set_ptt_inverted(true); 		
    vw_setup(2000);       			// Bits per sec
    Serial.begin(9600);    
    pinMode(led_pin, OUTPUT);
}
void loop 
{
  int gas,gas_level;
  gas=analogRead(MQ2_pin);	  
  gas_level=map(gas,0,1023,0,99);		// map them in the range between 0 to 99% 
  Serial.println("Node 1");		// serially print all values
  Serial.print("gas level: ");		// for debugging
  Serial.print(gas_level);
  Serial.println(" %"); 
  digitalWrite(led_pin, HIGH); 		// Flash a light to show transmitting
  itoa(gas_level,str1,10);			// convert all 2 digit values into 
  strcpy(trnsmit_str,node);		// one string
  strcat(trnsmit_str,str1);
  Serial.print("transmitted string: ");
  Serial.println(trnsmit_str);
  vw_send((uint8_t *)trnsmit_str, 4);
  vw_wait_tx ; 				// Wait until the whole message is gone
  digitalWrite(led_pin, LOW);
  delay(5000);  
}

Sensor node program:Receiver program for 2 nodes:
#include <VirtualWire.h>
#define gas_threshold 80
#define siren 7
const int receive_pin = 12; 
int led = 10,gas_level;
void setup  
{
  Serial.begin(9600);                 	// setup serial communication
  vw_set_rx_pin(receive_pin);
  vw_set_ptt_inverted(true);          
  vw_setup(2000);                     	// wireless data rate
  vw_rx_start ;                   	// Start the receiver PLL running
  pinMode(led,OUTPUT); 
  pinMode(siren,OUTPUT);   
  digitalWrite(led,LOW);
  digitalWrite(siren,LOW);
  delay(1000);
  Serial.println("Receiving sensor DATA from all nodes....."); 
}
void loop  
{
   uint8_t buf(VW_MAX_MESSAGE_LEN);
   uint8_t buflen = VW_MAX_MESSAGE_LEN;
   int i;  
   if (vw_get_message(buf, &buflen)) 	// when msg is received
     {
        digitalWrite(led,HIGH);
        if(buf(1)=='1')			// check node number
        {  
          Serial.println("Node 1");	// print node number and
          Serial.print("gas level: "); 	// all sensor values
          for (i = 2; i < 4; i++) Serial.print(buf(i)-48);             
          Serial.println(" %"); 
		gas_level = (buf(2)-48)*10 + (buf(3)-48)*1;
           if(gas_level>gas_threshold) digitalWrite(siren,HIGH);          
           else digitalWrite(siren,LOW);   
         } 
      else if(buf(1)=='2')
        {  
          Serial.println("Node 2");
          Serial.print("Gas Level: "); 
          for (i = 2; i < 4; i++) Serial.print(buf(i)-48);             
          Serial.println(" %");
          gas_level = (buf(2)-48)*10 + (buf(3)-48)*1;
           if(gas_level>gas_threshold) digitalWrite(siren,HIGH); 
          else digitalWrite(siren,LOW);                  
       } 
     }
  }

{

(tagsParaTraduzir)Arduino

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

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