Controle de Motor Servo: Um Guia Completo
Principais aprendizados:
Controle de Motor Servo Definido: O controle de motor servo permite a manipulação precisa da posição, velocidade e aceleração do motor através de sinais eletrônicos.
Mecanismo de Feedback: O sistema de feedback, geralmente um potenciômetro ou codificador, garante que a saída do motor corresponda exatamente à entrada de controle.
Sinal PWM: A modulação por largura de pulso (PWM) é crucial para definir a posição do servo, variando a duração dos pulsos elétricos.
Arduino e Motores Servo: Usar uma placa Arduino é uma maneira popular e eficaz de programar e controlar motores servo com configuração mínima de hardware.
Aplicações de Motores Servo: Os motores servo são essenciais para projetos que requerem controle posicional preciso, como robótica e sistemas automatizados.
Um motor servo é um motor projetado para alta precisão e acurácia na rotação. Diferente de um motor DC típico, o motor servo tem a capacidade de manter uma posição específica em vez de girar continuamente. Essa característica torna os motores servo ideais para robótica, automação e projetos de hobby.
Este artigo explica como funciona o controle de motor servo, os diferentes tipos de motores servo e vários métodos e dispositivos de controle. Também fornece exemplos de aplicações e projetos de motores servo.
O que é um Motor Servo?
Um motor servo é definido como um atuador que permite o controle preciso de posição (ângulo), velocidade e aceleração. Um motor servo típico consiste em três componentes principais: um motor DC, um circuito de controle e um dispositivo de feedback.
O motor DC alimenta o servo e se conecta a engrenagens que reduzem a velocidade e aumentam o torque no eixo de saída.

O eixo de saída é a parte do servo que gira e move a carga.
O circuito de controle é responsável por receber e processar os sinais de entrada de um controlador externo. Esses sinais informam ao servo qual posição, velocidade ou direção deve mover-se. O circuito de controle também envia energia ao motor DC para impulsioná-lo.
O dispositivo de feedback é geralmente um potenciômetro ou um codificador que mede a posição atual do eixo de saída.

O dispositivo de feedback transmite dados de posição de volta ao circuito de controle, que então ajusta a potência do motor DC para alinhar a posição real com a posição desejada do sinal de entrada.
O loop de feedback entre o circuito de controle e o dispositivo de feedback garante que o servo possa mover-se e manter qualquer posição dentro de seu intervalo de movimento com precisão.
Como Controlar um Motor Servo?
Os motores servo são controlados enviando um sinal PWM (modulação por largura de pulso) à linha de sinal do servo. A PWM é uma técnica que alterna rapidamente um sinal ligando e desligando para criar pulsos de larguras variadas. A largura dos pulsos determina a posição do eixo de saída.
Por exemplo, quando você envia um sinal PWM com uma largura de pulso de 1,5 milissegundos (ms), o servo se moverá para a posição neutra (90 graus).

Quando você envia um sinal PWM com uma largura de pulso de 1 ms, o servo se moverá para a posição mínima (0 graus). Quando você envia um sinal PWM com uma largura de pulso de 2 ms, o servo se moverá para a posição máxima (180 graus).
O sinal PWM tem uma frequência de 50 Hz, o que significa que se repete a cada 20 ms. A largura do pulso pode variar de 1 ms a 2 ms dentro deste período.
Existem muitas maneiras de gerar e enviar sinais PWM para motores servo. Alguns dos métodos mais comuns são:
Usando uma placa Arduino ou outro microcontrolador
Usando um potenciômetro ou outro sensor analógico
Usando um joystick ou outro dispositivo de entrada digital
Usando um controlador ou driver dedicado de servo
Nas seções seguintes, exploraremos cada um desses métodos em mais detalhes e veremos alguns exemplos de como eles funcionam.
Controlando um Motor Servo com Arduino
Arduino é uma das plataformas mais populares para controlar motores servo. As placas Arduino têm saídas PWM embutidas que podem ser usadas para enviar sinais a servos. Arduino também tem uma biblioteca Servo que facilita a escrita de código para controle de servo.
Para controlar um motor servo com Arduino, você precisará:
Uma placa Arduino (como Arduino UNO)
Um motor servo padrão (como SG90)
Fios pino
Um protoboard (opcional)
O fio vermelho do servo se conecta a 5V na placa Arduino. O fio preto do servo se conecta a GND na placa Arduino. O fio branco do servo se conecta ao pino 9 na placa Arduino.
Para programar a placa Arduino, você precisará usar o Arduino IDE (online ou offline). Você pode usar um dos exemplos da biblioteca Servo ou escrever seu próprio código.
O seguinte código mostra como varrer um motor servo de 0 a 180 graus usando um loop for:
#include <Servo.h> // Incluir biblioteca Servo
Servo myservo; // Criar objeto Servo
int pos = 0; // Variável para posição
void setup() {
myservo.attach(9); // Anexar objeto Servo ao pino 9
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // Loop de 0 a 180 graus
myservo.write(pos); // Escrever posição para objeto Servo
delay(15); // Esperar 15 ms
}
for (pos = 180; pos >= 0; pos -= 1) { // Loop de 180 a 0 graus
myservo.write(pos); // Escrever posição para objeto Servo
delay(15); // Esperar 15 ms
}
}
Este código usa dois loops para incrementar e decrementar a variável de posição de 0 a 180 graus e vice-versa. Ele então escreve este valor para o objeto Servo usando myservo.write(pos). Ele também adiciona um atraso de 15 ms entre cada etapa para diminuir o movimento.
Envie este código para sua placa Arduino usando o botão Upload do IDE, e veja seu motor servo varrer de um lado para o outro suavemente.
Controlando um Motor Servo com Potenciômetro
Um potenciômetro é um sensor analógico que pode variar sua resistência dependendo de quanto você gira seu botão. Você pode usar um potenciômetro como um dispositivo de entrada para controlar um motor servo.
Para controlar um motor servo com um potenciômetro, você precisará:
Uma placa Arduino (como Arduino UNO)
Um motor servo padrão (como SG90)
Um potenciômetro (10k Ohms)
Fios pino
Um protoboard
O diagrama de conexões para conectar um potenciômetro e um motor servo a uma placa Arduino é mostrado abaixo:
O fio vermelho do potenciômetro se conecta a 5V na placa Arduino. O fio preto do potenciômetro se conecta a GND na placa Arduino. O fio verde do potenciômetro se conecta ao pino A0 na placa Arduino.
O fio vermelho do servo se conecta a 5V em outra linha no protoboard. O fio preto do servo se conecta a GND em outra linha no protoboard. O fio branco do servo se conecta ao pino D9 em outra linha no protoboard.
Para programar sua placa Arduino, você precisará usar o mesmo código do exemplo anterior, mas alterar algumas linhas:
#include <Servo.h> // Incluir biblioteca Servo
Servo myservo; // Criar objeto Servo
int potpin = A0; // Pino conectado ao potenciômetro
int val = 0; // Variável para ler o valor do potenciômetro
void setup() {
myservo.attach(9); // Anexar objeto Servo ao pino D9
}
void loop() {
val = analogRead(potpin); // Ler valor do potenciômetro (0 - 1023)
val = map(val,0,1023,0,180); // Mapear faixa de valor (0 - 180)
myservo.write(val); // Escrever valor mapeado para objeto Servo
delay(15); // Esperar 15 ms
}
Este código usa a função analogRead(potpin) para ler o valor do potenciômetro conectado ao pino A0. Ele então usa a função map(val,0,1023,0,180) para mapear a faixa de valor de 0 a 1023 para 0 a 180 graus. Ele então escreve o valor mapeado para o objeto Servo usando a função myservo.write(val). Ele também adiciona um atraso, como no exemplo anterior.
Você pode enviar este código para sua placa Arduino usando o botão Upload do IDE. Você deve ver seu motor servo se movendo de acordo com a posição do botão do potenciômetro.
Controlando um Motor Servo com Joystick
Um joystick é um dispositivo de entrada digital que pode detectar a direção e a magnitude do movimento ao longo de dois eixos. Você pode usar um joystick para controlar um motor servo mapeando o eixo x do joystick para o ângulo do servo.
Para controlar um motor servo com um joystick, você precisará do seguinte:
Uma placa Arduino (como Arduino UNO)
Um motor servo padrão (como SG90)
Um módulo joystick (como KY-023)
Fios pino
Um protoboard
O diagrama de conexões para conectar um módulo joystick e um motor servo a uma placa Arduino é mostrado abaixo:
!https://www.makerguides.com/wp-content/uploads/2019/01/Servo-motor-control-with-Arduino-and-joystick-wiring-diagram.png
O fio vermelho do módulo joystick se conecta a 5V na placa Arduino. O fio preto do módulo joystick se conecta a GND na placa Arduino. O fio verde do módulo joystick se conecta ao pino A0 na placa Arduino.
O fio vermelho do servo se conecta a 5V em outra linha no protoboard. O fio preto do servo se conecta a GND em outra linha no protoboard. O fio branco do servo se conecta ao pino D9 em outra linha no protoboard.
Para programar sua placa Arduino, você precisará usar o mesmo código do exemplo anterior, mas alterar algumas linhas:
#include <Servo.h> // Incluir biblioteca Servo
Servo myservo; // Criar objeto Servo
int joyX = A0; // Pino conectado ao eixo x do joystick
int val = 0; // Variável para ler o valor do joystick
void setup() {
myservo.attach(9); // Anexar objeto Servo ao pino 9
}
void loop() {
val = analogRead(joyX); // Ler valor do eixo x do joystick (0 - 1023)
val = map(val, 0, 1023, 0, 180); // Mapear faixa de valor (0 - 180)
myservo.write(val); // Escrever valor mapeado para objeto Servo
delay(15); // Esperar 15 ms
}
Este código usa a função analogRead(joyX) para ler o valor do eixo x do joystick conectado ao pino A0. Ele então usa a função map(val, 0, 1023, 0, 180) para mapear a faixa de valor de 0 a 1023 para 0 a 180 graus. Ele então escreve este valor para o objeto Servo usando a função myservo.write(val). Ele também adiciona um atraso de 15 ms entre cada etapa.
Você pode enviar este código para sua placa Arduino usando o botão Upload no IDE. Você deve ver seu motor servo se movendo de acordo com a posição do joystick.
Controlando um Motor Servo com Controlador de Servo