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:
(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:
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.
- 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.
- 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.
- O código cria um objeto WiFiClient chamado espClient que será usado para estabelecer a conexão Wi-Fi.
- 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.
- 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.
- 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().
- 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.
- 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.
- 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.
- 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).
- 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:
- A função callback() verifica se o tópico recebido é igual a mqttTopicLedquarto.
- 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 quarto é ligado ou desligado de acordo com o valor recebido
- Se o valor for igual a "true", o LED de quarto é ligado usando digitalWrite(ledPinquarto, HIGH)
- Caso contrário, o LED de quarto é desligado usando digitalWrite(ledPinquarto, LOW).
- 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.
- 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.
- 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.
- 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().
- 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().
- 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 ]