舵机是一种能精确控制位置的执行器,内部有电机 + 减速齿轮 + 反馈电位器。
[接线图占位,后续添加]
文字说明(具体接法见下方代码注释):
GP15)# ============ 接线 ============
# 舵机信号线(橙/黄) → Pico GP15
# 舵机红线(VCC) → 外接 5V 电源(别接 Pico 的 3V3/5V 引脚)
# 舵机棕/黑线(GND) → 外接电源 GND,并连一根线到 Pico GND(共地)
# =============================
from machine import Pin, PWM
import time
pwm = PWM(Pin(15))
pwm.freq(50) # 舵机标准 50Hz
def set_angle(angle):
"""180° 舵机:angle 取 0~180 度"""
# 0°→0.5ms, 90°→1.5ms, 180°→2.5ms,周期 20ms
pulse_ms = 0.5 + (angle / 180) * 2.0
pwm.duty_u16(int((pulse_ms / 20) * 65535))
print('180° 舵机角度控制')
for angle in [0, 45, 90, 135, 180]:
set_angle(angle)
print('角度:', angle, '°')
time.sleep(1)
set_angle(0) # 回初始位置
# ============ 接线 ============
# 与 180° 完全相同:信号线 → GP15,红线 → 外接 5V,棕/黑线 → 外接 GND 且共地
# =============================
from machine import Pin, PWM
import time
pwm = PWM(Pin(15))
pwm.freq(50) # 同样是 50Hz
def set_speed(speed):
"""360° 舵机:speed 取 -100(全速反转)~100(全速正转),0=停止"""
# 1.5ms 是停止;偏离 1.5ms 越远转速越快
pulse_ms = 1.5 + (speed / 100) * 1.0
pwm.duty_u16(int((pulse_ms / 20) * 65535))
print('360° 舵机调速')
set_speed(60); print('正转'); time.sleep(2)
set_speed(0); print('停止'); time.sleep(1)
set_speed(-60); print('反转'); time.sleep(2)
set_speed(0) # 一定要回到 0 才会停
# ============ 接线 ============
# 舵机:信号线 → GP15,红线 → 外接 5V,棕/黑线 → 外接 GND 且共地
# 电位器:中间脚 → GP26(ADC0),另外两脚分别 → 3V3 和 GND
# =============================
from machine import Pin, PWM, ADC
import time
pwm = PWM(Pin(15))
pwm.freq(50)
adc = ADC(Pin(26))
def set_angle(angle):
pulse_ms = 0.5 + (angle / 180) * 2.0
pwm.duty_u16(int((pulse_ms / 20) * 65535))
print('舵机随电位器转动')
while True:
value = adc.read_u16() # 0~65535
angle = int((value / 65535) * 180)
set_angle(angle)
print('电位器:', value, '角度:', angle, '°')
time.sleep(0.1)
set_angle(90)(180°)或 set_speed(0)(360°)再动,避免突然猛转。freq()。Q: 舵机一直猛转或只往一边转? A: 多半是 360° 舵机被当 180° 写了(或反之);或没共地。先确认型号,再检查 GND 有没有连 Pico。
Q: 舵机抖动、发热? A: 供电不稳或负载过重,换成电流足够的 5V 电源,减小负载。
Q: 角度不准?
A: 不同品牌脉宽略有差异,微调 0.5 + angle/180*2.0 里的 0.5 和 2.0 两个系数校准。