一、项目说明
我很高兴能分享我的PID线跟踪机器人,它设计有7个红外传感器,能够以高达2米/秒的速度精确跟踪任何线条。我建造这个机器人是为了参加一个全国性的大学间竞赛,在竞赛中它展示了速度和准确性。虽然这个设计已经被证明是有效的,但总有改进的空间。现在,我将提供给你创建你自己版本的步骤,让你的机器人技能提升到下一个水平。无论你是想参加竞赛还是仅仅想挑战你的工程能力极限,这个项目都是一个很好的方式,可以挑战自己并展示你的才华。
实物图:
二、项目材料
- Arduino Mega(或任何兼容的微控制器)
- 直流电机 × 2(我重新利用了玩具电机,但任何合适的直流电机都可以)
- 红外反射传感器TCRT5000 × 7(也可以使用其他红外传感器)
- 用于所有连接的跳线
- 3D打印机用于定制零件
- 电机驱动器L298N(或任何兼容的电机驱动器)
- 热熔胶用于固定组件
- 7V+电源(我使用了两个3.7V的锂聚合物电池)
三、3D打印
下载3D模型文件
准备3D打印机
- 检查打印机设置:确保你的3D打印机已经设置好,并准备好了合适的材料丝(例如,PLA或ABS)。
- 预热打印机:将打印机预热到适合你选择的材料丝的正确温度。
将文件加载到切片软件中 - 导入模型:打开你的切片软件(例如,Cura,PrusaSlicer)并导入车身部件文件。
- 排列模型:在打印床上最优地定位车身部件,以最大化空间利用。
配置打印设置 - 设置层高:选择一个平衡速度和细节的层高(例如,0.2mm)。
- 调整填充密度:根据你期望的强度和材料使用量设置填充百分比(20-30%)。
- 禁用支撑:不需要支撑。
开始3D打印 - 开始打印:一旦一切设置好,就开始打印过程。监控前几层以确保适当的附着和打印质量。
四、器件装配
4.1 拆卸玩具:
- 提取电机和轮子:首先小心地拆开玩具车。你的目标是取出电机和轮子,同时不要损坏它们。
- 工具:使用小螺丝刀或撬棍拆卸玩具。如果必要,可以用锋利的刀片或小锯子切除电机周围的塑料外壳,小心不要损坏电机或其线路。
- 标记电线:如果电机上有连接的电线,标记它们以确保稍后正确重新连接。
4.2 准备主体:
- 标记电机位置:在固定任何东西之前,标记电机和轮子将被放置的位置,以确保正确的对齐。
4.3 固定电机和轮子:
- 涂胶:在电机支架周围大量涂抹热熔胶,并将它们压在主体上。握住它们直到胶水凝固。确保电机对齐,以便轮子彼此平行。
- 电线间隙:当你定位电机时,确保有足够的空间让电线穿过主体而不会被挤压或拉伸。你可能需要在主体上的小凹槽或孔中传递它们,以安全地布线。
4.4 固定前部:
- 前部位置较低:通常装有传感器的机器人前部应该比主体稍低。这种设置提高了离地间隙,使传感器更接近表面,更有效地检测线条。
- 使用垫片:如果需要,使用物体或垫片在前部和主体之间实现所需的高度。这可以是一块塑料或木头。
- 胶合到位:用热熔胶固定前部,确保它牢固地连接并且正确地倾斜。再次检查传感器安装点是否水平,并且传感器将有不受阻碍的视图。
4.5 传感器安装:
- 定位传感器:将传感器放置在前部,将它们排列成一条直线或稍微倾斜,以提高在曲线上的检测精度。
- 用胶固定:使用热熔胶将传感器固定到位。确保它们牢固地连接,但避免过多的胶水可能干扰它们的操作。
- 检查对齐:胶合后,检查所有传感器是否对齐并且相对于地面处于同一高度。如有必要,在胶水凝固前进行调整。
4.6 使用3D模型作为指南:
- 按照3D模型:在组装过程中使用机器人的3D模型作为参考。该模型将有助于确保所有组件正确定位,并且机器人的结构平衡。
- 检查尺寸:将实物组装与3D模型进行比较,特别关注电机、轮子和传感器等组件的间距和对齐。
- 根据需要调整:如果组装的机器人与3D模型不同,请进行必要的调整以符合设计规范。
4.7 最终检查和调整:
- 测试机械装置:在完成组装之前,手动旋转轮子以确保它们自由旋转并且没有被主体或线路阻碍。
- 线路管理:整齐地布置所有线路,如果需要,用小扎带或额外的胶水固定。这可以防止它们缠绕或卡在移动部件中。
- 组件稳定性:确保所有用胶水固定的组件稳定且安全。如果任何部分感觉松动,可以重新涂抹胶水。
4.8 电源和电子设备:
- 连接电子设备:一旦机械组装完成,将电机连接到电机驱动器,将传感器连接到控制板,并连接电源。
- 通过遵循这些步骤并使用3D模型作为指南,你将确保你的机器人结构良好,所有组件正确对齐并且牢固地连接。这种方法将有助于机器人高效地跟随线条,提高其性能。
五、连线
接线步骤:
5.1 将电机驱动器连接到电机:
电机1:
- 将电机1的一个端子连接到电机驱动器上的OUT1引脚。
- 将电机1的另一个端子连接到电机驱动器上的OUT2引脚。
电机2:
- 将电机2的一个端子连接到电机驱动器上的OUT3引脚。
- 将电机2的另一个端子连接到电机驱动器上的OUT4引脚。
5.2 将电机驱动器连接到Arduino:
电机1控制(ENA和IN引脚):
- 将电机驱动器上的ENA连接到Arduino的3号引脚。
- 将电机驱动器上的IN1连接到Arduino的15号引脚。
- 将电机驱动器上的IN2连接到Arduino的17号引脚。
电机2控制(ENB和IN引脚):
- 将电机驱动器上的ENB连接到Arduino的2号引脚。
- 将电机驱动器上的IN3连接到Arduino的18号引脚。
- 将电机驱动器上的IN4连接到Arduino的19号引脚。
5.3 电源连接:
电池:
- 将9V电池的正极连接到电机驱动器上的VCC引脚。
- 将9V电池的负极连接到电机驱动器上的GND引脚。
电机驱动器电源:
- 将电机驱动器上的GND引脚连接到Arduino上的GND引脚。
5.4 将线路传感器连接到Arduino:
传感器阵列(5个传感器):
- 将每个传感器的OUT引脚连接到Arduino上的以下模拟引脚:
- 传感器1(最左边):A0
- 传感器2:A1
- 传感器3(中间):A2
- 传感器4:A3
- 传感器5(最右边):A4
- 将每个传感器的VCC引脚连接到Arduino的5V引脚。
- 将每个传感器的GND引脚连接到Arduino的GND引脚。
前部传感器:
- 将前部传感器的OUT引脚连接到Arduino的A5引脚。
- 如传感器阵列所述连接VCC和GND引脚。
后部传感器:
- 将后部传感器的OUT引脚连接到Arduino的A6引脚。
- 类似地连接VCC和GND引脚。
5.5 额外的数字传感器:
右侧传感器:
- 将右侧传感器的OUT引脚连接到Arduino的数字引脚24。
左侧传感器:
- 将左侧传感器的OUT引脚连接到Arduino的数字引脚22。
- 使用Arduino的5V和GND连接为传感器供电。
最终检查:
- 确保所有连接都牢固:再次检查每根电线是否正确连接,以及引脚是否对应代码中正确的分配。
- 测试接线:在运行完整代码之前,验证每个电机是否对控制输入有响应,以及传感器是否提供预期的信号。
六、烧录程序和测试
代码解释:
设置和初始化:
- 电机控制引脚:电机驱动器通过特定的引脚(ENA, IN1, IN2, ENB, IN3, IN4)控制电机。
- 传感器引脚:使用七个传感器来检测线条和周围环境(sensorPins[5], f, b, r, l)。
- PID常数:这些值(Kp, Kd, Ki)用于微调机器人的移动,确保它能够准确跟随线条。根据你的机器人行为更改它。
- 变量:初始化几个变量来存储传感器读数、PID误差计算和电机速度。
- 校准:
calibrate()函数使机器人在圆形路径上运行,以检测传感器的最小值和最大值,确定线条检测的阈值。
主循环:
- 初始校准和移动:一旦机器人校准完毕,它将稍微转向以与线条对齐,然后开始向前移动。
- 传感器读数:机器人持续读取传感器以确定线条的位置。
- PID计算:计算期望位置和实际位置之间的误差。PID控制器使用这个误差来调整电机的速度(leftSpeed, rightSpeed),以保持机器人在线条上。
- 移动逻辑:根据传感器输入:
- 向前:如果机器人在轨道上,它就向前移动。
- 转弯:如果机器人检测到转弯,它会相应地调整方向(左或右)。
- 特殊情况:还有一些处理复杂情况的条款,例如急转弯或U形转弯,但有些被注释掉了。
函数
- 移动函数(forward, turnRight, turnLeft):这些根据需要的速度和方向控制电机。
- 误差计算(calculateError):通过平均传感器值来计算误差,以保持机器人在线条中心。
在将代码上传到你的线跟踪机器人后,测试和根据机器人在现实世界条件下的行为微调代码至关重要。
6.1 初始测试
一旦代码上传完成,观察机器人跟随线条的行为:
机器人是否保持在线条上?检查机器人是否沿着线条保持一致的路径。
移动是否平滑?注意机器人是否颠簸或是否平滑地跟随线条的曲线。
速度与控制:评估机器人是否能够在不失去线条跟踪的情况下保持速度。
6.2 分析行为
根据你的观察,你可以识别可能需要调整的区域:
过度射击或不足射击转弯:如果机器人过度射击或不足射击转弯,PID常数(Kp, Ki, Kd)可能需要调整。
振荡:如果机器人在跟随直线时摆动或振荡,可能是由于Kd值。降低Kd可能有助于减少这种效果。
响应慢:如果机器人纠正路径的速度太慢,增加Kp可以使机器人更灵敏。
6.3 微调PID常数
比例控制(Kp):首先调整Kp。这控制机器人对误差的反应有多积极。如果Kp太高,机器人可能会振荡或变得不稳定。如果太低,机器人可能太迟钝。
积分控制(Ki):微调Ki以解决机器人持续偏离线条的稳态误差。要小心,因为Ki太高可能导致机器人过度校正和振荡。
微分控制(Kd):Kd有助于通过预测未来误差来抑制振荡。如果你的机器人在跟随曲线时太抖动或振荡,请调整这个值。
6.4 调整阈值
在测试过程中,如果机器人难以正确检测线条,重新审视在calibrate()函数中设置的阈值。你可能需要在不同的光照条件下多次运行校准,以确保可靠的检测。
6.5 现实世界测试
轨道复杂性:在不同复杂性的轨道上测试机器人——急转弯、交叉口或不同线条宽度。这将有助于确保机器人在各种情况下表现良好。
速度调整:如果机器人在较低速度下表现良好,但在较高速度下挣扎,你可能需要调整电机速度或进一步细化PID常数。
环境因素:在不同的光照条件和表面纹理下测试,以确保机器人能够一致地检测线条并相应地调整其路径。
6.6 迭代和改进
记录更改:跟踪你对PID常数、阈值和其他参数所做的更改。这将帮助你了解哪些调整可以带来更好的性能。
迭代:测试和调整应该是一个迭代过程。每次调整后,重新测试机器人并根据需要进行改进。
硬件考虑:如果尽管进行了代码调整,机器人仍然挣扎,考虑是否需要硬件更改(如重新定位传感器或调整电机功率)。
6.7 最终优化
一旦机器人以期望的速度和准确性一致地跟随线条,你可以最终确定代码。
在不同的环境和各种轨道布局中测试机器人,以确保它为比赛做好准备。
6.8 准备应对意外
在比赛中总是要预料到意外。如果轨道条件与你测试的环境不同,准备进行快速调整。
希望你喜欢这个项目,并在构建过程中找到乐趣!如果你有任何问题或需要帮助,欢迎在评论区交流。
作者:Svan.
注意:本博文为不得在未经本人同意进行转载或者二次创作,违者必究!!!