Sistema de monitoramento e detecção de incêndios florestais (com alertas SMS)
Componentes e suprimentos
| Itead Gboard Pro 800 SIM800 GSM / GPRS Módulo 3.3v ATmega2560 Mainboard Para Arduino Starter | | × | 1 | |
| | × | 1 | |
| Sensor DHT11 de Temperatura e Umidade (3 pinos) | | × | 2 | |
| Fios de jumpers (genérico) | | × | 1 | |
Aplicativos e serviços online
Sobre este projeto
O processo de detecção de incêndios florestais inicia em qualquer um dos nós plantados em uma área dentro da floresta. A floresta possui uma rede de nós colocados a distâncias adequadas uns dos outros, os nós têm a capacidade de se comunicar por meio de dispositivos (módulo RF no nosso caso) e usando o Arduino. Se qualquer alteração acima de um valor limite for encontrada nos parâmetros atmosféricos (aumento de temperatura, contaminação do ar com fumaça, etc.) perto de um nó (nó de origem), a informação é passada para um nó intermediário mais próximo até chegar ao principal / terminal principal. O terminal principal / principal usa um modem GSM para passar as informações para um telefone celular (o centro de monitoramento de incêndios florestais).
PARTE TRANSMISSOR DO MODELO FÍSICO
O módulo de detecção de incêndios florestais funciona em três fases distintas. A primeira fase consiste em ler alguns parâmetros ambientais externos, como temperatura e fumaça. A primeira etapa é feita com o auxílio de alguns sensores que servem para detectar e converter dados analógicos em dados digitais. Os sensores lêem parâmetros como temperatura, umidade e qualidade do ar e então enviam essas informações para o nó mais próximo. Esse processo continua até que as informações cheguem ao nó final ou ao terminal principal, que é o segundo estágio do processo geral. A terceira etapa consiste na transmissão das informações à unidade de monitoramento de incêndios florestais.
O Eachnode possui um sensor de temperatura e umidade, um sensor de fumaça e um micro-controlador. Arduino tem sido usado como dispositivo microcontrolador. Esses sensores interagem com o Arduino e armazenam as informações para o processo de comparação. Há um valor limite predefinido para cada um desses parâmetros. O microprocessador compara os valores do sensor em intervalos regulares de tempo com os valores de limite. Com base na comparação, se os valores de entrada do sensor ultrapassaram o limite, o nó transmite a informação para o próximo nó próximo que, por sua vez, transmite a informação para o outro nó próximo. Dessa forma, o fluxo de mensagens é regulado neste modelo.
MODELO FÍSICO DO APARELHO
PARTE TRANSMISSOR DO MODELO FÍSICO
LEITURA EM SÉRIE NO MONITOR EM SÉRIE
MENSAGENS RECEBIDAS PELO MÓDULO GSM
Código
- Códigos de módulo Arduino do lado do receptor e do transmissor
Códigos de módulo Arduino do lado do receptor e do transmissor Python
Este código configura o Módulo Arduino do lado receptor para Monitoramento de Temperatura e Umidade. Se os valores excederem um limite, um SMS é enviado para a estação base alertando-os sobre o mesmo. Se houver um aumento de valor no nó do lado do transmissor, isso será comunicado por meio do módulo RF-Transmitter no lado do transmissor Arduino Uno para o módulo RF-Receiver no lado receptor do Arduino Uno. NOTE que o código abaixo consiste em duas partes, uma para "Arduino do lado do receptor" e a outra para "Arduino do lado do transmissor" ######### (PARTE-1) ###### Arduino do lado do receptor CÓDIGO ################################### // Incluir Biblioteca RadioHead Amplitude Shift Keying # include #include / / Incluir Biblioteca SPI dependente #include #include SoftwareSerial mySerial (4, 3); // Constantes # define DHTPIN 2 // a qual pino estamos conectados # define DHTTYPE DHT11 // DHT11int smokeA0 =A5; // Seu valor limiteint sensorThres =400; // Definir VariablesDHT dht (DHTPIN, DHTTYPE); // Inicializa o sensor DHT para Arduino de 16 MHz normal // Variablesfloat hum; // Armazena o valor da umidadefloat temp; // Armazena o valor da temperatura // Define strings de saída String str_humid; String str_temp; String str_smk; String str_out; // Criar Objeto de Modificação de Mudança de AmplitudeRH_ASK rf_driver; void setup () {pinMode (smokeA0, INPUT); dht.begin (); // Inicializar objeto ASK rf_driver.init (); // Configuração do Serial Monitor Serial.begin (9600); mySerial.begin (115200);} void loop () {delay (2000); hum =dht.readHumidity (); temp =dht.readTemperature (); Serial.print ("Umidade do receptor ="); Serial.print (hum); Serial.print ('\ n'); Serial.print ("Temperatura do receptor ="); Serial.println (temp); int analogSensor =analogRead (smokeA0); String smk; // Verifica se atingiu o valor limite if (analogSensor> sensorThres) {Serial.print ("Smoke at Reciever"); Serial.print ('\ n'); smk ="Fumaça"; } else {Serial.print ("Limpar no destinatário"); Serial.print ('\ n'); smk ="Limpar"; } // Defina o buffer para o tamanho da mensagem esperada uint8_t buf [20]; uint8_t buflen =sizeof (buf); // Verifique se o pacote recebido tem o tamanho correto if (rf_driver.recv (buf, &buflen)) {str_out =String ((char *) buf); for (int i =0; i =60 &&temp>
=25) {Serial.print ("Fogo detectado no receptor"); mySerial.println ("AT + CMGF =1"); // Define o Módulo GSM no Modo Texto delay (1000); // Atraso de 1000 milisegundos ou 1 segundo mySerial.println ("AT + CMGS =\" + 918744984131 \ "\ r"); // Substitua x pelo atraso do número do celular (1000); mySerial.println ("ALERTA DE INCÊNDIO !!"); Serial.println ('\ n'); mySerial.println ("Fire at Reciever Node"); Serial.println ('\ n'); mySerial.println ("Temperatura:" + String (temp)); Serial.print ('\ n'); mySerial.println ("Umidade:" + String (hum)); Serial.print ('\ n'); mySerial.println ("Qualidade do ar:" + smk); atraso (100); mySerial.println ((char) 26); // código ASCII de CTRL + Z delay (1000); } if (str_humid.toInt ()> =60 &&str_temp.toInt ()> =25) {Serial.print ("Fogo detectado no transmissor"); mySerial.println ("AT + CMGF =1"); // Define o Módulo GSM no Modo Texto delay (1000); mySerial.println ("AT + CMGS =\" + 918744984131 \ "\ r"); // Substitua x pelo atraso do número do celular (1000); mySerial.println ("ALERTA DE INCÊNDIO !!"); Serial.println ('\ n'); mySerial.println ("Disparar no nó do transmissor"); Serial.println ('\ n'); mySerial.println ("Temperatura:" + str_temp); Serial.print ('\ n'); mySerial.println ("Umidade:" + str_húmida); Serial.print ('\ n'); mySerial.println ("Qualidade do ar:" + String (str_smk)); atraso (100); mySerial.println ((char) 26); // código ASCII de CTRL + Z delay (1000); }} ######## (PART-2) ############## Código Arduino do lado do transmissor ######################### ############################################################### ############## Incluir #include #include // Constantes # define DHTPIN 2 // qual pino estamos conectados a # define DHTTYPE DHT11 // DHT11DHT dht (DHTPIN, DHTTYPE); // Inicializa o sensor DHT para Arduinoint normal de 16 MHz, smokeA0 =A5; // Seu valor limiteint sensorThres =400; // Definir Variáveis float hum; // Armazena o valor da umidade em percentfloat temp; // Armazena o valor da temperatura em Celciusfloat smk; // Definir strings de saída String str_humid; String str_temp; String str_smk; String str_out; // Criar Amplitude Shift Keying ObjectRH_ASK rf_driver; // Inicializar o sensor DHT para Arduino normal de 16 MHz void setup () {dht.begin (); pinMode (smokeA0, INPUT); // Inicializar objeto ASK rf_driver.init (); } void loop () {delay (2000); // Atrase para que o sensor DHT-22 possa estabilizar hum =dht.readHumidity (); // Obter o valor de umidade temp =dht.readTemperature (); // Obter valor de temperatura // Converter umidade para string str_humid =String (hum); Serial.print (hum); // Converter temperatura para string str_temp =String (temp); Serial.print (temp); int analogSensor =analogRead (smokeA0); // Verifica se atingiu o valor limite if (analogSensor> sensorThres) {str_smk ="1"; } else {str_smk ="0"; } // Combine Umidade e Temperatura if (str_smk =="1") {str_out =str_humid + "," + str_temp + "," + "Smoke"; } if (str_smk =="0") {str_out =str_humid + "," + str_temp + "," + "Limpar"; } // Compor o caractere de saída const char * msg =str_out.c_str (); rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent (); }
Esquemas