树莓派跟Arduino不一样,跑的是Linux系统,有Python,所以控制舵机的方式也更灵活——既可以用GPIOzero这样的库,也可以上RPi.GPIO。做一个舵机云台做摄像头跟随、做简单机械臂,都是从这一步开始的。这篇文章把接线和代码讲透。

SG90舵机三根线,别接错
SG90这类微型舵机引出三根线:电源(红)、地(黑/棕)、信号(橙/黄/白)。给舵机供电要接树莓派的5V引脚,信号接一个GPIO(比如GPIO18,对应物理12脚),地接GND。舵机转动一瞬间电流不小,SG90堵转能到几百毫安,树莓派的5V是够带一两个的;带多个或使劲受力,就单独用外接5V电源给舵机供电,但地和树莓派要共。讲究一点会在电源两端并联一个1000uF左右的电解电容,用来吸收堵转时的电压尖峰,避免把树莓派搞重启。
舵机的信号本质是PWM,周期20毫秒,脉宽1毫秒约对应0度、1.5毫秒约90度、2毫秒约180度。核心就是把角度换算成脉宽。

两行Python,让舵机动起来
新款树莓派系统里GPIOzero最省事,直接这样写:
from gpiozero import Servo svo = Servo(18) svo.min(); svo.max()
svo.min()转到一端、svo.max()转到另一端,svo.value可以传-1到1之间的浮点数精确定位,0大概就是中点。跑之前用pip装好gpiozero:sudo pip3 install gpiozero。看不惯简单库、想自定义脉宽范围的,可以用RPi.GPIO里基于PWM的写法,自己算占空比,自由度更高但代码多一点。
三个高频坑
一是权限,直接访问GPIO会报权限不足,运行要加sudo,或者把用户加到gpio组。二是抖动,软件PWM在树莓派上有时会不稳、让舵机轻微抖,可以先试试把供电单独外接再排干扰。三是供电不足,插着一堆USB设备又带舵机,5V被拉垮舵机就会抽搐甚至不动,测的时候拔掉多余负载。跑完最好显式调用释放引脚,避免下次运行报GPIO已占用。
搞懂这三根线和那个20毫秒的PWM,树莓派的舵机就通了。下一步接个摄像头做成追踪云台,就是个特别能拿得出手的桌面项目。






1000uF电容并联供电后,舵机堵转再也没把树莓派带重启,稳
释放引脚那句重要,之前退出程序第二次跑就报GPIO占用
两行gpiozero就能转,比我之前手动算PWM省心多了,装上就能用
sudo没加报权限那个坑,我直接报错一脸懵,加上sudo就好了