基于Arduino与超声波传感器的六自由度跳舞机器人:从硬件选型到行为编程
1. 项目概述与核心思路
几年前,我和一位同学聊起我们对“失败”的恐惧——那种担心在老师面前演示项目时,它突然“罢工”的焦虑。正是这种情绪,催生了我制作Shybot(害羞机器人)的想法。这个机器人的核心逻辑很有趣:它很“害羞”,当你靠近观察时,它会静止不动;只有当你退到足够远的距离,它才会放心地开始跳舞。这不仅仅是一个机器人项目,更像是一个将个人情感(舞台恐惧)转化为项目核心交互逻辑的创意实践。
Shybot是一个基于Arduino Uno和HC-SR04超声波传感器的六自由度跳舞机器人。它的“大脑”通过超声波持续感知前方障碍物(也就是你)的距离,并根据这个距离值,指挥6个SG90舵机驱动机器人的四肢,做出“紧张颤抖”、“静止待机”和“欢快舞蹈”三种不同的行为状态。整个项目融合了3D打印结构设计、基础电路搭建和Arduino编程,非常适合作为学习机器人入门、传感器应用和多舵机协同控制的综合实践案例。
无论你是刚接触Arduino的爱好者,还是想找一个有趣项目练手的学生,或是希望将互动概念融入装置的艺术创作者,这个项目都能提供一条清晰的实现路径。它不仅教你如何让一堆零件“动起来”,更展示了如何为一个机械结构注入简单的“性格”与“反应”,让造物与创造者之间产生有趣的对话。
2. 核心硬件选型与功能解析
一个机器人项目成功与否,硬件选型是基石。Shybot的硬件清单非常精简,但每一件都承担着关键角色。理解它们为何被选中以及如何协同工作,是复现和优化项目的前提。
2.1 控制核心:Arduino Uno
Arduino Uno是本项目当之无愧的控制中枢。我选择它,主要基于几个现实考量:
- 生态与社区支持 :Uno拥有最庞大的用户群和资料库。无论是库文件(如本例中用到的
NewPing和Servo库)、故障排查还是扩展思路,你几乎都能找到现成的答案。 - I/O引脚数量 :Shybot需要同时控制6个舵机,并读取一个传感器的数据。Uno提供了14个数字I/O口和6个模拟输入口,完全满足需求,甚至还有富余。
- 供电灵活性 :Uno可以通过USB供电,也可以通过直流电源插座(如9V电池)供电。在调试阶段用USB,在最终展示时用电池,这种切换非常方便。
注意 :虽然像Nano、Pro Mini等板子更小巧,但对于初次进行多舵机项目的朋友,Uno的布局清晰,不易接错线,能极大降低初期调试的挫败感。
2.2 环境感知之眼:HC-SR04超声波传感器
HC-SR04是让Shybot拥有“距离感”的关键。它的工作原理很直观:Trig引脚发送一个至少10微秒的高电平脉冲,触发传感器发射一组40kHz的超声波。声波遇到障碍物反射回来,被接收器捕捉。Echo引脚会输出一个高电平脉冲,其持续时间与声波往返时间成正比。
计算距离的公式是:距离 = (高电平时间 × 声速) / 2 。在Arduino中,我们通常使用现成的库(如 NewPing )来封装这个计算过程,直接获取以厘米为单位的距离值。选择HC-SR04是因为它成本极低、精度对于此类互动项目足够(2-400cm范围,±3mm精度),且接口简单(仅需一个Trig和一个Echo引脚)。
2.3 动力关节:SG90微型舵机
舵机是机器人的“肌肉”。SG90是一种模拟舵机,价格便宜,扭矩适中(约1.8kg/cm),非常适合作为教学或小型展示机器人的关节。
- 工作原理 :舵机内部包含一个小型直流电机、减速齿轮组和一个电位器(用于反馈当前角度)。控制器(Arduino)通过PWM(脉冲宽度调制)信号发送目标角度指令。舵机内部的电路会比较目标角度和电位器反馈的当前角度,驱动电机正转或反转,直到两者一致。
- 控制信号 :SG90的控制信号是一个周期为20ms(50Hz)的PWM脉冲,其中脉冲宽度在0.5ms到2.5ms之间变化,分别对应0度和180度(或-90到+90度,取决于型号)。在代码中,我们使用
Servo.write(angle)函数,其中的angle参数通常就是0-180之间的角度值。 - 供电挑战 :这是本项目最大的坑点之一。一个SG90在空载时工作电流约100-200mA,但在带负载启动或堵转时,瞬时电流可能飙升至500-800mA。6个舵机同时动作,对电源是巨大的考验。原设计从9V电池通过Arduino板载稳压器取电,极易导致电压骤降,造成Arduino复位或舵机抖动无力。 强烈建议 为舵机准备独立的电源。
2.4 能源系统:9V电池与供电方案反思
原项目使用一块9V电池(通常是6F22叠层电池)为整个系统供电。这是一个值得商榷的选择。
- 容量与电流输出 :一块普通的碱性9V电池,容量大约在500mAh左右。其最大持续放电电流能力有限,通常不超过300-500mA。如前所述,6个舵机的峰值电流需求远超此值。
- 电压转换损耗 :Arduino Uno的板载稳压器(如AMS1117)将9V降压到5V给主板和舵机供电,这个过程会产生热损耗,进一步降低可用能量。
- 实测体验 :在我自己的制作过程中,使用9V电池时,机器人动作缓慢无力,且电池电量消耗极快,舞蹈动作无法完整执行。
更可靠的供电方案建议 :
- 舵机独立供电 :使用一块大容量、高放电率的电源(如7.4V 2S锂聚合物电池或6节AA电池盒)直接为舵机供电。将电池正负极接入一个专用舵机供电模块或直接连接到面包板的正负电源轨,但 务必确保此电源的地(GND)与Arduino的GND相连 ,形成共地。
- Arduino单独供电 :Arduino可以通过USB口或另一块电池(如9V)单独供电。这样,舵机的大电流波动不会干扰到控制核心的稳定运行。
- 使用电容缓冲 :如果坚持使用单一电源,至少在舵机电源正负极之间并联一个 大容量(如1000μF或更大)的电解电容 和一个 0.1μF的陶瓷电容 。电解电容用于应对大电流需求,陶瓷电容用于滤除高频噪声。这能一定程度上缓解电压跌落。
3. 机械结构设计与3D打印要点
Shybot的“身体”是通过3D打印完成的。结构设计直接决定了机器人的动作范围、稳定性和组装难度。
3.1 模型设计与关节适配
原项目提供的STL文件已经将机器人各个部件(躯干、大腿、小腿、脚、手臂等)拆分开。设计上有几个关键点:
- 舵机安装位 :每个关节处都有一个精确匹配SG90舵机外壳的卡槽。安装时,需要将舵机用力按压进去,听到“咔哒”声表示卡紧。这种无螺丝设计简化了组装,但对打印精度要求较高。
- 舵盘连接 :舵机通过其自带的塑料舵盘(舵臂)与肢体连接。设计文件在需要连接的位置预留了与舵盘孔位匹配的柱状结构。你需要先将舵盘用自攻螺丝固定到舵机上,然后将这个“舵盘-舵机”组合体卡进身体,最后再将肢体部件用螺丝锁定到舵盘上。 这里有一个非常重要的顺序 :一定要先将舵盘安装到肢体上,再将整个舵机卡入躯干。如果先把舵机卡进躯干,很多狭窄空间会让你无法拧紧舵盘上的螺丝。
- 线缆管理 :躯干内部设计有走线通道,用于收纳从各个关节引出的舵机线。组装时建议规划好线路,避免线缆缠绕,影响运动。
3.2 3D打印参数与后处理建议
原作者提到使用了0.8mm层高和0.5mm的喷嘴进行草稿质量打印。这确实能快速出件,但会牺���细节和精度。
- 推荐打印设置 :为了获得更好的装配体验,我建议:
- 层高 :0.2mm。这是精度和打印时间的良好平衡点。
- 填充率 :15%-20%。对于这种小尺寸、非受力的装饰性结构,这个填充率足够坚固且节省材料和时间。
- 支撑 :必须开启支撑。特别是关节连接处、躯干内部的卡槽等悬空结构。建议使用“树状支撑”或“可接触支撑”,它们更容易拆除且对模型表面损伤更小。
- 打印材料 :PLA是最佳选择。它易于打印,无异味,强度足够,且后处理(如打磨)相对容易。
- 后处理关键步骤 :
- 仔细拆除支撑 :使用剪钳或镊子小心移除所有支撑材料。对于卡在缝隙里的支撑碎片,可以用小刀或针仔细挑出。
- 测试性组装(至关重要) :在正式安装舵机前,先进行“干组装”。即不装舵机,只将所有3D打印部件尝试拼合在一起,检查所有卡扣是否顺畅,孔位是否对齐。特别是舵机卡槽,尝试用废弃的舵机或同等尺寸的方块测试一下松紧度。
- 扩孔与打磨 :如果发现舵机卡得太紧,可以用小圆锉刀或电磨工具对卡槽内部进行轻微打磨。如果舵盘连接柱太粗,螺丝孔对不上,也可以用合适尺寸的钻头(如1.5mm或2mm)手动扩一下孔。 原则是“宁紧勿松” ,先少量打磨,多次测试,避免一次打磨过度导致舵机松动。
4. 电路连接详解与布线技巧
正确的电路连接是项目成功的一半。Shybot的电路看似简单,但连接顺序和布线方式会影响最终的可靠性和美观度。
4.1 系统连接图与引脚定义
首先,我们必须明确每个部件连接到Arduino的哪个引脚。根据原代码,连接关系如下:
| 部件 | Arduino引脚 | 功能说明 |
|---|---|---|
| 超声波传感器 Trig | 10 | 触发测距脉冲 |
| 超声波传感器 Echo | 6 | 接收回波脉冲 |
| 舵机1 (左脚) | 3 | 控制左脚踝俯仰 |
| 舵机2 (右脚) | 9 | 控制右脚踝俯仰 |
| 舵机3 (左大腿) | 11 | 控制左髋关节摆动 |
| 舵机4 (右大腿) | 5 | 控制右髋关节摆动 |
| 舵机5 (左臂) | 12 | 控制左肩关节摆动 |
| 舵机6 (右臂) | 4 | 控制右肩关节摆动 |
| 蜂鸣器/电机 (预留) | 8 | 代码中预留,可用于添加音效 |
注意引脚顺序 :代码中初始化舵机的顺序(左臂、左大腿、左脚、右脚、右大腿、右臂)与物理连接顺序不同。这没关系,只要代码中
Servo.attach(pin)的引脚号与实际接线一致即可。但为了调试方便,建议在舵机线上贴个小标签。
4.2 分步搭建与布线实践
- 固定核心板卡 :首先,将Arduino Uno和面包板固定在机器人的躯干内部或底座上。可以使用双面泡棉胶或螺丝(如果设计了安装孔)。确保放置稳固,不会在机器人运动时晃动。
- 连接电源总线 :在面包板上,用跳线建立两条平行的电源轨:一条正极(VCC,通常为红色),一条负极(GND,通常为黑色或蓝色)。 这是保持电路清晰的基础 。
- 接入超声波传感器 :
- 将传感器的VCC引脚连接到面包板的5V电源轨(或Arduino的5V引脚)。
- 将传感器的GND引脚连接到面包板的GND电源轨。
- 将Trig引脚用一根公对公杜邦线连接到Arduino的数字引脚10。
- 将Echo引脚用一根公对公杜邦线连接到Arduino的数字引脚6。
- 连接舵机组(关键步骤) :
- 将所有6个舵机的 棕色或黑色线(GND) 并联连接到面包板的GND电源轨。 务必确保GND连接牢固 ,接触不良是舵机抖动的常见原因。
- 将所有6个舵机的 红色线(VCC,通常+5V) 并联连接。 这里强烈建议不要接入面包板的5V轨或Arduino的5V引脚 。如前所述,应接入外接的专用舵机电源正极。如果暂时用Arduino供电,也请单独从Vin或外部电源接口取电,并加大滤波电容。
- 将每个舵机的 橙色或黄色线(信号线) 分别连接到对应的Arduino数字引脚(3, 9, 11, 5, 12, 4)。使用公对公杜邦线连接。
- 优化布线 :用扎带或胶带将舵机线缆捆扎整齐,沿着躯干内部的走线槽布置,避免线材被关节运动拉扯或缠绕。
4.3 供电方案实战连接
如果你决定采用 舵机独立供电方案 ,连接方式如下:
- 准备一块适合舵机的电池(如7.4V锂电池或4节AA电池盒,输出约6V)。
- 将电池的正极(+)连接到面包板为舵机预留的VCC电源轨。
- 将电池的负极(-)连接到面包板的GND电源轨。
- 最关键的一步 :用一根跳线,将这块电池的负极(-)与Arduino Uno的GND引脚连接起来。这样,Arduino和舵机就有了共同的参考地电位,信号才能正常传输。
- Arduino自身通过USB线或另一块9V电池供电。
5. Arduino代码深度解析与舞蹈编程
代码是机器人的“灵魂”。它定义了Shybot如何感知世界(距离),并如何做出反应(舞蹈动作)。我们来逐层剖析。
5.1 库文件引入与全局变量声明
#include <Servo.h>
#include <NewPing.h>
Servo.h:Arduino内置库,用于控制舵机。它简化了生成PWM信号的过程。NewPing.h:一个优秀的第三方超声波传感器库。相比原始的pulseIn()函数,它更高效、准确,且自带错误处理。你需要通过Arduino IDE的库管理器搜索并安装“NewPing”。
// 创建舵机对象
Servo leftfoot; // 左脚
Servo rightfoot; // 右脚
Servo lefthip; // 左大腿(髋)
Servo righthip; // 右大腿(髋)
Servo leftarm; // 左臂
Servo rightarm; // 右臂
// 初始化超声波传感器对象:Trig引脚=10, Echo引脚=6, 最大测量距离=200cm
NewPing sonar(10, 6, 200);
const int motorPin = 8; // 预留的蜂鸣器或电机引脚
int beat = 200; // 舞蹈节拍间隔(毫秒),可配合音乐调整
- 为每个舵机创建一个
Servo对象,便于独立控制。 NewPing sonar(10, 6, 200):实例化传感器对象。第三个参数200是最大测距值(厘米),超过此值将返回0。这有助于过滤掉无效的远距离回波。beat变量控制舞蹈动作之间的延迟,调整它可以改变舞蹈速度。
5.2 Setup()函数:初始化配置
void setup() {
Serial.begin(9600); // 启动串口通信,用于调试输出距离值
pinMode(motorPin, OUTPUT); // 将预留引脚设置为输出模式
// 将舵机对象关联到具体的Arduino引脚
leftfoot.attach(3); // 左脚 -> 引脚3
rightfoot.attach(9); // 右脚 -> 引脚9
lefthip.attach(11); // 左髋 -> 引脚11
righthip.attach(5); // 右髋 -> 引脚5
leftarm.attach(12); // 左臂 -> 引脚12
rightarm.attach(4); // 右臂 -> 引脚4
}
Serial.begin(9600):这是调试神器。通过它,你可以在电脑的串口监视器上实时查看超声波测得的距离值,这对于校准行为阈值(20cm, 190cm)至关重要。servo.attach(pin):这个函数调用后,指定的引脚就会开始输出舵机控制信号。 注意 :在Arduino Uno上,使用Servo库会禁用引脚9和10的PWM(analogWrite())功能,但作为数字IO口使用(如本例中的引脚9)是没问题的。
5.3 Loop()函数:行为逻辑核心
loop() 函数是持续运行的,其逻辑结构是一个清晰的 状态机 ,根据距离( distance )决定机器人的三种行为状态。
void loop() {
digitalWrite(motorPin, LOW); // 确保预留的电机/蜂鸣器关闭
int distance = sonar.ping_cm(); // 获取一次测距结果(单位:厘米)
Serial.println(distance); // 打印距离值到串口监视器
// 状态1:恐惧颤抖 (距离 < 20cm)
if (distance < 20 && distance >= 0) {
leftfoot.write(0); rightfoot.write(90); lefthip.write(90); righthip.write(105); leftarm.write(0); rightarm.write(0);
digitalWrite(motorPin, HIGH); // 可以在此处触发蜂鸣器发出“害怕”的声音
delay(50);
leftfoot.write(10); rightfoot.write(100); lefthip.write(100); righthip.write(115); leftarm.write(15); rightarm.write(15);
delay(100);
}
// 状态2:静止待机 (20cm <= 距离 < 190cm)
if (distance < 190 && distance > 20) {
leftfoot.write(0); rightfoot.write(90); lefthip.write(90); righthip.write(105); leftarm.write(0); rightarm.write(0);
delay(1000); // 每秒检查一次距离,降低CPU占用
}
// 状态3:开心舞蹈 (距离 >= 190cm)
if (distance >= 190) {
// 一系列连续的舵机角度写入和延迟,构成舞蹈动作序列
leftfoot.write(0); lefthip.write(90); rightfoot.write(90); righthip.write(90); leftarm.write(50); rightarm.write(180);
delay(1000);
leftfoot.write(10); delay(beat);
rightfoot.write(60); lefthip.write(150); leftarm.write(160); rightarm.write(50); delay(beat);
// ... 后续舞蹈动作代码
delay(1000);
}
}
代码逻辑精讲 :
- 获取距离 :
sonar.ping_cm()是NewPing库提供的函数,它完成一次完整的测距并返回厘米值。如果超时或超出范围,返回0。 - 状态判断 :三个
if语句将距离划分为三个区间,对应三种行为。区间阈值(20和190)是作者定义的“害羞”边界,你可以根据实际场地和传感器性能调整。 - 动作编写 :舞蹈动作的本质是 在一系列时间点上,为每个舵机设定一个目标角度 。
servo.write(angle)命令舵机立即转向该角度。delay(beat)则让机器人保持当前姿势一段时间,形成动作节奏。- 如何设计自己的舞蹈 :你可以把机器人想象成一个木偶,有6根线(对应6个舵机)。在纸上画出你想让它摆出的几个关键姿势,然后为每个姿势记录下6个舵机的角度。最后,用
write()和delay()将这些姿势串联起来。从简单的左右摇摆开始,再尝试复杂的步伐。
- 如何设计自己的舞蹈 :你可以把机器人想象成一个木偶,有6根线(对应6个舵机)。在纸上画出你想让它摆出的几个关键姿势,然后为每个姿势记录下6个舵机的角度。最后,用
5.4 舞蹈动作编程进阶技巧
原代码的舞蹈序列是硬编码的,修改起来比较麻烦。这里分享一个更模块化、易于编辑的编程方法:
// 定义一个结构体来存储一个“姿势”
struct Pose {
int lf; // leftfoot
int rf; // rightfoot
int lh; // lefthip
int rh; // righthip
int la; // leftarm
int ra; // rightarm
int duration; // 保持该姿势的时长(毫秒)
};
// 创建一个舞蹈动作数组
Pose danceRoutine[] = {
{0, 90, 90, 90, 50, 180, 1000}, // 姿势1
{10, 90, 90, 90, 50, 180, 200}, // 姿势2
{10, 60, 150, 90, 160, 50, 200}, // 姿势3
// ... 可以继续添加更多姿势
};
void dance() {
int poseCount = sizeof(danceRoutine) / sizeof(danceRoutine[0]); // 计算姿势总数
for (int i = 0; i < poseCount; i++) {
leftfoot.write(danceRoutine[i].lf);
rightfoot.write(danceRoutine[i].rf);
lefthip.write(danceRoutine[i].lh);
righthip.write(danceRoutine[i].rh);
leftarm.write(danceRoutine[i].la);
rightarm.write(danceRoutine[i].ra);
delay(danceRoutine[i].duration);
}
}
然后在 loop() 函数的舞蹈状态中,只需调用 dance() 函数即可。这样,要修改舞蹈,你只需要编辑 danceRoutine 数组中的数据,无需改动主逻辑,清晰且安全。
6. 系统调试、问题排查与优化
将硬件和软件组合后,几乎一定会遇到问题。以下是基于我实际制作经验的调试指南和常见问题解决方案。
6.1 上电前安全检查清单
- 电源极性 :再三确认所有电源连接(电池、Arduino、舵机)的正负极没有接反。接反是烧毁元件的最快途径。
- 共地处理 :如果使用独立电源,确保所有电源的“地”(GND)都连接在了一起(通常连接到面包板的GND总线)。
- 机械干涉 :手动轻轻转动每个舵盘,检查机器人的四肢运动范围是否顺畅,有无零件相互碰撞或线缆被拉扯。
6.2 分模块调试流程
不要一次性上传完整代码并期望它完美运行。采用分步调试法:
-
测试超声波传感器 :
- 上传一个最简单的测距程序(例如
NewPing库自带的示例)。 - 打开串口监视器(波特率设为9600),用手在传感器前移动,观察输出的距离值是否连续、合理。如果一直显示0或一个很大的固定值,检查接线(Trig/Echo是否接反)、传感器是否完好、以及代码中的引脚定义。
- 上传一个最简单的测距程序(例如
-
测试单个舵机 :
- 注释掉所有其他代码,只连接一个舵机到Arduino。
- 上传一个让该舵机在0度和180度之间缓慢往复运动的程序。
- 观察舵机是否能平滑转动到指定角度,有无异响或发热。如果舵机抖动或不转,首先检查电源是否充足(可用万用表测量舵机供电电压,在动作时是否低于4.8V)。
-
测试所有舵机归位 :
- 将6个舵机全部接上,上传一段代码,让所有舵机依次运动到一个预设的“初始位置”(比如代码中静止状态的角度)。
- 检查每个关节是否都到达了预期位置,机器人的姿态是否端正。 在这个阶段校准“零位”至关重要 。如果发现某个肢体角度歪了,可以在代码中为对应的舵机增加或减少一个偏移量。例如,如果左臂下垂得太厉害,可以将
leftarm.write(0)改为leftarm.write(10)来稍微抬起。
-
集成测试 :
- 将测距代码和舵机控制代码结合。可以先简化逻辑,例如:距离小于50cm时,所有舵机转到A位置;大于50cm时,转到B位置。
- 确认传感器能正确触发舵机动作后,再上传完整的包含三种状态的代码。
6.3 常见问题与解决方案速查表
| 现象 | 可能原因 | 排查与解决思路 |
|---|---|---|
| 舵机抖动、不动或力量不足 | 1. 电源功率不足 (最常见)。 2. 信号线接触不良。 3. 舵机损坏或负载过重。 |
1. 首要检查电源 :用万用表测量舵机供电电压在动作时的瞬时值。如果低于4.8V,必须升级电源或增加大电容缓冲。 2. 按压舵机接口,确保接触牢固。 3. 卸下负载,单独测试舵机。 |
| Arduino自动复位 | 舵机动作时电流过大,导致Arduino供电电压瞬间跌落,触发复位。 | 必须为舵机提供独立电源,并与Arduino共地。确保Arduino自身供电(如USB)稳定。 |
| 超声波传感器读数不稳定或为0 | 1. 测量物体表面不规则或吸声。 2. 传感器前方有障碍物遮挡。 3. 接线错误或传感器故障。 4. 代码中最大距离设置过小。 |
1. 对准平整硬质表面测试。 2. 清理传感器表面的灰尘或遮挡物。 3. 检查Trig/Echo接线,换一个传感器测试。 4. 检查 NewPing sonar(trig, echo, MAX_DISTANCE) 中的 MAX_DISTANCE 值是否足够大。 |
| 舞蹈动作不流畅、卡顿 | 1. 电源功率在动作序列中持续不足。 2. 机械结构有干涉,阻力过大。 3. 代码中 delay() 时间太短,舵机未到位就执行下个指令。 |
1. 使用动力电池并确保电量充足。 2. 重新检查组装,润滑关节(如使用石墨粉或特氟龙喷雾)。 3. 适当增加���键动作之间的 delay ,或使用 while 循环等待舵机到位(需配合反馈信号,SG90无此功能,故主要靠延时)。 |
| 只有部分舵机能动 | 1. 某个舵机信号线断路或短路。 2. Arduino某个引脚损坏。 3. 软件上未正确 attach 该舵机对象。 |
1. 交换故障舵机和正常舵机的信号线,判断是舵机问题还是引脚问题。 2. 检查代码中 servo.attach(pin) 的引脚号是否正确。 |
| 机器人站立不稳 | 1. 重心太高。 2. 脚部与地面接触面积小、摩擦力不足。 3. 初始姿态(静止状态)的舵机角度未调平。 |
1. 尝试降低躯干高度或在底盘增加配重(如硬币)。 2. 在脚底粘贴橡胶垫或毛毡。 3. 在 setup() 中精细调整每个舵机的初始角度,使机器人静态时能稳定站立。 |
6.4 性能与功能优化建议
- 增加动作平滑性 :
Servo.write()是让舵机“跳”到目标角度。可以使用Servo.writeMicroseconds()进行更精细的控制,或者自己编写缓动函数,让角度值逐渐变化,使动作更柔和。 - 引入随机性 :让舞蹈动作每次都有些许不同,会更生动。可以在
dance()函数中,为某些动作的角度或延时加入小的随机变量random(-10, 10)。 - 添加视觉反馈 :在机器人头部加一个LED。距离近时亮红灯(紧张),距离远时亮绿灯(放松),跳舞时闪烁彩虹灯。
- 改善电源管理 :增加一个开关。在长时间不玩时,彻底断开电池,防止电池漏液或过放。
- 外壳美化 :3D打印完成后,可以用砂纸打磨,喷上底漆和色漆,贴上眼睛等装饰,让你的Shybot拥有独一无二的外观。
调试机器人是一个需要耐心和观察力的过程。从最基础的电源和信号开始排查,利用好串口监视器这个“眼睛”,将复杂问题分解为一个个小模块进行测试。当你看到Shybot终于因为你的远离而欢快起舞时,那种成就感,正是创客项目最迷人的地方。
更多推荐


所有评论(0)