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.
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.
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.
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
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?
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
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?..
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
como faço para controlar o servo da biblioteca acima com botao push buton
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
alguém me ajude, estou sofrendo com meu arduino nano, não consigo passar o projeto para ele, sempre da erro
Expedito,
Qual erro ocorre?
Abraços!
Diogo – Equipe MakerHero
exelente as explicação obrigado.
Jaime,
Obrigado! E bora continuar aprendendo!!
Abraços!
Diogo – Equipe MakerHero
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?
ta lindo mara e perfeito
Que bom que curtiu, Garcia!
Abraços!
Diogo – Equipe MakerHero
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 ??
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
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);}
}
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);}
}
Olá Demarques,
Você poderia colocar seu problema no nosso fórum? https://www.makerhero.com/forum/
Acho que lá você consegue colocar seu código de maneira integral 😀
Abraço!
Rosana – Equipe MakerHero
Ola amigo no caso queria controlar 3 servos esta biblioteca serve ou tenho que usar outra no caso??
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
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
Olá Daniel,
É muito bom saber que nosso post pode te ajudar!
Abraço!
Rosana – Equipe MakerHero
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!
É 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
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º.
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.
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
e se eu precisar acionar com um botão pra ir e pra voltar, em vez de ficar indo e voltando sozinho
Olá Vitor!
Só colocar um if(botao) dentro da sua programação!
Abraços!
André – Equipe MakerHero
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??
Olá Johan!
Isso, a função s.write(pos); manda o servo para a posição colocada em graus.
Abraços!
André – Equipe MakerHero
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)
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.
Se você quiser colaborar com a comunidade, dê uma olhadinha no nosso fórum:
https://www.makerhero.com/forum/
Lá você pode colocar suas dúvidas, compartilhar projetos e ajudar a responder a de outras pessoas também.
Seria legal você compartilhar esse projeto lá, bastante gente tem esse tipo de dúvida 🙂
Abraços!
André – Equipe MakerHero
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….
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?
Olá Andrey!
Você já experimentou utilizar uma tensão menor para alimentar o servo?
Abraços!
André -Equipe MakerHero
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
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
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???
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.
Teria como fazer um post sobre o módulo para oximetria MAX30100, sobre como ligar ele e a programação?
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.
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?
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.
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.
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’
como faco para o servo mudar a pos 0 para 90 de acordo com a temperatura
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
Obrigado com sua ajuda eu consegui valeu
Olá, gostaria de saber como eu colocaria em um código para o servo movimentar quantas vezes eu escrever através de um switch?
é possível, eliminar a trava mecânica que existe internamente no servo motor para aumentar o alcance em graus ??
Ola! como programo pra controlar 2 servo
Olá, gostaria de saber se é necessário colocar algum transistor ou algum diodo para proteger o arduino.
Grato.
Boa tarde, você poderia me informar qual é a resolução do servo, o menor angulo?
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
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.
Posso chamar a porta serial com 4800 baud?
Este tipo de servo serve para o movime de abre e fecha de uma peça de 1 kg?
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 .
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?
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
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!
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.
Pode ligar o arduino na fonte de alimentação externa e usar o cabo serial sem problemas.
Boa tarde, se ainda precisa de ajuda me passa seu email que eu entro em contato
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?
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.
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
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.
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
Tem como ler o angulo em que se encontra o servo?
Boa tarde Vanderlei,
Tente a função servo.read(): https://www.arduino.cc/en/Reference/ServoRead
Abraço.
Adilson – Equipe MakerHero
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 .
Boa noite. Tem um modelo de programação para usar o servo como cancela de estacionamento utilizando PIC?
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?
Como faço para controlar a velocidade?
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
Ola. Vc tem algum exemplo de um programa que controla a velocidade do motor usando essa biblioteca? Pode controlar a velocidade com um potenciometro?
Ei amigo, para mudar a velocidade é só mudar o delay (15) para um delay menor, e aí rotacionará mais rápido. Abraços
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!
Boa tarde André,
O problema acontece apenas quando você liga o motor ou com outros componentes também ?
Adilson – Equipe MakerHero
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!?
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
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.
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
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
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!
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!!!
Boa tarde,
Obrigado pela dica. Alterado.
Abraço.
Adilson – Equipe MakerHero
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
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
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.
Bom dia Francisco,
Ficamos felizes em ajudar. Qualquer dúvida, estamos à disposição.
Abraço.
Adilson – Equipe MakerHero
Você errou na linha 23 que diz:
for(pos = 90; pos = 0; pos–)
Ou algo assim
O site DILACEROU meu comentário:
seria na linha 23
pos MAIOR IGUAL zero
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,
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
Boa tarde, gostaria de saber se posso alimentar este servo com uma bateria LiFe 6.6V?
Abraço!
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);
}
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!
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–;
}
Felipe, como eu acrescento esse código ao do controle de acesso por RFID e display que você mostrou em outro post?
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
Parabens…
boa noite, como eu faço pra controla um servo por um joystick? é mto dificil ? kkk valeu
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
#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);
}
}
Bom dia, gostaria de saber se eu consigo ligar 2 servo motores 9g, diretamente na placa do arduino uno…
Boa tarde Alisson,
Sim, basta você usar pinos diferentes para controle de cada servo.
Abraço.
Adilson – Equipe MakerHero
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.
Boa noite Davi,
Não sei se o seu projeto comporta, mas tente usar o Arduino Mega.
Abraço.
Adilson – Equipe MakerHero
Arduino Mega tem quantidade suficiente de portas digitais
Algo agradável.
Ta parei.
Não consegui programar direito, q droga! Tem como mostrar melhor?
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
}
}
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
muito bom
Boa tarde,
Valeu ! Agradecemos a visita.
Adilson – Equipe MakerHero
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
Sugestão: trocar o “pos 0”, já que nunca será menor que zero mesmo.
Deu certo, OBG.
Deu certo, OBG.
Eu gostaria e saber que da para modificar um micro servo motor para gerar energia para um trabalho da feira de ciência
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