前面我们学了控制LED亮灭、控制继电器开关、让蜂鸣器唱歌——但这些都只是"开"和"关"两种状态。今天要学一个能精准控制角度的设备:舵机。
航模飞机的机翼控制、小车车轮的转向、家用电器的开关、机器人关节的转动……这些需要"转到某个精确角度"的场景,背后都是舵机在工作。
今天这节课,我们就用ESP32 + MG90S舵机,实现0°、90°、180°的精准角度控制!
第一步:找到课程,看看成品效果
打开逗脑IDE,点击顶部“文档”,在“课程” → “ESP32 + MicroPython”分类下,找到舵机这节课。
打开课件,你会看到本节课的最终效果:舵机的摆臂在程序控制下,精准地转动到0°、90°、180°,再转回来,动作干脆利落。
第二步:舵机是什么?
用大白话说:舵机就是能够转动指定角度的设备。
你给它一个指令"转到90度",它就精准地转到90度;你说"转到180度",它就转到180度。不像普通电机只会一直转,舵机是可以控制角度的。
三根线:
| 线色 | 功能 | 说明 |
|---|---|---|
| 黑褐色 | GND | 电源地 |
| 红色 | VCC | 电源正极(5V) |
| 橙色 | 信号线 | 接收控制信号 |
第三步:舵机能做什么?
舵机的应用场景非常广泛:
| 应用场景 | 用途 |
|---|---|
| 航模飞机 | 控制机翼、尾舵的偏转角度 |
| 智能小车 | 控制前轮转向 |
| 机器人关节 | 控制机械臂、机械腿的角度 |
| 家用电器 | 控制开关、阀门 |
| 智能窗帘 | 控制窗帘开合角度 |
| 摄像头云台 | 控制摄像头上下左右转动 |
| 自动门锁 | 控制锁芯旋转开锁 |
第四步:怎么控制它?——PWM信号
ESP32该发送什么样的数据给舵机的信号线呢?
答案:PWM(脉冲宽度调制)信号。
舵机通过识别PWM信号的脉冲宽度来判断应该转到什么角度:
| 脉冲宽度 | 对应角度 |
|---|---|
| 0.5ms | 0° |
| 1.5ms | 90° |
| 2.5ms | 180° |
在MicroPython中,我们用duty_u16()来设置脉冲宽度。经过计算和实际验证,MG90S舵机的控制参数如下:
| 角度 | duty_u16值 |
|---|---|
| 0° | duty_u16(1638) |
| 90° | duty_u16(4915) |
| 180° | duty_u16(8192) |
📌 关键参数:PWM频率设为50Hz(周期20ms),这是舵机的标准控制频率。
第五步:动手接线
| 舵机线 | 连接ESP32 | 说明 |
|---|---|---|
| 黑褐色(GND) | GND | 电源地 |
| 红色(VCC) | 3.3V | 电源正极 |
| 橙色(信号线) | GPIO2 | PWM信号输出 |
第六步:代码——转到指定角度
frommachineimportPin,PWMimporttime# 创建PWM对象,连接到GPIO2p2=PWM(Pin(2))# 设置PWM频率为50Hz(舵机标准频率)p2.freq(50)# 转到0度p2.duty_u16(1638)time.sleep(1)# 转到90度p2.duty_u16(4915)time.sleep(1)# 转到180度p2.duty_u16(8192)time.sleep(1)代码解读:
| 代码 | 作用 |
|---|---|
PWM(Pin(2)) | 创建PWM对象,连接到GPIO2 |
p2.freq(50) | 设置频率为50Hz(舵机标准) |
p2.duty_u16(1638) | 转到0° |
p2.duty_u16(4915) | 转到90° |
p2.duty_u16(8192) | 转到180° |
📌 版本要求:必须使用MicroPython 1.19 及以上版本!1.18版本不会有反应。具体升级方法参考"环境搭建"课程。
第七步:保存运行,看舵机转动!
保存代码到开发板,命名 :servo.py
点击运行按钮,观察舵机:
- 先转到0°(摆臂指向最左边)
- 等待1秒
- 转到90°(摆臂指向正前方)
- 等待1秒
- 转到180°(摆臂指向最右边)
进阶玩法:让舵机来回摆动
学会了基本的角度控制,可以让舵机来回摆动,做出更生动的效果:
frommachineimportPin,PWMimporttime p2=PWM(Pin(2))p2.freq(50)whileTrue:# 从0°到180°fordutyinrange(1638,8192,100):p2.duty_u16(duty)time.sleep_ms(20)# 从180°到0°fordutyinrange(8192,1638,-100):p2.duty_u16(duty)time.sleep_ms(20)效果:舵机像雷达一样,从0°平滑扫到180°,再从180°扫回0°,循环往复。
舵机 + 其他模块 = 更多可能
| 组合 | 效果 |
|---|---|
| 舵机 + 超声波 | 智能小车自动避障 |
| 舵机 + 人体感应 | 人靠近自动开门 |
| 舵机 + 摇杆 | 用摇杆实时控制舵机角度 |
| 舵机 + WiFi | 远程控制舵机转动 |
| 舵机 + 光敏 | 追光太阳能板 |
全程回顾
| 步骤 | 操作 | 效果 |
|---|---|---|
| 找到课程 | 文档→课程→ESP32+MicroPython→舵机 | 了解舵机原理 |
| 认识硬件 | 3根线:GND、VCC、信号线 | 知道怎么接线 |
| 理解PWM | 脉冲宽度决定角度 | 理解控制原理 |
| 动手接线 | GND→GND, VCC→5V, 信号线→GPIO2 | 硬件就位 |
| 打开代码 | 点击"打开"按钮 | 代码进入编辑器 |
| 保存运行 | Ctrl+S → 选择ESP32 → 运行 | 舵机精准转动! |