{ "cells": [ { "cell_type": "markdown", "id": "777436b4", "metadata": {}, "source": [ "## Integração do Sistema\n", "\n", "### Requisitos Gerais\n", "\n", "O sistema de controlo do aeropêndulo deve integrar, de forma coerente e segura, os seguintes elementos:\n", "\n", "- **Projeto mecânico:** estrutura física do pêndulo, montagem do motor, hélice e sensor no braço rotativo, fixação estável à base. \n", "- **Projeto elétrico:** ligação da fonte de alimentação, motor, driver, sensor e microcontrolador, garantindo compatibilidade de tensões e correntes. \n", "- **Projeto de controlo:** definição do algoritmo de estabilização (Bang-Bang, PID ou LQR) e respetiva implementação em tempo real. \n", "- **Projeto de software:** programação em Arduino IDE (C/C++), com leitura de sensores, execução periódica do controlo e comando ao atuador. \n", "- **Desenvolvimento e testes:** verificação faseada, primeiro em simulação, depois com módulos isolados, e finalmente no sistema integrado. \n", "- **Documentação:** registo dos esquemas, código, parâmetros e resultados experimentais. \n", "\n", "---\n", "\n", "### Componentes Típicos\n", "\n", "- **Microcontrolador:** Arduino Uno, Nano ou Mega. \n", "- **Sensor de ângulo:** encoder magnético (ex.: AS5600 via I²C). \n", "- **Atuador:** motor DC com hélice, comandado por um driver (ex.: L298N ou TB6612FNG). \n", "- **Fonte de alimentação:** adequada às especificações do motor e do controlador (tipicamente 3,3–5 V para lógica e 3–6 V para motor). \n", "- **Materiais auxiliares:** cabos, resistências, breadboard ou PCB, e elementos de fixação mecânica. \n", "\n", "---\n", "\n", "### Passos de Integração\n", "\n", "1. **Validação individual de módulos** \n", " - Testar o sensor: confirmar leituras coerentes de ângulo ao rodar manualmente o pêndulo. \n", " - Testar o driver: verificar resposta do motor a sinais PWM simples. \n", " - Testar a fonte: confirmar tensões e correntes fornecidas. \n", "\n", "2. **Integração elétrica** \n", " - Garantir massa comum entre todos os módulos. \n", " - Confirmar tensões de alimentação (3,3 V/5 V para lógica, tensão adequada ao motor no driver). \n", " - Usar cabos curtos e ligações firmes para evitar ruído. \n", "\n", "3. **Integração de software** \n", " - Programar aquisição periódica de dados do sensor (I²C). \n", " - Implementar ciclo de controlo no `loop()` com temporização via `millis()` ou `timer` (tipicamente 100 Hz). \n", " - Comandar o driver via `analogWrite()` (PWM) para regular a velocidade da hélice. \n", "\n", "4. **Integração mecânica** \n", " - Montar o motor e o sensor no braço do pêndulo de forma rígida, evitando folgas. \n", " - Proteger a hélice para segurança durante os ensaios. \n", "\n", "5. **Testes de sistema** \n", " - Ensaiar primeiro com ganhos baixos no controlador, aumentando progressivamente. \n", " - Registar leituras de ângulo, sinais de controlo e resposta do pêndulo. \n", " - Ajustar parâmetros do controlador até alcançar estabilização. \n", "\n", "---\n", "\n", "### Cuidados a Ter\n", "\n", "- **Compatibilidade elétrica:** nunca alimentar o sensor com tensão superior à recomendada (ex.: AS5600 funciona apenas a 3,3 V). \n", "- **Corrente do motor:** evitar correntes de arranque ou bloqueio elevadas que possam danificar o driver. \n", "- **Atrasos no ciclo de controlo:** manter a frequência de execução constante; não usar `delay()` no `loop()`. \n", "- **Segurança física:** trabalhar sempre com proteções na hélice e desligar a fonte de alimentação antes de alterar a montagem. \n", "\n", "---\n", "\n", "### Da Simulação à Implementação\n", "\n", "Antes da integração, o comportamento do pêndulo deve ser explorado em **simulação**, ajustando e comparando diferentes controladores. \n", "Posteriormente, a lógica de controlo validada é **portada para Arduino**:\n", "\n", "1. Isolar a função de controlo no código Python (entrada = ângulo, saída = comando motor). \n", "2. Reescrever em C/C++ para Arduino, respeitando limites de tempo de execução e memória. \n", "3. Substituir as interfaces simuladas por leituras reais do sensor e comandos reais para o driver. \n", "4. Garantir execução periódica estável com `millis()` ou interrupções de temporizador. \n", "5. Voltar a ajustar os ganhos com base no comportamento físico real. \n", "\n", "---\n", "\n" ] }, { "cell_type": "markdown", "id": "982970b4", "metadata": {}, "source": [] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 5 }