{ "cells": [ { "cell_type": "markdown", "id": "5855bfce", "metadata": {}, "source": [ "# Projeto 1: Desenvolvimento e Teste de um Aeropêndulo\n", "\n", "## Introdução\n", "\n", "O objetivo deste trabalho de projeto é **desenvolver, modelar e testar um Aeropêndulo**. Este sistema é amplamente utilizado para o estudo da dinâmica de sistemas de controlo **não lineares**. \n", "\n", "O projeto permitirá que os alunos adquiram competências em:\n", "\n", "- Modelação de sistemas físicos; \n", "- Simulação de comportamento dinâmico; \n", "- Implementação de estratégias de controlo; \n", "- Integração de hardware e software; \n", "- Realização de testes experimentais; \n", "- Validação experimental e comparação com simulação. \n", "\n", "## Trabalho a Desenvolver\n", "\n", "O desenvolvimento do projeto deverá incluir: \n", "\n", "1. Estudo dos **componentes de hardware** (motores, sensores, driver e estrutura mecânica); \n", "2. Rever equações do movimento do aeropêndulo, simular a resposta \n", "3. Implementação de **comunicação, aquisição e processamento de dados** baseado num sistema arduino; \n", "4. Implementação de um **sistema de controlo em malha fechada**; \n", "5. Realização de **testes experimentais no protótipo físico** \n", " - Observar resposta a degraus de referência. \n", " - Analisar estabilidade e tempo de resposta.\n", "6. **Validação** do sistema através da comparação gráfica quantitativa entre simulação e resultados experimentais. \n", "7. **Relatório Final e apresentação**, documentar o desenvolvimento, o sistema implementado, resultados e comparação entre teoria e prática. " ] }, { "cell_type": "markdown", "id": "b635489d", "metadata": {}, "source": [ "## Descrição do Sistema\n", "\n", "O **Aeropêndulo** consiste num braço rígido fixo a uma base rotacional, com uma hélice instalada numa das extremidades. A rotação da hélice gera uma força propulsora que influencia o movimento do pêndulo. \n", "\n", "O objetivo principal é **controlar a posição angular do pêndulo**, atingindo um equilíbrio numa posição desejada. \n", "\n", "O sistema é **inerentemente instável**, tornando a sua estabilização um desafio relevante para estudo e implementação prática. \n", "\n", "![Aeropendulum](img/aeropendulum.png)\n", "\n", "### Componentes principais do sistema\n", "\n", "- **Pêndulo:** Braço rotacional fixado a um eixo, com uma hélice na extremidade. \n", "- **Hélice:** Gera a força propulsora que controla o movimento do pêndulo. \n", "- **Sensor de Ângulo:** Mede continuamente o ângulo de inclinação do pêndulo. \n", "- **Controlador:** Algoritmo responsável por ajustar a velocidade da hélice de forma a estabilizar o pêndulo. \n", "\n", "![Aeropendulum Partes](img/aeropendulum-partes.png)\n", "\n", "📂 [Link to OnShape CAD file](https://cad.onshape.com/documents/2ea83de1cff4e51b1cdad8b9/w/f720edbb3287e1858f6d8d69/e/7d14ad2308a118c0482dca7f)\n", "\n", "\n" ] }, { "cell_type": "markdown", "id": "517d1418", "metadata": {}, "source": [ "## Motor e Hélice\n", "\n", "### Requisitos Técnicos\n", "\n", "A seleção do motor e da hélice deve obedecer aos seguintes critérios:\n", "\n", "- **Peso reduzido**: para minimizar o momento de inércia do pêndulo. \n", "- **Tamanho compacto**: para facilitar a montagem e integração no braço do aeropêndulo. \n", "- **Preço acessível**: dado tratar-se de um protótipo experimental de baixo custo. \n", "- **Elevada força de impulsão**: suficiente para contrariar a gravidade e permitir o controlo ativo do pêndulo. \n", "- **Compatibilidade elétrica**: deve poder ser alimentado por uma fonte de tensão de laboratório e ser controlado por placas driver acessíveis e comuns no mercado académico (ex.: L298N, MOSFET drivers simples). \n", "- **Disponibilidade comercial**: motor de fácil aquisição, com substituição rápida em caso de falha. \n", "\n", "### Seleção do Motor\n", "\n", "Atendendo a estes requisitos, foi escolhido um **motor coreless de drone (Micro FPV Quadcopter)**, com hélice de pequenas dimensões. \n", "\n", "Este tipo de motor apresenta baixo peso, rotação muito elevada, resposta rápida e boa disponibilidade no mercado a preços acessíveis.\n", "\n", "![Motor](img/drone-motor.png)\n", "\n", "### Características Técnicas do Motor + Hélice\n", "\n", "- Tipo: Coreless DC Motor (Micro FPV Quadcopter)\n", "- Dimensões: 7x16 mm\n", "- Peso: ~2 g (sem hélice)\n", "- Hélice: 4x55 mm\n", "- Tensão nominal: 3.7 V (até 4.2 V)\n", "- Velocidade: ~50 000 RPM\n", "- Corrente sem carga: 0.08 – 0.1 A\n", "- Corrente em bloqueio: 1.8 – 2.0 A\n", "- Saída do eixo: 0.8 mm\n", "- Comprimento do eixo: 7 mm\n", "- Comprimento dos cabos: ~46 mm\n", "- Materiais: liga metálica leve\n", "\n", "### Ensaios de caraterização de Motor e Hélice\n", "\n", "Antes da integração no sistema completo do aeropêndulo, é preciso a realização de ensaios individuais ao motor e à hélice. Estes ensaios permitem caracterizar o comportamento elétrico e mecânico do atuador e obter curvas de calibração a usar no modelo e no controlo.\n", "\n", "1. **Ensaio de Corrente em Vazio e com carga** \n", " - Ligar o motor sem hélice a uma fonte de tensão regulada-\n", " - Medir a corrente consumida em vazio (sem carga).\n", " - Verificar se os valores estão próximos da especificação \n", " - Durante tempos curtos (!), medir a corrente consumida com carga, e a tensão associada, e verifica se os valores estão próximos da especificação\n", "\n", "2. **Ensaio de Consumo com Hélice** \n", " - Repetir a medição de corrente com a hélice montada. \n", " - Avaliar o aumento de consumo devido à carga aerodinâmica. \n", " - Confirmar que o driver e a fonte conseguem fornecer a corrente necessária. \n", "\n", "3. **Ensaio de Aquecimento** \n", " - Fazer funcionar o motor de forma contínua em diferentes regimes. \n", " - Verificar a temperatura do motor e do driver após alguns minutos. \n", " - Avaliar limites operacionais para evitar sobreaquecimento. \n", "\n", "4. **Ensaio de Resposta ao PWM** \n", " - Controlar o motor via sinal PWM através da placa driver. \n", " - Repetir os ensaios anteriores para diferentes ciclos de trabalho (duty cycle). \n", "\n", "### Curvas de Calibração\n", "\n", "Cada curva deve ser obtida de **duas formas**: \n", "- **Manual:** controlo manual da tensão usando fontes DC de laboratório. \n", "- **Automatizada:** controlo em modo AC através de uma rampa de sinal PWM gerada por um gerador de funções do laboratório, ou o Arduino, a comandar a placa driver .\n", "\n", "### Curva 1 — Velocidade de Rotação\n", "- **Objetivo:** validar e calibrar a velocidade de rotação do motor em função do comando aplicado. \n", "- **Medição:** sensor ótico ou magnético (encoder). \n", "- **Resultado:** curva de transferência que relaciona a tensão (ou o duty cycle do PWM) com a velocidade angular do motor. \n", "\n", "### Curva 2 — Força de Impulsão (opcional)\n", "- **Objetivo:** medir a força de impulsão produzida pelo motor e hélice. \n", "- **Medição:** motor fixado a uma estrutura rígida apoiada numa balança digital, observando a redução (ou aumento) do valor aprente de massa em função da força produzida. \n", "- **Resultado:** curva de transferência que relaciona a tensão (ou o duty cycle do PWM) com a força de impulsão gerada. \n", "\n" ] }, { "cell_type": "markdown", "id": "6b7d5063", "metadata": {}, "source": [ "## Placa de Controlo do Motor (Driver)\n", "\n", "### Requisitos Técnicos\n", "\n", "A placa de controlo (driver) deve cumprir os seguintes requisitos para integração no aeropêndulo:\n", "\n", "- **Compatibilidade elétrica** com os motores DC escolhidos (tensão de 3–5 V, correntes até 2 A). \n", "- **Capacidade de comando via PWM**, permitindo variar a velocidade de rotação do motor. \n", "- **Disponibilidade e preço acessível**, sendo facilmente encontrada em kits educativos. \n", "- **Facilidade de utilização em laboratório**, com pinos claramente identificados e compatíveis com microcontroladores como o Arduino. \n", "- **Robustez**, capaz de suportar picos de corrente sem falhas. \n", "\n", "### Seleção\n", "\n", "Foi selecionado o **módulo L298N (H-Bridge)**, amplamente usado no ensino e em prototipagem de sistemas de controlo de motores. \n", "\n", "Permite comandar dois motores DC independentes ou um motor passo-a-passo bipolar, o que garante flexibilidade para projetos futuros. \n", "\n", "![Motor driver board](img/driver-board.png)\n", "\n", "### Características Técnicas\n", "\n", "- Controlador: L298N (ponte H dupla)\n", "- Número de motores suportados: 2 DC (ou 1 passo-a-passo)\n", "- Corrente contínua máxima: 1.2 A por motor\n", "- Corrente de pico: 3 A\n", "- Tensão de alimentação do motor: até 15 V\n", "- Tensão de alimentação lógica: 2.7 – 5.5 V\n", "- Dimensões: 43 x 43 x 27 mm\n", "\n", "### Ligações e Pinos Principais\n", "\n", "O módulo L298N possui pinos de controlo digital e pinos de potência:\n", "\n", "* **Alimentação**\n", "\n", " * `VCC` (5 V) – alimentação do circuito lógico \n", " * `GND` – massa comum (obrigatório ligar à massa do Arduino).\n", " * `+Vmotor` – alimentação do motor \n", "\n", "* **Controlo do Motor A**\n", "\n", " * `ENA` – pino de ativação ('enable') do motor A (se ligado a PWM, controla a velocidade).\n", " * `IN1`, `IN2` – definem o sentido de rotação.\n", " * `OUT1`, `OUT2` – saídas para o motor.\n", "\n", "* **Controlo do Motor B** (disponível para expansão).\n", "\n", "### Instruções de Uso\n", "\n", "1. **Alimentação inicial**\n", "\n", " * Ligar `VCC` (5 V) e `+Vmotor` (3–5 V) a uma fonte de laboratório.\n", " * Confirmar o correto estabelecimento da massa comum.\n", "\n", "2. **Teste de ativação**\n", "\n", " * Colocar `ENA` em nível lógico alto (5 V).\n", " * Aplicar sinais digitais a `IN1` e `IN2`:\n", "\n", " * `IN1=HIGH`, `IN2=LOW` → motor gira num sentido.\n", " * `IN1=LOW`, `IN2=HIGH` → motor gira no sentido contrário.\n", " * `IN1=LOW`, `IN2=LOW` ou `IN1=HIGH`, `IN2=HIGH` → motor parado.\n", "\n", "3. **Teste com PWM**\n", "\n", " * Ligar `ENA` a um pino PWM do Arduino.\n", " * Enviar uma rampa de valores (duty cycle crescente).\n", " * Observar a variação da velocidade de rotação do motor.\n", "\n", "4. **Verificação antes dos ensaios**\n", "\n", " * Testar o driver **sem motor ligado** (para garantir que o sinal comuta corretamente, observando a saída com multímetro ou osciloscópio).\n", " * Confirmar se não há aquecimento excessivo na placa em vazio.\n", " * Só depois ligar o motor com hélice e realizar os ensaios experimentais.\n", "\n", "Esta sequência de testes garante que a placa de controlo está a funcionar corretamente antes de ser usada nos ensaios de caracterização do motor e da hélice, e posteriormente na integração com o sistema completo do aeropêndulo.\n", "\n", "\n" ] }, { "cell_type": "markdown", "id": "058bb7f9", "metadata": {}, "source": [ "## Sensor (Encoder para Medição de Ângulo)\n", "\n", "A escolha do sensor deve considerar:\n", "\n", "- **Requisitos técnicos**\n", " - Capacidade de medir o ângulo de rotação com resolução adequada (ideal ≥ 10 bits ou centenas de impulsos/rotação). \n", " - Frequência de amostragem suficiente para acompanhar a dinâmica do aeropêndulo. \n", " - Compatibilidade elétrica com microcontroladores comuns (Arduino, etc.). \n", "\n", "- **Requisitos não técnicos**\n", " - **Baixo atrito:** não deve introduzir torque adicional significativo no eixo do pêndulo. \n", " - **Facilidade de montagem:** instalação simples e tolerante a pequenas imprecisões. \n", " - **Robustez e durabilidade:** adequado a uso repetido em ambiente laboratorial. \n", " - **Custo e disponibilidade:** componentes acessíveis e de fácil substituição. \n", "\n", "---\n", "\n", "### Opções de Encoders\n", "\n", "#### 1. Encoder Mecânico Analógico (Potenciómetro Rotativo)\n", "\n", "- **Descrição:** \n", " Dispositivo resistivo que fornece uma **tensão analógica proporcional ao ângulo** de rotação. \n", "- **Sinais e pinos:** \n", " - `Vcc` → alimentação (3.3–5 V). \n", " - `GND` → massa comum. \n", " - `OUT` → tensão analógica proporcional ao ângulo. \n", "- **Uso:** ligar `OUT` a uma entrada analógica (ADC) do microcontrolador. \n", "- **Teste antes da integração:** rodar manualmente o eixo e verificar se a tensão varia linearmente entre 0 V e Vcc. \n", "- **Limitações:** introduz atrito no eixo, desgaste com o tempo, resolução limitada (~8–10 bits). \n", "\n", "---\n", "\n", "#### 2. Encoder Mecânico Incremental (Saída Digital)\n", "\n", "- **Descrição:** \n", " Botão rotativo com contactos internos que produzem impulsos digitais a cada passo angular. \n", " Pode ser de **um canal (incremental simples)** ou de **dois canais (quadratura)**. \n", "- **Sinais e pinos típicos:** \n", " - `Vcc` → alimentação (opcional, nem todos precisam). \n", " - `GND` → massa. \n", " - `OUT A` → impulsos digitais (incremental simples). \n", " - `OUT A` e `OUT B` → impulsos defasados (quadratura). \n", " - `SW` → botão integrado (opcional). \n", "- **Uso:** \n", " - Incremental simples: contar impulsos para medir deslocamento relativo (não fornece ângulo absoluto). \n", " - Quadratura: permite detetar o **sentido de rotação** ao comparar a ordem dos impulsos em `A` e `B`. \n", "- **Teste antes da integração:** rodar manualmente e observar os impulsos no Arduino (via monitor série ou LED). \n", "- **Limitações:** não fornece ângulo absoluto, apenas posição relativa; exige inicialização num ponto de referência. \n", "\n", "---\n", "\n", "#### 3. Encoder Ótico (Optical Slot Sensor)\n", "\n", "- **Descrição:** \n", " Baseado num LED infravermelho e num fototransístor montados frente a frente, separados por uma ranhura (“slot”). \n", " Um disco perfurado ou uma pá interrompe o feixe de luz, gerando impulsos digitais sempre que o feixe é bloqueado/libertado. \n", " É usado como **encoder incremental simples** (não fornece posição absoluta nem sentido de rotação).\n", "\n", "- **Sinais e pinos típicos:** \n", " - `Vcc` → alimentação do LED infravermelho (poderá necessitar uma resistência em série de limitação de corrente, por ex. 150–330 Ω). \n", " - `GND` → massa comum. \n", " - `OUT` → saída digital do fototransístor (alto/baixo consoante a passagem do feixe). \n", "\n", "- **Uso:** \n", " Ligar `OUT` a uma entrada digital do microcontrolador. \n", " Contar impulsos ao longo do tempo para obter velocidade de rotação ou deslocamento angular relativo. \n", " Não fornece ângulo absoluto nem direção de rotação (apenas número de interrupções). \n", "\n", "- **Teste antes da integração:** \n", " Mover manualmente o disco ou pá que atravessa o sensor. \n", " Verificar a geração de impulsos digitais no Arduino (via LED indicador ou monitor série). \n", "\n", "- **Vantagens:** \n", " Elevada resolução possível (dependente do disco ou pá usados). \n", " Simples e barato. \n", "\n", "- **Limitações:** \n", " - Requer alinhamento preciso entre disco/pá e sensor. \n", " - Não mede direção de rotação (apenas incrementos). \n", " \n", "---\n", "\n", "#### 4. Encoder Magnético (Sensor de Campo)\n", "\n", "- **Descrição:** \n", " Um íman diametralmente magnetizado no eixo é detetado por um sensor magnético (Hall ou magnetorresistivo). Fornece saída analógica (tensão ∝ ângulo), digital incremental ou dados digitais via I²C. \n", "- **Sinais e pinos típicos (variam consoante modelo):** \n", " - `Vcc`, `GND`. \n", " - `SDA`, `SCL` (I²C). \n", " - ou `OUT PWM`, ou `OUT analógico`. \n", "- **Uso:** medir diretamente ângulo absoluto sem atrito e sem linha de vista. \n", "- **Teste:** ler valores via I²C/PWM enquanto roda manualmente o eixo. \n", "- **Vantagens:** não introduz atrito, montagem simples, robusto a poeira. \n", "- **Limitações:** resolução depende do chip (10–12 bits típicos), exige alinhamento básico íman-sensor. \n", "\n", "---" ] }, { "cell_type": "markdown", "id": "7e21ffcc", "metadata": {}, "source": [ "### **Seleção sensor: encoder magnético – AS5600** \n", "\n", "Módulo codificador de elevada precisão, que mede o ângulo de um eixo através da deteção de campo magnético. \n", "Requer um **íman diametralmente magnetizado** fixado ao eixo (por exemplo, colado), e o sensor deve ser montado logo acima (distância máxima ~2 mm). \n", "\n", "![Sensor magnético](img/sensor-magnetico.png) \n", "![Sensor signal](img/sensor-signal.png)\n", "\n", "**Especificações:**\n", "- `AS5600` – Codificador Magnético de Alta Precisão \n", "- Alimentação: 3.3 V (obrigatório) \n", "- Resolução: 12 bits \n", "- Modos de saída: I²C, PWM, Tensão analógica \n", "- Biblioteca Arduino: `AS5600` (disponível via Arduino IDE) \n", "- Repositório: [github.com/RobTillaart/AS5600](https://github.com/RobTillaart/AS5600) \n", "\n", "### Considerações de Teste\n", "\n", "Antes da integração no aeropêndulo, recomenda-se:\n", "\n", "1. **Verificação elétrica:** confirmar tensões de alimentação e ligações ao microcontrolador. \n", "2. **Testes individuais:** rodar manualmente o eixo e registar leituras (tensão, impulsos, ou dados digitais). \n", "3. **Validação da resolução:** confirmar que o sensor distingue pequenas variações de ângulo. \n", "4. **Teste de repetibilidade:** rodar o pêndulo em várias voltas e verificar consistência da medição. \n", "\n" ] }, { "cell_type": "markdown", "id": "59c94354", "metadata": {}, "source": [ "## Integração do Sistema\n", "\n", "Após a validação individual de cada componente, deverá ser realizada a integração: \n", "\n", "1. **Montagem mecânica:** fixar o motor, hélice e sensor ao braço do pêndulo. \n", "2. **Integração elétrica:** ligar motor ao driver e este ao microcontrolador; sensor ligado ao mesmo microcontrolador. \n", "3. **Aquisição de dados:** programar a leitura contínua do ângulo via I²C. \n", "4. **Ação de controlo:** gerar sinal PWM para o motor em função do erro (posição desejada – posição medida). \n", "5. **Estratégias de controlo:** iniciar com controlo proporcional (P), depois evoluir para PI ou PID. \n", "\n", "\n", "\n" ] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 5 }