Um servo motor é um dispositivo que converte um sinal de controle em movimento mecânico. Eles são frequentemente usados em projetos de eletrônica, robótica, modelagem e automação devido à sua capacidade de controlar com precisão a posição angular, velocidade e direção do movimento.
Motor: No coração de um servo motor está um motor elétrico de corrente contínua (DC). Este motor é geralmente do tipo de corrente contínua sem escovas (brushless) para maior eficiência e durabilidade. Quando a energia elétrica é aplicada ao motor, ele começa a girar.
Mecanismo de Redução de Engrenagens: O eixo do motor está conectado a um conjunto de engrenagens. Estas engrenagens servem para reduzir a velocidade e aumentar o torque do motor. Isso é importante para permitir movimentos precisos e suaves do eixo de saída do servo.
Potenciômetro (Feedback): Dentro do servo, geralmente há um potenciômetro conectado ao eixo de saída do servo. Este potenciômetro é usado para fornecer feedback de posição ao circuito de controle. Ele informa ao circuito eletrônico a posição atual do eixo do servo.
Controlador Eletrônico: O controlador eletrônico é o cérebro do servo motor. Ele recebe sinais de controle, geralmente na forma de pulsos PWM (modulação por largura de pulso), de um microcontrolador ou outro dispositivo eletrônico. Com base nestes sinais, o controlador eletrônico determina quanto e(ou) em que direção o eixo do servo deve se mover.
Circuito de Controle de Feedback: O circuito de controle de feedback compara a posição atual do eixo (obtida do potenciômetro) com a posição desejada (definida pelo sinal de controle). Ele ajusta a energia fornecida ao motor para garantir que o eixo se mova para a posição correta e mantenha-a lá.
Ponte-H (para servos rotativos): Em servos rotativos, é comum ter um circuito Ponte-H para controlar a direção de rotação do motor. Isso permite que o servo gire em ambas as direções, não apenas em uma.
Resumindo, o servo motor é uma combinação de motor elétrico, mecanismos de redução, feedback de posição e eletrônica de controle. Esses componentes trabalham juntos para fornecer movimentos controlados em uma ampla variedade de aplicações.
Quando você controla um servo motor, está essencialmente enviando pulsos elétricos para ele. Esses pulsos têm uma largura específica, e é essa largura que determina a posição do servo. Isso é feito usando uma técnica chamada modulação por largura de pulso (PWM). Em geral, um pulso mais largo vai fazer o servo se mover para uma posição específica, enquanto um pulso mais estreito fará o servo se mover para outra posição.
As bibliotecas que controlam o atraso do movimento do servo funcionam alterando a maneira como esses pulsos são enviados. Elas introduzem atrasos entre os pulsos, o que faz com que o servo se mova mais lentamente de uma posição para outra.
Vamos ver um exemplo prático:
Suponha que você queira que um servo motor se mova de 0 grau para 90 graus.
Sem um atraso no movimento, o servo pode mudar instantaneamente de 0 para 90 graus assim que receber o sinal correspondente.
No entanto, se você introduzir um atraso entre os pulsos, o servo não se moverá instantaneamente para 90 graus. Em vez disso, ele fará o movimento gradualmente, seguindo uma curva de aceleração ou desaceleração dependendo da implementação da biblioteca.
Isso gera movimentos mais suaves e controlados do servo.
Esses atrasos podem ser configurados de várias maneiras, dependendo da biblioteca que você está usando. Você pode ter a opção de definir a velocidade de movimento, o tempo de aceleração e desaceleração, entre outros parâmetros. Isso permite um controle fino sobre como o servo se move de uma posição para outra, o que pode ser crucial em muitas aplicações, como robótica, automação e modelagem.
A biblioteca VarSpeedServo é uma biblioteca popular para Arduino que permite controlar servos de forma suave e com velocidade variável. Ela é uma extensão da biblioteca padrão Servo.h, que geralmente é usada para controlar servos de forma básica.
A VarSpeedServo adiciona funcionalidades extras, permitindo que você controle a velocidade com que o servo se move de uma posição para outra. Isso é útil quando você deseja evitar movimentos bruscos ou rápidos, especialmente em aplicações onde é necessária precisão ou suavidade de movimento.
Com essa biblioteca, você pode especificar a velocidade de movimento do servo, bem como definir a posição desejada. O servo então se moverá suavemente em direção a essa posição, em vez de simplesmente mover diretamente para ela, como aconteceria com a biblioteca Servo.h padrão.
A seguir, iniciaremos a montagem do projeto que utiliza a biblioteca VarSpeedServo.
É necessário instalar a biblioteca VarSpeedServo.
Para dar continuidade ao projeto, monte o circuito abaixo usando os materiais mencionados acima.
Carregue o seguinte código no arduino.
#include <VarSpeedServo.h> VarSpeedServo servo; void setup() { servo.attach(8); // Anexa o servo ao pino 8 servo.write(0); // Move o servo para a posição inicial de 0 graus delay(2000); // Aguarda 2 segundos } void loop() { servo.slowmove(90, 100); // Move o servo suavemente para a posição 90 graus com uma velocidade de 100 (0-255) servo.wait(); // Aguarda o servo servo.slowmove(160, 10); // Move o servo suavemente para a posição 160 graus com uma velocidade de 10 (0-255) servo.wait(); // Aguarda o servo servo.slowmove(180, 1); // Move o servo suavemente para a posição 180 graus com uma velocidade de 1 (0-255) servo.wait(); // Aguarda o servo servo.slowmove(160, 1); // Move o servo suavemente para a posição 160 graus com uma velocidade de 1 (0-255) servo.wait(); // Aguarda o servo servo.slowmove(90, 10); // Move o servo suavemente para a posição 90 graus com uma velocidade de 10 (0-255) servo.wait(); // Aguarda o servo servo.slowmove(0, 100); // Move o servo suavemente para a posição 0 graus com uma velocidade de 100 (0-255) servo.wait(); // Aguarda o servo }
Entendendo o Código:
No setup(), o servo é anexado ao pino 8 e é movido para a posição inicial de 0 graus. Em seguida, há um atraso de 2 segundos para impedir o travamento do serial do arduino.
No loop(), são feitos três movimentos sequenciais do servo com diferentes velocidades, 100, 10 e 1:
Primeiro, o servo é movido suavemente para a posição 90 graus com velocidade 100 (a velocidade máxima é 255). Após isso, espera o servo atingir a posição desejada.
Segundo, o servo é movido suavemente para a posição 160 graus, com velocidade 10. Após isso, espera o servo atingir a posição desejada.
Terceiro, o servo é movido suavemente para a posição 180 graus, com velocidade 1. Após isso, espera o servo atingir a posição desejada.
Por fim, o servo executa todo esse processo do loop de forma inversa.
OBS: Quando você envia um comando para mover um servo para uma determinada posição, o servo começa a se mover, mas pode levar algum tempo até que ele alcance exatamente a posição desejada. Durante esse tempo, o programa pode continuar executando outras instruções. A função servo.wait()
interrompe a execução do programa até que o movimento do servo tenha sido concluído, garantindo que o programa não avance para as próximas instruções antes que o servo tenha terminado de se mover.
Perceba que o servo passa por 3 velocidades diferentes 100, 10 e 1.
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!