BLOG - Sistemas Embarcados
Este blog tem como autores os participantes do projeto Smart Campus e alunos das disciplinas: Sistemas Embarcados(Engenharia de Controle e Automação) e Plataformas de prototipação para Internet das Coisas
(Especialização Lato Sensu em Internet das Coisas). O objetivo é a divulgação de trabalhos em desenvolvimento no campus que envolvam a utilização de conceitos de sistemas embarcados, internet das coisas, telemetria e outras tecnologias para a resolução de problemas da indústria, meio ambiente, cidades inteligentes, fazendas inteligentes, ....
Coordenação: Prof. Marcos Chaves
Busca:
Sistema de Alarme e Detecção de Intrusão
A combinação do ESP32, MQTT e Node-RED para um sistema de alarme e detecção de intrusão representa uma solução moderna e eficiente no campo da segurança residencial e comercial. O ESP32 é um microcontrolador poderoso e versátil, capaz de conectar-se à rede Wi-Fi e executar uma variedade de tarefas. O MQTT é um protocolo de mensagens leve e confiável, que permite a comunicação entre dispositivos IoT de forma eficiente. E o Node-RED é uma plataforma de desenvolvimento visual que simplifica a integração e o gerenciamento de fluxos de dados.Neste contexto, a utilização do ESP32 como dispositivo central do sistema de alarme e detecção de intrusão proporciona recursos avançados para monitoramento e controle remoto. O ESP32 pode ser configurado para interagir com sensores de movimento, sensores de abertura de portas e janelas, câmeras de segurança e outros dispositivos de detecção. Esses dados são transmitidos via MQTT, garantindo uma comunicação segura e confiável.
O Node-RED desempenha um papel fundamental ao fornecer uma interface visual intuitiva para configurar e controlar o fluxo de informações. Através de sua interface baseada em nós, é possível criar lógicas de automação personalizadas e acionar ações específicas com base nos eventos de detecção de intrusão. Além disso, o Node-RED permite a integração com outros serviços e plataformas, como notificações por e-mail, mensagens de texto ou integração com sistemas de segurança existentes.Ao combinar essas tecnologias, é possível desenvolver um sistema de alarme e detecção de intrusão altamente eficiente, flexível e escalável. A detecção de intrusão em tempo real é realizada pelos sensores conectados ao ESP32, que enviam alertas via MQTT. O Node-RED, por sua vez, recebe esses alertas, executa ações pré-configuradas, como acionar sirenes, enviar notificações ou registrar eventos em um banco de dados.
Metodologia
Para o desenvolvimento do projeto foi utilizado o microcontrolador ESP32, responsavel pelo controle dos perifericos e comunição com o node-RED via MQTT, por sua vez, o node-RED manipula as informações e as plota no dashboard. foi utilizado para simular o sensor ultrassonico um potênciometro, alem de um buzzer para alerta sonoro e de leds, sendo esses responsaveis pelo status do sistema de forma visual.
Prototipo
Como pode ser visto na figura 1, o ESP32 esta conectado aos dispositivos, o potenciometro posicionado mais ao centro da potoboard para simular o sensor ultrassonico, o buzer usado para o sinal sonoro de alerta posicionado no canto superior direito e logo atrás o led vermelho de sinal de alerta visual que trabalha em conjunto com o buzzer. Há ainda, dois leds posiiconados mais proximos ao ESP, esses são os leds de acesso, o vermelho para sinalizar que o sistema está ativo e armado, o verder é responsavel por sinalizar que o acesso esta liberado,o que significa que pode adentrar na residencia, pois o sistema de alerta de intrusão e alarme esta inativo.
Figura 1(Prototipo do sistema).
Node-RED
Figura 2(Nós de controle).
Por meio desses nós é feito o controle do sistema, como pode ser visualizado pela imagem(Figura 2) por meio dos blocos mqtt-in e mqtt-out são trocadas informações com o esp32. São duas formas de acesso, sendo essa por senha e por botão, possue tambem o "botão reinicia" esse fica responsavel por reiniciar/acionar o sistema de alarme, alem disso, há um led que monitora o status do acesso, mostrando ao usuario se o acesso foi permitido ou se o sistema de alarme esta ativo.
Para a leitura do sensor, os nós da figura 3 mostra como é feita o controle de fluxo de ifnromação do sensor. Os dados do sensor são enviados para o nós pelo bloco esp32/sensor, a informação obtida flui para os demais blocos que manipula e plota em um gauge, que é responsavel por mostrar de forma visual o status de distancia captada do sensor.
Figura 3(nós de leitura do sensor).
Os nós de notificação(figura 4) é responsavel por acionar o led de alerta , esses nós recebem o fluxo de informação pelo bloco esp32/out, esse por sua vez esta em sincronia com o sensor e por meio do dado recebido o usuario é capaz de visualizar na dashboard um led sinalizando o sinal de alerta.
Figura 4(Nós de notificação).
Já os nós da figura 5 são responsaveis pelo banco de dados. Os primeiros blocos recebem as informações de distancia do sensor, armazenam no banco de dados mysql,o node-RED então seleciona os 10 valores plotados na tabela do banco de dados,e se esses dados coletados estiverem de acordo com o criterios pre estabelecidos como ,distancia minima para ativar o alarme, o node-RED então plota as informações em uma tabela no dashboard.
Figura 5(nós de banco de dados).
Node-RED/ Dashboard
coletada as informações do esp, os dados podem então serem manipulados pela dashboard do node-RED. Na Figura 6 podemos visualizar a dashboard do projeto, nela estão dispostos os 2 botões de acesso e de reiniciar o sistema, o campo de senha utilizados tambem como acesso e o gauge anteriormente comentado, que é utilizado para visualizar a distancia do sensor, alem do led de alerta que fica como alerta visual. Os dados de alerta recebidos pelo banco de dados são plotados na tabela, e por meio dela o usuario fica sabendo de forma precisa da data e do horario em que o alarme foi acionado, podendo assim fazer o monitoramento em tempo real dessas possiveis invasões.
Figura 6(dashboard).
Codigo
#include
#include "PubSubClient.h"
#include
#include
- Essas linhas incluem as bibliotecas necessárias para o programa, que são:
WiFi.h
: Permite a conexão do ESP32 a uma rede Wi-Fi.PubSubClient.h
: Biblioteca para a comunicação usando o protocolo MQTT.ArduinoJson.h
: Biblioteca para manipulação de dados em formato JSON.Wire.h
: Biblioteca para comunicação I2C (não utilizada neste código).
const char* ssid = "ifsp-ibge-1";
const char* password = "ifspcatanduva";
const char* mqttServer = "awsluiz.duckdns.org";
const int mqttPort = 1883;
const char* mqttTopic = "casa/controle";
const char* clientId = "ESP32";
const int analogPin = 36;
const int ledAcesso = 27;
const int ledNegado = 12;
const int ledAlerta = 13;
const int buzzerPin = 14;
int lastSensorValue = 0, valorLimite = 50;
- Essas constantes são usadas ao longo do programa e definem configurações como nome da rede Wi-Fi, senha, servidor MQTT, tópico MQTT, pinos dos LEDs e do buzzer, entre outros.
WiFiClient espClient;
PubSubClient client(espClient);
bool sensorAtivado = true;
- Essas variáveis são usadas em diferentes partes do programa.
espClient
é usado para a conexão Wi-Fi,client
é o cliente MQTT esensorAtivado
indica se o sensor está ativado ou não.
void mqttSendJson(float valor1) {
DynamicJsonDocument doc(1024);
doc["device"] = "ESP32";
doc["distancia"] = valor1;
char JSONmessageBuffer[200];
serializeJson(doc, JSONmessageBuffer);
client.publish("esp32/sensor", JSONmessageBuffer);
Serial.print("msg json enviado: ");
Serial.println(JSONmessageBuffer);
}
- Essa função é responsável por criar e enviar uma mensagem JSON contendo o valor da distancia para o tópico MQTT "esp32/sensor". A mensagem é construída usando a biblioteca ArduinoJson e é publicada usando o cliente MQTT.
void mqttSendJsonIO() {
DynamicJsonDocument doc(1024);
doc["device"] = "ESP32";
doc["OUT2"] = digitalRead(ledAlerta);
char JSONmessageBuffer[200];
serializeJson(doc, JSONmessageBuffer);
client.publish("esp32/out", JSONmessageBuffer);
Serial.print("msg json out enviado: ");
Serial.println(JSONmessageBuffer);
}
- A função
mqttSendJsonIO()
envia uma mensagem JSON para um servidor MQTT. A mensagem contém informações sobre o dispositivo ("ESP32") e o estado do pinoledAlerta
. A função utiliza a biblioteca ArduinoJson para criar o JSON e a funçãoclient.publish()
para publicar a mensagem no tópico "esp32/out". O conteúdo da mensagem JSON é exibido no monitor serial para fins de depuração.
void loop() {
client.loop();
if (sensorAtivado) {
int sensorValue = analogRead(analogPin);
if (abs(sensorValue - lastSensorValue) >= 10) {
client.publish("esp32/sensorraw", String(sensorValue).c_str());
lastSensorValue = sensorValue;
float valor = ((float)sensorValue / 4095) * 100;
mqttSendJson(valor);
mqttSendJsonIO();
if (valor <= valorLimite && digitalRead(ledAcesso) == LOW) {
digitalWrite(ledAlerta, HIGH);
tone(buzzerPin, 1000, 1000);
delay(1000);
digitalWrite(ledAlerta, LOW);
noTone(buzzerPin);
}
}
}
delay(500);
}
- A função
loop()
é executada continuamente após a funçãosetup()
. Nela, o cliente MQTT é atualizado (client.loop()
), e se o sensor estiver ativado, é lido o valor do sensor analógico. Se houver uma variação significativa no valor do sensor em relação ao valor anterior, uma mensagem com o valor bruto do sensor é publicada no tópico "esp32/sensorraw". Em seguida, é calculado o valor percentual do sensor e são enviadas mensagens JSON contendo esse valor para os tópicos.
void callback(char* topic, byte* payload, unsigned int length) {
String topicStr = topic;
if (topicStr.equals("casa/controle")) {
String payloadStr = "";
for (int i = 0; i < length; i++) {
payloadStr += (char)payload[i];
}
if (payloadStr.equals("on")) {
sensorAtivado = false; // Desliga o sensor
digitalWrite(ledAcesso, HIGH);
digitalWrite(ledNegado, LOW);
} else if (payloadStr.equals("off")) {
sensorAtivado = true; // Liga o sensor novamente
digitalWrite(ledAcesso, LOW);
digitalWrite(ledNegado, HIGH);
}
}
}
- A função
callback()
é responsável por tratar as mensagens recebidas no tópico MQTT "casa/controle". Ela recebe o tópico, o payload da mensagem e o comprimento do payload como argumentos. - Dentro da função, é verificado se o tópico recebido é igual a "casa/controle". Se for, o payload da mensagem é convertido em uma string e armazenado em
payloadStr
por meio de um loop que itera pelo comprimento do payload. - Em seguida, é verificado o valor da string
payloadStr
. Se for "on", isso significa que o comando para desligar o sensor foi recebido. Nesse caso, o sensor é desativado (sensorAtivado
é definido comofalse
), o pinoledAcesso
é ligado e o pinoledNegado
é desligado. - Se o valor da string for "off", isso indica que o comando para ligar o sensor foi recebido. Nesse caso, o sensor é ativado novamente (
sensorAtivado
é definido comotrue
), o pinoledAcesso
é desligado e o pinoledNegado
é ligado.
Resultados e Discussões
Os resultados obtidos com o projeto demonstrou de forma eficaz a combinação do ESP32, MQTT e Node-RED. Proporcionando um sistema de alarme e detecção de intrusão inteligente e integrado, capaz de garantir a segurança e a tranquilidade de residências e estabelecimentos comerciais. Essa solução oferece flexibilidade, personalização e controle total sobre o sistema de segurança, tornando-se uma opção poderosa para a proteção contra intrusões indesejadas.
[ID:135] Autor: - Criado em: 2023-05-21 14:29:24 - [ Compartilhar ]