O Controle de Posição Servo Motor com Arduino é uma tarefa comumente aplicada por makers no desenvolvimento de projetos, onde utilizam o Micro Servo Motor SG90, que é o motor preferido por profissionais e projetistas que trabalham com o desenvolvimento de projetos robóticos através de sistemas microcontroladores como, por exemplo, Arduino, PIC e AVR.
Diferencia-se dos demais modelos de servo motores devido ao seu tamanho reduzido e sua fácil adaptação nos mais diversificados projetos, podendo ser conectado diretamente ao Arduino para controlar a posição do mesmo de forma precisa e regulável ou com algum componente que faça o controle de sua posição, por exemplo, um potenciômetro, trimpot ou botão.
Devido as suas características, o Micro Servo Motor SG90 é bastante utilizado para controlar a posição de objetos, como pernas, braços ou mãos de robôs, movendo sensores com alta precisão e mobilidade, como por exemplo, o Braço Robótico em MDF.
A maior parte dos servos vem com o sequencial de cores marrom, vermelho e amarelo, porém pode ser encontrado nas cores preto, vermelho e branco no qual podemos classificar cada cor da seguinte maneira:
- Marrom ou preto: GND;
- Vermelho: 5VCC;
- Amarelo ou branco: Sinal Digital (PWM).
Teste Prático Controle de Posição Servo Motor com Arduino
Projeto Arduino com Servo
– Neste primeiro projeto vamos utilizar um código exemplo para realizar a movimentação do servo motor através de comandos diretos do microcontrolador Arduino, no qual o servo irá partir do ângulo 0 até o ângulo 180 e após, irá espera 2 segundos e voltar para o ângulo 0.
Produtos Utilizados no Teste
– 1 Arduino UNO;
Montagem Física (Hardware)
Para fazer a ligação correspondente basta observar com atenção o esquema abaixo e reproduzir em seu projeto a pinagem utilizada.
Funcionamento do Programa (Software)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// Código exemplo para teste de Micro Servo Motor SG90 // Movimento do servo através de comandos especificados #include "Servo.h" // Inclui a Biblioteca Servo.h Servo meuservo; // Cria o objeto servo para programação int angulo = 0; // Ajusta o ângulo inicial do Servo void setup() { meuservo.attach(9); // Declara o pino do servo } void loop() { for (angulo = 0; angulo < 180; angulo += 1) { // Comando que muda a posição do servo de 0 para 180° meuservo.write(angulo); // Comando para angulo específico delay(15); } delay(2000); // Tempo de espera para próximo movimento for (angulo = 180; angulo >= 1; angulo -= 5) { // Comando que muda a posição do servo de 180 para 0° meuservo.write(angulo); // Comando para angulo específico delay(5); } delay(2000); // Tempo de espera para próximo movimento } |
Projeto Arduino com Servo e Potenciômetro
Neste segundo projeto vamos utilizar um código exemplo para realizar a movimentação do servo motor através de um potenciômetro.
Produtos Utilizados no Teste
– 1 Arduino UNO;
– 1 Potenciômetro.
Montagem Física (Hardware)
Para fazer a ligação correspondente basta observar com atenção o esquema abaixo e reproduzir em seu projeto a pinagem utilizada.
Funcionamento do Programa (Software)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Código exemplo para teste de Micro Servo Motor SG90 // Movimento do servo através de potenciômetro #include Servo.h; // Inclui a Biblioteca Servo.h Servo meuservo; // Inicializa o servo no modo de teste int angulo = 0; // Ajusta o ângulo inicial do Servo int potencio = A0; // Inicializa o pino analógico para o potenciômetro void setup() { meuservo.attach(9); // Define que o Servo está conectado a Porta 9 } void loop() { angulo = analogRead(potencio); // Faz a leitura do valor do potenciômetro angulo = map(angulo, 0, 1023, 0, 179); // Associa o valor do potenciômetro ao valor do ângulo meuservo.write(angulo); // Comando para posicionar o servo no ângulo especificado delay(5); } |
Conclusão
O Controle de Posição Servo Motor é muito eficiente e preciso, especialmente em conjunto om o Micro Servo SG90, por ser considerado um produto de grande funcionalidade que pode ser aplicado nos mais diversificados projetos, no entanto, quando utilizado junto com potenciômetros deve-se ter mais atenção e evitar movimentos bruscos devido à “delay” de comunicação, o que pode acarretar na falha dos movimentos do servo.
[…] Projetos CONTROLE DE POSIÇÃO DO MICRO SERVO MOTOR 180° […]
Meu servo motor funciona em 360°, tbm conheço por rotação continua, queria saber se consigo transformar ele em um de 180°, ou trabalhar com ele da mesma forma que em de 180°
Parabéns pelas dicas e aulas. Não sei como fazer o servo motor girar 200 graus, e não apenas 180 (na verdade, nem 180 ele gira). Pode me dar uma dica?
Bom dia Raul!
Neste caso, vale verificar as especificações do referente produto já que o referente servo motor utilizado no projeto gira somente até um ângulo máximo de 180°, para girar 200° teria que ser utilizado um servo de 360°.
Att Equipe UsinaInfo
Ola boa tarde, assisti esse seu vídeo, realmente é um projeto bem interessante, gostaria de saber se é possível fazer o mesmo projeto com ATtiny85.
É possível sim realizar o controle do servo motor através do ATtiny85, apenas será necessária as devidas adaptações para o projeto que irá desenvolver.
Boa tarde tudo bem? Estou tentando fazer um projeto com voice recognition v3 que possibilite o servo girar a 0º e depois a 180º por comando de voz, como se fosse abrir e fechar algo. Porém não estou conseguindo encaixar o código do servo no módulo de voz. Consigo gravar os comando certos para por exemplo apagar e acender leds, mas quando coloco o código do servo não da certo. Vcs teriam algo para me dar uma luz? Um código talvez. Se puder me ajudar fico agradecido
Bom dia Vitor! Você acrescentou todas as variáveis correspondentes ao servo e a biblioteca Servo através do arquivo Servo.h no seu código?
e se eu precisar acionar com um botão pra ir e pra voltar, em vez de ficar indo e voltando sozinho
Olá Victor!
É totalmente possível, só precisará adicionar um sistema de acionamento via button em vez de trabalhar apenas com delay.
Olá amigos…. estou num projeto para fazer uma base giratória com inclinação para antena parabólica. Busquei uma base giratória com servos no Aliexpress e os servos funcionam beleza com controladores com potenciômetro, mas quando desligo o sistema os servos acabam ficando muito leves e tudo se mexe com facilidade. Pergunta: Existe algum servo que consiga se travar quando desligado? Preciso posicionar a antena, desligar os servos e ficar travado na posição…. já tentei com servos de 25kg, mas ainda são leves quando desligados.
Olá Rubens!
Infelizmente não temos maiores informações quanto a um Servo com tais especificações de carga que possa travar em uma posição quando desligado, o normal deles é após desligar-se perder a força e exercer tal movimento. O recomendado é manter a alimentação continuamente para isto não ocorrer.
Olá galera,
Eu gostaria de saber se há possibilidades de escrever um script da seguinte forma:
eu quero que meu servo motor vá para posição “0 grau” e pare lá por 10 segundos, após isso, ele vá para posicçao 180 graus, e também pare lá por 10 segundos.
Tipo: posicão 0 grau parado por 10 segundos, vá para posicão 180 graus e fique lá 10 segundos;
Muito grato,
Anderson Silva
Boa tarde Anderson!
Este código é possível e totalmente simples de se desenvolver, basta seguir o código utilizado neste projeto e alterar apenas o delay (tempo) para o qual deseja.
boa tarde , estamos com um projeto e estou com uma duvida que motor usarei em uma das partes, irei fazer um mixer descer e depois retornar a posição inicial após 8 segundos nesse sistema teria como colocar um timer invés do delay e ele aguenta ate quanto KG? sendo que o mixer pesa 1,18 KG teriam alguma ideia de motor que poderia nos ajudar, muito obrigado
Boa tarde!
Pelas especificações apresentadas, a melhor opção seria a utilização de um motor de passo, porém o peso suportado varia de modelo para modelo.
Quanto a programação, pode-se utilizar também a variável delay sem problemas para executar o deslocamento dentro do tempo que deseja.
boa boite
parabéns pelo site, material muito didático
não entendo de arduino, gostaria de saber se é possível fazer um servo motor se movimentar por 0º, 45º, 90º, 135º e 180º e depois voltar por cada posição permanecendo um tempo determinado em cada posição.
Olá David!
Muito obrigado, é possível sim e para isto basta adicionar as variáveis necessárias determinar o tempo e o ângulo que deseja fixar.
Bom dia! Obrigado pelo projeto, mas não consegui faze_ lo funcionar. O servo fica louco, se movimenta sozinho e não responde ao potenciômetro. Eu tenho leve experiencia com arduino, tive uma cadeira na faculdade que trabalhavamos com ele. Gostaria de alguma dica, pois testei seu projeto e outros similares, inclusive troquei o arduino e os servos achando que eram eles. Parece que os servos ficam loucos quando incluo as variaveis potenciometro.
Boa tarde Cleimar!
Este erro não poderia acontecer uma vez que se movimentam apenas através da variação do valor analógico atribuído ao potenciômetro.
Se já foi alterado o Arduino e o Servo, verifique se o problema não está no Potenciômetro que está utilizando, se o mesmo está bem encaixado junto à protoboard ou se a sua variação analógica está linear ao movimento.
Olá amigo boa noite, depois de fazer o esquema de (Esquemático Projeto Arduino com Servo) como posso pôr o braço do servo a andar mais devagar? Muito obrigado.
Boa Tarde Manuel! Ao que pude entender, existe uma biblioteca especial para isto, a VarSpeed.h, possível de controlar a velocidade do servo via programação.
OLÁ COMO FAÇO PARA COPIAR O CÓDIGO?
Olá William! Basta selecionar o código que está dentro da caixa de texto e após utilizar as teclas de atalho ou utilizar o botão direito do mouse para copiar.
Olá, bom dia!
Belo projeto.
A minha duvida também já foi realizada, mas gostaria de saber como implementar com um botão (codigo mesmo, ou onde posso ter uma referencia de estudo), fechar e abrir. E teria algum projeto para DMX?
De tudo mais,
Valeu.
Basta realizar a conexão do botão e detectar o clique do botão.
Depois implementar o servo, algo como:
#include "Servo.h" // Inclui a Biblioteca Servo.h
Servo meuservo; // Cria o objeto servo para programação
int botao = 7; // Pino do botão
bool inverter = false; // Variável para alternar o movimento do servo
void setup() {
meuservo.attach(9); // Declara o pino do servo
pinMode(botao, INPUT_PULLUP); // Configura o botão com resistor de pull-up
}
void loop() {
// Verifica se o botão está sendo pressionado
if (digitalRead(botao) == LOW) {
if (!inverter) {
meuservo.write(180); // Move o servo para 180°
} else {
meuservo.write(0); // Move o servo para 0°
}
inverter = !inverter; // Inverte o valor de inverter
// Espera o botão ser liberado para evitar várias leituras seguidas
while (digitalRead(botao) == LOW);
delay(200); // Pequeno delay para garantir a estabilidade
}
}
Conteúdo excelente, parabéns!