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

(ARCV) Automação Residencial com Controle por Voz.

A automação residencial com controle por voz é uma solução inovadora que transforma casas em espaços inteligentes. Utilizando tecnologias como reconhecimento de voz, assistentes virtuais e dispositivos conectados, essa abordagem revoluciona a forma como interagimos com nossos ambientes domésticos. Com assistentes virtuais populares, como a Alexa, a Siri e o Google Assistente, podemos controlar dispositivos e sistemas da casa por meio de comandos de voz, proporcionando conveniência e eliminando a necessidade de interações físicas diretas.

Essa transformação é possível graças à interconexão dos dispositivos por meio da Internet das Coisas (IoT). Sensores, atuadores e sistemas de controle são conectados em uma rede inteligente, permitindo o monitoramento e o gerenciamento remoto da residência.

Tecnologias como MQTT e Node-RED desempenham um papel importante nesse processo. O MQTT é um protocolo de mensagens eficiente que facilita a troca de informações entre os dispositivos. Já o Node-RED é uma ferramenta de programação visual que simplifica a integração dos dispositivos e a criação de fluxos de automação personalizados. Com o uso dessas tecnologias, a automação residencial com controle por voz oferece conveniência, segurança e eficiência energética. Os comandos de voz permitem o controle dos dispositivos sem a necessidade de interfaces físicas específicas. Além disso, é possível acionar sistemas de segurança e gerenciar a iluminação e a temperatura, resultando em maior segurança e economia de energia.

Materiais e Métodos:

  • Node-RED: Utilizado como ferramenta de programação visual para criar os fluxos de automação.
  • AWS EC2: Serviço de computação em nuvem usado para hospedar o servidor Node-RED.
  • 3 potenciômetros: Simulam os sensores .
  • ESP32: Microcontrolador que conecta os potenciômetros ao servidor Node-RED via Wi-Fi.

 


Procedimento:

1. Configuração do AWS EC2: Criar uma instância EC2, instalar o Node-RED e configurar um servidor MySQL.

2. Configuração dos potenciômetros: Conectar aos pinos adequados do ESP32 e ler os valores dos potenciômetros.

3. Comunicação via MQTT: Utilizar a biblioteca MQTT no ESP32 para enviar os dados dos potenciômetros para o servidor Node-RED.

4. Desenvolvimento dos fluxos no Node-RED: Criar fluxos para receber os dados MQTT do ESP32, processá-los e armazenar no banco de dados MySQL.

5. Armazenamento de dados no MySQL: Configurar o Node-RED para se conectar ao banco de dados MySQL e salvar os dados recebidos dos potenciômetros.

6. Testes e ajustes: Verificar o funcionamento correto dos fluxos, incluindo a correta inserção dos dados no banco de dados MySQL.

Nesse procedimento, além dos materiais e tecnologias mencionadas, é adicionado o uso do banco de dados MySQL. O Node-RED é configurado para se conectar ao MySQL e salvar os dados recebidos dos potenciômetros, permitindo o armazenamento e posterior consulta das informações coletadas. Isso possibilita o registro e histórico dos valores dos potenciômetros ao longo do tempo.

CODIGO:

Link para o codigo:Link para o código

 


Explicação:

 


  1. Configurações Wi-Fi e MQTT:
    • ssid e password representam o nome e a senha da rede Wi-Fi que você deseja se conectar.
    • mqttServer é o endereço do servidor MQTT ao qual você deseja se conectar.
    • mqttPort é a porta utilizada para a conexão MQTT (geralmente, é a porta 1883 para MQTT sem criptografia).
    • mqttUser e mqttPassword são as credenciais de autenticação para o servidor MQTT.
  2. Tópicos MQTT:
    • mqttTopicsala, mqttTopiccozinha e mqttTopicquarto são os tópicos MQTT usados para enviar e receber mensagens relacionadas a diferentes áreas do sistema.
    • mqttTopicLedsala, mqttTopicLedcozinha e mqttTopicLedquarto são os tópicos MQTT usados para controlar os LEDs em cada área específica.
  3. Pinos dos sensores e LEDs:
    • sensorPinsala, sensorPincozinha e sensorPinquarto são os números dos pinos usados para conectar os sensores em cada área.
    • ledPinsala, ledPincozinha e ledPinquarto são os números dos pinos usados para conectar os LEDs em cada área.

 

  1. O código cria um objeto WiFiClient chamado espClient que será usado para estabelecer a conexão Wi-Fi.
  2. Em seguida, o objeto espClient é passado como parâmetro para o construtor do objeto PubSubClient chamado client. Isso configura o cliente MQTT para usar a conexão Wi-Fi estabelecida pelo espClient.
  3. A função setup() é uma função especial do Arduino que é executada apenas uma vez no início do programa. Nela, as seguintes ações são realizadas:
    • A comunicação serial é iniciada com uma taxa de transmissão de 115200 baud (Serial.begin(115200)).
    • A conexão Wi-Fi é estabelecida usando o nome da rede (ssid) e a senha (password) fornecidos. O código aguarda até que a conexão seja estabelecida antes de prosseguir para as próximas linhas.
    • O endereço IP local do dispositivo ESP32 é obtido usando a função WiFi.localIP() e é exibido no monitor serial para fins de depuração.
    • Os pinos dos LEDs (ledPinsala, ledPincozinha, ledPinquarto) são configurados como saídas usando a função pinMode(). Isso permite controlar os LEDs conectados a esses pinos.
    • O servidor MQTT (mqttServer) e a porta MQTT (mqttPort) são configurados usando o método setServer() do objeto client.

A função de retorno de chamada (callback) para processar as mensagens recebidas pelo cliente MQTT é configurada usando o método setCallback() do objeto client.

  1. Conexão ao servidor MQTT:
    • Um loop é iniciado enquanto o cliente MQTT não estiver conectado.
    • Uma mensagem de "Conectando ao servidor MQTT..." é exibida no monitor serial.
    • O cliente MQTT tenta se conectar ao servidor usando o método connect().
    • Se a conexão for bem-sucedida, uma mensagem de "Conectado ao servidor MQTT!" é exibida no monitor serial.
    • O cliente MQTT se inscreve em três tópicos usando o método subscribe().
  2. Falha na conexão ao servidor MQTT:
    • Se a conexão falhar, uma mensagem de "Falha na conexão - Estado: " é exibida no monitor serial.
    • O estado atual do cliente MQTT é obtido usando o método state().
    • Há um atraso de 2 segundos antes de tentar novamente a conexão.
  3. Função de retorno de chamada (callback):
    • A função callback() é chamada quando uma mensagem é recebida no cliente MQTT.
    • Ela recebe o tópico (topic), o payload (conteúdo da mensagem) e o comprimento do payload (length).
    • A função processa as mensagens recebidas de acordo com a lógica do programa.
  4. Processamento de mensagens para o LED de sala:
    • A função callback() verifica se o tópico recebido é igual a mqttTopicLedsala.
    • Se for o caso, o valor recebido é exibido no monitor serial.
    • O payload (em formato de vetor de bytes) é convertido para uma string para uso posterior no programa.

  1. Processamento de mensagens para o LED de sala:
    • O valor recebido é convertido para letras minúsculas usando o método toLowerCase().
    • O LED de sala é ligado ou desligado de acordo com o valor recebido:
      • Se o valor for igual a "true", o LED de sala é ligado usando digitalWrite(ledPinsala, HIGH).
      • Caso contrário, o LED de sala é desligado usando digitalWrite(ledPinsala, LOW).
  2. Processamento de mensagens para o LED de cozinha:
    • A função callback() verifica se o tópico recebido é igual a mqttTopicLedcozinha.
    • Se for o caso, o valor recebido é exibido no monitor serial.
    • O payload (em formato de vetor de bytes) é convertido para uma string para uso posterior no programa.
    • O valor da string é convertido para letras minúsculas usando o método toLowerCase().
    • O LED de cozinha é ligado ou desligado de acordo com o valor recebido:
      • Se o valor for igual a "true", o LED de cozinha é ligado usando digitalWrite(ledPincozinha, HIGH).
      • Caso contrário, o LED de cozinha é desligado usando digitalWrite(ledPincozinha, LOW).

Processamento de mensagens para o LED de quarto:

  1. A função callback() verifica se o tópico recebido é igual a mqttTopicLedquarto.
  2. Se for o caso, o valor recebido é exibido no monitor serial.
  3. O payload (em formato de vetor de bytes) é convertido para uma string para uso posterior no programa.
  4. O valor da string é convertido para letras minúsculas usando o método toLowerCase().
  5. O LED de quarto é ligado ou desligado de acordo com o valor recebido
  6. Se o valor for igual a "true", o LED de quarto é ligado usando digitalWrite(ledPinquarto, HIGH)
  7. Caso contrário, o LED de quarto é desligado usando digitalWrite(ledPinquarto, LOW).

 

  1. Função reconnect():
    • Essa função é responsável por tentar reconectar ao servidor MQTT caso a conexão seja perdida.
    • Um loop é iniciado enquanto o cliente MQTT não estiver conectado.
    • Uma mensagem de "Tentando reconectar ao servidor MQTT..." é exibida no monitor serial.
    • O cliente MQTT tenta se reconectar ao servidor usando o método connect().
    • Se a conexão for bem-sucedida, uma mensagem de "Conectado ao servidor MQTT!" é exibida no monitor serial.
    • O cliente MQTT se inscreve nos tópicos mqttTopicLedsala, mqttTopicLedcozinha e mqttTopicLedquarto usando o método subscribe().
    • Se a conexão falhar, uma mensagem de "Falha na conexão - Estado: " é exibida no monitor serial.
    • O estado atual do cliente MQTT é obtido usando o método state().
    • Há um atraso de 2 segundos antes de tentar novamente a conexão.
  2. Função loop():
    • Essa função é executada continuamente em um loop na placa ESP32.
    • Se o cliente MQTT não estiver conectado, a função reconnect() é chamada para tentar reconectar ao servidor.
    • O método loop() do objeto client é chamado para manter a comunicação com o servidor MQTT.
    • Os valores dos sensores analógicos (sensorPinsala, sensorPincozinha, sensorPinquarto) são lidos usando analogRead().
    • Os valores dos sensores são mapeados para uma faixa de 0 a 100 usando map(), para obter valores percentuais.
    • Os valores mapeados são convertidos para strings usando String().
    • As strings dos valores dos sensores são armazenadas nas variáveis salaPayload, cozinhaPayload e quartoPayload para uso posterior no programa.

  1. Envio de dados para o Node-RED - Sala:
    • Uma mensagem é exibida no monitor serial informando que os dados estão sendo enviados para o Node-RED, seguida pelo valor da variável sala.
    • O cliente MQTT publica (envia) a mensagem contida na variável salaPayload para o tópico mqttTopicsala usando o método publish().
    • O método c_str() é usado para obter um ponteiro para a string contida em salaPayload no formato de vetor de caracteres.
  2. Envio de dados para o Node-RED - Cozinha:
    • Uma mensagem é exibida no monitor serial informando que os dados estão sendo enviados para o Node-RED, seguida pelo valor da variável cozinha.
    • O cliente MQTT publica (envia) a mensagem contida na variável cozinhaPayload para o tópico mqttTopiccozinha usando o método publish().
  3. Envio de dados para o Node-RED - Quarto:
    • Uma mensagem é exibida no monitor serial informando que os dados estão sendo enviados para o Node-RED, seguida pelo valor da variável quarto.
    • O cliente MQTT publica (envia) a mensagem contida na variável quartoPayload para o tópico mqttTopicquarto usando o método publish().
  4. Atraso e repetição:
    • Há um atraso de 1 segundo usando o comando delay(1000) para controlar a frequência de envio dos dados.
    • Em seguida, o código retorna ao início do loop para repetir o processo de leitura dos sensores e envio dos dados.

 

Flow:

Link para o flow : Flow - Marcus Redondo

 

 

Este é o flow ultilizado para as logicas de cada cômodo da casa 


Nó "ui_gauge": Este nó exibe um medidor de nível de som (decibéis) em uma interface gráfica.

Nó "debug": Este nó é usado para depuração. Ele exibe mensagens no console do Node-RED.

Nó "ui_chart": Este nó exibe um gráfico de linha na interface gráfica para visualizar os dados ao longo do tempo.

Nó "ui_led": Este nó exibe um LED na interface gráfica para indicar o estado de um dispositivo.

Nó "function": Este nó executa uma função JavaScript personalizada. Pode ser usado para manipular e transformar mensagens.

Nó "ui_text": Este nó exibe um texto na interface gráfica.

Nó "comment": Este nó é usado para adicionar um comentário no fluxo para fins de documentação.

Nó "mqtt out": Este nó envia mensagens para um tópico MQTT específico.

Nó "mqtt in": Este nó recebe mensagens de um tópico MQTT específico.

Nó "ui_group": Este nó agrupa outros nós relacionados visualmente em uma interface gráfica.

Nó "mqtt-broker": Este nó é configurado como o broker MQTT para se conectar a um servidor MQTT

Nó "Delay 5s": Este Nó não deixa as informações travarem na função CallBack do codigo 


Essa é a parte que lida com a leitura de dados de sensores e armazená-los em um banco de dados MySQL

 

Os nós "mqtt in" estão configurados para receber os dados dos sensores nos tópicos "esp32/sala", "esp32/cozinha" e "esp32/quarto".
Os nós "function" ("Sala", "Cozinha" e "Quarto") são responsáveis por extrair os valores dos sensores dos dados recebidos e adicioná-los à mensagem.
O nó "join" combina as mensagens recebidas dos três sensores em um único objeto.
O nó "delay" introduz um atraso de 5 segundos para permitir que os dados sejam coletados antes de serem inseridos no banco de dados.
O nó "function" ("INSERT") cria uma instrução SQL de inserção com os valores dos sensores e a data/hora atual.
O nó "mysql" executa a instrução SQL de inserção e armazena os dados no banco de dados MySQL.
O nó "inject" é usado para disparar uma consulta de exclusão dos dados da tabela "tempLog".
O nó "mysql" executa a instrução SQL de exclusão no banco de dados.
O nó "inject" é usado para disparar uma consulta de seleção dos últimos 10 dados da tabela "tempLog".
O nó "function" ("SELECT") cria a instrução SQL de seleção.
O nó "mysql" executa a instrução SQL de seleção e retorna os dados da tabela.
O nó "change" é usado para formatar os dados retornados em um formato adequado para exibição no gráfico.
O nó "ui_chart" exibe os dados formatados em um gráfico na interface do usuário.

Essa é a dashboard finalizada com o monitoramento dos 3 cômodos da casa.

 

Em conclusão, a automação residencial com controle por voz é uma solução inovadora que oferece conveniência, segurança e eficiência energética. Através do uso de tecnologias como reconhecimento de voz, assistentes virtuais e dispositivos conectados, é possível transformar casas em espaços inteligentes, permitindo o controle de dispositivos e sistemas por meio de comandos de voz. A interconexão dos dispositivos por meio da Internet das Coisas (IoT) desempenha um papel fundamental nesse processo, possibilitando o monitoramento e gerenciamento remoto da residência. O uso de protocolos eficientes como o MQTT e ferramentas de programação visual como o Node-RED simplificam a integração dos dispositivos e a criação de fluxos de automação personalizados. Ao utilizar a automação residencial com controle por voz, é possível controlar dispositivos sem a necessidade de interfaces físicas específicas, tornando a interação mais intuitiva e conveniente. Além disso, é possível acionar sistemas de segurança, gerenciar a iluminação e a temperatura, resultando em maior segurança e economia de energia. A combinação de sensores, atuadores, assistentes virtuais e sistemas de controle inteligentes cria um ambiente residencial que se adapta às necessidades e preferências do usuário, proporcionando um maior conforto e qualidade de vida. No contexto do procedimento apresentado, o uso do Node-RED, AWS EC2, potenciômetros e ESP32 demonstra uma implementação prática da automação residencial com controle por voz. A integração desses elementos permite a coleta de dados dos sensores, o envio e recebimento de informações via MQTT, o processamento e armazenamento desses dados em um banco de dados MySQL, além de interações com LEDs e a exibição de informações em uma interface gráfica. Em suma, a automação residencial com controle por voz representa uma tendência crescente na transformação digital dos ambientes domésticos, proporcionando uma experiência mais intuitiva, eficiente e conectada aos usuários. Com o avanço contínuo da tecnologia, é provável que novas inovações e aprimoramentos surjam nesse campo, tornando nossas casas cada vez mais inteligentes e personalizadas às nossas necessidades.

 

[ID:155] Autor: - Criado em: 2023-06-21 04:11:38 - [ Compartilhar ]