基于Arduino的线性循迹小车

简介: 基于Arduino的线性循迹小车

一、项目说明

我很高兴能分享我的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.


注意:本博文为不得在未经本人同意进行转载或者二次创作,违者必究!!!


目录
相关文章
|
云栖大会 开发者
收到阿里云【乘风者计划】博主证书和奖励
收到阿里云【乘风者计划】博主证书和奖励 2023年2月对我来说是一个很好的开端,因为我在1号就收到了阿里云寄给我的【乘风者计划】博主证书和奖励。好兆头啊! 我收到的是我获得的【技术博主】【星级博主】【专家博主】三个的奖品和证书,一快给我寄过来哒!
2743 2
收到阿里云【乘风者计划】博主证书和奖励
|
1天前
|
传感器 算法 IDE
基于Arduino的遥控自平衡小车
基于Arduino的遥控自平衡小车
51 41
|
1天前
|
安全 物联网 数据安全/隐私保护
基于STM32的智能门锁
基于STM32的智能门锁
51 41
|
1天前
|
传感器 存储 监控
基于Arduino的自动雨棚洗衣晾衣架
基于Arduino的自动雨棚洗衣晾衣架
54 41
|
5月前
|
传感器 监控 UED
基于STM32的智能停车场管理系统设计与实现
基于STM32的智能停车场管理系统设计与实现
317 1
|
1天前
|
网络协议 网络安全 网络虚拟化
HCIP-Datacom H12-821 题库 (3)
HCIP-Datacom H12-821 题库 (3)
HCIP-Datacom H12-821 题库 (3)
|
1天前
二叉树的深度、路径总和、将有序数组转换为二叉搜索树、二叉搜索树迭代器(2022/02/23)
二叉树的深度、路径总和、将有序数组转换为二叉搜索树、二叉搜索树迭代器(2022/02/23)
5 0
|
1天前
|
传感器 数据采集 定位技术
基于STM32的智能手环设计与实现(下)
基于STM32的智能手环设计与实现(下)
5 0
|
1天前
|
传感器 存储 编解码
基于STM32的智能手环wifi连接手机APP(上)
基于STM32的智能手环wifi连接手机APP(上)
8 0
|
1天前
|
传感器 测试技术 芯片
基于STM32的环境监测系统 (esp8266)(上)
基于STM32的环境监测系统 (esp8266)(上)
6 0