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

[ LOGIN ] [ Autores ]

numero de postagens:1

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 e sensorAtivado 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 pino ledAlerta. A função utiliza a biblioteca ArduinoJson para criar o JSON e a função client.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ção setup(). 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 como false), o pino ledAcesso é ligado e o pino ledNegado é 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 como true), o pino ledAcesso é desligado e o pino ledNegado é 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 ]