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 DHT11. O 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.
👇👇👇👇👇👇👇👇👇👇
💥💥👍👍👍💥💥
muito bom!..me ajudou rsrs
ResponderExcluirShoww rsrs.... Precisando de mais informações, estou à disposição.
Excluir