Componente · Atuador
Servomotor SG90
O SG90 é um servomotor hobby de 9 g para juntas e direções de robôs iniciantes. Entenda como mantém um ângulo, o que levanta e como acioná-lo.
O que é
O SG90 é um microservomotor: um pequeno atuador autossuficiente que gira até um ângulo comandado e o mantém. Enquanto um motor CC comum apenas gira, um servomotor mira—diga “90 graus” e ele se posiciona em 90 graus e resiste a ser afastado desse ângulo. Isso o torna a escolha natural para tudo que precisa se mover até uma posição conhecida: uma junta de braço robótico, uma garra que abre e fecha, um suporte pan-tilt de câmera ou a direção de um pequeno rover.
Com nove gramas e alguns dólares, é o servomotor com que quase todo mundo começa. Ele não é forte nem preciso o suficiente para trabalho sério, mas é a maneira mais rápida de entender como funciona o controle de posição.
Como funciona
Abra um e você encontrará quatro componentes: um pequeno motor CC, um trem de engrenagens que troca velocidade por torque, um potenciômetro acoplado ao eixo de saída e um circuito de controle. O potenciômetro é o elemento-chave—ele informa continuamente o ângulo real do eixo. O circuito compara esse ângulo medido ao ângulo comandado e aciona o motor na direção que reduz a diferença. É uma malha de realimentação completa em miniatura, e é exatamente por isso que o braço de cinemática inversa pode confiar que um servomotor alcançará a pose-alvo.
Você comanda o ângulo com um sinal PWM de 50 Hz, e a largura de pulso carrega a informação: aproximadamente 1 ms para uma extremidade do curso, 1,5 ms para o centro e 2 ms para a outra extremidade. Este é PWM usado como código de posição, não de velocidade. Na prática, a biblioteca Servo do Arduino oculta a temporização e você apenas escreve um ângulo.
Quando usar
Use um SG90 sempre que uma peça do robô precisar se mover até um ângulo específico e mantê-lo sob carga leve: dedos de garra, pequenas juntas de braço, gimbais de sensor ou a ligação de direção de um carro leve. Sua faixa de ~180° e o controle instantâneo de “vá para este ângulo” são ideais para aprender cinemática e construir mecanismos expressivos.
Procure outra opção quando a junta carregar peso real (use um servomotor de engrenagem metálica ou de tamanho padrão), quando precisar de rotação contínua para uma roda (use um motor CC e um L298N, ou um servomotor de rotação contínua) ou quando precisar de muitos graus de movimento preciso e com alto torque (use um motor de passo).
Conexões e armadilhas
- Alimente-o separadamente. Um SG90 travado pode puxar 500–700 mA—muito mais do que o pino de 5 V de um microcontrolador pode fornecer. Use uma fonte dedicada de 5 V e ligue o GND dela ao GND da placa, ou a placa sofre queda de tensão e reinicia.
- Ele não gira continuamente. Um SG90 padrão percorre ~180° e para. Comandar “gire para sempre” não faz nada; para uma roda motriz, você precisa de outro atuador.
- Não force nem deixe entrar em travamento. As engrenagens de náilon quebram sob sobrecarga ou um golpe brusco. Mantenha as cargas leves ou passe para engrenagens metálicas.
- Espere pequenos tremores. Servomotores baratos oscilam um pouco em torno do alvo. Uma fonte estável e limpa, além de desligar o sinal quando a junta não precisa segurar, reduzem isso.
Conexão
Três fios, e as cores são quase universais em servomotores hobby:
| Fio | Cor (SG90) | O que é |
|---|---|---|
| 1 | Marrom | Massa |
| 2 | Vermelho | Alimentação, 4,8–6 V |
| 3 | Laranja | Sinal — o PWM de 50 Hz |
Alguns servomotores usam preto/vermelho/branco ou preto/vermelho/amarelo. A regra que sempre vale: o vermelho fica no meio, e o fio de terra é o mais escuro dos três.
| SG90 | Arduino Uno | Observação |
|---|---|---|
| Marrom | GND | Precisa estar ligado ao GND da alimentação do servomotor |
| Vermelho | Não o 5 V do Arduino | Uma fonte separada de 5 V — veja abaixo |
| Laranja | Qualquer pino digital | A biblioteca Servo funciona em qualquer pino |
Por que não usar o pino de 5 V do Arduino
Um SG90 consome cerca de 10 mA quando ocioso, 150–250 mA em movimento e 650 mA em travamento. A fonte USB que alimenta um Uno é limitada a 500 mA para toda a placa, e o regulador integrado, quando a placa funciona pelo conector circular, tem seu próprio limite térmico.
Um servomotor se movendo suavemente costuma funcionar, e é exatamente esse o problema: funciona na bancada e então sofre queda de tensão no instante em que encontra resistência. O sintoma é uma placa que reinicia sempre que o braço alcança uma posição específica—o que parece um defeito de software.
Dê a ele sua própria fonte de 5 V, una os GNDs e coloque um capacitor de 470 µF em paralelo com a alimentação do servomotor, perto do conector.
A relação entre largura de pulso e ângulo
Um servomotor não lê tensão. Lê por quanto tempo o pulso dura, cinquenta vezes por segundo.
| Largura de pulso | Ângulo nominal | O que o SG90 realmente faz |
|---|---|---|
| 1,0 ms | 0° | Costuma parar de 10–15° antes do fim |
| 1,5 ms | 90° | Centro e normalmente preciso |
| 2,0 ms | 180° | Costuma parar de 10–15° antes do fim |
| < 0,5 ms ou > 2,5 ms | — | Zumba contra o batente final, consumindo corrente de travamento |
A faixa de 1–2 ms é uma convenção, não um padrão. Muitos SG90 atingem seus batentes reais mais perto de 0,6 ms e 2,4 ms, e é por isso que a biblioteca Servo do Arduino permite informar larguras mínima e máxima opcionais por meio de attach():
servo.attach(9, 600, 2400); // instead of the 544/2400 defaults
Calibrar isso por servomotor é a diferença entre um braço que alcança seu espaço de trabalho e um que, misteriosamente, fica 20° curto nas duas extremidades.
Código mínimo funcional
#include <Servo.h>
Servo joint;
const int PIN = 9;
void setup() {
joint.attach(PIN, 600, 2400); // calibrate these two numbers per servo
joint.write(90); // centre before doing anything else
delay(500);
}
// Move gently instead of jumping — a servo commanded to jump goes at full speed.
void sweepTo(int target, int stepDelayMs) {
int current = joint.read();
int step = (target > current) ? 1 : -1;
while (current != target) {
current += step;
joint.write(current);
delay(stepDelayMs);
}
}
void loop() {
sweepTo(20, 15);
delay(400);
sweepTo(160, 15);
delay(400);
}
joint.write(160) e a varredura terminam em 160°, mas são eventos eletricamente muito diferentes. O salto comanda a velocidade máxima, o que, em uma junta carregada, representa um pico de 650 mA e um choque mecânico nas engrenagens de náilon. A varredura reparte o mesmo movimento por dois segundos e consome uma fração da corrente. Em um braço de múltiplas juntas, essa é a diferença entre uma fonte que aguenta e outra que não aguenta.
Torque: o que 1,8 kg·cm realmente significa
A especificação é 1,8 kg·cm a 4,8 V—o que significa que o servomotor consegue sustentar 1,8 kg a 1 cm do eixo, ou 1,8/L kg a L centímetros. Essa última parte é o que confunde as pessoas.
| Comprimento do braço a partir do eixo | Carga máxima (travamento) | Carga de trabalho segura (~30%) |
|---|---|---|
| 1 cm | 1800 g | 540 g |
| 5 cm | 360 g | 108 g |
| 10 cm | 180 g | 54 g |
| 15 cm | 120 g | 36 g |
Há duas coisas a retirar daqui. Primeiro, o torque cai linearmente com o alcance, portanto um segmento de braço de 15 cm só consegue levantar 120 g no travamento absoluto. Segundo, nunca projete com base no valor de travamento. Um servomotor em travamento consome corrente total, não produz movimento e aquece; um terço do torque de travamento é um limite sensato para uma junta que precisa manter uma posição por um período de tempo qualquer.
O número também é dado a 4,8 V. A 6 V, o mesmo servomotor produz aproximadamente 2,2 kg·cm, uma das poucas melhorias gratuitas da robótica hobby—desde que sua fonte possa fornecer a corrente correspondentemente maior.
Reduzindo a oscilação
Servomotores baratos oscilam um pouco em torno do alvo, e há quatro causas distintas que vale diferenciar:
- Ruído da alimentação. O mais comum. Um servomotor compartilha uma trilha com motores e vê cada pico de corrente como uma perturbação de controle. Use uma fonte separada e um capacitor no servomotor.
- Oscilação na temporização do sinal. A biblioteca
Servogera pulsos por software, e um laço ocupado ou outra interrupção desloca as bordas. Migrar para uma PCA9685 corrige isso completamente—ela gera os pulsos em hardware. - Zona morta. O controlador do próprio servomotor ignora erros abaixo de cerca de 5 µs de largura de pulso, aproximadamente 1°. Abaixo dessa resolução, ele simplesmente não responde, e pedir passos mais finos não produz nada.
- Retenção sob carga. Um servomotor lutando contra a gravidade no limite do torque zumbirá continuamente. Use
detach()quando a junta não precisar segurar ou equilibre-a mecanicamente.
Solução de problemas
| Sintoma | Causa provável | Solução |
|---|---|---|
| A placa reinicia quando o servomotor se move | Corrente do servomotor passando pelo Arduino | Fonte separada de 5 V, GND comum e capacitor de 470 µF |
| Zumba o tempo todo e aquece | Posição comandada além do batente final | Restrinja a faixa de largura de pulso no attach() |
| Percorre apenas cerca de 150° | Os padrões da biblioteca não alcançam os batentes reais | attach(pin, 600, 2400) e ajuste |
| Vai completamente para o ângulo errado | Chapeu instalado em uma rotação arbitrária | Cada junta precisa de um deslocamento de calibração—e talvez de uma inversão de sinal |
| Oscila em repouso | Ruído da alimentação ou pulsos temporizados por software | Comece pelo capacitor; use um PCA9685 se persistir |
| Quebrou e agora patina | Engrenagens de náilon falharam sob choque ou sobrecarga | Use um MG90S com engrenagem metálica; reduza a carga ou a velocidade |
| Fica mais lento e fraco com o tempo | A alimentação sofre queda de tensão à medida que a bateria se descarrega | O torque varia com a tensão—meça a trilha sob carga |
| Não gira continuamente | É um servomotor posicional | Use um servomotor de rotação contínua ou um motorredutor CC |
SG90 ou outra opção?
| Componente | Torque a 4,8 V | Engrenagens | Escolha quando |
|---|---|---|---|
| SG90 | 1,8 kg·cm | Náilon | Aprendizado, garras leves, gimbais de sensor |
| MG90S | 2,2 kg·cm | Metal | Mesmo tamanho, resiste a choques—a substituição direta |
| MG996R | 9,4 kg·cm | Metal | Juntas de tamanho padrão que carregam peso real |
| SG90 de rotação contínua | — | Náilon | Uma roda motriz, em que você quer velocidade, não ângulo |
| Motor de passo NEMA 17 | ~40 N·cm | — | Posicionamento preciso e reproduzível, sem zona morta |
Um alerta sobre “garras leves” na primeira linha. Uma garra é a aplicação em que um SG90 passa a vida inteira travado—segurar um objeto não é movimento; portanto, a bobina consome cerca de 0,5 A sem nada para resfriá-la, e essa é a maneira usual de esses servomotores falharem. Também é por isso que a força da mandíbula é definida pelo braço de alavanca, não pelo torque indicado na caixa: 0,176 N·m em um braço de 30 mm resultam em 5,87 N no travamento e cerca de 4,11 N que você realmente consegue sustentar. Dimensionar uma garra de servomotor aborda ambos os pontos, e o simulador de garras faz a conta para o seu braço.
O resumo honesto: o SG90 é um atuador didático. É a maneira mais rápida de entender como funciona o controle de posição e não é forte nem reproduzível o suficiente para uma junta importante. Quando um projeto para de funcionar porque o servomotor não é bom o bastante, o MG90S geralmente é a resposta—mesmo tamanho, mesma ligação e engrenagens metálicas.
Explore o grafo
Usado nestas montagens
Projetos, caminhos de aprendizagem e simuladores que incluem Servomotor SG90.
- ProjetoConstrua um braço robótico de 4 DOF: PCA9685, servos e cinemática
- ProjetoConstrua um plotter de caneta cartesiano de dois eixos
- ProjetoConstrua um robô com desvio de obstáculos
- ProjetoConstrua um robô de coleta e colocação que sabe quando falhou
- Caminho de aprendizagemPreensão e efetuadores finais: como realmente pegar o objeto
Comparar
Alternativas
Perguntas
Perguntas frequentes sobre Servomotor SG90
O que é o servomotor SG90?
O SG90 é um servomotor hobby de 9 g—um pequeno motorredutor que gira até um ângulo comandado e o mantém, em vez de girar livremente. É o servomotor mais barato e comum da robótica iniciante, usado em juntas de braços, garras, suportes de câmera pan-tilt e direções.
Como funciona um servomotor?
Dentro há um motor CC, um trem de engrenagens, um potenciômetro e um circuito de controle. O potenciômetro informa ao circuito o ângulo atual; o circuito o compara com o ângulo comandado e aciona o motor até que ambos coincidam. Essa malha de realimentação incorporada é o que permite ao servomotor manter uma posição precisa.
Como controlar um SG90 com um Arduino?
Você envia um sinal PWM de 50 Hz no qual a largura de pulso define o ângulo: cerca de 1 ms significa 0°, 1,5 ms significa 90° e 2 ms significa 180°. Na prática, use a biblioteca Servo do Arduino e chame servo.write(angle)—ela gera a temporização para você.
Quanto peso um SG90 consegue levantar?
O torque de travamento do SG90 é de cerca de 1,8 kg·cm, o que significa que ele consegue sustentar 1,8 kg com um braço de 1 cm, ou ~180 g a 10 cm. A carga contínua utilizável é bem menor. Para algo mais pesado ou um braço mais longo, use um servomotor de engrenagem metálica como o MG90S ou um servomotor de tamanho padrão.
SG90 ou MG90S—qual é melhor?
Eles têm o mesmo tamanho e são controlados da mesma forma, mas o MG90S tem engrenagens metálicas e um pouco mais de torque, portanto suporta travamentos e cargas que quebrariam as engrenagens de náilon do SG90. Use o SG90 para aprender e para cargas leves; escolha o MG90S quando a junta carregar peso real ou sofrer golpes.
Quanta corrente um SG90 consome?
Um SG90 consome apenas alguns miliamperes quando ocioso, mas pode chegar a 500–700 mA quando entra em travamento ou se move sob carga. Isso é demais para o pino de 5 V de um Arduino; portanto, alimente os servomotores por uma fonte separada de 5 V com o GND em comum, ou a placa sofrerá queda de tensão e reiniciará.
Leitura complementar