Controle de Posição Servo Motor com Arduino

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.

Controle de Posição Servo Motor com Arduino

Controle de Posição Servo Motor com Arduino

 

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;

– 1 Micro Servo Motor SG90;

– 3 Jumpers Macho x Macho.

 

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.

Esquemático Projeto Arduino com Servo

Esquemático Projeto Arduino com Servo

 

Funcionamento do Programa (Software)

 

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 Micro Servo Motor SG90;

– 3 Jumpers Macho x Macho;

– 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.

Esquemático Projeto Arduino com Servo e Potenciômetro

Esquemático Projeto Arduino com Servo e Potenciômetro

 

Funcionamento do Programa (Software)

 

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.

Categorias
ArduinoProjetos

Mecânico de Manutenção com Experiência em Sistemas Embarcados, Automação e Desenvolvimento de Projetos; Graduado nos Cursos de Matemática - URI e Física - UFFS.
27 Número de Comentários
  • BRAÇO ROBÓTICO PARA ARDUINO – Blog – Usinainfo – Ferramentas e Eletrônica
    15 julho 2016 at 19:43
    Deixe seu Comentário

    […] Projetos CONTROLE DE POSIÇÃO DO MICRO SERVO MOTOR 180° […]

    • Luiz
      9 agosto 2022 at 20:14
      Deixe seu Comentário

      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°

  • Raul Higuchi
    8 dezembro 2017 at 22:40
    Deixe seu Comentário

    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?

    • Equipe Usinainfo
      13 dezembro 2017 at 11:24
      Deixe seu Comentário

      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

  • Renato dos Santos
    21 janeiro 2018 at 16:42
    Deixe seu Comentário

    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.

    • Equipe Usinainfo
      24 janeiro 2018 at 18:21
      Deixe seu Comentário

      É 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.

  • Vitor coelho
    4 junho 2018 at 17:44
    Deixe seu Comentário

    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

    • Equipe Usinainfo
      31 julho 2018 at 14:43
      Deixe seu Comentário

      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?

  • Victor
    10 outubro 2018 at 18:01
    Deixe seu Comentário

    e se eu precisar acionar com um botão pra ir e pra voltar, em vez de ficar indo e voltando sozinho

    • Equipe Usinainfo
      23 novembro 2018 at 12:27
      Deixe seu Comentário

      Olá Victor!
      É totalmente possível, só precisará adicionar um sistema de acionamento via button em vez de trabalhar apenas com delay.

  • RUBENS FRAI MARTINS
    17 fevereiro 2019 at 00:01
    Deixe seu Comentário

    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.

    • Equipe Usinainfo
      23 abril 2019 at 14:01
      Deixe seu Comentário

      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.

  • Anderson
    1 abril 2019 at 22:24
    Deixe seu Comentário

    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

    • Equipe Usinainfo
      16 abril 2019 at 20:18
      Deixe seu Comentário

      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.

  • Lucas
    23 maio 2019 at 18:01
    Deixe seu Comentário

    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

    • Equipe Usinainfo
      14 junho 2019 at 20:44
      Deixe seu Comentário

      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.

  • David
    25 julho 2019 at 22:50
    Deixe seu Comentário

    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.

    • Equipe Usinainfo
      29 julho 2019 at 16:40
      Deixe seu Comentário

      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.

  • Cleimar ardengue
    11 agosto 2019 at 22:04
    Deixe seu Comentário

    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.

    • Equipe Usinainfo
      5 setembro 2019 at 16:03
      Deixe seu Comentário

      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.

  • Manuel Pereira
    20 setembro 2020 at 16:19
    Deixe seu Comentário

    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.

    • Matheus Gebert Straub
      6 outubro 2020 at 17:24
      Deixe seu Comentário

      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.

  • William Coelho de Araújo Fagundes
    23 fevereiro 2021 at 14:49
    Deixe seu Comentário

    OLÁ COMO FAÇO PARA COPIAR O CÓDIGO?

    • Matheus Gebert Straub
      4 março 2021 at 17:42
      Deixe seu Comentário

      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.

      • Vladimir
        6 outubro 2024 at 11:56
        Deixe seu Comentário

        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.

        • Victor Eduardo Ferreira
          9 outubro 2024 at 17:06
          Deixe seu Comentário

          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
          }
          }

  • Gás GNV
    31 agosto 2021 at 00:19
    Deixe seu Comentário

    Conteúdo excelente, parabéns!

  • Deixe seu Comentário

    *

    *

    Sobre nós

    Hoje a Usinainfo é um dos maiores ecommerces de Ferramentas, Peças para Eletrônica, Componentes Eletrônicos, Sensores e Arduino do Brasil, contando com uma grande diversidade de produtos na linha de eletrônica.

    Sugestões

    Artigos Relacionados