首页

如何制作Arduino跟随机器人?

“跟随线机器人”,顾名思义,是一种自动引导的交通工具,它沿着嵌入在地板或天花板上的视觉线前进。通常,视觉线是跟随线的机器人所走的路径,它将是白色表面上的黑线,但另一种方式(黑色表面上的白线)也是可能的。某些先进的跟随线机器人使用不可见的磁场作为路径。

大型跟随机器人通常用于工业辅助自动化生产过程。它们也被用于军事应用,人类援助目的,送货服务等。

跟随机器人是第一个机器人,初学者和学生将获得他们的第一个机器人经验。在这个项目中,我们使用Arduino和其他一些组件设计了一个简单的跟随线机器人。

线路图

Arduino跟随线机器人电路

组件的要求

  • Arduino UNO(或Arduino Nano) [在这里买
  • L293D电机驱动IC [在这里买
  • 减速电机x 2
  • 机器人底盘
  • 红外传感器模块x 2
  • 黑色胶带(绝缘胶带)
  • 连接电线
  • 电力供应
  • 电池连接器
  • 电池座

请注意:我们使用了一个预建的红外传感器模块,由一个红外LED和一个光电二极管组成。如果您没有,我们已经解释了如何自己构建一个。

项目框图

本项目搭建的跟随线机器人分为4块。下图是跟随线机器人的框图。

框图描述

传感器(红外传感器):本项目采用红外传感器模块作为线路检测传感器。它由红外LED、光电二极管和比较器、LED等组成。

红外传感器模块

如前所述,我们使用了预组装的红外传感器。如果你没有,你可以使用下面的电路制作你自己的传感器。

红外传感器电路

红外传感器在本项目中的工作及其范围将在跟随线机器人的实际工作中进行说明。

控制器(Arduino UNO): Arduino UNO是本项目的主控制器。来自传感器(IR传感器)的数据将给Arduino,它将给电机驱动IC相应的信号。

汽车司机(L293D):本项目采用L293D电机驱动IC驱动机器人的电机。它根据红外传感器的信息接收Arduino发出的信号。

请注意:电机的电源必须由电机驱动IC提供。因此,应选择适当的电源,以满足包括电机在内的所有组件的需求。

汽车(齿轮减速电机)我们在跟随线机器人的尾部使用了两个齿轮传动电机。这些电机提供比普通电机更大的扭矩,也可以用于承载一些负载。

齿轮减速电机

Arduino跟随线机器人的工作

在这个项目中,我们设计了一个基于Arduino的跟随机器人。该项目的工作非常简单:检测表面上的黑线,并沿着这条线移动。具体工作在此进行说明。

如框图中所述,我们需要传感器来检测线路。在线路检测逻辑上,我们使用了两个红外传感器,由红外LED和光电二极管组成。它们以反射的方式放置,即并排放置,以便当它们靠近反射表面时,红外LED发出的光将被光电二极管检测到。

下图显示了一个典型的红外传感器(红外LED -光电二极管对)在一个浅色表面和一个黑色表面前的工作。由于浅色表面的反射率高,红外LED发出的红外光会被最大程度的反射,并被光电二极管检测到。

红外传感器工作

如果是黑色表面,反射率低,光被黑色表面完全吸收,无法到达光电二极管。

使用同样的原理,我们将在跟随线机器人上设置红外传感器,使两个红外传感器位于地板上黑线的两侧。设置如下所示。

直线跟随器中的红外传感器

当机器人向前移动时,两个传感器都在等待线被检测到。例如,如果上图中的IR Sensor 1检测到黑线,就意味着前面有一个正确的弯道(或转弯)。

Arduino UNO检测到这一变化,并向电机驱动器发送相应的信号。为了向右转,机器人右侧的电机通过PWM进行减速,左侧的电机则以正常速度运行。

红外传感器在跟随线左右
同样,当红外传感器2首先检测到黑线时,意味着前方有一个向左的弯道,机器人必须向左转弯。当机器人左转时,将机器人左侧的电机减速(或可完全停止或可反方向旋转),将右侧的电机以正常速度运行。

Arduino UNO连续监测来自两个传感器的数据,并根据它们检测到的线路转动机器人。

代码


请注意

  • 为了提高黑线检测的效率,可以增加传感器的数量。一个传感器阵列将比两个传感器更精确。
  • 在这个项目中(使用两个传感器),传感器的定位非常重要。黑线的宽度在传感器的位置上起着重要作用。
  • 检测线路的传感器也可以使用LED和LDR对构建。

跟随线机器人的应用

  • 跟随机器人通常用于工业自动化过程,军事应用和消费应用。
  • 它们非常有用,因为它们可以在没有任何监督的情况下工作,即它们作为自动引导的车辆工作。
  • 随着其他功能,如障碍物回避和其他安全措施,线跟随机器人可以用于无人驾驶的汽车。

制作和输出视频

当机器人的运动被赋予高优先级时,这是一个启动套件。它遵循视觉路径,一些先进的线跟随机器人使用一个看不见的磁场作为他们的路径。

正如你们所知,机器人在军事、工业和家庭等领域的应用需求很大。我们提供了Arduino机器人套件这满足了你所有的欲望。看看这些Arduino机器人套件,它们的应用范围很广,价格也很低。

如果你有任何疑问,请在下面的评论区与我们分享。我们很高兴能迅速作出反应。

推荐阅读:

80年响应

  1. 在代码中,左和右被设置为输入引脚,但是您在下一行写入它们。这可能吗?如果是,为什么?

    1. 大家好,如果仔细观察,首先是Arduino的实际引脚(13和12),它们是小写的。第二个左和右是整数变量,L和R是大写的,对应的单词。

    1. 嗨,如果两个传感器(同时)检测到一条黑线,我们正在停止机器人。你可以在视频中注意到,在路径的末端,我们在路径上画了一条粗线。如果你想让你的机器人停在任何想要的位置(在路径上),你可能会使用GPS系统。遥控机器人是个好主意。

  2. 如果我把IR引脚连接到arduino上的模拟引脚,而不是连接到PWM引脚,会有什么不同吗?

  3. 我想线跟随障碍检测器,这是它必须我停止时,一个对象被检测到,当对象删除了它将继续线PLZZ帮助我与代码和硬件连接

    1. 你好,乔凡尼,

      红外(Ir)传感器有黑色或白色条纹。不同的是,白色发送红外线,而黑色不,这取决于你的选择,以你想要的方式编程。

  4. 谢谢foг youг maco.velous poon.ting !其实我很喜欢读它,
    你可能会成为一个伟大的作家。我一定会把你的博客收藏起来
    会来bacқ从现在开始。我想鼓励你᧐继续你的伟大
    祝你周末愉快!

  5. 嘿,谢谢你的这篇文章,但是你能把你使用的马达和红外传感器链接给我吗?那很有帮助。我要建立在这个模板,我想知道使用的部分,因为有只是如此dag上许多。

    谢谢!

  6. 嗨,跟随你的教程,但我的马达旋转时,传感器是黑色的表面,但停止时,他们是白色的。视频显示,当检测到两个传感器上的黑色时,马达就会停止。基本上,我有一个白线追随者。我应该修改代码的哪一部分。我难住了。谢谢你的指导。

  7. 我该如何让机器人记住正确的路径,以便当我让它再次在同一条线上移动时,它只会沿着正确的方向移动,而不会像第一次运行时那样拐错弯。

  8. 我想写一个程序的线跟随机器人使用大型aurdino
    使用四个电机
    给我的建议

  9. 我可以在本教程中使用步进电机吗?如果是这样,我可以使用ULN2003步进电机驱动板1PC作为电机驱动板吗?我是Arduino的新手,如果这些问题很明显,我很抱歉

    1. 电机的供电是通过电机驱动器提供的。对于L293D, Vcc2 (Pin 8)为电机供电引脚。根据电机的额定电压,将电机电源的正极连接到此引脚。将负极连接到GND。

      1. 它在黑色表面上移动,在白色表面上停止,所以基本上它是一个白线追随者,我想改变它。我怎么做?

  10. 你做的最后一件事是什么?
    arduino黑色部分与电机驱动器的连接?
    我不能理解.....请帮我…
    程序没有安装到arduino板上…这说明上传到arduino板....有问题
    我该怎么办??
    这是一个请求,请帮助我!!!!!!!

  11. 你好
    我使用4个直流电动机和一种电机驱动套件,它直接装配在Arduino板上,没有任何电线。我不干活,它就使人没有反应。

  12. 嗨,我已经做了这个机器人与4和5红外传感器。但是我的机器人在沿着直线快速移动时效率不高。我的硬件工作良好,但我的代码的逻辑是不高效的。你能分享任何使用4或5个传感器的代码,让机器人快速移动吗?
    谢谢。

  13. 借助你的文章,我做了一个跟踪者。但在我的情况下,我必须保持在黑线上的红外,然后只有马达旋转。第二件事,电机不会在垂直线上停止,只有在亮颜色时才会停止,甚至不会转弯,我想这是电机转速的原因,那么如何调整电机转速呢?

  14. 在视频中,L293D在一块板子上。我在哪里可以得到L293D所在的板配置图?
    还是说董事会没那么必要?

    1. 我从当地一家电器商店买的。你可以在亚马逊或易趣上找到一个(类似的,如果不是一模一样的话)。

  15. 嗨。有人能纠正我的代码吗
    //将电机驱动GND引脚连接到Arduino接地引脚
    //将eh电机驱动器+12V引脚连接到Arduino Vin引脚

    //将电机控制器引脚连接到Arduino数字引脚

    / /离开汽车
    int enLeft = 5;
    Int in1 = 6;
    Int in2 = 7;

    / /右运动
    Int in3 = 8;
    Int in4 = 9;
    int enRight = 10;

    / / LightSensor
    int LightRight = 4;
    int LightLeft = 3;

    / / Ultasound传感器
    int echoPin = 11;
    int trigPin = 12;
    双量程();
    void goMotors(int, int, int, int);

    无效的设置()

    //设置所有电机控制引脚为输出
    pinMode (enLeft、输出);
    pinMode (enRight、输出);
    pinMode(三机一体、输出);
    pinMode (in2、输出);
    pinMode (in3、输出);
    pinMode (in4、输出);
    pinMode (trigPin、输出);
    pinMode (echoPin、输入);

    无效循环()

    //如果能感知到反射光,则光传感器是打开的
    //如果背景是黑色,没有反射,则关闭
    //当背景是白色的时候,它在上面有一个反射。

    如果(digitalRead (LightRight) = =低& & digitalRead (LightLeft) = =低)

    //如果有黑线停止
    goMotors (enLeft,三机一体、in2 00);
    goMotors (enRight, in3 in4, 00);

    else if (digitalRead(LightRight)==LOW && digitalRead(LightLeft)==HIGH)

    //如果没有黑线停止
    goMotors (enLeft in1, in2, -100);
    goMotors (enRight, in3 in4, 00);

    else if (digitalRead(LightRight)==HIGH && digitalRead(LightLeft)==LOW)

    goMotors (enLeft,三机一体、in2 00);
    goMotors (enRight, in3 in4 -100);

    else if(digitalRead(LightRight)==HIGH && digitalRead(LightLeft)==HIGH)

    //如果没有黑线移动
    goMotors (enLeft in1, in2, -100);
    goMotors (enRight, in3 in4 -100);

    //障碍物探测机器人的Arduino IDE代码

    Const int trig = 12;

    Const int echo = 11;

    长时间,英寸,厘米;

    无效的设置()

    Serial.begin (9600);

    pinMode(三角、输出);

    pinMode(呼应,输入);

    pinMode (goMotors enLeft、输出);

    pinMode (goMotors enRIGHT,输出);

    无效循环()

    digitalWrite(三角、低);

    delayMicroseconds (2);

    digitalWrite(三角、高);

    delayMicroseconds (5);

    digitalWrite(三角、低);

    duration = pulseIn(echo, HIGH);

    //返回所花费的时间

    //超声波撞击障碍物并返回

    英寸= duration / 74 / 2;//将时间转换为英寸

    Cm = duration / 29 / 2;//将持续时间转换为Cm

    If (cm>15)//检查距离是否大于15cm

    //如果条件为真,电机向前移动

    //两个电机都在运动

    digitalWrite (goMotors enRight,高);

    系列。打印(“没有检测到障碍”);

    其他的

    //机器人在检测到障碍物时向左转弯

    digitalWrite(goMotors enRight,HIGH);//右电机ON状态

    digitalWrite(goMotors enLeft,LOW);//左侧电机为OFF

    系列。打印(“障碍检测”);

    Delay(100);//延迟100毫秒

    Delay(100);//将代码延迟0.1秒并再次重复循环

  16. 您还没有在void setup.....中将传感器引脚初始化为INPUT

    这可能会导致Arduino在声明的引脚中没有接收到任何信号

  17. Arduino控制器是开源控制器,它对所有项目都非常有用。开源控制器用于实时应用程序。

  18. 你能详细解释一下,在检测到线路后,红外传感器的信息是如何传递到车轮的吗

    1. 红外传感器的信息被发送到arduino。arduino然后根据传感器的信息向L293D发送信号。然后L293D根据arduino给它的信号驱动电机。例如,如果传感器检测到右转信号将发送给arduino,然后arduino将告诉L293D减慢右边的电机,加快左边的,因此机器人将右转。

  19. Tinotenda -建议你为你的函数“goMotors”查找Arduino函数的语法。它需要在循环()中定义和调用。

    / / Ultasound传感器
    int echoPin = 11;
    int trigPin = 12;
    双量程();
    void goMotors(int, int, int, int);

  20. 请谁能给我代码行跟踪机器人使用8阵列红外和使用pid和pwd在程序的准确性,请给我8阵列红外的代码,以便我可以更好的方式,请。

  21. 我的传感器实际上给出了相反的输出…我的意思是在黑色上,它给出的输出是1而不是0,所以我应该在这段代码中为适当的转弯做什么改变

  22. 惠,我能问吗?如果我把虚拟终端和逻辑状态?我可以用什么程序?你能告诉我吗?
    我需要它来显示它是向前移动,还是向左转,还是向右转,然后停下来

留下一个回复

您的电邮地址将不会公布。

Electronicshub图标
Baidu
map