Repositório com códigos da aplicação desenvolvida em C++ para a disciplina de Controle Digital do CEFET-RJ, unidade Maracanã. Um diagrama geral do projeto está disponível abaixo:
O objetivo proposto foi construir uma solução capaz de fazer a telemetria e controle de um motor elétrico. Para esse fim foram utilizados o protocolo de comunicação MQTT e um algoritmo de controle PID. Adicionalmente, foi utilizado o InfluxDB para gestão do banco de dados e criação do dashboard.
- Dois motores, usados normalmente em kits de robótica (os amarelos);
- Um módulo de Ponte H com a L298;
- Um encoder óptico;
- Um disco para encoder óptico de 30 rasgos;
- Um Esp32;
- Uma fonte de 5V para protoboard; e
- Duas protoboards e jumpers.
O desenvolvimento foi feito no plugin PlatformIO, o que explica a disposição interna das pastas. As bibliotecas que não estão disponíveis pelo gerenciador do PlatformIO têm o link para o Github no código.
- Encoder4LinReg: utililzado para comparar a rotação medida pelo ESP, através do encoder, e os parâmetros passados para a função de movimento. Sua finalidade é auxiliar na coleta de dados que podem ser usados em uma regressão linear.
- MotorControl: foi feito sem todas as funções de conectividade (WI-FI e MQTT a fim de conhecer melhor o sistema e os parâmetros PID do mesmo.
- MotorControl_mqtt: código final apresentado na disciplina. Conta com a implementação da WI-FI, MQTT e PID no Esp32.
- Server_side: aplicação que roda no lado do servidor. Se comunica com o Broker MQTT e integra ao InfluxDB.
- Mudança dos tipos de variável para uintx_t;
- Fazer um estudo mais aprofundado sobre o derivativo;
- Realizar integração com o MATLAB, pode ser interessante para ter um Observador;
- Construir bibliotecas para deixar o código mais modular;
- Implementar FreeRTOS, talvez separar um core para conectividade e outro para controle;
- Separar os códigos de conectividade e controle em dois microcontrolaroes separados, se comunicando; e
- Motores de maior qualidade podem ter respostas mais agradáveis, pode ser interessante testar modelos diferentes.
A realização desse trabalho foi muito facilitada graças ao esforço do Igor Kelvin, com apoio à definição do escopo e requisitos do projeto, auxilio na parametrização do algoritmo de PID e na implementação de filtros digitais. Também, a ajuda do Isvaldo Ferndandes, CTO da @Squair, essencial para a aplicação da tecnologia do InfluxDB nessa solução. Agradeço imensamente aos dois, assim como a todos os responsáveis pelo conteúdo presente na seção de Referências.
- Playlist de vídeos de outra solução de IoT com tecnologias diferentes (Node Red e IBM Watson)
- Bíblia do Esp32
- Código da aplicação Web feita pela turma de Controle Digital de 2019.2
- Código feito pela turma de Controle Digital de 2019.1
- Interrupções externas no Esp32
- Explanação geral sobre encoders ópticos
- Tutorial básico de PID em Arduino
- Fonte principal do algoritmo de Controle aplicado
- Vídeo que explica alguns conceitos de PID na prática
- Conceito bem próximo da aplicação apresentada aqui