Publicado 2026-04-18
Este guia fornece um passo a passo completo e prático para controlar um padrãoservomotor usando um computador de placa única Raspberry Pi. Você aprenderá a fiação exata, o código Python e as configurações PWM necessárias para obter controle angular preciso, com base em testes reais e documentação oficial de hardware.
Raspberry Pi (qualquer modelo com pinos GPIO, por exemplo, 3B+, 4B ou 5)
Cartão MicroSD com Raspberry Pi OS (Bookworm ou posterior)
Padrão 5Vservomotor (comumente usado em robótica de hobby)
Fonte de alimentação externa de 5V (2A ou mais) – a maioriaservos consome alta corrente
Fios jumper (fêmea para fêmea)
Potenciômetro pequeno (opcional, por exemplo de controle manual)
> Nota do mundo real: Em uma sala de aula típica ou em uma configuração amadora, os usuários geralmente danificam seu Raspberry Pi alimentando o servo diretamente do pino de 5V. Este guia mostra o método correto de isolamento de energia.
Um servo motor padrão não gira continuamente. Em vez disso, ele se move para um ângulo específico (geralmente de 0° a 180°) com base em um sinal PWM (modulação por largura de pulso). O Raspberry Pi gera este sinal em um pino GPIO.
Parâmetros críticos (das folhas de dados do servo e da documentação oficial do Raspberry Pi):
Frequência do sinal: 50 Hz (período = 20 ms)
Largura de pulso para 0°: 0,5 ms (ciclo de trabalho = 2,5%)
Largura de pulso para 90°: 1,5 ms (ciclo de trabalho = 7,5%)
Largura de pulso para 180°: 2,5 ms (ciclo de trabalho = 12,5%)
Esses valores são padrões da indústria para a maioria dos servos analógicos e digitais. Sempre verifique com a folha de dados do seu servo – existem pequenas variações.
Nunca alimente o servo diretamente do pino de 5V do Raspberry Pi.Um servo típico pode consumir 200–800 mA durante o movimento e as correntes de pico excedem 1A. O pino de 5V do Raspberry Pi está diretamente conectado à entrada USB e só pode fornecer cerca de 500 mA de forma confiável (menos em modelos mais antigos). Consumir mais corrente pode causar queda de tensão, congelamento do sistema ou danos permanentes.
Fiação correta (testada com configurações comuns):
Por que um terreno comum é obrigatório:O sinal de controle do servo (0–3,3 V do Pi) e a alimentação do servo (5 V da fonte externa) devem compartilhar uma tensão de referência. Sem um terreno comum, o sinal se torna indefinido e o servo irá tremer ou não se mover.
Raspberry Pi OS vem com Python pré-instalado. Existem dois métodos confiáveis para gerar sinais PWM precisos. O método recomendado para iniciantes é usarRPi.GPIOcom hardware PWM em pinos específicos.
Pinos GPIO compatíveis com PWM de hardware no cabeçalho Raspberry Pi de 40 pinos:
GPIO12 (pino 32) – canal PWM 0
GPIO13 (pino 33) – canal PWM 1
GPIO18 (pino 12) – canal PWM 0 (mais comumente usado)
GPIO19 (pino 35) – canal PWM 1
![]()
Habilite a interface PWM (se estiver usando PWM de hardware):Não são necessárias etapas extras – o PWM de hardware está sempre disponível. Para software PWM (qualquer pino), nenhuma configuração é necessária, mas o tempo pode ser menos estável.
Abaixo está um script Python completo e testado que move o servo em três ângulos (0°, 90°, 180°) com uma pausa de 2 segundos entre cada um. Este código segue a documentação oficial RPi.GPIO.
importe RPi.GPIO como tempo de importação GPIO # Use numeração de pinos BCM GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) # Configure GPIO18 como saída PWM servo_pin = 18 GPIO.setup(servo_pin, GPIO.OUT) # Crie instância PWM em 50 Hz pwm = GPIO.PWM(servo_pin, 50) pwm.start(0) # Comece com ciclo de trabalho de 0% def set_servo_angle(ângulo): """ Converter ângulo (0-180) em ciclo de trabalho (2,5 a 12,5) Fórmula: dever = (ângulo / 180)10 + 2,5 Verificado com múltiplas folhas de dados de servo """ se ângulo 180: ângulo = 180 serviço = (ângulo / 180,0)10,0 + 2,5 pwm.ChangeDutyCycle(duty) # Permite que o servo alcance a posição time.sleep(0.5) # Para de enviar sinal para reduzir o jitter (opcional) pwm.ChangeDutyCycle(0) time.sleep(0.1) try: while True: print("Movendo para 0°") set_servo_angle(0) time.sleep(2) print("Movendo para 90°") set_servo_angle(90) time.sleep(2) print("Movendo para 180°") set_servo_angle(180) time.sleep(2) exceto KeyboardInterrupt: print("Parado pelo usuário") pwm.stop() GPIO.cleanup()
Detalhe principal:Após cada posição, o código define o ciclo de trabalho para 0% e aguarda 0,1 segundos. Isso evita o consumo contínuo de energia e reduz o jitter do servo. Muitos exemplos online omitem isso, causando consumo desnecessário de corrente.
Salve o script comoservo_control.py. No terminal, execute:
python3 servo_control.py
Comportamento esperado:O eixo do servo gira para 0°, pausa 2 segundos, move para 90°, pausa, move para 180° e então repete.
Se o servo não se mover:
Verifique pontos em comum – erro mais frequente
Verifique se a fonte de alimentação externa está ligada e fornece pelo menos 5 V
Confirme o número do pino GPIO (BCM 18 = pino físico 12)
Reduza o tempo de sono depoisAlterarDutyCycle? Não – o servo precisa de aproximadamente 300-500 ms para alcançar a posição
Para projetos interativos, você pode ler um potenciômetro analógico usando um ADC MCP3008 (já que Raspberry Pi não possui entradas analógicas). No entanto, um método mais simples de teste é usar a entrada do teclado:
importar RPi.GPIO como tempo de importação GPIO GPIO.setmode (GPIO.BCM) GPIO.setup (18, GPIO.OUT) pwm = GPIO.PWM (18, 50) pwm.start (0) def angle_to_duty (ângulo): return (ângulo / 180,0) * 10,0 + 2,5 tentativa: while True: cmd = input ("Insira o ângulo (0-180) ou 'q' para sair: ") if cmd == 'q': break try: angle = float(cmd) if 0
Ponto central repetido:Para controlar com segurança e precisão um servo com um Raspberry Pi, você deve (1) usar uma fonte de alimentação externa de 5 V para o servo, (2) conectar um terreno comum entre Pi, servo e fonte de alimentação, (3) gerar um sinal PWM de 50 Hz com ciclos de trabalho correspondentes a pulsos de 0,5–2,5 ms e (4) parar o sinal PWM (0% de serviço) após cada movimento para reduzir o tremor e o consumo de energia.
Etapas de ação para aplicar este guia:
1. Reúna os componentes listados acima – não são necessárias marcas específicas, qualquer servo padrão de 5V funciona.
2. Faça a fiação exatamente como mostrado, verificando novamente a conexão de aterramento comum.
3. Copie o script Python e execute-o. Observe o servo se movendo para 0°, 90° e 180°.
4. Modifique os valores dos ângulos no script para atender às necessidades do seu projeto.
5. Para qualquer produção ou projeto de longa duração, sempre use PWM de hardware e adicione um capacitor eletrolítico de 100–470 µF nas linhas de energia do servo para suavizar picos de tensão.
Fontes confiáveis para verificação adicional:Documentação oficial do Raspberry Pi (/documentation/computers/os.html#gpio-and-the-40-pin-header) e a folha de dados do servo motor (geralmente disponível no site do fabricante). Sempre consulte a faixa de largura de pulso específica do seu servo – embora 0,5–2,5 ms seja o padrão, alguns servos usam 0,7–2,3 ms. Um script de calibração simples que varre o servo e registra os limites reais lhe dará uma precisão perfeita.
Hora de atualização: 18/04/2026
Entre em contato com o especialista de produtos da Kpower para recomendar um motor ou caixa de engrenagens adequado para o seu produto.