基于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.


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


目录
相关文章
|
25天前
|
传感器 算法 IDE
基于Arduino的遥控自平衡小车
基于Arduino的遥控自平衡小车
71 41
|
6月前
|
传感器
51单片机循迹小车原理介绍和代码示例
51单片机循迹小车原理介绍和代码示例
51单片机循迹小车原理介绍和代码示例
|
6月前
|
Go 异构计算 Windows
LabVIEW由三角波产生PWM
LabVIEW由三角波产生PWM
55 2
基于三相坐标系状态方程的感应电动机起动动态计算(Matlab代码实现)
基于三相坐标系状态方程的感应电动机起动动态计算(Matlab代码实现)
|
6月前
|
人工智能 测试技术
弹簧板问题~
弹簧板问题~
337 0
|
传感器
反相放大电路的介绍
一、反相放大电路的原理 反相放大电路是基于放大器的输入端和输出端之间的差动运算实现的。它的基本原理是将输入信号通过电阻网络输入到放大器的反相输入端,经过放大后,再输出到放大器的输出端。放大器的作用是将输入信号放大,并输出其相反的信号。 二、反相放大电路的特点 1. 放大倍数可调:反相放大电路可以通过调整电阻值来改变放大倍数,满足不同应用场景的需求。 2. 相位反转:反相放大电路可以将输入信号进行相位反转,输出其相反的信号,适用于需要反向控制或反向操作的应用。 3. 简单实用:反相放大电路的结构简单,易于实现和调试,成本较低。 4. 高稳定性:反相放大电路具有较高的稳定性和线性度,能够准确地放大
296 1
|
11月前
反馈放大电路与功率放大电路(模电速成)
反馈放大电路与功率放大电路(模电速成)
124 0
双极结型三极管及其放大电路
双极结型三极管(Bipolar Junction Transistor,简称BJT)是一种三端器件,由发射极、基极和集电极组成。它的工作原理是利用基极电流控制集电极-发射极电流,从而实现信号的放大和开关控制。
116 0