Skip to content

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