Micro Servo Motor 9g SG90 com Arduino Uno 124

As placas Arduino podem ser utilizadas para diversas funções, e graças a sua incrível versatilidade, é possível controlar sensores, módulos e até mesmo motores. No post de hoje, iremos aprender como utilizar um servo motor com o Arduino, tudo isso de forma simples e intuitiva. 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 e um Arduino Uno.

micro servo

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:

As conexões desse motor com a placa Arduino são bastante simples. Tudo o que é preciso fazer é conectar a alimentação do Micro Servo 9g ao Arduino: Fio Marrom com GND, depois o fio Vermelho no pino 5v da placa. Por fim, conecte o Fio Laranja na Porta Digital 6 (D6).

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

Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

124 Comentários

  1. Adquiri recentemento 10 servo-motor 9g SG90 e 6 placas Arduino Uno, para um projeto no trabalho.
    Ao realizar a ligação do servo motor no arduino, medindo no multimetro, o 5V está passando normal, mas o pino de sinal está em 0. Assim, após upar o código de exemplo do servo no arduino, o mesmo não apresenta nenhum sinal de vida.

    Testei os 10 motores nas 6 placas, e todas apresentaram o mesmo problema. Parece que, independente da porta PWM que coloco o pino de sinal do motor, ele não funciona de jeito nenhum.

    Testei também os motores em um Arduino Leonardo e em um Arduino Nano, com o mesmo problema.

    Outros componentes funcionaram corretamente: coloquei um potenciometro na porta 9 e no monitor serial, consigo ler os dados dele. Ao colocar o servo motor na mesma porta, não ocorre nenhuma leitura e o motor simplesmente não funciona, mesmo medindo os 5V no fio vermelho.

    Alguém saberia dizer se, por azar, comprei um lote danificado de 10 servo motor? Ou se existem outros procedimentos de testes e resolução do problema?

    Já testei o pino de sinal do servo nas nas entradas 3,6, 7, 8, 9 e 10, sem sucesso em todos os motores com todas as placas.

    Outra coisa que percebi, sem querer, é quem em um dado momento, enquanto o arduino estava ligado na porta USB do computador, sem querer, encostei o dedo no metal da conexão USB e assim, o motor apresentou um sinal de vida, se moveu um pouco e depois parou também.

    Senti também que o motor vem com uma espécie de óleo quando tiro do plástico. Parece algo que envolve ele e deixa o dedo meio oleoso.

    Se puderem ajudar, agradeço muito.

    1. Olá Willians,

      Com o multímetro vai ser difícil identificares a saída de comando do servo pois é um sinal PWM, o ideal é utilizar um osciloscópio.
      Esse óleo é relativamente comum de vir, apesar da maior parte do motor ser plástico, é uma proteção para as partes metálicas como o motor, e as vezes extravasa um pouco.

      O pino 8 não é pino PWM, então talvez não funcione muito bem.

      Você pode tentar também um testador de servo para eliminar problemas no arduino.

      Abraços!
      Vinícius – Equipe MakerHero

  2. Adilson boa noite feliz domingo,eu gosto muito das suas instruções, está do servo fantástica, amigo eu tenho uma Plotter que queimou a placa principal e eu estou tentando colocar um Arduino nano e dois CI L239d de circuito que baixei na Net, funcionou os dois motores porém em lugar do servo eu tenho nela um solenóide, e gostaria de saber se poderia me ajudar, pois estou começando agora com o Arduino e não tenho conhecimento para tal, a porta do Arduino é D6 e pwm, que fazer?

    1. Olá!

      A solenoide é apenas aberta ou fechada, ou tem alguma graduação? Caso não tenha graduação não precisa ser PWM, basta nível Alto ou Baixo no pino. Você precisa ver também a tensão ou corrente dela para se certificar que seja compatível com L239D e a alimentação que você está utilizando.

      Abraços!
      Vinícius – Equipe MakerHero

  3. Ola, boa tarde, sou o carlos, tenho pergunta…Qual e a porcentagem adequada de trabalho para o Servo 9g sg 90 ..pra configuração de Rádio flysky fs i6?..

    1. Olá Carlos,

      Conforme o datasheet que você pode conferir aqui: https://www.ee.ic.ac.uk/pcheung/teaching/DE1_EE/stores/sg90_datasheet.pdf
      a porcentagem seria entre 5 e 10% de ciclo de trabalho. 1 a 2 ms num período de 20 ms

      Abraços!
      Vinícius – Equipe MakerHero

  4. como faço para controlar o servo da biblioteca acima com botao push buton

    1. Olá Cleber,

      Dê uma olhadinha na nossa aula do kit Maker Arduino: https://www.makerhero.com/universidade/kit-maker-arduino/projeto-8-acionando-um-motor/

      Abraço!
      Rosana – Equipe MakerHero

  5. alguém me ajude, estou sofrendo com meu arduino nano, não consigo passar o projeto para ele, sempre da erro

    1. Expedito,

      Qual erro ocorre?

      Abraços!
      Diogo – Equipe MakerHero

  6. exelente as explicação obrigado.

    1. Jaime,

      Obrigado! E bora continuar aprendendo!!

      Abraços!
      Diogo – Equipe MakerHero

  7. Olá! Estou com uma peça que deve permanecer o dia todo ligada com um servo motor. E já tive que trocar 3 vezes. Ele está queimando por uso contínuo? O servo motor mais robusto resolveria o problema?

  8. ta lindo mara e perfeito

    1. Que bom que curtiu, Garcia!

      Abraços!
      Diogo – Equipe MakerHero

  9. ola estou tentando fazer com que o meu servo ao iniciar a sua programação, vá para o 0 automaticamente. Depois de ter chegado no 0 ao clicar num botão gire 180 graus, e ao clicar no outro botão ele volte para a estaca zero mas girando para o lado oposto.
    Alguém sabe como posso fazer isso ??

    1. Olá, Matheus!

      Sugiro que mande essa dúvida para o nosso fórum, lá é possível que possamos postar códigos e afins para lhe ajudar 😉

      Abraços!
      Diogo – Equipe MakerHero

  10. Caro
    Adilson Thomsen.
    Boa tarde. Sou inciante com esta plataforma e estou com problemas neste código abaixo.
    A logica que gostaria de fazer seja quando as chaves esquerda ou central fossem a LOW ( e permanecerem em LOW pelo tempo indeterminado) não acionassem o servo novamente a posição original. O melhor explicando.
    Ex:
    ChaveEsquerda=0 (momentaneamente) o servo vai para 70 graus- ok funciona!!! Mas não é isso que quero.
    Eu gostaria de que a ChaveEsquerda=0 (por um tempo indeterminado) o servo vá para 70 graus. Isso não acontece!!! O servo é acionado vai a 70 graus e volta a posição inicial ficando neste loop de ida e volta durante a chaveEsquerda pressionada (low).
    Vc poderia me ajudar ?
    Desde já agradeço a sua atenção.
    Abraços

    #include
    Servo myservo;
    int val;
    int pos=0;
    int ChaveEsquerda=9; //Pino a ser ligado na chave esquerda
    int ChaveCentral=10; //Pino a ser ligado na chave central

    void setup() {

    myservo.attach(8); // Pino de dados do servo conectado ao pino 8
    pinMode(ChaveEsquerda, INPUT); //Define o pino como entrada
    digitalWrite(ChaveEsquerda, HIGH); //Aciona o resistor pull-up interno
    pinMode(ChaveCentral, INPUT);
    digitalWrite(ChaveCentral, HIGH);

    pinMode(2,OUTPUT); // relé 1
    pinMode(3,OUTPUT); // relé 2
    pinMode(4,INPUT_PULLUP); // sensor 1
    pinMode(5,INPUT_PULLUP); // sensor 2
    pinMode(6,INPUT_PULLUP); // sensor 3
    pinMode(7,INPUT_PULLUP); // sensor 4
    }

    void loop() {

    val=digitalRead(ChaveEsquerda); //Le o valor da Chave ESQUERDA (On/Off)

    if(val!=1) //Caso a chave seja pressionada, movimenta o servo
    for(pos = 0; pos = 0; pos–)
    {
    myservo.write(pos); //Move o servo para o angulo de 0 graus
    delay(15);
    }
    if (!digitalRead(4) || !digitalRead(5)) {digitalWrite (2, LOW); digitalWrite (3, LOW);}
    if (!digitalRead(6) || !digitalRead(7)) {digitalWrite (2, HIGH); digitalWrite (3, HIGH);}
    }

    Demarques Ribeiro da Silva
    1. algo esta errado eu publico mas o codigo é mutilado.

      #include
      Servo myservo;
      int val;
      int pos=0;
      int ChaveEsquerda=9; //Pino a ser ligado na chave esquerda
      int ChaveCentral=10; //Pino a ser ligado na chave central
      void setup() {
      myservo.attach(8); // Pino de dados do servo conectado ao pino 8
      pinMode(ChaveEsquerda, INPUT); //Define o pino como entrada
      digitalWrite(ChaveEsquerda, HIGH); //Aciona o resistor pull-up interno
      pinMode(ChaveCentral, INPUT);
      digitalWrite(ChaveCentral, HIGH);
      pinMode(2,OUTPUT); // relé 1
      pinMode(3,OUTPUT); // relé 2
      pinMode(4,INPUT_PULLUP); // sensor 1
      pinMode(5,INPUT_PULLUP); // sensor 2
      pinMode(6,INPUT_PULLUP); // sensor 3
      pinMode(7,INPUT_PULLUP); // sensor 4
      }
      void loop() {
      val=digitalRead(ChaveEsquerda); //Le o valor da Chave ESQUERDA (On/Off)
      if(val!=1) //Caso a chave seja pressionada, movimenta o servo
      for(pos = 0; pos = 0; pos–)
      {
      myservo.write(pos); //Move o servo para o angulo de 0 graus
      delay(15);
      }
      if (!digitalRead(4) || !digitalRead(5)) {digitalWrite (2, LOW); digitalWrite (3, LOW);}
      if (!digitalRead(6) || !digitalRead(7)) {digitalWrite (2, HIGH); digitalWrite (3, HIGH);}
      }

      Demarques Ribeiro da Silva
  11. Ola amigo no caso queria controlar 3 servos esta biblioteca serve ou tenho que usar outra no caso??

    1. Olá Edmar,

      Dê uma olhadinha nesses dois tutoriais, acho que vão te ajudar:
      https://www.makerhero.com/blog/video-controle-de-servo-motor-sem-biblioteca/
      https://www.makerhero.com/blog/como-usar-modulo-pwm-servo-16-canais/

      Abraço!
      Rosana – Equipe MakerHero

  12. Eu gosto muito dos vídeos tutoriais da WRKITS, que pelo visto tem parceria com a MakerHero, sou novato nessa área, más desde que comecei muito me identifiquei.
    Vlw por postar essa publicação Adilson, ajuda bastante

    1. Olá Daniel,

      É muito bom saber que nosso post pode te ajudar!

      Abraço!
      Rosana – Equipe MakerHero

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

    1. Olá Rubens!

      É a característica do servo. Talvez você possa usar um motor de passo ou um motor DC mesmo. Eles travam melhor.

      Abraços!

      André Rocha – Equipe MakerHero

  14. Bom dia.
    Gostava de saber se é possível fazer com que o servo, após dado sinal vá para a posição 90º e depois após outro sinal volte para os 0º.

  15. Bom dia ( pelo menos era quando escrevi) . Gostaria de saber como colocar uma condição no controle do servo.
    Por exemplo o servo terá uma trajetória fixa em loop infinito (claro que controlado por um RTC), porém gostaria de por um contato NC (ou algum push botton) que caso o horário do RTC estivesse mandando o loop iniciar, porém o contato NC estivesse aberto o loop não seria executado, após o tempo do RTC terminar o sistema ficaria aguardando, até o próximo tempo programado, e se no próximo tempo o contato estivesse fechado aí sim o loop seria iniciado, indefinidamente até ser interrompido pelo RTC ou pelo contato NC. Obrigado desde já. Tenham um ótimo dia.

    1. Bom dia Samuel! (Também era dia quando escrevi 🙂 )

      É possível sim. Para acionar o loop com o RTC você deve ter colocado alguma condição no loop. Você deve adicionar mais uma condição, com lógica E. Se for a hora E o contato estiver fechado.

      Dê uma olhada nesse post sobre operações lógicas:
      https://www.makerhero.com/blog/introducao-as-portas-logicas/

      Abraços!

      André – Equipe MakerHero

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

    1. Olá Vitor!

      Só colocar um if(botao) dentro da sua programação!

      Abraços!

      André – Equipe MakerHero

  17. Boa noite, gostaria de saber oque o comando s.write (pos) atua? Ele move o motor mas em quantos graus? Meu código vem de um estacionamento inteligente, onde o veículo após passar pela catraca (1a condição) e estaciona na vaga (2acondição) a vaga será ocupada e no display diminuirá -1 num de vagas…. Sendo assim. Minha catraca (motor) quando o veículo se aproximar do sensor, sairáda posição 0 graus e vai para a 90 graus. Estou com dúvida como proceder??

    1. Olá Johan!

      Isso, a função s.write(pos); manda o servo para a posição colocada em graus.

      Abraços!

      André – Equipe MakerHero

  18. Olá, parabéns pelo blog… utilizo sempre para tirar minhas dúvidas…
    Pretendo controlar um servo a uma distância de 12m através de um potenciômetro, gostaria de saber qual o comprimento máximo do cabo eu posso usar no servo… ou se o cabo deve ser usado no pot.
    (Não pode ser wireless, tem de ser cabo mesmo)

    1. Olá Eliabe!

      Ficamos muito felizes em saber que nosso conteúdo ajuda as pessoas!

      Para alcançar uma distância tão grande tens que garantir que a tensão que chega lá no servo é o que ele está “esperando”.

      Uma dica é utilizar cabos mais grossos, que perdem menos tensão no caminho. Outra sugestão é aumentar a tensão de saída que você está utilizando para, com as perdas no caminho, chegar a tensão desejada.

      Abraços!

      André – Equipe MakerHero

  19. Boa Noite Adilson, como faço para fazer uma programação com a placa de arduino com o movimento de um servo motor. ex: saindo de uma posição de estado zero, dando uma volta completa até o ponto zero novamente. Sendo que está volta completa seja feita através de um clique em um botão.

    E se possível, me enviar este esquema de programação.

     

    desde já agradeço….

     

  20. Estou fazendo onde o servo se posiciona de acordo com uma variação analógica, porem a velocidade do servo esta muito rápida. Eu tenho como abaixar essa velocidade, deixando o movimento mais suave?

     

    1. Olá Andrey!

      Você já experimentou utilizar uma tensão menor para alimentar o servo?

      Abraços!

      André -Equipe MakerHero

      1. Olá Andrey!

        A biblioteca servo do Arduino não tem esse recurso, mas você pode usar uma biblioteca alternativa como a VarSpeedServo: https://forum.arduino.cc/t/varspeedservo-a-modified-servo-library-with-speed-control/61404

        Abraços!

        André – Equipe MakerHero

  21. Boa tarde.
    Tenho arduino uno ,shield com 4 drivers HR4988 quero controlar 4 motores independentes podem me auxiliar ?
    Vou precisar do codigo e do diagrama .
    Grato

    Dagoberto Macedo Magalhaes
  22. Estou com um problema em usar esse servo. Quando eu uso o código com um botão para acionar o motor ele não para, fica dando uns “tranquinhos” e o motor esquenta de mais. O que eu faço para ele ficar parado na posição e desligar???

    1. Olá, os trancos podem vir de alguns fatores, um dos mais comuns são os engasgos de corrente reversa que permuta na bobina deste motor, ou que volta nos cabos, a solução seria uma alimentação por bateria/pilha/fonte externa do arduino, ou cabos mais grossos assim mantendo uma magnetização estável.

  23. Teria como fazer um post sobre o módulo para oximetria MAX30100, sobre como ligar ele e a programação?

  24. Olá, estou fazendo um projeto no qual utilizarei esse servo motor no arduino. Porém, fiquei sabendo que a corrente fornecida pela arduino é baixa para a aplicação desse motor. Devo instalar juntamento com um transistor. Mas, infelizmente, nao sei como fazer essa conexao. Sei que o coletor e emissor são conectados na fonte +5V e no GND, respectivamente.

  25. Comprei um Guimbal montado com dpos desses Micro Servos, quero instalar no meu Drone, como posso fazer essa ligação? o Micro Servo vem com 03 fios, vermelho, marrom e laranja, você pode me ajudar?

    ISMAEL FERREIRA PRADO PRADO
  26. Amigo, preciso saber qual servo devo usar, seria em um aéromodelo de 3,80 mts de envergadura.
    algumas pessoas já me falaram em servos para 30 kls. Acho que não é necessário, fiquei na dúvida,
    gostaria de contar com sua ajuda.
    Agradeço e fico no aguardo.

    Adorbal Cardoso Pereira Junio
    1. Depende do peso da aeronave, do tamanho da superfície móvel, da velocidade, do Cm, etc.
      O Miranda tem algumas formulas explicando como calcular a força que o servo deve ter. provavelmente vc está em uma equipe de aerodesign, esse material é a base pra vcs, só pesquisar ai no google “miranda aerodesign” que vc acha.

  27. O meu nao da certo nao…da a seguinte msg

    c:/program files (x86)/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.9.2/../../../../avr/lib/avr5/crtatmega328p.o:(.init9+0x0): undefined reference to `main’

  28. como faco para o servo mudar a pos 0 para 90 de acordo com a temperatura

    1. Bom dia David,

      Dê uma olhada no comando “map”, que converte uma faixa de valores em outra. Exemplo: vamos supor que a temperatura minima do sensor seja 0 graus, e a máxima 80 graus. Usando o comando map para converter esse valor para ser utilizado no servo, você usaria:

      valor = temp_sensor;
      map novo_valor = (temp_sensor, 0, 80, 0, 90)

      E aí você usa esse novo_valor para movimentar o servo. Mais informações sobre o comando map() você encontra neste link.

      Abraço!

      Adilson

      1. Obrigado com sua ajuda eu consegui valeu

  29. Olá, gostaria de saber como eu colocaria em um código para o servo movimentar quantas vezes eu escrever através de um switch?

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

  31. Ola! como programo pra controlar 2 servo

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

    Grato.

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

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

    1. Pode crer rapaz! Mesmo este mini-servomotor (SG90) chega a consumir mais de 100mA! o.O

      PS: Para testes e utilizando uma só porta é perigoso mas ainda vai, agora, mais de um servo, alimentação pela USB, etc…putz…não é uma boa ideia!

      Rodrigo Costa.

  35. Posso chamar a porta serial com 4800 baud?

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

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

  38. 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?

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

    1. 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!

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

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

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

  40. 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?

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

  41. bom dia MakerHero 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

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

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

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

    1. Boa tarde Vanderlei,

      Tente a função servo.read(): https://www.arduino.cc/en/Reference/ServoRead

      Abraço.

      Adilson – Equipe MakerHero

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

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

  47. 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?

  48. Como faço para controlar a velocidade?

    1. Bom dia Bruno,

      A biblioteca servo do Arduino não tem esse recurso, mas você pode usar uma biblioteca alternativa como a VarSpeedServo.

      Abraço

      Adilson – Equipe MakerHero

      1. Ola. Vc tem algum exemplo de um programa que controla a velocidade do motor usando essa biblioteca? Pode controlar a velocidade com um potenciometro?

        1. Ei amigo, para mudar a velocidade é só mudar o delay (15) para um delay menor, e aí rotacionará mais rápido. Abraços

  49. 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!

    1. Boa tarde André,

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

      Adilson – Equipe MakerHero

      1. 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!?

        1. 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 MakerHero

          1. 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
          2. 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

            André Barcelos
          3. 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 [email protected] para que sejam informados os procedimentos para avaliação tanto do servo motor como dos jumpers.

            Abraço

            Adilson – Equipe MakerHero

    2. 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!

  50. 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!!!

    1. Boa tarde,

      Obrigado pela dica. Alterado.

      Abraço.

      Adilson – Equipe MakerHero

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

    1. Boa tarde Eduardo,

      A ligação está correta, tente utilizar as informações deste post: http://www.arduinoecia.com.br/2013/06/controlando-um-servo.html

      Abraço

      Adilson – Equipe MakerHero

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

    francisco edson vieira pereira
    1. Bom dia Francisco,

      Ficamos felizes em ajudar. Qualquer dúvida, estamos à disposição.

      Abraço.

      Adilson – Equipe MakerHero

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

    Ou algo assim

    1. O site DILACEROU meu comentário:
      seria na linha 23
      pos MAIOR IGUAL zero

  54. 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,

    1. Boa noite Murillo,

      Vai depender do tipo de recipiente que você vai usar. Apesar de pequeno, esse servo é relativamente forte, com um torque de 1,6 Kg/cm.

      Abraço.

      Adilson – Equipe MakerHero

      1. Boa tarde, gostaria de saber se posso alimentar este servo com uma bateria LiFe 6.6V?

        Abraço!

  55. 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);
    }

  56. 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!

    1. 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–;
      }

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

    1. Boa tarde,

      Por favor dê uma olhada nesse link, que tem quase tudo o que você precisa (não tem o display, mas é fácil de adaptar) :

      http://www.arduinoecia.com.br/2014/12/controle-de-acesso-modulo-rfid-rc522.html

      Abraço.

      Adilson – Equipe MakerHero

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

    1. Boa noite Gustavo,

      Não é difícil não, temos um post sobre esse assunto :

      https://www.makerhero.com/blog/controlando-micro-servo-9g-usando-joystick/

      Abraço !

      Adilson – Equipe MakerHero

  59. #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);
    }
    }

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

    1. Boa tarde Alisson,

      Sim, basta você usar pinos diferentes para controle de cada servo.

      Abraço.

      Adilson – Equipe MakerHero

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

    1. Boa noite Davi,

      Não sei se o seu projeto comporta, mas tente usar o Arduino Mega.

      Abraço.

      Adilson – Equipe MakerHero

    2. Arduino Mega tem quantidade suficiente de portas digitais

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

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

    }

    }

    1. Amigo, faz essa sua garra girar em passos de 5 graus cada e no final de cada passo testa para ver se o botao esta pressionado

    1. Boa tarde,

      Valeu ! Agradecemos a visita.

      Adilson – Equipe MakerHero

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

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

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

    1. Cara, é melhor você fazer com um motor DC, pois com um servo vai dar muito trabalho, pelo fato de não girar mais de 180 graus