跑跑啦航模

  舵机是智能小车、机器人里特别常用的小电机——它不像普通电机那样一直转,而是转到指定角度然后停住。智能小车的转向(前轮打方向)、摄像头的云台(上下左右转)、机械臂的关节,靠的都是舵机。这篇教你怎么用树莓派控制舵机,几行 Python 就搞定。

舵机是什么、怎么接

普通舵机有三根线:电源(红)、地线(棕/黑)、信号(橙/黄)。信号线接树莓派的 GPIO 引脚,用它发出的 PWM 脉宽信号来控制舵机转到哪个角度。它内部有个电位器做反馈,所以能“停”在指定角度——这就是它比普通直流电机好控制的原因。

接线注意:舵机工作电流不小,别直接让树莓派的 3.3V/5V 引脚带(会烧板子),要用外部电源给舵机供电,地线跟树莓派共地,只用信号线接 GPIO。这也是为啥讲究的智能车会单独做一路稳压供电给外设。

用 GPIO Zero 控制舵机

GPIO Zero 是树莓派官方推荐的 Python 库,控制舵机非常直接。先让舵机在最小、中间、最大三个位置来回转:

from gpiozero import Servo
from time import sleep

servo = Servo(17)

while True:
  servo.min()  # 转到最小角度
  sleep(2)
  servo.mid()  # 转到中间
  sleep(2)
  servo.max()  # 转到最大角度
  sleep(2)

这里的 Servo(17) 里的 17 就是 GPIO 引脚号(BCM 编号)。min/mid/max 三个方法分别对应最小、中间、最大位置,跑起来舵机就在这三个位置之间来回摆动——是不是超级简单。

把舵机转到指定角度:AngularServo

如果想让舵机转到具体的角度(比如智能车前轮转 30°),用 AngularServo

from gpiozero import AngularServo
from time import sleep

servo = AngularServo(17, min_angle=-90, max_angle=90)

while True:
  servo.angle = -90
  sleep(2)
  servo.angle = 0  # 回中
  sleep(2)
  servo.angle = 90
  sleep(2)

直接给 servo.angle 赋值,舵机就转到对应角度(这里 -90 到 90 度)。智能小车的舵机转向、云台的俯仰角,就是用这种方式控制的。

进阶:让舵机平滑动 & 接按钮控制

servo.source 可以让舵机自动平滑摆动(适合云台做扫描效果):

from gpiozero import Servo
from gpiozero.tools import sin_values
from signal import pause

servo = Servo(17)
servo.source = sin_values()
servo.source_delay = 0.1
pause()

用按钮控制舵机在两个位置之间切换(继电器/行程开关场景常用):

from gpiozero import Servo, Button

servo = Servo(17)
btn = Button(14)

while True:
  servo.min()
  btn.wait_for_press()
  servo.max()
  btn.wait_for_press()

舵机控制是智能小车“会转向”“会摆头”的基础。跑跑啦的全自动智能小车整机舵机转向版——前轮舵机打方向 + 后轮双减速电机带编码器,既能精确控向又能精确控距,“前进 20cm 做到 99% 精度”,靠的就是这一套闭环控制。想配齐舵机这类配件玩起来,可以看我们创客工具包智能小车产品。淘宝店:paopaola.taobao.com

跑跑啦全自动智能小车整机——舵机转向版

小提示:舵机别直接吃树莓派引脚供电,外部供电 + 共地 + 信号接 GPIO,稳。想要小车“指哪打哪”就得靠舵机转向 + 编码器闭环。

(本文整理自 Raspberry Pi 树莓派官方文档《GPIO Zero》舵机示例与 GPIO Zero 官方文档,CC BY-SA 4.0,来源:https://shumeipai.nxez.com/doc-zhcn/docs/program/gpio/gpiozero)

上一篇:树莓派系统配置:raspi-config 详解
下一篇:树莓派控制电机:PWM 入门
返回文章列表

跑跑啦航模详情

联系手机15058675618 qq售后群号241350086 微信号paopaola_com
长距离FPV无人机,高清传感器模块,终身保修和升级服务。