Introduction: Monitoramento Térmico De Uma Sala

Este projeto tem por objetivo apresentar um
protótipo para a medição, monitoramento e controle de temperatura de uma sala utilizando-se o microcontrolador ESP32 e um módulo de relés, efetuando o monitoramento e comando remoto através de aplicação na internet no portal AdaFruit.

Figura 1 - Microcontrolador ESP32.

Figura 2 - Montagem com os dispositivos.

Step 1: Componentes Necessários

Abaixo estão relacionados os componentes

utilizados para realização deste projeto:

1. Módulo ESP32, wifi 2.4Ghz, conector micro usb, tensão de operação 4,5-9V, bluetooth BLE 4.2, com 4mb de memória flash, acesso remoto, CPU Xtensa® Dual-Core 32-bit LX6, ROM 448KBytes, RAM 520Kbytes.

Figura 3 - Módulo ESP32

Para alimentação de 5V da placa do ESP32, utilizamos a porta USB do computador.

2. Módulo de 4 relés, modelo SRD-05VDC-SL-C., fabricante HONG WEI, contatos NAF, tensão de operação 5V, corrente 15-20mA, com LED indicador de status, tempo de resposta 5-10ms.

3. Sensor de temperatura, fabricante Dallas, modelo DS18B20, tensão 3.0V a 5.5V, faixa de medição -55ºC a +125ºC, precisão +/-0.5ºC, resolução de 9 a 12bits.

4. Fonte de alimentação chaveada, entrada 127/220V, saída 24Vcc, corrente de saída 5A, potência 120W.

5. Protoboard 830 pontos, modelo 2PB03, faixa de temperatura -20 a +80ºC, para condutores 0,3 a 0,8mm, resistência de isolamento 100Mohm, tensão máxima 500Vca por minuto.

6. Resistor de 4,7 kΩ, 1/4W.

7. Jumpers para protoboard, 20cm.

8. Sinalizador luminoso, LED, alto brilho, 24Vcc.

9. Ventilador (cooler).

Step 2: Ligações Elétricas Dos Componentes E Descrição Geral

Este projeto foi desenvolvido para realizar a medição, monitoramento e controle da temperatura de uma sala genérica.

Para que os dados estivessem disponíveis remotamente, foi desenvolvida a comunicação com a WEB, fornecendo uma sinalização de temperatura alta, leitura das medidas e comando de um ventilador.

Todo o processamento e controle é realizado pelo microcontrolador ESP32, que é alimentado em 5V via USB de um computador.

A medição de temperatura é feita através do sensor Dallas DS18B20.

O sensor de temperatura está interligado à porta D4 do ESP32.

Foi adicionado um resistor de 4,7 kΩ, em paralelo ao sensor de temperatura, conforme recomendado na folha de dados fabricante.

O microcontrolador ESP32 está interligado às entradas do módulo de relés IN1 e IN2 através das portas de 3.3V D2 e D5, respectivamente.

Foram utilizados os relés K1 e K2 do módulo de relés SRD-05VDC-SL-C para o acionamento do sinaleiro vermelho e do ventilador. Neste projeto utilizamos uma ventoinha de computador.

A placa de relés é alimentada pela fonte chaveada de 5A e 24Vcc.

A aplicação WEB Adafruit foi utilizada para integração com o microcontrolador ESP32.

A comunicação do ESP32 com a internet é feita via rede WiFi, nativo do microcontrolador.

Step 3: O Código

#include

#include

#include

#include "config.h"

#include "Adafruit_MQTT.h"

#include "Adafruit_MQTT_Client.h"

#define AIO_SERVER "io.adafruit.com"

#define AIO_SERVERPORT 1883

#define AIO_USERNAME "marciogodinho"

#define AIO_KEY "aio_DIKY81Xj9MsYvYcLueWCmX29t2lC"

#define WIFI_SSID "CASA_2G"

#define WIFI_PASS "Marcio11"

float temperatura;

int sinalizacao = 1;

int ventilacao = 1;

String status1;

// Declaração da porta utilizada pelo sensor de temperatura e seus parametros

const int portaDallas = 4;

OneWire oneWire(portaDallas);

DallasTemperature sensor(&oneWire);

//declaração da porta utilizada pelo rele

const int rele = 2;

const int rele2 = 5;

//configuração do feed

WiFiClient client;

Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

Adafruit_MQTT_Publish _temperatura = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperatura", MQTT_QOS_1);

Adafruit_MQTT_Publish _ventilacao = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/ventilacao", MQTT_QOS_1);

Adafruit_MQTT_Publish _sinalizacao = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/sinalizacao", MQTT_QOS_1);

Adafruit_MQTT_Subscribe _rele = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rele", MQTT_QOS_1);

void setup() {

// inicio

Serial.begin(115200);

pinMode(rele, OUTPUT); //rele1

pinMode(rele2, OUTPUT); //rele1

sensor.begin(); //sensor

digitalWrite(rele, HIGH); //rele sempre iniciará desacoplado

digitalWrite(rele2, HIGH); //rele sempre iniciará desacoplado

//inicialização do wifi

WiFi.begin(WIFI_SSID, WIFI_PASS);

while (WiFi.status() != WL_CONNECTED) {

delay(1000);

Serial.println("Aguardando conexão Wifi..");

}

Serial.println("Wifi conectado");

Serial.println("Endereço IP: "); Serial.println(WiFi.localIP());

Serial.println();

initMQTT();

}

void loop() {

conectar_broker();

mqtt.processPackets(5000);

if (mqtt.connected())

{

if (temperatura > 0)

{

if (!_temperatura.publish(temperatura)) {

Serial.println("Falha ao enviar o valor do sensor.");

}

}

if (!_ventilacao.publish(ventilacao)) {

Serial.println("Falha ao enviar o valor 'ventilação'");

}

if (!_sinalizacao.publish(sinalizacao)) {

Serial.println("Falha ao enviar o valor 'sinalizacao'");

}

}

//-------------------------------------------------------------------------

sensor.requestTemperatures();

temperatura = sensor.getTempCByIndex(0);

Serial.print("Temperatura: ");

Serial.print(temperatura);

Serial.println("ºC");

delay(5000);

if(temperatura > 32)

{

digitalWrite(rele, LOW);

}

else

{

digitalWrite(rele, HIGH);

}

if(temperatura >= 35)

{

digitalWrite(rele2, LOW);

}

if(temperatura < 35 and status1 == "OFF")

{

digitalWrite(rele2, HIGH);

}

ventilacao = digitalRead(5);

sinalizacao = digitalRead(2);

Serial.println(digitalRead(5));

Serial.println(digitalRead(2));

}

void conectar_broker() {

int8_t ret;

if (mqtt.connected()) {

return;

}

Serial.println("Conectando-se ao broker mqtt...");

uint8_t num_tentativas = 3;

while ((ret = mqtt.connect()) != 0) {

Serial.println(mqtt.connectErrorString(ret));

Serial.println("Falha ao se conectar. Tentando se reconectar em 5 segundos.");

mqtt.disconnect();

delay(5000);

num_tentativas--;

if (num_tentativas == 0)

{

Serial.println("O ESP será resetado.");

while (1);

}

}

Serial.println("Conectado ao broker com sucesso.");

}

void rele_callback(char *data, uint16_t len) {

String state = data;

if (state == "ON") {

status1 = state;

digitalWrite(rele2, LOW);

} else {

if (temperatura < 35)

{

digitalWrite(rele2, HIGH);

}

status1 = state;

ventilacao = digitalRead(5);

}

}

void initMQTT() {

_rele.setCallback(rele_callback);

mqtt.subscribe(&_rele);

}

Step 4: Funcionamento Do Circuito

Inicialmente, ocorre a aquisição dos dados do sensor de temperatura em intervalos de cinco segundos.

Quando a temperatura atinge o valor de 32ºC, o módulo ESP32 envia um sinal para o relé K1, que por sua vez aciona o sinaleiro vermelho.

No portal WEB AdaFruit, o monitoramento, sinalização e comando podem ser efetuados, conforme tela de supervisório demonstrada em anexo.

Figura 12. Supervisório de monitoramento, sinalização e controle. Temperatura x Horário.

Conforme indicado na figura acima, há a possibilidade de acionamento manual do ventilador da sala. Quando este botão virtual é acionado, o módulo ESP32 envia um comando acionando o relé K2, que por sua vez irá acionar o ventilador.

Caso a temperatura atinja 35ºC, ocorre o acionamento automático do relé K2 e por consequência o acionamento do ventilador.

Foi implementado um intertravamento da função de inibir o comando manual, para o caso de o comando automático estar atuado.

O supervisório também apresenta sinalização de ventilador ligado (vermelho) ou desligado (verde).

Referências:

https://www.youtube.com/watch?v=4vNy_LJ1CZQ, acessado 15/12/2020.