基于Micro:bit与Tinkercad的舵机控制入门:从PWM原理到物联网应用

Micro:bit舵机控制Tinkercad
于 2026-06-01 13:04:27 修改
·本内容遵循CC 4.0 BY-SA版权协议

1. 项目概述与核心价值

如果你对嵌入式开发或物联网项目感兴趣,但又被复杂的硬件接线、昂贵的开发板和烧录过程劝退,那么这个基于Micro:bit和Tinkercad的舵机控制项目,绝对是你理想的入门起点。Micro:bit是一款由英国广播公司(BBC)主导设计的微型计算机,专为青少年编程教育而生,但它强大的功能和极低的门槛,使其成为所有创客和嵌入式新手的绝佳工具。而Tinkercad,作为Autodesk旗下的免费在线3D设计和电路仿真平台,则彻底消除了物理硬件的限制,让你在浏览器里就能完成从电路设计、代码编写到功能仿真的全流程。

这个项目的核心,是学习如何用Micro:bit控制舵机。舵机,这个在机器人手臂、航模舵面、智能小车转向中无处不在的“关节”,其本质是一个集成了电机、减速齿轮组和控制电路的位置伺服机构。它不像普通电机那样只会傻转,而是能精确地转动并保持在指定的角度。这种精准控制能力,正是实现自动化动作的基础。通过这个项目,你将亲手实践如何用几行简单的代码,让舵机听从你的指令,在0度、90度、180度之间精准切换,响应按键和摇晃手势。这不仅仅是点亮一个LED灯那么简单,而是迈出了从“数字世界”控制“物理世界”的关键一步,是理解物联网“感知-决策-执行”闭环的生动案例。

2. 核心硬件与平台解析

2.1 Micro:bit:你的口袋里的微型计算机

Micro:bit虽然只有信用卡一半大小,但其“五脏俱全”的程度令人惊叹。对于本项目,我们需要重点关注它的几个核心部分:

  1. GPIO(通用输入输出)引脚:位于板子底部的金色边缘连接器,是我们连接外部设备(如舵机)的物理接口。Micro:bit有多个GPIO引脚,但并非所有都支持我们需要的PWM(脉冲宽度调制)输出。官方明确推荐用于舵机控制的引脚是Pin 0、Pin 1和Pin 2。这是因为这些引脚在Micro:bit的软件生态中,被预配置为易于使用的模拟输出引脚。

  2. A/B按键与加速度计:板载的两个可编程按键(A和B)以及一个三轴加速度计,是我们实现人机交互的关键。在本项目中,我们将编程实现:按下A键,舵机归零;按下B键,舵机转到180度;摇晃板子,舵机转到90度。这种将物理动作转化为控制信号的过程,是交互式项目设计的精髓。

  3. 电源与接地:舵机工作需要电源(通常3.3V或5V)和接地(GND)。Micro:bit的3V引脚可以输出3.3V电压,为小型舵机供电。但对于扭矩较大或数量较多的舵机,强烈建议使用外部电源,以避免Micro:bit内置稳压器过载。

注意:Micro:bit的逻辑电平是3.3V。虽然许多舵机标称工作电压为4.8V-6V,但大多数微型舵机(如SG90)在3.3V下也能勉强工作,只是扭矩和速度会下降。在Tinkercad仿真中无需担心此问题,但若进行实物连接,务必查阅舵机规格书。

2.2 舵机:精准的角度执行器

舵机的核心工作原理是PWM控制。控制器(Micro:bit)会发送一个周期性的脉冲信号。舵机内部的控制电路会检测这个脉冲的高电平持续时间(即脉冲宽度),并将其映射到一个特定的目标角度。

一个标准的PWM控制周期通常是20毫秒(即频率为50Hz)。在这个周期内:

  • 脉冲宽度为1.5毫秒时,舵机输出轴转到中间位置(如90度)。
  • 脉冲宽度为1.0毫秒时,舵机转到最小角度(如0度)。
  • 脉冲宽度为2.0毫秒时,舵机转到最大角度(如180度)。

这种关系是线性的。因此,控制舵机本质上就是精确地控制输出脉冲的宽度。幸运的是,像MakeCode这样的高级编程环境已经将这些底层细节封装好了,我们只需要调用servo write之类的函数,并传入角度值(0-180)即可。

2.3 Tinkercad Circuits:零成本的虚拟实验室

Tinkercad Circuits的最大优势在于其“所见即所得”的仿真环境。它提供了以下核心功能,完美契合学习需求:

  1. 元器件库:包含Micro:bit、各种型号的舵机(如SG90)、传感器、电阻、LED等常用电子元件,无需购买即可随意取用。
  2. 可视化接线:通过拖拽虚拟导线进行连接,系统会自动提示引脚功能,避免接错线烧坏设备的风险。
  3. 集成化编程:支持图形化的Blocks(积木块)编程和文本式的MicroPython编程,代码编写后可直接在仿真环境中运行,结果立即可见。
  4. 交互式仿真:你可以用鼠标点击虚拟Micro:bit上的A/B键,或者晃动电路图来模拟摇晃动作,舵机会实时响应,提供了极强的学习正反馈。

这个平台将硬件学习的门槛降到了最低,让你可以专注于逻辑和原理,而不是焊接和故障排查。

3. 项目实战:从零搭建仿真环境

3.1 在Tinkercad中创建电路

首先,访问Tinkercad官网并注册/登录账号。在仪表盘点击“创建新设计”,选择“电路图”。

  1. 添加元器件

    • 在右侧元器件面板的搜索框中,输入“micro:bit”并将其拖到工作区。
    • 再次搜索“servo”(舵机),你会看到多种型号,如“Servo”(通用舵机符号)或更具体的“SG90”。对于本项目,拖入一个“Servo”即可。
  2. 连接电路

    • 舵机通常有三根线:信号线(橙色或黄色)电源线(红色)地线(棕色或黑色)
    • 信号线:连接至Micro:bit的 Pin 0。这是控制信号输入线。
    • 电源线:连接至Micro:bit的 3V 引脚。此为舵机供电。
    • 地线:连接至Micro:bit的 GND 引脚。形成完整回路。

    在Tinkercad中,只需用鼠标从舵机的引脚拖出一根线,指向Micro:bit的对应引脚即可完成连接。连接完成后,你的工作区应该有一个Micro:bit和一个舵机,三者之间用三条彩色的虚拟导线连接起来。

3.2 使用MakeCode进行图形化编程

Tinkercad集成了MakeCode编辑器,这是最推荐新手入门的方式。

  1. 在电路工作区上方,找到并点击“代码”按钮,将打开一个图形化编程界面。
  2. 编程逻辑实现:
    • 初始化舵机:我们需要在程序一开始,就告诉Micro:bit舵机连接在哪个引脚。从“引脚”类别中,找到将 servo 写入引脚 P0 至 90°积木块,将其拖入当开机时的容器内。这个操作有两个作用:一是初始化Pin 0为舵机控制引脚;二是将舵机初始位置设为90度(中间位置)。
    • 响应B按钮按下:从“输入”类别中,找到当按钮 A 被按下时积木块,将其更改为当按钮 B 被按下时。然后,从“引脚”类别中,将另一个将 servo 写入引脚 P0 至 180°积木块放入其中。这样,当按下B键时,舵机就会转到180度。
    • 响应A按钮按下:同理,添加当按钮 A 被按下时积木块,并在其中放入将 servo 写入引脚 P0 至 0°
    • 响应摇晃手势:从“输入”类别中,找到当 震动 时积木块。然后,在其中放入将 servo 写入引脚 P0 至 90°积木块。这样,当检测到摇晃(震动)时,舵机会回到90度。

至此,一个完整的控制逻辑就搭建好了。你的代码块应该看起来结构清晰,三个事件块(当按钮A/B被按下当震动时)并列,分别驱动舵机到不同角度。

3.3 运行仿真与调试

点击代码编辑器右上角的“开始仿真”按钮(或回到电路图点击“开始仿真”),整个虚拟电路就会活过来。

  1. 交互测试

    • 用鼠标点击虚拟Micro:bit上的“B”按钮,观察舵机的指针是否平滑地转动到180度位置。
    • 点击“A”按钮,舵机应返回0度。
    • 将鼠标移动到电路图区域,快速晃动鼠标(或点击Tinkercad提供的“震动”模拟按钮),舵机应转到90度。
  2. 调试心得

    • 舵机不转:首先检查三条线是否连接正确且牢固(在Tinkercad中,线可能会虚连)。其次,确认当开机时积木块中已经设置了舵机引脚。没有初始化,后续控制指令是无法生效的。
    • 角度不准:在虚拟仿真中,角度通常是精确的。但如果未来使用实物,可能会发现0度和180度的位置有偏差。这可能是舵机的中位(90度)未校准。一些高级的舵机库允许进行“微调”,例如将servo write的角度值进行一个偏移量的加减。
    • 动作迟缓或不连续:在仿真中一般不会出现。实物操作中,如果舵机供电不足(仅靠Micro:bit的3V),就会出现这种情况。这就是为什么强调对于标准舵机要使用外部电源(如4节AA电池组)供电,仅将信号线和地线与Micro:bit相连。

4. 深入探索:从图形化到文本编程

图形化编程直观,但要想深入嵌入式开发,理解文本代码是必经之路。Tinkercad同样支持MicroPython编程。

  1. 在代码编辑界面,将模式从“块”切换到“文本”(MicroPython)。
  2. 你会看到基于图形化块生成的代码。核心代码结构如下:
PYTHON
from microbit import *
 
# 初始化舵机到90度位置。`pin0`是对象,`.write_analog()`用于输出PWM。
# 将角度(0-180)映射到PWM占空比(约26-123)。
pin0.write_analog(90 / 180 * 1023 / 20 * 1.5 + 1023 / 40) # 简化理解:此公式计算90度对应的PWM值
 
while True:
if button_b.was_pressed():
pin0.write_analog(180 / 180 * 1023 / 20 * 2.0 + 1023 / 40) # 转到180度
if button_a.was_pressed():
pin0.write_analog(0) # 注意:直接写0可能无法驱动到0度,需使用正确映射
# 更规范的写法:pin0.write_analog(1023 / 40) # 对应1ms脉冲,0度
if accelerometer.was_gesture('shake'):
pin0.write_analog(90 / 180 * 1023 / 20 * 1.5 + 1023 / 40) # 回到90度
sleep(20) # 短暂延迟,降低CPU占用

代码解析与优化

  • write_analog(value)函数中的value范围是0-1023,对应输出0%-100%的占空比。但舵机需要的是20ms周期内特定宽度的脉冲。因此,需要将目标角度转换为对应的value值。上面的换算公式(angle / 180 * 1023 / 20 * pulse_width_ms + 1023 / 40)是通用的,其中pulse_width_ms是目标角度对应的脉冲宽度(单位毫秒)。
  • 为了代码更清晰,可以定义函数来封装这个转换:
PYTHON
def set_servo_angle(pin, angle):
# 将角度(0-180)映射到PWM值(约26-123)
# 假设脉冲宽度范围1.0ms(0度)到2.0ms(180度),周期20ms
min_pulse = 1.0 # 0度时的脉冲宽度(ms)
max_pulse = 2.0 # 180度时的脉冲宽度(ms)
pulse_range = max_pulse - min_pulse
target_pulse = min_pulse + (angle / 180) * pulse_range
# 计算对应的analog值: 占空比 = 脉冲宽度/周期
duty_cycle = target_pulse / 20.0
analog_value = int(duty_cycle * 1023)
pin.write_analog(analog_value)
 
# 使用函数
set_servo_angle(pin0, 90) # 初始化到90度

这样,主循环就会变得非常简洁易读,也便于后续增加更多角度控制。

5. 项目扩展与实战应用思考

掌握了基础控制后,这个项目可以轻松扩展,成为更复杂应用的基石。

  1. 多舵机协同:尝试在Tinkercad中添加第二个舵机,连接到Pin 1。修改代码,实现例如“按下A键,两个舵机同步运动到不同角度”的功能。这模仿了机器人多关节控制。

  2. 模拟量控制:添加一个旋钮电位器(模拟输入传感器)到Pin 2。通过读取旋钮的模拟值(0-1023),将其映射到舵机的角度(0-180),实现“旋钮转到哪,舵机就跟到哪”的实时位置反馈控制。这是制作遥控设备的原型。

  3. 制作一个“指针式仪表盘”:将舵机的指针当作仪表的指针,配合一个超声波传感器(模拟距离)或光线传感器。编写代码,让传感器读取的值动态控制舵机角度,创建一个物理的、可视化的传感器读数显示器。

  4. 引入逻辑与状态:让舵机的运动更有“智能”。例如,编程实现“连续按两下A键,舵机缓慢扫描0-180度”,或者“摇晃后,舵机不是直接跳到90度,而是以每秒10度的速度平滑运动过去”。这需要引入变量来记录状态、使用循环来控制步进。

从仿真到实物的关键注意事项: 当你信心满满地准备用实物复现时,务必注意以下几点:

  • 电源隔离:驱动一个以上标准舵机,必须使用独立电源(如USB充电宝或电池盒)为舵机供电。将独立电源的“地线(GND)”与Micro:bit的“GND”连接共地,以确保信号基准一致。舵机电源正极接独立电源正极,信号线接Micro:bit Pin 0。
  • 防止信号干扰:舵机电机在启动和停止时会产生电流尖峰和电气噪声,可能干扰Micro:bit。在舵机电源正负极之间并联一个100μF以上的电解电容,可以有效地平滑电压,提高系统稳定性。
  • 机械保护:实物操作中,避免让舵机输出轴卡死(堵转),这会迅速增大电流,可能烧毁舵机内部的电机或驱动芯片。在代码中,应避免让舵机强行转到其物理极限之外的角度。

这个项目就像一把钥匙,为你打开了嵌入式控制世界的大门。从在Tinkercad中轻松拖拽、点击,到理解PWM背后的原理,再到用代码赋予硬件生命,每一步都充满了创造的乐趣。当你看到虚拟的或真实的舵机随着你的指令精准转动时,那种连接数字与物理世界的成就感,正是驱动无数创客不断探索的原动力。接下来,试着去改造它,加入传感器,设计一个简单的机械臂,或者做一个自动追光的小花,你会发现,更多的可能性正由此展开。

pwm控制舵机转动角度程序_【从业者说】如何玩转舵机?来看资深机器人创客的开发笔记...
本文介绍了舵机的工作原理、类型选择、扭矩和旋转速度的影响因素,并详细解析了180°和360°舵机PWM控制协议,包括如何通过调整脉宽控制舵机转动角度和速度。还提到了实际应用中应注意的舵机中位误差修正,并分享了micro:bit图形化编程平台的舵机控制程序。
weixin_39827315
2928
用纸板与Micro:bit制作可动龙形机器人:舵机控制与结构设计实践
本文介绍基于Micro:bit与微型舵机(SG90/MG90S)构建可动纸板龙形机器人的完整实践,涵盖双轴颈部结构设计、下颌杠杆联动机构、Hummingbird扩展板供电接线方案,以及MakeCode中摇杆信号映射、多任务循环与舵机角度校准等嵌入式控制逻辑。重点解决供电不足、舵机抖动、结构强度电子干扰等典型问题。
weixin_30732487
430
Micro:Bit无线通信与舵机控制:制作会跳舞的文本傀儡
fix bug
516
PCA9685I2C转16路PWM,助力你的系统
本文深入解析PCA9685芯片特性,包括16路PWM输出、12位分辨率及I2C接口功能。提供了Micro:bit TypeScript树莓派Python驱动实例,涵盖寄存器配置、PWM频率调整及舵机控制
TenaciousTornado
28608
micro:bit XGO教育机器人套件评测编程指南
本文深度评测micro:bit XGO四足教育机器人套件,涵盖其12舵机仿生运动系统、双micro:bit电子架构及Ring:bit V2扩展板设计;详述MakeCode图形化编程MicroPython高级控制方法;介绍蓝牙手柄(Joystick:bit V2)开发要点;并给出面向K-12的分阶段STEM课程设计方案,支持超声波、IMU等第三方传感器集成及Edge Impulse平台AI拓展。
weixin_33709609
443
micro:bit v2裸机驱动库Radio与PWM硬件加速实现
本文介绍面向nRF52833的micro:bit v2裸机驱动库HHS,聚焦Radio无线通信与PWM硬件加速两大核心技术。Radio子系统基于nRF52射频引擎,支持BLE/私有协议、信道配置、RSSI监测及低延迟中断处理;PWM子系统利用TIMER+PPI+PWM外设协同,实现Tone音调Servo舵机的零CPU开销、高精度波形生成(占空比误差<±0.5%,脉宽分辨率亚微秒)。库支持FreeRTOS集成,并在微型气象站组网案例中验证了99.2%广播成功率、1.8μs Tone启动延迟0.32°伺服重复精度。
韩锋裂变营销
190
不花冤枉钱!用Tinkercad+Micro:bit免费玩转硬件编程(附传感器模拟教程)
本文详解如何利用免费在线平台Tinkercad模拟Micro:bit进行硬件编程,涵盖虚拟开发环境搭建、LED/按钮/触摸传感器等外设模拟、超声波温光传感器仿真、交互系统构建及调试实践。重点突出零成本、跨平台、即时反馈和安全实验优势,适用于无实体硬件的初学者快速入门嵌入式开发。
走召可可
416
控制c 舵机的pid_【从业者说】如何玩转舵机?来看资深机器人创客的开发笔记...
本文分享了舵机的选择设计心得,包括有限旋转和连续旋转舵机的区别、扭矩和旋转速度的考虑,以及PWM控制原理。通过案例介绍了如何用PWM控制180°和360°舵机,并提到了micro:bit的图形化编程平台对舵机控制。了解舵机有助于加速电子设计项目进程。
思想假
746
基于Micro:bit与MakeCode的双板无线遥控机器人系统实现
本文基于Micro:bit与MakeCode实现双板无线遥控机器人系统,包含遥控端(加速度计采集+指令发送)和执行端(无线电接收、差分驱动运动学计算、Moto:bit电机PWM控制)两大部分。重点解析2.4GHz无线电组通信机制、H桥电机驱动原理PWM占空比控制、死区滤波及限幅处理,并提供分步调试方法常见问题排查方案。
weixin_30915951
556
基于Micro:bit与CRICKIT的机器人PWM控制与伺服电机精准校准实践
亚大伯斯
569
micro:bit与舵机制作交互式纸板机器人从电容触摸到机械传动
本文介绍基于micro:bit v2的电容触摸传感与舵机控制的交互式纸板机器人实现方案。核心包括利用铝箔作为低成本电容触摸传感器,通过P0引脚检测人体触摸;使用两个9g标准舵机(P1/P2控制)驱动纸板手臂摆动;强调硬件连接(推荐扩展板供电)、MakeCode图形化编程逻辑(含防抖、角度校准、初始姿态设置)及micro:bit v1/v2差异处理。项目聚焦STEM教育场景,突出低门槛电子交互原理实践。
weixin_30787531
296
linux pwm控制蜂鸣器 滴滴_PCA9685I2C转16路PWM,助力你的系统
本文介绍了如何使用PCA9685芯片通过Linux的PWM控制蜂鸣器。PCA9685支持16路12位PWM输出,详细阐述了其硬件参数、软件设计,包括Micro:bit平台的TypeScript版和树莓派平台的Python版程序示例。
BLACK.VOW
665
基于micro:bit光感与舵机控制的互动蝴蝶机器人制作指南
一生爱亚雪
280
Micro:bit - 功能引脚介绍
本文详细介绍了Micro:bit控制器的各种功能引脚,包括GPIO、ADC、DAC、IIC、SPI和PWM等,提供了具体的使用示例,如模拟输入输出、数字信号读写、外围设备通信等。
Naiva
26876
Micro:bit 入门介绍
BBC Micro:bit是一款专为青少年编程教育设计的ARM开发板,配备蓝牙、加速度计、电子罗盘等,支持多种编程环境如MakeCode和Python。其尺寸小巧,功能多样,适合初学者进行各种创意项目。
Naiva
16790
micro:Maqueen库深度解析:micro:bit机器人控制实战指南
本文深入剖析micro:Maqueen开源C++库的技术实现,涵盖硬件引脚映射(如P0冲突)、nRF51/52平台PWM驱动架构、运动控制API(高层指令底层电机调控)、传感器阻塞式读取机制(巡线/红外)、LED矩阵Flash优化显示、蜂鸣器非阻塞改造方案,以及BLE Peripheral和nRF Radio P2P通信集成。重点讨论固件兼容性、NeoPixel时序缺陷、电源隔离设计等工程痛点。
张阿拉撕裤
169
Tinkercad仿真入门:Micro:bit声光交互项目全流程实践
GreedyAbyss
256
基于Micro:bit与乐高的差速转向遥控坦克制作全攻略
本文详细介绍了基于Micro:bit与乐高Technic搭建差速转向遥控坦克的完整流程,涵盖差速转向原理、蓝牙无线通信架构、360度连续旋转伺服电机控制Bit Board电路集成及MakeCode图形化编程实现。重点解析了信号采集-处理-驱动-执行的全链路设计,强调供电管理、齿轮啮合调试分步联调方法,适用于机器人教育嵌入式实践。
weixin_30617797
355
[20个项目学会BBC micro:bit编程] 19-直流电机控制
本教程介绍如何使用BBCmicro:bit对M-robot进行编程,涵盖硬件连接、实验编程及结果分析。通过控制直流电机实现机器人运动,强调了正确连接和外部供电的重要性。
weixin_30892037
2462
micro:bit】从入门到放弃(七)扩展指令-三色探照灯、蜂鸣器、七彩流水灯、呼吸灯
本文围绕micro:bit展开,介绍添加扩展指令,涉及亚博智能等机器人相关扩展。讲解小车扩展类,包括蜂鸣器、RGB灯控制及使用知识点。还阐述七彩流水灯和呼吸灯的程序及原理,如七彩流水灯用W6812芯片,呼吸灯可控制LED亮度。
郭老二
244