Projeto de Subsistema de Software
Introdução
Este documento descreve o desenvolvimento e funcionamento do subsistema de software embarcado baseado no microcontrolador ESP32, projetado para coletar dados de sensores, processá-los e enviá-los para o sistema principal. Este subsistema é implementado utilizando a linguagem C++ e tecnologias específicas para sistemas embarcados.
O objetivo deste documento é fornecer uma visão geral do subsistema, detalhar os componentes utilizados, a metodologia aplicada e os aspectos técnicos que guiam o desenvolvimento e a integração do software embarcado.
Objetivo
O subsistema tem como finalidade:
- Coletar dados de sensores conectados a ESP32.
- Processar as informações localmente, quando necessário.
- Transmitir os dados processados para um sistema maior via comunicação sem fio (Wi-Fi).
- Garantir eficiência, confiabilidade e facilidade de manutenção.
Este subsistema será integrado a um sistema maior, como uma solução IoT (Internet das Coisas), onde os dados coletados serão utilizados para monitoramento ou para análise posterior.
Metodologia
Para o desenvolvimento do subsistema, foi utilizada a seguinte abordagem:
1. Análise de Requisitos: Identificação das funcionalidades necessárias, como tipos de sensores suportados, métodos de comunicação e restrições de hardware.
2. Planejamento Técnico:
- Escolha da ESP32 como microcontrolador principal;
- Definição dos sensores e protocolos de comunicação;
- Seleção da linguagem de programação e ferramentas de desenvolvimento.
3. Implementação:
- Desenvolvimento do software embarcado em C++.
- Configuração da ESP32 para comunicação com sensores e o ambiente externo.
4. Testes:
- Testes unitários para validar cada componente;
- Testes de integração para garantir a compatibilidade entre sensores, ESP32 e o sistema principal.
5. Documentação e Manutenção:
- Criação de documentação técnica;
- Configuração de processos para atualizações futuras.
ESP32
O ESP32 foi escolhido como o microcontrolador principal devido às suas características:
- Wi-Fi integrados: Permite comunicação sem fio eficiente.
- Alta performance: Processador dual-core com capacidade de processamento suficiente para operações embarcadas.
- Baixo consumo de energia: Ideal para aplicações IoT que demandam eficiência energética.
- Ampla compatibilidade com sensores: Suporte para GPIO, I2C, SPI, ADC, entre outros.
O ESP32 atua como o núcleo do subsistema, gerenciando a coleta de dados, o processamento e a comunicação.
Sensores
Os sensores conectados ao subsistema são responsáveis por coletar dados do ambiente. Exemplos de sensores utilizados:
- Sensor Ultrassônico: Utilizado para detectar a presença de objetos ou sua ausência para cálculos de distância;
- Sensor Infravermelho: Será utilizado para fazer as verificações da angulação da cadeira;
Módulo Regulador de Tensão: Utilizado integrado a bateria da cadeira, para fazer o controle da tensão para os componentes, evitando queimas e sobrecargas;
- Módulo Driver Ponte H: Utilizado no sistema de deslocamento da cadeira para controle do motor;
- Botão de Emergência Cogumelo: Responsável por permitir ao usuário acionar o sistema de emergência da cadeira;
Módulo Voltímetro Sensor de Tensão para Arduíno: Serve para detectar a tensão de todos os componentes ligados ao arduíno.
Linguagem C++
A linguagem C++ foi escolhida para o desenvolvimento do software embarcado devido a:
- Eficiência: Permite controle direto do hardware e alto desempenho.
- Compatibilidade: Suporte nativo para microcontroladores como o ESP32.
- Flexibilidade: Possibilidade de otimização de código para atender às restrições de memória e processamento.
Tecnologia Utilizada
As tecnologias e ferramentas empregadas no desenvolvimento do sub-sistema incluem:
-
Hardware:
- ESP32 (microcontrolador).
- Sensores (DHT11, BMP280, HC-SR04, etc.).
-
Software:
- Arduino IDE: ambiente oficial de desenvolvimento para os dispositivos da plataforma Arduino.
- PlatformIO: Ferramenta de desenvolvimento integrada para sistemas embarcados.
- Visual Studio Code: Ambiente de desenvolvimento integrado (IDE).
- Protocolos de Comunicação:
- UART: Para comunicação com sensores.
- Wi-Fi: Para transmissão de dados ao sistema principal.
Software Embarcado
O software embarcado desenvolvido para o ESP32 segue uma arquitetura assimétrica e é composto pelos seguintes componentes principais:
Camada de Abstração de Hardware (HAL)
- Gerencia a comunicação com os sensores;
- Fornece funções para leitura e escrita em interfaces como GPIO, I2C e SPI.
Camada de Lógica de Negócio
- Processa os dados coletados pelos sensores;
- Aplica transformações ou cálculos necessários antes de enviar os dados.
Camada de Comunicação
- Envia os dados processados para o sistema principal via Wi-Fi;
- Implementa protocolos como UART e TCP para transmissão de dados.
Gerenciamento de Energia
Otimiza o consumo de energia do ESP32, utilizando modos de baixa energia (Deep Sleep) quando o sub-sistema não está em uso.
Tratamento de Erros
- Detecta falhas na comunicação com sensores ou no envio de dados.
- Implementa mecanismos de recuperação, como reinicialização de módulos ou reenvio de dados.
Servidor de E-mail para Comunicação com a Alexa e Monitoramento da Cadeira de Rodas
Este tópico descreve a implementação de um servidor de e-mail utilizado para comunicação entre a Alexa e a cadeira de rodas SpeedCahir equipada com uma ESP32. O objetivo é permitir que a Alexa obtenha informações sobre o estado da cadeira de rodas, incluindo nível de bateria, status dos sensores de proximidade, status do botão de emergência e o estado operacional.
Arquitetura do Sistema
O sistema consiste nos seguintes componentes:
- ESP32: Responsável por coletar os dados dos sensores e enviar para a API.
- Servidor de E-mail: Gerencia a comunicação entre a Alexa e a ESP32 e gera um relatório com os dados do monitoramento.
- API Web: Recebe os dados da ESP32 e os armazena para consulta pela Alexa.
- Amazon Alexa: Obtém os dados da API para fornecer informações ao usuário.
Coleta de Dados pela ESP32
A ESP32 lê os seguintes sensores:
- Nível da bateria
- Sensor de ré
- Sensor de degrau
- Botão de emergência
Esses dados são enviados para a API através de requisições HTTP.
Comunicação via API
A ESP32 envia um **JSON** contendo os dados coletados para a API em https://codigo-fonte-api.onrender.com/create-data-esp.
Formato da requisição
{
"bateria": 85,
"sensor_re": "ativado",
"sensor_degrau": "15.4 cm",
"botao_emergencia": false
}
Servidor de E-mail
O servidor de e-mail recebe solicitações da Alexa e retorna as informações mais recentes da cadeira de rodas em um relatório completo. O link abaixo contém o modelo de reletório que é gerado e enviado pelo servidor. O relatório contém um resumo de dados, um gráfico referente ao nível médio da bateria por dia e uma tabela com os dados coletados da cadeira de rodas.
Link para visualizar o modelo de relatório
Integração com a Alexa
A Alexa consulta os dados via e-mail ou diretamente da API e informa ao usuário sobre o status da cadeira de rodas.
Código ESP32
A ESP32 se conecta ao Wi-Fi, lê os sensores e envia os dados para a API periodicamente. O código inclui:
- Conexão com Wi-Fi
- Leitura dos sensores
- Envio de dados para a API
- Controle dos motores via joystick
Trecho principal do código de envio de dados
void enviarDadosParaAPI(int bateria, String sensorRe, String sensorDegrau, bool botaoEmergencia) {
WiFiClientSecure client;
client.setInsecure();
HTTPClient http;
http.begin(client, serverName);
http.addHeader("Content-Type", "application/json");
String jsonPayload = "{";
jsonPayload += "\"bateria\":" + String(bateria) + ",";
jsonPayload += "\"sensor_re\":\"" + sensorRe + "\",";
jsonPayload += "\"sensor_degrau\":\"" + sensorDegrau + "\",";
jsonPayload += "\"botao_emergencia\":" + String(botaoEmergencia ? "true" : "false");
jsonPayload += "}";
int httpResponseCode = http.POST(jsonPayload);
http.end();
}
Skill Alexa - Assistente de Cadeira
A Assistente de Cadeira é uma skill personalizada para a Alexa que auxilia no monitoramento da cadeira de rodas inteligente. Ela permite gerar relatórios personalizados, consultar informações sobre a bateria, verificar alertas de emergência e obter dados estatísticos sobre o uso da cadeira.
Principais Funcionalidades
Monitoramento da Bateria
- Consultar a autonomia da bateria: "Alexa, qual é a autonomia da bateria?"
- Verificar o nível atual da bateria: "Alexa, qual é a bateria atual da cadeira?"
- Obter estatísticas de consumo: "Alexa, qual foi o maior consumo de bateria entre [data início] e [data fim]?"
- Saber quando a bateria atinge um nível crítico: "Alexa, qual o horário médio para a bateria atingir 30%?"
- Verificar a frequência de bateria baixa entre datas: "Alexa, quantas vezes a bateria ficou abaixo do nível crítico?"
Geração de Relatórios Personalizados
- Relatórios diários, semanais e mensais sobre o uso da cadeira.
- Exemplo: "Alexa, gere um relatório dos últimos 7 dias."
Monitoramento de Emergências
- Verificar status de alertas: "Alexa, há alguma emergência?"
- Identificar horários mais comuns de emergência: "Alexa, qual é o horário mais comum de emergências?"
- Consultar o tempo médio de resposta a emergências: "Alexa, qual o tempo médio de resposta?"
Permissões Necessárias
- A skill requer acesso a:
- Notificações de dispositivos Alexa.
- Leitura do e-mail do perfil do usuário para envio de relatórios.
Integração com o Servidor
- A skill se comunica com um servidor remoto via AWS Lambda para processar e armazenar dados da cadeira de rodas, garantindo informações precisas e atualizadas.
Conclusão
Este subsistema de software foi projetado para ser eficiente, modular e confiável, atendendo aos requisitos de sistemas embarcados modernos. A combinação do ESP32, sensores variados e a linguagem C++ permite uma solução robusta para aplicações IoT e outras áreas que demandam coleta e transmissão de dados.
Com base nesta documentação, futuros desenvolvedores poderão compreender e expandir o sub-sistema, garantindo sua evolução e adaptação a novos cenários.
Tabela de Versionamento
Versão | Data | Descrição | Responsável |
---|---|---|---|
1.0 | 19/11/2024 | Criação inicial dos subsistemas de software do SpeedChair | Eduardo Santos |
1.1 | 25/11/2024 | Reestruturação do documento de subsistema | Emivalto da Costa |
1.2 | 30/11/2024 | Padronização do documento de subsistema | Wildemberg Sales |
1.3 | 01/12/2024 | Correção de informações | Eduardo Santos |
1.4 | 20/01/2025 | Atualização de informações | Eduardo Santos |
1.5 | 18/02/2025 | Revisão e correção do documento | Ester Lino |