Micro Servo Motor 9g SG90 com Arduino Uno

Micro Servo Motor 9g SG90 com Arduino Uno

O Micro Servo TowerPro 9g SG90 é um servo de alta qualidade e excelente para as suas necessidades seja em aeromodelismo ou em projetos mecatrônicos. Pensando nisso bolamos um post simples para fazer os primeiros movimentos com o seu Micro Servo 9g SG90 e um Arduino Uno.

Micro Servo 9g

Especificações:

- Voltagem de Operação: 3,0 – 7,2v
– Velocidade: 0,12 seg/60Graus (4,8v) sem carga
– Torque: 1,2 kg.cm (4,8v) e 1,6 kg.cm (6,0v)
– Temperatura de Operação.: -30C ~ +60C
– Dimensões.: 32x30x12 mm
– Tipo de Engrenagem: Nylon
– Tamanho cabo: 245 mm
– Peso: 9g

Conectando:

Componentes necessários:

01 – Arduino Uno

01 – Micro Servo 9g SG90

01 – Kit Jumper Macho-Macho

Conecte a alimentação do Micro Servo 9g ao Arduino. Fio Marrom com GND, Fio Vermelho com 5v e Fio Laranja na Porta Digital 6.

Programando:

#include <Servo.h>

#define SERVO 6 // Porta Digital 6 PWM

Servo s; // Variável Servo
int pos; // Posição Servo

void setup ()
{
  s.attach(SERVO);
  Serial.begin(9600);
  s.write(0); // Inicia motor posição zero
}

void loop()
{
  for(pos = 0; pos < 90; pos++)
  {
    s.write(pos);
  delay(15);
  }
delay(1000);
  for(pos = 90; pos >= 0; pos--)
  {
    s.write(pos);
    delay(15);
  }
}

Deu certo? Comente! ;)

www.filipeflop.com

4
Micro Servo Motor 9g SG90 com Arduino Uno
24 votos, 4.25 classificação média (84% pontuação)

Formado em Ciência da Computação pela Universidade de Mogi das Cruzes, atualmente responsável pelo departamento técnico da FILIPEFLOP.

Compartilhe este Post

71 Comentários

  1. berdam - 27 de junho de 2017

    é possível, eliminar a trava mecânica que existe internamente no servo motor para aumentar o alcance em graus ??

  2. Juan - 25 de março de 2017

    Ola! como programo pra controlar 2 servo

  3. Marcos André - 30 de setembro de 2016

    Olá, gostaria de saber se é necessário colocar algum transistor ou algum diodo para proteger o arduino.

    Grato.

  4. nathalia - 17 de agosto de 2016

    Boa tarde, você poderia me informar qual é a resolução do servo, o menor angulo?

  5. Carlos - 22 de junho de 2016

    Gostaria d saber se esse tipo de motor não precisa de drive vi em uns videos que se usar direto na placa do arduino pode queimar as portas delle

  6. Jonathas - 1 de junho de 2016

    Posso chamar a porta serial com 4800 baud?

  7. Alex - 30 de maio de 2016

    Este tipo de servo serve para o movime de abre e fecha de uma peça de 1 kg?

  8. jose ribeiro - 27 de maio de 2016

    Eduardo a montagem do Arduíno radar Ultrassônico só funciona se o servo tiver uma alimentação em separado 5v , lembrando que negativo da fonte do servo tem esta aterrada no GND da placa .

  9. jefferson - 23 de maio de 2016

    Boa noite

    Estou querendo controlar 4 Micro Servos 9g SG90 atraves de algum aplicativo andoid por bluetooth,vc me recomenda um aplicativo bacana e uma programação que possa utilizar?

  10. Henrique Coelho - 17 de maio de 2016

    Quero fazer um projeto para treino de tiro. Os alvos são cartões fixados sob 4 servos SG9. Eles ficam de lado para o atleta (fechados) e quando o comando de iniciar é dado ( por bluetooth) os 4 alvos giram 90 graus e ficam abertos para o atleta iniciar os disparos. Após 3 segundos os alvos fecham de novo. Permanecem fechados por 7 segundos enquanto o atleta faz a recarga e volta a abrir e fechar um determinado número de vezes.

    Pergunta: qual a melhor maneira de alimentar estes 4 servos que vão atuar sempre na mesma direção e com o mesmo movimento de 90 graus ?

    Uma bateria de 9v é suficiente para os 4 servos? Ou melhor seria usar uma bateria de moto de 12v ? Também poderia usar uma bateria de aeromodelo de Lítio polímero de 7.2v.

    O que é mais indicado?

    Grato,
    Henrique

    • JURANDIR - 31 de maio de 2016

      bom dia!!!
      preciso de muita ajuda!!!

      estou montado um projeto de um braço mecânico controlado por 4 servos e 4 potenciômetros e o arduino uno
      estou com dificuldade pois ao ligar o robô tem movimento aleatórios e o controle manual dos potenciômetro não funcionam plenamente.

      Pergunta: você teria alguma dica ou passo a passo para que eu possa verificar onde estou errando?
      já testei muitos códigos
      já tentei fazer com um único servo, mas nada!
      estou usando potenciômetros de 1k mas já verifiquei num site que o ideal seria de 10k
      na alimentação dos servos, inicialmente estava fazendo pelo arduino, porem resta-me a duvida de como faze independente!
      outra duvida pode-se conectar uma fonte de 12v no arduino ao mesmo tempo que ele esta ligado a porta serial? e se essa alimentação extra “se possível” seria suficiente também para os servos?

      COMO deu pra perceber o meu caso é grave rsrs por favor ajuda!
      Grato!

      • Vanderlei borges - 1 de junho de 2016

        Não sei te dizer ao certo sobre o valor do potenciometro, mas se tiveres um multimetro é so medir a saida e ver a voltagem, não esquecendo que não pode ser maior que 7v, dependendo do uso nem precisa do Arduino podes usar só o potenciometro, te aconselho a usar o regulador de voltagem 7805, ele baixa a voltagem para 5v e pode alimentar dois servos tranquilamente e ele é bem facil de usar.
        leia com calma as postagens anteriores, provavelmente, nelas tem tudo o que precisas.

      • Henrique Morais - 28 de março de 2017

        Pode ligar o arduino na fonte de alimentação externa e usar o cabo serial sem problemas.

    • Vitor Augusto - 13 de julho de 2016

      Boa tarde, se ainda precisa de ajuda me passa seu email que eu entro em contato

  11. Diego - 5 de maio de 2016

    Boa noite, eu tô fazendo um trabalho para a faculdade que é um braço mecânico. Essa programação também serve para movimentar o braço para cima e para baixo?

    • Vanderlei Borges - 15 de maio de 2016

      Sim, o comando :
      s.write(0);
      servo na posição zero
      s.write(90);
      servo na posição 90 graus
      Da para fazer direto assim, mas o servo vai se movimentar muito rapido, teste com o motor fora do braço para evitar quebrar alguma coisa.
      O ideal é usar o programa postado acima, ele faz o servo se mover lentamente.
      delay(15)
      Substitua o 15 por um numero maior (30) e ele vai funcionar mais lento.
      Tem varios exemplos abaixo, estudeos e adapte conforme sua necessidade.
      Se tiver alguma duvida e so perguntar.

  12. Elias gomes - 29 de abril de 2016

    bom dia FILIPEFLOP eu to montando um robô é to começando pelas pernas do robô , quero por motor de passo nele , so que eu não tenho muita esperiencia com motor de passo , e queria tua ajuda , voce poderia me ajudar , preciso pra um projeto de escola , quero por o motor de passo para ter melhor precisão …desde já ,Elias gomes

  13. Vanderlei - 10 de fevereiro de 2016

    Gente uma dica:
    Sg90 fazendo movimentos involuntarios quando se liga o arduino, ruido como se estivesse ligado, ou não obedece a programação o problema é:
    ALIMENTAÇÃO, corrente, voltagem baixa.
    Apanhei um pouco até me dar conta do problema, fiz um robozinho para meu neto com seis servos, um sensor infra e uma placa de som, usei um 7805 para alimentar cada servo o sensor e a placa, as vezes funcionava com uma fonte de 12v-1A e as vezes ficava doidão, troquei por uma fonte de 12v-2A e não mudou muito, so depois lembrei que minha rede em 127v tem muita oscilação, liguei em um transformador de 227v e ficou perfeito.
    Conclusão tenho duas fontes novas bivolt que são um lixo hahahahahahah!
    Mas a dica é essa monitorem a voltagem que vai pros servos.

  14. Marcio - 9 de fevereiro de 2016

    Gostaria de saber, como faço para o servo motor se movimentar 90 graus e desligar e quando eu acionar ele novamente ele volte para a posição inicial.
    Estou fazendo o projeto da cancela que abre e fecha com RFID.
    Porém eu alterei o projeto para outra funcionalidade.
    E quando eu passo o cartão no RFID eu queira que o servo se move se a 90 graus e desligar e quando eu passar o cartão novamente ele volte a ligar e voltar para a posição inicial.
    Desculpe o texto grande, mais estou ficando louco com isso rs

  15. VANDERLEI - 16 de janeiro de 2016

    Tem como ler o angulo em que se encontra o servo?

  16. gileade - 18 de dezembro de 2015

    Boa noite tenho, um garra robótica usando 4 servos motores e estou com dificuldade de fazer um programa que possa funcionar automatizada quem poder mim ajudar ficarei agradecido .

  17. Josielio - 30 de novembro de 2015

    Boa noite. Tem um modelo de programação para usar o servo como cancela de estacionamento utilizando PIC?

  18. Thiago - 7 de novembro de 2015

    Toda vez que ligo o arduino meu servo motor mexe bruscamente e para. Eu coloquei o mesmo código do site. Vocês teriam alguma sugestão para deixa-lo parado?

  19. Bruno - 16 de setembro de 2015

    Como faço para controlar a velocidade?

  20. André Barcelos - 10 de agosto de 2015

    Prezados,

    Comprei um Micro Servo 9g SG90 TowerPro que veio no Kit Arduino Beginning, mas semrpe que ligo o mesmo ao arduino e tento carregar o mais simples Skecthde exemplo (servo -> sweep) começa dar um monte de erro e até a máquina para de reconhecer o Arduino como um dispositivo de entrada e saída e ao olhar no Gerenciador de Dispositos do Windows a COM do Arduino fica piscando sem parar, como se estivesse conectando e desconectando o Arduino incessantemnte e assim que desconecto o servo volta tudo ao normal.
    Vocês teriam alguma idéia do que pode estar acontecendo?
    Grato!

    • FILIPEFLOP - 11 de agosto de 2015

      Boa tarde André,

      O problema acontece apenas quando você liga o motor ou com outros componentes também ?

      Adilson – Equipe FILIPEFLOP

      • André Barcelos - 11 de agosto de 2015

        Boa tarde!

        Apenas quando alimento o motor. Já utilizei vários outros componentes e não tive nenhum problema (os únicos do kit os quais ainda não havia utilizado eram o Servo e o LCD). E por isso estou achando não ser problema no Arduino, mas ter sim um problema no Servo.

        O que vocês me dizem!?

        • FILIPEFLOP - 11 de agosto de 2015

          Boa tarde André,

          Realmente pode ser um problema no servo, mas verifique se há algum problema com as conexões. O seu motor deve ter um conector com 3 fios: Laranja (sinal), vermelho (Vcc) e marrom (GND), estão conectados corretamente ?

          Abraço

          Adilson – Equipe FILIPEFLOP

          • André Barcelos - 11 de agosto de 2015

            Sim,a conexão é exatamente essa!
            As vezes ele faz um pequeno movimento no início e depois para e não se movimenta mais, mesmo desconectado e reconectando o Arduino. Daí as vezes fica fazendo apenas um barulhinho indicando estar sendo alimentado mas sem realizar nenhuma outra ação.

          • André Barcelos - 12 de agosto de 2015

            E então pessoal, mais alguma recomendação? Será que o problema é no Servo mesmo? Se for como podemos proceder, pois também vieram alguns Jumpers MxM com defeito, simplesmente não funcionam, não dão contato.

            Grato e aguardo contato,

            André Barcelos

          • FILIPEFLOP - 14 de agosto de 2015

            Boa tarde André,

            Se você fez todos os testes, seguiu os tutoriais e ainda assim está apresentando problema, peço que entre em contato pelo email vendas@filipeflop.com para que sejam informados os procedimentos para avaliação tanto do servo motor como dos jumpers.

            Abraço

            Adilson – Equipe FILIPEFLOP

    • Marcos - 14 de outubro de 2015

      André, se o seu arduino estiver sendo alimentado somente a porta serial do pc não vai funcionar, o ideal é fazer a alimentação do arduino com uma fonte de 9v própria do arduino, pois a porta serial não aguenta a manipulação do servo.

      deu pra entender?? =S
      sou péssimo em explicar as coisas.

      Boa sorte!

  21. Nando - 6 de agosto de 2015

    Seu segundo loop nunca entrará porque pos inicia com 90 e a condição do loop é funcionar somente se pos menor que zero, o que não ocorre jamais, troque isso para maior que zero ou maior igual a zero. Abçs!!!

  22. Eduardo - 5 de agosto de 2015

    Bom dia, hoje chegou um servo deste que havia encomendado em sua loja, não estou conseguindo utilizá-lo, ja carreguei este programa e o sweep, quando ligo o servo ele faz um barulho como se estivesse meio garrado (rangendo) e não mexe, alguem sabe o que pode ser?

    Vermelho – 5v
    Marrom – GND
    Laranja – Controle

  23. francisco edson vieira pereira - 27 de junho de 2015

    valeu por esse código.
    deu certo fazer a garra robótica funcionar,
    perfeitamente.
    Agora e só estudar mais um pouco pra fazer um braço robótico.

    agradeço pela ajuda.

  24. Rodrigo Caruso - 11 de junho de 2015

    Você errou na linha 23 que diz:
    for(pos = 90; pos = 0; pos–)

    Ou algo assim

  25. Murillo do Carmo - 21 de maio de 2015

    Mais uma vez, parabéns pelos artigos. Estou com um projeto pessoal e surgiu uma dúvida. Queria fazer um alimentador de aquário integrado ao nano, que girasse um recipiente com ração, girando o furo para cima e para baixo liberando a ração (algo entre 20 e 50gr). Minha dúvida é se esse servo em específico teria potência para o que preciso, pois estou pensando em adquirir na loja virtual. Grato,

  26. Igor - 21 de março de 2015

    ops, mandei errado!

    #include

    Servo Servo1;
    Servo Servo2;

    void setup()
    {
    Servo1.attach(3);
    Servo2.attach(4);
    Servo1.write(20);
    Servo2.write(20);

    }
    void loop()
    {
    int i;
    for(i=20;i20;i–) {
    Servo1.write(i);
    delay(10);
    }
    delay(1000);
    for(i=20;i20;i–) {
    Servo2.write(i);
    delay(10);
    }
    delay(1000);
    }

  27. Igor - 21 de março de 2015

    Olá amigo, queria tirar uma duvida, como faço para programar dois ou mais servos motores simultaneamente mas com controle de velocidade?
    minha programação esta assim

    #include

    Servo Servo1;
    Servo Servo2;

    void setup()
    {
    Servo1.attach(3);
    Servo2.attach(4);
    Servo1.write(20);
    Servo2.write(20);

    }
    void loop()
    {
    int i;
    for(i=20;i20;i–) {
    Servo1.write(i);
    delay(10);
    }
    delay(1000);
    for(i=20;i20;i–) {
    Servo2.write(i);
    delay(10);
    }
    delay(1000);
    }

    só que atua um de cada vez!

    • Marcos - 14 de outubro de 2015

      desta forma o arduino vai interpretar um FOR de cada vez…
      o ideal seria manipular os 2 servos no mesmo FOR ou então utilizar um WHILE manipulando os dois servos no mesmo bloco de codigos.

      ex.

      int i = 20;

      while( i > 0 )
      {
      servo1.write( i );
      servo2.write( i );

      delay(10);
      i–;
      }

  28. Thenno - 25 de fevereiro de 2015

    Felipe, como eu acrescento esse código ao do controle de acesso por RFID e display que você mostrou em outro post?

  29. gustavo - 16 de dezembro de 2014

    boa noite, como eu faço pra controla um servo por um joystick? é mto dificil ? kkk valeu

  30. Prof.Xavier - 30 de outubro de 2014

    #include

    #define SERVO 6 // Porta Digital 6 PWM

    Servo s; // Variável Servo
    int pos; // Posição Servo

    void setup ()
    {
    s.attach(SERVO);
    Serial.begin(9600);
    s.write(0); // Inicia motor posição zero
    }

    void loop()
    {
    for(pos = 0; pos 0; pos–) // posição pos tem que ser maior que 0 para que ele decremente
    {
    s.write(pos);
    delay(15);
    }
    }

  31. Alisson - 25 de outubro de 2014

    Bom dia, gostaria de saber se eu consigo ligar 2 servo motores 9g, diretamente na placa do arduino uno…

  32. Davi - 16 de outubro de 2014

    Estou querendo fazer uma aranha robô com 6 pernas com esse servo. Colocando 3 servos em cada perna terei no final que controlar 18 servos. Pergunta: Como controlar esse número de servos, sendo que no Arduíno eu não tenho tantas portas assim? Tem algum jeito?
    Obrigado.

  33. Bernardão - 25 de setembro de 2014

    Algo agradável.
    Ta parei.
    Não consegui programar direito, q droga! Tem como mostrar melhor?

  34. Filipe - 7 de setembro de 2014

    Boa tarde!

    Poderia me ajudar?

    Consigo fazer meu servo se movimentar de 0 a 180 graus (indo e vindo), e no meio desse movimento quero que ao pressionar um botão o servo pare,veja quantos graus esta e ande mais 5 graus e se mantenha parado.

    Explicando melhor: tenha uma garra robótica que ao detectar que pegou um objeto (botão foi pressionado) quero que ele veja quantos graus andou ( botão foi pressionado e estava em 90 graus) quero que ele ande mais 5 graus e pare (95 graus) (para detectar e segurar com firmeza o objeto)

    Segue o código que tenho:

    #include

    Servo myservo; // create servo object to control a servo

    // a maximum of eight servo objects can be created

    int pos = 0; // variable to store the servo position

    void setup()

    {

    myservo.attach(9); // attaches the servo on pin 9 to the servo object

    }

    void loop()

    {

    for(pos = 0; pos =1; pos-=1) // goes from 180 degrees to 0 degrees

    {

    myservo.write(pos); // tell servo to go to position in variable ‘pos’

    delay(15); // waits 15ms for the servo to reach the position

    }

    }

  35. Hobbert - 19 de agosto de 2014

    Deu certinho o código!
    Só percebi que o servo ia numa velocidade muito rápida e voltava devagar.
    Analisando o código percebi que o código correto da segunda parte é:

    for(pos = 90; pos > 0; pos–)

    A diferença é o POS>0, pois significa que enquanto a posição for maior ele decrementa aos poucos. Do contrário ele vai direto do 90 pro 0 pulando de um laço for direto pro outro

    Valeu

    Abração

  36. jonatas - 28 de maio de 2014

    Sugestão: trocar o “pos 0″, já que nunca será menor que zero mesmo.

  37. yuricastro - 29 de outubro de 2013

    Eu gostaria e saber que da para modificar um micro servo motor para gerar energia para um trabalho da feira de ciência

Deixe uma resposta