Servo Motor e Potenciômetro (A)

Controlando o movimento com precisão.

Nesta atividade, vamos construir um sistema de controle direto, onde o giro de um simples botão (o potenciômetro) será traduzido em um movimento preciso de um motor (o servomotor). É a base para a criação de braços robóticos, sistemas de direção e qualquer projeto que exija controle de posição.

Este projeto é uma introdução essencial à leitura de sensores analógicos e ao controle de atuadores, mostrando de forma imediata e tangível como podemos criar uma interface de controle para nossos robôs.

Roteiro para Professores (Foco no Aprofundamento Técnico)

  • Objetivo da Atividade: Implementar um sistema de controle analógico em tempo real, utilizando a leitura de um potenciômetro (analogRead) para definir o ângulo de um servomotor (servo.write), aplicando a função de mapeamento linear (map) para compatibilizar as escalas dos componentes.
  • Conceitos Tecnológicos Fundamentais:
    • Potenciômetro (Divisor de Tensão): Entender como o potenciômetro funciona como um divisor de tensão variável, fornecendo uma voltagem entre 0V e 5V a um pino analógico.
    • analogRead(): Função que lê a voltagem em um pino analógico e a converte para um valor inteiro entre 0 (para 0V) e 1023 (para 5V).
    • map(valor, min_entrada, max_entrada, min_saida, max_saida): Função essencial que re-escala um número de uma faixa para outra. Neste caso, converte a leitura do potenciômetro (0-1023) para o ângulo do servo (0-180).
    • servo.write(): Função da biblioteca Servo.h que envia um sinal PWM ao servo para que ele se mova para o ângulo especificado.
  • Princípio Lógico: O potenciômetro fornece uma leitura analógica na faixa de 0 a 1023. O servomotor, por sua vez, opera com ângulos na faixa de 0 a 180 graus. A função map() é a ponte entre esses dois mundos: ela pega o valor lido do potenciômetro e o converte proporcionalmente para um valor dentro da faixa de ângulos do servo, criando um link de controle direto e intuitivo.
  • Guia de Solução de Problemas (Troubleshooting):
    • Servo com movimento “nervoso” ou tremendo: A leitura do potenciômetro pode ser instável (“ruído”). Um pequeno delay(15) no final do loop, como no exemplo, geralmente resolve. Em casos mais severos, pode ser necessário um pequeno capacitor no potenciômetro ou algoritmos de suavização de software.
    • Servo não atinge a amplitude completa (0-180º): Verifique a fiação do potenciômetro. Se os pinos de 5V e GND estiverem invertidos, o movimento pode não funcionar corretamente. Alguns servos também têm limites físicos um pouco menores que 180 graus.
    • Movimento do servo está invertido em relação ao potenciômetro: Solução simples no código. Inverta os valores de saída na função map(). Mude de map(valorPot, 0, 1023, 0, 180); para map(valorPot, 0, 1023, 180, 0);.
  • Desafio Extra (Nível Avançado):
    • Limitar o Alcance: Modifique a função map() para que o giro completo do potenciômetro controle o servo apenas em uma faixa limitada, por exemplo, entre 45 e 135 graus. Isso é fundamental para mecanismos com limites físicos. Exemplo: map(valorPot, 0, 1023, 45, 135);.
  • Materiais Necessários:
    • Hardware: SmartMotor com Servo Motor (Placa B) OU (Kit Arduino, Protoboard, Servo Motor, Potenciômetro).
    • Software: Arduino IDE e/ou conta na plataforma TinkerCAD.
  • Possibilidades de Aplicação e Expansão:
    • Interface de Controle para Braços Robóticos: Cada junta de um braço pode ser controlada por um potenciômetro.
    • Sistema de Direção (Joystick Simples): Usar o sistema para controlar a direção de um veículo robótico.
    • Painel de Controle para Animatrônicos: Criar um painel com vários potenciômetros para controlar diferentes partes de um boneco.
    • Controle de Parâmetros: Usar o potenciômetro não para controlar posição, mas para ajustar em tempo real outras variáveis de um programa, como a velocidade de um pisca-pisca ou a sensibilidade de outro sensor.

Programação Sugerida
// Inclui a biblioteca para controle de servomotores.

include

// Cria um objeto ‘meuServo’ para representar nosso motor.
Servo meuServo;

// Define o pino analógico onde o potenciômetro está conectado.
const int pinoPot = A0;

void setup() {
// Anexa o objeto servo ao pino digital 9 (que suporta PWM).
meuServo.attach(9);
}

void loop() {
// 1. Lê o valor do potenciômetro (um número de 0 a 1023).
int valorPot = analogRead(pinoPot);

// 2. Mapeia/converte o valor lido (0-1023) para a escala de ângulos do servo (0-180).
int angulo = map(valorPot, 0, 1023, 0, 180);

// 3. Comanda o servo para se mover para o ângulo calculado.
meuServo.write(angulo);

// Um pequeno delay para estabilizar a leitura e o movimento.
delay(15);
}

Esquemático Eletrônico

SmartMotors