MONITORAMENTO - MONÓXIDO DE CARBONO, UMIDADE e TEMPERATURA

-----------------------------------------------------------------------------------------------------------------------------

NOSSO OBJETIVO!

👇👇👇👇👇👇👇👇👇👇 

👆👆👆👆👆👆👆👆👆👆

VAMOS LÁ!!!!

---------------------------------------------------------------------------------------------------------------

Montando nossa estação de monitoramento

---------------------------------------------------------------------------------------------------------------

1º Passo  -  ITENS NECESSÁRIOS:  
                 - esp32;
                 - Protoboard;
                 - Sensor MQ - 7;
                 - Sensor dht11;
                 - Cabo usb;
                 - Jumpers, conector Macho/Fêmea; Quantidade (4).
                
Observe os esquemas de ligação dos sensores, separadamente, a seguir:

- DHT11

- SENSOR MQ7


Obs. 1 - Veja nas imagens, acima (no esquema) e abaixo (no real), que a conexão 3v3 está sendo utilizada apenas pelo sensor DHT11O sensor MQ-7, para seu pleno funcionamento, necessita de uma alimentação maior, no caso, de 5V .

Obs. 2 - Com o objetivo de afastar o sensor DHT11 do sensor MQ7 (evitando interferência) utilizamos um cabo macho x macho a mais para a conexão com o pino D14.

----------------------------------------------------------------------------

######   JUNÇÃO DOS DOIS SENSORES À ESP32 ######






2º Passo - Com o esquema montado, vamos para a inserção do código no Arduino IDE.

--------------------------------------------------------------------------------------------------------------------------
COPIE E COLE O CÓDIGO ABAIXO NO ARDUINO IDE
--------------------------------------------------------------------------------------------------------------------------
#include <WiFi.h>
#include <PubSubClient.h> //Biblioteca para as publicações via mqtt
#include <Arduino.h>
#include <analogWrite.h>
//constantes
#define WIFISSID "***********"      //"PJ-2.4G" //Coloque seu SSID de WiFi aqui
#define PASSWORD "***********"   //"3020151050" //Coloque sua senha de WiFi aqui
#define TOKEN "BBFF-h5fV31ikcL9pIaaVH3Auo0uskJ3O3x" //Coloque seu TOKEN do Ubidots aqui
#define VARIABLE_LABEL_TEMPERATURE "temperatura" //Label referente a variável de temperatura criada no ubidots
#define VARIABLE_LABEL_HUMIDITY "umidade" //Label referente a variável de umidade criada no ubidots
#define VARIABLE_LABEL_CO "ppmCO" //Label referente a variável de ppm de CO criada no ubidots
#define DEVICE_ID "5fcc008b1d84726760589fe8" //ID do dispositivo (Device id, também chamado de client name)
#define SERVER "things.ubidots.com" //Servidor do Ubidots (broker)
//Porta padrão
#define PORT 1883
//Tópico aonde serão feitos os publish, "esp32-dht" é o DEVICE_LABEL
#define TOPIC "/v1.6/devices/dispositivo_Temperatura_Umidade_CO"
//Objeto WiFiClient usado para a conexão wifi
WiFiClient ubidots;
//Objeto PubSubClient usado para publish–subscribe
PubSubClient client(ubidots);
/****************************************
 * Fim conexão com o wifi
 ****************************************/
/****************************************
 * Inicio configuração do Sensor
 ****************************************/
//Incluindo a biblioteca do sensor de umidade e temperatura
#include "DHT.h"
//definindo o pino em que o sensor está instalado na protoboard
#define DHTPIN 14     
// Definindo o tipo de sensor a ser usado
#define DHTTYPE DHT11   // DHT 11
//enviando o pino e tipo de sensor para biblioteca
DHT dht(DHTPIN, DHTTYPE);
//criando as variávies do sensor
float temperatura; //Temperatura que será obtida pelo sensor DHT11
float umidade; //Umidade que será obtida pelo sensor DHT11
float Fahrenheit; //O grau Fahrenheit (° F) é umaunidade de medida da grandeza temperatura
float ppmCO; //ppm da leitura do monoxido de carbono
/****************************************
 * Fim sensor 
 ****************************************/
//código para monitorar o monoxido de carbono
float RS_gas = 0;
float ratio = 0;
float sensorValue = 0;
float sensor_volt = 0;
float R0 = 20500.0;
int pinoCO = 34;
//fim
void reconnect(){ 
  //Loop até que o MQTT esteja conectado
  while (!client.connected())  {
    Serial.println("Tentando conexão MQTT...");
    //Tenta conectar
    if (client.connect(DEVICE_ID, TOKEN,"")) 
      Serial.println("conectado");
    else {
      Serial.print("Falhou, rc=");
      Serial.print(client.state());
      Serial.println("tente novamente em 2 segundos");
      //Aguarda 2 segundos antes de retomar
      delay(2000);
    }
  }
}
bool mqttInit(){
  //Inicia WiFi com o SSID e a senha
  WiFi.begin(WIFISSID, PASSWORD);
  //Loop até que o WiFi esteja conectado
  while (WiFi.status() != WL_CONNECTED){
    delay(1000);
    Serial.println("Estabelecendo conexão com WiFi..");
  }
  //Exibe no monitor serial
  Serial.println("Conectado à rede");
  //Seta servidor com o broker e a porta
  client.setServer(SERVER, PORT); 
  //Conecta no ubidots com o Device id e o token, o password é informado como vazio
  while(!client.connect(DEVICE_ID, TOKEN, "")){
      Serial.println("MQTT - Erro na conexão");
      return false;
  }
  Serial.println("MQTT - Conexão ok");
  return true;
}
//Envia valores por mqtt
//Exemplo: {"temperature":{"value":24.50, "context":{"temperature":24.50, "humidity":57.20}}}
bool sendValues(float temperatura, float umidade, float ppmCO){
  char json[250];
  //Atribui para a cadeia de caracteres "json" os valores referentes a temperatura e os envia para a variável do ubidots correspondente
  sprintf(json,  "{\"%s\":{\"value\":%02.02f, \"context\":{\"temperatura\":%02.02f, \"umidade\":%02.02f, \"ppmCO\":%02.02f}}}", VARIABLE_LABEL_TEMPERATURE, temperatura, temperatura, umidade, ppmCO);  
  if(!client.publish(TOPIC, json))
    return false;
    //Atribui para a cadeia de caracteres "json" os valores referentes a umidade e os envia para a variável do ubidots correspondente
  sprintf(json,  "{\"%s\":{\"value\":%02.02f, \"context\":{\"temperatura\":%02.02f, \"umidade\":%02.02f, \"ppmCO\":%02.02f}}}", VARIABLE_LABEL_CO, ppmCO, temperatura, umidade, ppmCO);     
  if(!client.publish(TOPIC, json))
    return false;
  //Atribui para a cadeia de caracteres "json" os valores referentes a umidade e os envia para a variável do ubidots correspondente
  sprintf(json,  "{\"%s\":{\"value\":%02.02f, \"context\":{\"temperatura\":%02.02f, \"umidade\":%02.02f, \"ppmCO\":%02.02f}}}", VARIABLE_LABEL_HUMIDITY, umidade, temperatura, umidade, ppmCO);  
  if(!client.publish(TOPIC, json))
    return false;
  //Se tudo der certo retorna true
  return true;
}
//criando a função de monitoramento do monóxido de carbono

//fim

//função de configuração do ambiente
void setup() {
  //Inicializando o serial
  Serial.begin(115200);
  //escrevendo uma mensagem de teste
  Serial.println("DHTxx test!");
  //inicializando a biblioteca do sensor
  dht.begin();
  //configurando mqtt
  Serial.println("configurando mqtt...");
  //Inicializa mqtt (conecta o esp com o wifi, configura e conecta com o servidor da ubidots)
  if(!mqttInit()){        
    delay(3000);
    Serial.println("Conexão Falhou!");
  }
  Serial.println("OK");

}
void monoxidoCarbono(){
    //Se o esp foi desconectado do ubidots, tentamos reconectar
   sensorValue = analogRead(pinoCO);
   Serial.print("pinoCO: ");
   Serial.println(sensorValue);
   sensor_volt = sensorValue/4096*5.0;
   Serial.print("sensor_volt: ");
   Serial.println(sensor_volt);  
   RS_gas = (5.0-sensor_volt)/sensor_volt;
   ratio = RS_gas/R0; //Replace R0 with the value found using the sketch above
   float x = 1538.46 * ratio;
   float ppm = pow(x,-1.709);
   ppmCO = ppm;
   Serial.print("PPM: ");
   Serial.println(ppm);
}
//Obtém temperatura e umidade do sensor
void getClimate(){  
  //fazendo a leitura da umidade e temperatura, 
  //o sensor leva cerca de 250 milissegundos para dar resposta
  //leitura da umidade do sensor DHT11
  umidade = dht.readHumidity();
  //leitura da temperatura do sensor DHT11
  temperatura = dht.readTemperature();
  //dizendo em qual unidade nós queremos receber os dados de temperatura
  Fahrenheit = dht.readTemperature(true);
  // checando se alguma leitura fallhou, se sim retorna para refazer o processo
  if (isnan(umidade) || isnan(temperatura) || isnan(Fahrenheit)) {
    //mensagem para sabermos se houve erro
    Serial.println("Erro na leitura do sensor DHT11!");
    //retorna ao inicio da função
    return;
  }
  //escrevendo os dados obtidos do sensor
  Serial.print("Umidade: ");
  Serial.print(umidade);
  Serial.print("%  Temperatura: ");
  Serial.print(temperatura);
  Serial.print("°C ou ");
  Serial.print(Fahrenheit);
  Serial.println("°F");
}
//função de atualização dos dados
void loop() {
   
  if(!client.connected())
    reconnect();
  //umidade e temperatura
  getClimate(); 
  //monoxido de carbono
  monoxidoCarbono();
  //Esperamos 2.5s antes de exibir o status do envio para dar efeito de pisca no display
  delay(2500); 
  if(sendValues(temperatura, umidade, ppmCO)){      
    Serial.println("Dados enviados com sucesso");
  }else{      
    Serial.println("O envio de dados falhou");
  }     
  //espera 30 min 
  delay(60000);
}

--------------------------------------------------------------------------------------------------------------------------
Uma vez inserido, faça a verificação do código e em seguida, carregue o código no arduino IDE


_________________________________________
DETALHE IMPORTANTE!!!
_________________________________________


Verificados todos os detalhes, a execução do código pode ser observada no monitor serial do próprio arduino.
👇👇👇👇👇👇👇👇👇👇👇



Em seguida, faça a leitura do monóxido de carbono com o auxílio da "máquina que fuma".

OBS. Para ter acesso a construção da "Máquina que Fuma"

👉(((CLIQUE AQUI)))👈


Observe as imagens a seguir:





Em seguida, acesse a sua conta UBIDOTS, crie/atualize seus dispositivos (conforme já abordado em aulas anteriores), e acompanhe a publicação dos dados.

👇👇👇👇👇👇👇👇👇👇


💥💥👍👍👍💥💥

2 comentários: