Introduction: Controle De Gás E Poeira Com O NodeMCU

Este foi um trabalho para medir níveis de poeira e gás num dado ambiente, e compartilhar estes dados nas nuvens e em seu celular, incluindo disparar um e-mail de alerta caso os valores lidos sejam considerados altos.

Step 1: Componentes

Os seguintes componentes são utilizados:

  • NodeMCU
  • Sensor de Gas MQ-2
  • Sensor de Poeira e Fumaça Dsm501a Arduino

É importante observar que a pinagem do NodeMCU não segue o padrão GPIO.

Step 2: Aplicativos

Os seguintes aplicativos são utilizados:

ThingSpeak: uma plataforma IoT open source gratuito, que permite upload de informações e posterior visualização gráfica em tempo real;

Blynk: uma plataforma que permite integração mais simples entre smartphones (iOS e Android) com microcontroladores (Arduino, Node MCU, Raspberry Pi, entre outros).

Step 3: Montagem Do Ambiente

Primeiramente, deve-se criar uma conta no ThingSpeak. Siga as instruções do site: https://thingspeak.com/users/sign_up

Em seguida, crie um novo canal, e defina os parâmetros que serão recebidos. Você receberá um número de identificação (ID) do canal criado em seu e-mail. Este ID é necessário para fazer o upload de dados para o seu canal.

Agora, vamos configurar o Blynk: http://www.blynk.cc/getting-started/

Baixe o aplicativo do Blynk para o seu Android, e cria uma conta no serviço. Em seguida, crie um novo projeto, e escolha a plataforma, neste caso o NodeMCU. Após a criação do projeto, será enviado para seu e-mail um token de autenticação.

Step 4: Programação

Para a codificação do projeto no NodeMCU, utilizamos a IDE do Arduino (veja aqui como configurar: https://www.instructables.com/id/Quick-Start-to-N... ).


Primeiramente, vamos incluir as bibliotecas necessárias para comunicação com o ThingSpeak e o Blynk:

#include <ESP8266WiFi.h>

WiFiClient client;

/* Blynk */
#define BLYNK_PRINT Serial   
#include <BlynkSimpleEsp8266.h>

Para capturar os dados dos sensores de gás e poeira, foram criadas duas funções:

<p>/* Sensor de gás */<br>#define mq2 A0 //MQ-2 analog</p><p>int valor_mq2 = 0;</p><p>/* Sensor de Poeira */</p>#define dsmpin 2 //DSM501A input D4
byte buff[2];
unsigned long duration;
unsigned long starttime;
unsigned long endtime;
unsigned long sampletime_ms = 1000;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;</p><p>/***************************************************<br> * Recebendo Dados do Sensor de Gás
 **************************************************/
void getGasData(void)
{
  valor_mq2 = 0;
  delay (1000);
  int N=9;
  for(int i = 0; i < N; i++) // read sensor "N" times and get the average
  {
    valor_mq2 += analogRead(mq2);
    delay(100);
  }
  valor_mq2 = valor_mq2/N;
  Serial.print("Sensor gas: ");
  Serial.println(valor_mq2); 
  
  if(valor_mq2 >130){
        Blynk.email("egon.16@hotmail.com", "Sensor de Gás", "ALERTA de Concentração de Gás!!!");
        Serial.println("    email de alerta de gás enviado");
  }
}
 /***************************************************
 * Recebendo Dados do Sensor de Poeira
 **************************************************/
void getPoeiraData(void)
{
  duration = pulseIn(dsmpin, LOW);
  lowpulseoccupancy += duration;
  endtime = millis();
  float aux1,aux2 =0;
  if ((endtime-starttime) > sampletime_ms)
  {
    aux1 = (lowpulseoccupancy-endtime+starttime + sampletime_ms)/(sampletime_ms*10.0);  // Integer percentage 0=>100
    aux2 = 0.1*pow(aux1,2)+(619*aux1)+50; // using spec sheet curve
    if (aux1 < 100){
      ratio = aux1;
      concentration = aux2;
    }
    Serial.print("    ratio:");
    Serial.print(ratio);
    Serial.print("    DSM501A:");
    Serial.println(concentration);
    lowpulseoccupancy = 0;
    starttime = millis();
    if(ratio > 42){
        Blynk.email("egon.16@hotmail.com", "Sensor de Poeira", "ALERTA de Concentração de Poeira!!!");
         Serial.println("    email de alerta de poeira enviado");
    }
  }
}</p>

Observe que, em ambas funções acima, utilizamos uma função do Blynk para disparar um email, como um alerta caso os níveis de gás e poeira atinjam níveis elevados:

Blynk.email("meuemail@email.com", "Sensor de Poeira", "ALERTA de Concentração de Poeira!!!");<br>

Tendo os dados dos sensores salvos, agora vamos envia-los para o ThingSpeak. Para comunicação com o ThingSpeak, utilizaremos o protocolo HTTP, efetuando uma requisição POST.

<p>/***************************************************<br> * Enviando os Dados para o ThingSpeak
 **************************************************/
void sendDataTS(void)
{
   if (client.connect(server, 80)) 
   { 
     String postStr = apiKey;
     postStr += "&field1=";
     postStr += String(ratio);
     postStr += "&field2=";
     postStr += String(concentration);
     postStr += "&field3=";
     postStr += String(valor_mq2);
     postStr += "\r\n\r\n";
   
     client.print("POST /update HTTP/1.1\n");
     client.print("Host: api.thingspeak.com\n");
     client.print("Connection: close\n");
     client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");
     client.print("Content-Type: application/x-www-form-urlencoded\n");
     client.print("Content-Length: ");
     client.print(postStr.length());
     client.print("\n\n");
     client.print(postStr);
     delay(1000); 
   }
   client.stop();
}</p>

Neste código, é montado o cabeçalho da requisição HTTP, adicionando o ID do canal criado (apiKey ), e uma string contendo cada um dos parâmetros identificados na criação do canal, com os valores lidos dos sensores de poeira (concentração e proporção de poeira) e gás (concentração de gás). No ThingSpeak, você pode visualizar as informações em forma de gráficos.

Finalmente, enviamos os mesmos dados para um aplicativo Android com o Blynk:

<p>/***************************************************<br> * Enviando Dados para o Blynk
 **************************************************/
void sendDataBlynk()
{
  Blynk.virtualWrite(10, ratio); //pin V10
  Blynk.virtualWrite(11, concentration); // pin V11
  Blynk.virtualWrite(12, valor_mq2); //virtual pin V12
}</p>

Step 5: Conclusão

Completando este guia com sucesso, você poderá tanto visualizar em seu celular informações de concentração de gás e poeira em um dado ambiente, como acompanhar a evolução destes dados através de gráficos pela internet.

Autores:

  • Egon Patrick Marques Silva
  • Frederico Clark
  • Paola Fróes