Publicado 2026-04-05
Este guia fornece um método passo a passo para controlar um padrãoservomotor com placa ESP32 usando Python. Esteja você construindo um braço robótico, um suporte de câmera pan-tilt ou um simples suporte móvel, você aprenderá a fiação exata, o código Python e as etapas de calibração para fazer seuservomova-se com precisão. Todos os exemplos são baseados em situações comuns do mundo real, para que você possa aplicá-los imediatamente aos seus próprios projetos.
Uma placa de desenvolvimento ESP32 (qualquer variante comum)
Um padrão 5Vservomotor (por exemplo, tipo SG90 ou MG995)
Fonte de alimentação externa de 5 V (se estiver usando um servo de alto torque)
Fios jumper (fêmea para fêmea)
Um computador com firmware MicroPython instalado no ESP32
> Importante: Nunca alimente um servo diretamente do pino de 3,3V do ESP32. A maioria dos servos requer 5 V e pode consumir mais corrente do que a placa pode fornecer com segurança. Use uma fonte de alimentação de 5 V separada para o servo e conecte apenas o fio de sinal ao ESP32.
Imagine que você está construindo uma garra robótica simples que abre e fecha. Você tem um servo MG995 comum. Conecte-o da seguinte maneira:
Ponto crítico: O aterramento da fonte de alimentação externadeveser conectado ao ESP32 GND. Sem esse ponto comum, o sinal ficará instável e o servo irá tremer ou não se mover.
O ESP32 controla um servo gerando um sinal PWM de 50Hz (período = 20ms). A posição do servo é determinada pela largura do pulso: 0,5 ms para 0°, 1,5 ms para 90° e 2,5 ms para 180°.
Abaixo está um script MicroPython completo e testado. Salve comoprincipal.pyno seu ESP32.
do pino de importação da máquina, tempo de importação do PWM # Use GPIO15 – você pode alterar para qualquer pino que suporte PWM SERVO_PIN = 15 # Freqüência servo padrão: 50 Hz PWM_FREQ = 50 # Valores do ciclo de trabalho para 0°, 90°, 180° (calculado para 50 Hz) # Para uma resolução PWM de 16 bits (0–65535): # Duty = (pulso_largura_ms / 20ms)65535 # 0,5 ms -> 1638 (0°) # 1,5 ms -> 4915 (90°) # 2,5 ms -> 8192 (180°) DUTY_0 = 1638 DUTY_90 = 4915 DUTY_180 = 8192 # Inicialize o PWM no pino servo = PWM(Pin(SERVO_PIN), freq=PWM_FREQ, duty_u16=DUTY_90) # inicia em 90° def set_angle(ângulo): """ Define o ângulo do servo (0° a 180°). Mapeia linearmente o ângulo para o ciclo de serviço. """ # Ângulo de fixação para ângulo de faixa válido = max(0, min(180, ângulo)) # Mapeamento linear: duty = DUTY_0 + (ângulo/180)(DUTY_180 - DUTY_0) duty = int(DUTY_0 + (angle / 180) * (DUTY_180 - DUTY_0)) servo.duty_u16(duty) # Exemplo: varrer para frente e para trás enquanto True: for angle in range(0, 181, 10): set_angle(angle) time.sleep_ms(50) for angle in range(180, -1, -10): set_angle(ângulo) time.sleep_ms(50)
1. Atualize o firmware MicroPython para seu ESP32 (se ainda não tiver feito isso).
2. Conecte o servo conforme descrito.
3. Copie o script para o quadro usando uma ferramenta comompremoteou Thonny.
4. Execute o script. O servo irá varrer de 0° a 180° e voltar repetidamente.
Diferentes modelos de servo possuem faixas de largura de pulso ligeiramente diferentes. Por exemplo, um SG90 barato pode funcionar de 0,5 ms a 2,4 ms, enquanto um MG996R de alto torque usa 0,6 ms a 2,4 ms. A faixa comum de 0,5 a 2,5 ms funciona para a maioria, mas você deve sempre calibrar.
Método de calibração(um caso real de um projeto de braço robótico):
Defina o ciclo de trabalho para 1638 e observe o ângulo real.
Se o servo não atingir 0°, aumente ligeiramente o serviço (por exemplo, 1700) até que ele pare de se mover.
Faça o mesmo para 180° diminuindo de 8192.
Use seus DUTY_MIN e DUTY_MAX medidos noset_ângulo()função.
Um servo é controlado pela largura do pulso, não pela porcentagem do ciclo de trabalho.A frequência deve ser exatamente 50Hz (período 20ms). Alterar a largura do pulso entre 0,5 ms e 2,5 ms gira o servo de 0° a 180°. No MicroPythondever_u16()método, o mapeamento da largura de pulso para o valor de serviço depende da resolução PWM (sempre 16 bits no ESP32). Use as fórmulas fornecidas ou a função de mapeamento linear.
1. Sempre comece com um teste de varredura simples– confirma a fiação e a operação básica do PWM.
2. Use um analisador lógico ou um osciloscópiopara verificar a largura do pulso se o servo se comportar de maneira estranha.
3. Para projetos alimentados por bateria, adicione um capacitor grande (470 µF ou mais) nos terminais de alimentação do servo para absorver quedas de tensão.
4. Quando seu projeto requer vários servos, controle cada um em um pino GPIO separado, mas certifique-se de que a corrente total não exceda a classificação da sua fonte de alimentação.
Controlar um servo com ESP32 e Python é simples: conecte o fio de sinal a qualquer GPIO compatível com PWM, forneça energia separada de 5 V com um aterramento comum, gere um sinal PWM de 50 Hz e ajuste o ciclo de trabalho para definir a largura de pulso entre 0,5 ms e 2,5 ms. O código fornecido funciona imediatamente para a maioria dos servos padrão. Se a faixa de movimento estiver incorreta, calibre os valores de serviço mínimo e máximo para seu servo específico. Agora você está pronto para integrar movimentos precisos em seus próprios projetos baseados no ESP32.
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.