Experimento 34 – Controle de um servo-motor

Servo-motores respondem a um comando e giram até no máximo um ângulo especificado (geralmente 180 graus, mas alguns servos podem ser construídos para ângulos maiores ou menores). São otimizados para torque e são ideais para programar movimentos de braços e alavancas, como em robôs. O controle é feito via PWM. Este experimento mostra como controlar os movimentos básicos de um servo-motor usando uma biblioteca do Arduino.

Material necessário

  • Um servo-motor 9g ou similar
  • Um potenciômetro (10 ou 50k)
  • Um Arduino

Para usar um servo-motor podemos usar a biblioteca Servo.h, fornecida pela distribuição oficial do Arduino. Monte o circuito abaixo:

Ligue o potenciômetro como divisor de tensão com o pino central em A0 (ou outro pino com entrada analógica) e os outros dois respectivamente no positivo e no negativo (como ilustrado). Conecte os fios vermelho e preto (do servo) respectivamente aos polos positivo e negativo do circuito, e o fio restante (laranja ou amarelo) em D3 (ou outro pino com suporte PWM).

Uma possível implementação no protoboard:

Digite o programa abaixo (ou baixe o código-fonte no GitHub):

#include <Servo.h>

#define SERVO     3
#define DIRECAO   A0

Servo servo;

void setup() {
    servo.attach(SERVO);
    servo.write(90);
}

void loop() {
    int pot = analogRead(DIRECAO); // 0 a 1023
    int posicao = map(pot, 0, 1023, 0, 180);
    servo.write(posicao);
    delay(100);
}

Ligue o Arduino e faça upload do programa. O Arduino irá mover o servo-motor de um lado para o outro de acordo com a posição do giro do potenciômetro.

A instrução map() realiza um mapeamento de valores (no exemplo acima a escala do potenciômetro 0 a 1023 – é mapeado à escala do servo 0 a 180). A instrução servo.write(angulo) gira o servo no angulo especificado (90 é o centro, valores < 90 gira para a esquerda, > 90 gira para a direita).

Este circuito de demonstração está sendo alimentado pelo Arduino, que está obtendo sua energia da entrada USB, que estabelece um limite máximo à corrente fornecida (geralmente 200mA, no máximo 500mA). Em projetos reais, o motor deve ser alimentado com uma fonte externa.

Caso seja necessário controlar vários servos, pode-se usar um ou mais registradores de deslocamento (shift-registers).

Leave a Reply

Your email address will not be published. Required fields are marked *