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.
Comments