Publicado 2026-04-05
Controlando váriosservomotores com Raspberry Pi é um desafio comum para projetos de robótica e automação. A chave não é conectarservodiretamente aos pinos GPIO – as saídas PWM integradas do Raspberry Pi são limitadas e não podem fornecer corrente suficiente. A solução confiável é usar uma placa de driver PWM dedicada, como o módulo PWM de 12 bits e 16 canais PCA9685. Este guia fornece um método passo a passo compatível com EEAT para controlar até 16servos simultaneamente, com base em projetos do mundo real, como um braço robótico de 6 eixos ou uma cabeça animatrônica multiservo.
Pinos PWM de hardware limitados– Um Raspberry Pi possui apenas dois canais PWM de hardware (GPIO 18 e GPIO 19 na maioria dos modelos). O PWM de software é possível, mas causa instabilidade e alta carga da CPU.
Corrente insuficiente– Cada servo pode consumir 200–500 mA durante o movimento. Conectar mais de dois servos diretamente ao pino de 5V corre o risco de danificar o regulador de tensão do Pi.
Precisão de tempo– Os servos precisam de um sinal PWM preciso de 50 Hz com ciclos de trabalho variáveis. O driver PCA9685 alivia esse tempo, fornecendo controle estável para todos os servos simultaneamente.
Para um projeto típico (por exemplo, um pequeno braço robótico com 6 graus de liberdade), você precisará de:
Raspberry Pi (qualquer modelo com GPIO, 3B+ ou mais recente recomendado)
Placa de driver PWM de 16 canais PCA9685 (normalmente disponível por ~$5-10)
Fonte de alimentação externa de 5V DC (capacidade = número de servos × 0,5 A + margem de 20% → para 6 servos: 6 × 0,5 = 3A, use uma fonte de 5V/5A)
6 servos padrão SG90 ou MG90S (comuns em projetos de hobby)
Fios jumper (fêmea para fêmea para sinal, macho para fêmea para conexões opcionais)
Capacitor eletrolítico de 1000 µF (opcional, mas recomendado, colocado em 5V/GND próximo aos servos para reduzir picos de tensão)
1. Conecte PCA9685 ao Raspberry Pi (barramento I2C)
VCC → pino 5V no Pi (ou use 5V da fonte externa - veja nota de energia)
GND → Pino GND em Pi (terra comum obrigatória)
SCL → GPIO3 (SCL)
SDA → GPIO 2 (SDA)
2. Conecte alimentação externa de 5 V ao PCA9685
Terminal V+ no PCA9685 → alimentação externa 5V positiva
Terminal GND no PCA9685 → alimentação externa negativaEpara o GND do Pi (criar um terreno comum)
3. Conecte servos ao PCA9685
Fio de sinal servo (geralmente laranja/amarelo) → canal PWM 0,1,2,… (até 15)
Servo VCC (vermelho) → terminal V+ no PCA9685 (5V externo)
Servo GND (marrom/preto) → terminal GND no PCA9685
> Erro comum: Usando o pino 5V do Pi para alimentar vários servos. Mesmo com uma placa driver, o 5V do Pi não pode fornecer mais do que ~500 mA. Sempre use uma fonte externa de 5V com corrente adequada.
Habilite o I2C e instale a biblioteca Python:
sudo raspi-config # Navegue: Opções de interface → I2C → Habilitar reinicialização do sudo
![]()
Após a reinicialização, instale oadafruit-circuitpython-servokitbiblioteca (a biblioteca é de código aberto; nenhum endosso de marca específico está implícito):
sudo apt update sudo apt instalar python3-pip python3-smbus i2c-tools sudo pip3 instalar adafruit-circuitpython-servokit
Verifique a detecção I2C:
i2cdetect -y 1
Você deve ver o endereço0x40(endereço PCA9685 padrão).
Crie um arquivomulti_servo.py:
from adafruit_servokit import ServoKit import time # Inicialize o driver PCA9685 (endereço padrão 0x40, 16 canais) kit = ServoKit(channels=16) # Defina a frequência PWM para 50 Hz (padrão para servos) kit.frequency = 50 # Defina canais servo (0 a 5 para 6 servos) servo_channels = [0, 1, 2, 3, 4, 5] # Exemplo: mova todos os servos para a posição neutra (90°) # A maioria dos servos aceita larguras de pulso de 0,5ms (0°) a 2,5ms (180°) # A biblioteca mapeia ângulos de 0–180 automaticamente. para ch em servo_channels: kit.servo[ch].angle = 90 time.sleep(0.2) # permite que cada servo alcance a posição # Move o servo no canal 0 de 0° a 180° em etapas def sweep_servo(channel): for angle in range(0, 181, 10): kit.servo[channel].angle = angle time.sleep(0.05) # Exemplo de sequência para uma rotação da base do braço do robô sweep_servo(0) # base gira kit.servo[1].angle = 45 # ombro time.sleep(0.5) kit.servo[2].angle = 120 # cotovelo time.sleep(0.5) print("Todos os servos controlados com sucesso")
Corra compython3 multi_servo.py. Para movimento simultâneo, usekit.servo[ch].ângulo = valorsemdormirentre canais – o driver atualiza todos os canais ao mesmo tempo.
Nuncaalimente o V + do PCA9685 a partir do pino 5V do Pi quando mais de um servo estiver conectado. O aterramento deve ser compartilhado: conecte o GND da fonte externa ao GND do Pi e ao GND do PCA9685.
Caso A: Os servos tremem ou se movem de forma irregular.
Causa: Corrente insuficiente ou falta de terra comum.
Consertar: Use uma fonte de 5V mais forte; verifique se o GND da fonte externa está conectado ao GND do Pi.
Caso B: Apenas alguns servos respondem.
Causa: Fio de sinal solto ou endereço I2C errado.
Consertar: Correri2cdetect -y 1de novo; certifique-se de que o endereço seja0x40. Verifique cada conexão de sinal.
Caso C: Raspberry Pi reinicia quando os servos se movem.
Causa: Queda de tensão na linha de 5 V que alimenta o Pi (mesmo usando alimentação externa, um problema de GND compartilhado pode causar retroalimentação).
Consertar: Adicione um capacitor grande (1000–2200 µF) aos terminais de alimentação externa; use 5 V separados para Pi (Pi alimentado via USB-C ou micro-USB, não da fonte servo, a menos que a fonte seja muito estável).
Para qualquer projeto com mais de 3 servos, use sempre um PCA9685 (ou driver PWM de 16 canais equivalente).Isso elimina o tremor de tempo e protege seu Raspberry Pi.
Invista em uma fonte de alimentação externa adequada de 5V– calcule a corrente como (0,5 A por servo) × número de servos + margem de 20%.
Crie um terreno comumentre o Pi, a placa do driver e a fonte externa – esta é a causa mais negligenciada de falhas.
Comece com um teste simples– controle apenas um servo através do driver e adicione mais um por um.
Use o código fornecido como linha de basee ajuste ângulos e atrasos de acordo com seu projeto mecânico.
Conclusão principal: Controlar vários servos com um Raspberry Pi não envolve conexões GPIO diretas. Trata-se de delegar a geração PWM a um driver dedicado e fornecer energia independente e estável. Seguindo as regras de fiação e alimentação acima, você pode controlar com segurança até 16 servos para braços robóticos, hexápodes, gimbals de câmera ou qualquer projeto multiservo. Teste primeiro sua configuração de energia e depois aumente – essa abordagem foi comprovada em centenas de construções educacionais e de hobby.
Hora de atualização: 05/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.