使用Arduino Uno构建一个巡线机器人

原文

MX

巡线机器人(**LFR)**是一种简单的自主引导机器人,它遵循在地面上绘制的线来检测白色表面上的暗线或黑暗表面上的白线。在本教程中,使用 Arduino Uno 和一些易于访问的组件构建黑线跟随机器人。

巡线机器人的原理

如前所述,巡线机器人(LFR)跟随一条线,为了跟随一条线,机器人必须首先检测这条线。现在的问题是如何在LFR中实现线路检测机制。我们都知道,光在白色表面上的反射最大,在黑色表面上最小,因为黑色表面吸收的光量最大。因此,我们将使用光的这种特性来检测线。为了检测光,可以使用LDR(光相关电阻)或红外传感器。对于这个项目,我们将使用红外传感器,因为它的精度更高。为了检测生产线,我们使用两个红外传感器,一个放置在机器人的左侧,另一个位于机器人的右侧,如下图所示。然后,我们将机器人放在生产线上,使生产线位于两个传感器的中间。我们已经介绍了详细的Arduino IR传感器教程,您可以查看该教程以了解有关Arduino Uno红外传感器工作的更多信息。

红外传感器由两个元件组成,发射器和接收器。发射器基本上是一个红外LED,它产生信号,红外接收器是一个光电二极管,它感测发射器产生的信号。红外传感器在物体上发射红外光,击中黑色部分的光被吸收,从而产生低输出,但击中白色部分的光反射回发射器,然后由红外接收器检测到,从而提供模拟输出。使用所述原理,我们通过驱动连接到电机的轮子来控制机器人的运动,电机由微控制器控制。

巡线器机器人如何导航?

一个典型的巡线机器人有两组电机,我们称它们为左电机和右电机。两个电机分别根据从左侧和右侧传感器接收到的信号旋转。机器人需要执行 4 组运动,包括向前移动、向左转、向右转和停止。下面对这些案例进行了描述。

向前移动

在这种情况下,当两个传感器都在白色表面上并且线位于两个传感器之间时,机器人应该向前移动,即两个电机都应该旋转,使机器人向前移动(实际上两个电机都应该以相反的方向旋转,因为电机在我们的设置中放置了。但为了简单起见,我们将电机称为向前旋转。

左转:

在这种情况下,左侧传感器位于暗线顶部,而右侧传感器位于白色部分,因此左侧传感器检测到黑线并向微控制器发出信号。由于信号来自左侧传感器,因此机器人应转向左侧方向。因此,左电机向后旋转,右电机向前旋转。因此,机器人转向左侧。

右转:

这种情况类似于左情况,但在这种情况下,只有右传感器检测到线,这意味着机器人应该向正确的方向转动。为了使机器人朝右方向转动,左电机向前旋转,右电机向后旋转,结果机器人转向右方向。

停止:

在这种情况下,两个传感器都位于线路顶部,它们可以同时检测黑线,微控制器被馈送以将这种情况视为停止过程。因此,两个电机都停止了,这导致机器人停止移动。

制造Arduino线跟随机器人所需的组件

  1. Arduino Uno - 1Nos
  2. L293D 电机驱动板 - 1 Nos
  3. 红外传感器模块 -2 Nos
  4. 7.4 或 9V 电池 -1 Nos
  5. BO 电机 - 2 Nos
  6. 电机轮(Motor wheel ) - 2 Nos
  7. 脚轮(Castor wheel) - 1 Nos
  8. 机器人底盘(robot chassis) - 1 Nos
  9. 电线(Wires)
  10. 螺 杆(Screw)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2JyuvlMG-1678253327877)(null)]

电路图和组装基于 Arduino 的巡线器机器人

该电路主要由四部分组成:两个红外传感器,一个电机驱动板,两个电机,一个Arduino,一个电池和几根连接线。传感器检测从表面反射的红外光,并将输出馈送到板载运算放大器比较器。当传感器位于白色背景上时,传感器发出的光被白色地面反射并被接收器接收。但是当传感器位于黑色背景上方时,来自光源的光线不会反射到它身上。传感器感根据反射光的强度以提供输出。传感器的输出被馈送到微控制器,微控制器向电机驱动板发出命令,以相应地驱动电机。在我们的项目中,Arduino Uno使机器人向前移动,向右或向左转,并根据来自传感器的输入停止。Arduino的输出被馈送到电机驱动板。

为什么我们需要电机驱动板?

这里使用电机驱动板的原因是因为 Arduino 的输出信号不足以驱动电机,此外,我们需要在两个方向上旋转电机,因此我们使用电机驱动板根据需要驱动电机,并且电机驱动板能够提供足够的电流来驱动电机。在这里,我们使用L293D电机驱动板,这是一个双h桥电机驱动板,足以满足我们的2个电机的需求。

L293D 有 16 个引脚,L293D 的引脚排列如下图所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9GC9eTfR-1678253329173)(null)]

电机驱动板引脚的连接如下:

引脚 1 和 9 是使能引脚,我们将这两个引脚连接到 5v 输入以启用电机。

引脚编号 1A、2A、3A 和 4A 是控制引脚。

例如。如果引脚 1A 变低而 2A 变高,电机将向右转动,如果 1A 变低,2A 变高,电机将向左转动。因此,我们将这些引脚连接到解码器的输出引脚。

引脚 1Y、2Y、3Y 和 4Y 是电机连接引脚。

注意:Vcc2 是电机驱动电压引脚,仅在使用高压电机时使用。

Arduino Uno与电机驱动板的引脚连接如下:

在这里,我们使用7.4锂离子电池为整个电路供电。您可以使用 6-12 伏的任何电池类型。为了移动机器人,我们需要使用低转速但扭矩足够高的电机来承载机器人的重量。因此,我为该机器人选择了两个60 RPM 6V电池供电的减速电机。

装配巡线机器人

一旦我们了解了所有组件的连接,我们就可以开始组装我们的LFR。我已经在页面底部提供的视频中解释了机器人的分步组装过程。

要制造这个机器人,首先我们需要一个机器人身体;在这里,我使用的是自制机箱。您可以使用现成的机箱,也可以自己构建一个。

现在,借助一些热胶将BO电机放在机箱上,如下图所示。

下一步是将电机驱动板放在底盘上,并将电机线连接到电机驱动板的输出。

接下来,弯曲红外 LED 和传感器,如图所示。

然后将传感器放在机器人的下侧,根据轨道宽度和机器人宽度调整传感器。请记住,一个传感器用于左侧检测,另一个传感器用于右侧检测。

现在使用胶水放置Arduino uno,并将传感器输出引脚连接到Arduino的数字引脚2和4。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y0akTEwc-1678253328528)(null)]

将 VCC 引脚连接到 5 伏,将接地引脚接地。

现在,将电机驱动板的使能引脚连接到Arduino的引脚5和8,并将电机驱动板输入引脚分别连接到Arduino的引脚6,7,9和10。

最后,将电池与电路连接,并将电池放在机箱上。在这里,我用跳线连接了所有东西。要进行永久设置,您可以直接将所有内容焊接在一起。

现在将电路板倒置,在热胶枪的帮助下,如下图所示安装脚轮。

最后,添加轮子。为了提高安全性,我还添加了塑料板作为保险杠。

Arduino 巡线器机器人代码

巡线机器人的编程部分非常简单,我们只需要基本的Arduino功能。该项目的完整程序可以在本页底部找到。该程序的说明如下:

第一步是定义我们正在使用的每个Arduino引脚。我从驱动驱动板引脚和传感器引脚开始。在这里,我评论了每一行代码,以便您轻松理解。

 #define enA 5 //Enable1 L293 Pin enA#define in1 6 //Motor1  L293 Pin in1#define in2 7 //Motor1  L293 Pin in1#define in3 9 //Motor2  L293Pin in1#define in4 10 //Motor2  L293 Pin in1#define enB 8 //Enable2 L298 Pin enB#define R_S 4 // Right sensor#define L_S 2 // Left sensor

在循环部分中,声明每个引脚的引脚模式。在这里,我们需要读取红外传感器的输出,因此我将这些引脚定义为输入。电机需要由Arduino驱动,因此将电机驱动板引脚定义为输出。最后,我把使能销拉到高。

pinMode(R_S, INPUT);
pinMode(L_S, INPUT);
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(enB, OUTPUT);
digitalWrite(enA, HIGH);
digitalWrite(enB, HIGH);

在回路部分,我们首先读取红外传感器的值,然后根据我们的要求使用“if condition”控制电机的运动。下面解释四种运动条件。

前进:

if((digitalRead(R_S) == 0)&&(digitalRead(L_S) == 0)){forward();}

在这种情况下,如果右传感器和左传感器位于白色之上,则机器人应该向前移动,因此我们调用向前函数。

(注意:这里0表示红外传感器的输出很高,因为传感器在白色表面上)

转向右侧:

if((digitalRead(R_S) == 1)&&(digitalRead(L_S) == 0)){turnRight();}

如果右传感器检测到黑色并且左传感器未检测到任何黑线,则它将调用右函数,通过调用右转函数启动右转的协议。

转向左侧:

 if((digitalRead(R_S) == 0)&&(digitalRead(L_S) == 1)){turnLeft();}

如果右传感器在白色上,而左传感器检测到黑色,那么它将调用 turnLeft 函数。它将启动将机器人向左转动的步骤。

停止机器人:

 if((digitalRead(R_S) == 1)&&(digitalRead(L_S) == 1)){Stop();}

如果右传感器和左传感器为黑色,则它将调用 Stop 函数。在这种情况下,机器人将完全停止。

我们将机器人的 4 个功能定义为前进、左转、右转和停止。执行这些功能的代码如下:

转发功能:

void forward(){
digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH);}

这意味着我们将电机驱动板的输入 1 和 4 拉到高电平,因此,两个电机都将像这样向前移动 我做了其他功能

右转功能:

void turnRight(){
digitalWrite(in1, LOW);  //Right Motor forword Pin
digitalWrite(in2, HIGH); //Right Motor backword Pin
digitalWrite(in3, LOW);  //Left Motor backword Pin
digitalWrite(in4, HIGH); //Left Motor forword Pin}

左转功能:

void turnLeft(){digitalWrite(in1, HIGH); //Right Motor forword PindigitalWrite(in2, LOW);  //Right Motor backword PindigitalWrite(in3, HIGH); //Left Motor backword PindigitalWrite(in4, LOW);  //Left Motor forword Pin}

停止功能:

void Stop(){digitalWrite(in1, LOW); //Right Motor forword Pin
digitalWrite(in2, LOW); //Right Motor backword Pin
digitalWrite(in3, LOW); //Left Motor backword Pin
digitalWrite(in4, LOW); //Left Motor forward Pin

所以,这就是编码的全部内容。现在我们需要将代码上传到Arduino,为此,请使用USB电缆将Arduino与计算机连接,然后使用Arduino IDE上传此代码。

测试和校准

我们已经组装了机器人并上传了代码,所以现在是时候看看它的实际运行了,如果它无法遵循这条线,那么我们将不得不校准机器人。对于首先将机器人放在黑色表面上(两个传感器都应位于黑色表面上),然后调整红外模块的可变电阻,直到红外模块的输出LED熄灭。接下来,将机器人放在白色表面上并检查 LED 是否打开,如果没有,则只需调整可变电阻即可。再次重复该过程,以确保输出 LED 按照要求运行。

现在,既然我们已经校准了机器人,我们需要做的就是将机器人放在黑线的顶部,看看它是如何运作的。

生产线跟随机器人的完整制作可以在本页底部链接的视频中找到。如果您有任何疑问,请在评论部分留下。

代码

// Arduino Line Follower Robot Code
#define enA 5   //Enable1 L293 Pin enA
#define in1 6   //Motor1  L293 Pin in1
#define in2 7   //Motor1  L293 Pin in1
#define in3 9   //Motor2  L293 Pin in1
#define in4 10  //Motor2  L293 Pin in1
#define enB 8   //Enable2 L293 Pin enB
#define R_S 4   //ir sensor Right
#define L_S 2   //ir sensor Left
void setup() {pinMode(R_S, INPUT);pinMode(L_S, INPUT);pinMode(enA, OUTPUT);pinMode(in1, OUTPUT);pinMode(in2, OUTPUT);pinMode(in3, OUTPUT);pinMode(in4, OUTPUT);pinMode(enB, OUTPUT);digitalWrite(enA, HIGH);digitalWrite(enB, HIGH);delay(1000);
}
void loop() {if ((digitalRead(R_S) == 0) && (digitalRead(L_S) == 0)) { forward(); }    //if Right Sensor and Left Sensor are at White color then it will call forword functionif ((digitalRead(R_S) == 1) && (digitalRead(L_S) == 0)) { turnRight(); }  //if Right Sensor is Black and Left Sensor is White then it will call turn Right functionif ((digitalRead(R_S) == 0) && (digitalRead(L_S) == 1)) { turnLeft(); }   //if Right Sensor is White and Left Sensor is Black then it will call turn Left functionif ((digitalRead(R_S) == 1) && (digitalRead(L_S) == 1)) { Stop(); }       //if Right Sensor and Left Sensor are at Black color then it will call Stop function
}
void forward() {            //forworddigitalWrite(in1, HIGH);  //Right Motor forword PindigitalWrite(in2, LOW);   //Right Motor backword PindigitalWrite(in3, LOW);   //Left Motor backword PindigitalWrite(in4, HIGH);  //Left Motor forword Pin
}
void turnRight() {          //turnRightdigitalWrite(in1, LOW);   //Right Motor forword PindigitalWrite(in2, HIGH);  //Right Motor backword PindigitalWrite(in3, LOW);   //Left Motor backword PindigitalWrite(in4, HIGH);  //Left Motor forword Pin
}
void turnLeft() {           //turnLeftdigitalWrite(in1, HIGH);  //Right Motor forword PindigitalWrite(in2, LOW);   //Right Motor backword PindigitalWrite(in3, HIGH);  //Left Motor backword PindigitalWrite(in4, LOW);   //Left Motor forword Pin
}
void Stop() {              //stopdigitalWrite(in1, LOW);  //Right Motor forword PindigitalWrite(in2, LOW);  //Right Motor backword PindigitalWrite(in3, LOW);  //Left Motor backword PindigitalWrite(in4, LOW);  //Left Motor forword Pin
}

使用Arduino Uno构建一个巡线机器人相关推荐

  1. 巡线机器人 - PID控制 - 安卓设置

    巡线机器人 - PID控制 - 安卓设置 原文 该项目的目的是构建具有PID控制的巡线机器人.我们还将使用Android设备轻松设置主要控制参数,以便更好,更快地进行调谐.项目中用到的舵机也可用MG9 ...

  2. 差速巡线机器人设计-及格(60+)的报告-2023

    实践项目名称:差速巡线机器人设计 实验目的 基于差速机器人底盘和传感器,使用微处理器编程实现机器人快速巡线行驶. 差速巡线机器人设计实验的目的是为了探索差速驱动技术在机器人巡线中的应用.通过设计和制作 ...

  3. 蓝桥ROS-差速巡线机器人设计-良好(80+)的报告-复现

    #勤写标兵挑战赛# 参考资料: 蓝桥ROS机器人之v-rep_pro_edu_v3_6_2 差速巡线机器人设计-良好(80+)的报告-2023 这个案例全部在ROS云课中完成. 第一步:安装v-rep ...

  4. 差速巡线机器人设计-满分(100+)的报告-2020

    熟悉我个人博客风格的伙伴们一定知道,博客就是分享,目标明确,学生是所有课程最为重要的核心. 如下是学生完成的博客报告,数据截止到23-03-21: 给100分,只是因为满分就是这么多,饱和了,再高也溢 ...

  5. 差速巡线机器人设计-良好(80+)的报告-2023

    如何提分?将一篇报告提升20分以上呢? 差速巡线机器人设计-及格(60+)的报告-2023_zhangrelay的博客-CSDN博客 姓名: 学号: 实践项目1名称:差速巡线机器人设计 60分:缺乏思 ...

  6. 请用数字灰度传感器和步进电机及A4988控制器和stm32设计一个巡线跑道的范例代码...

    很高兴能帮到您,为了设计一个巡线跑道的范例代码,首先要考虑的是灰度传感器和步进电机的控制电路问题,可以使用A4988控制器和STM32芯片来实现.首先要实现的是灰度传感器和步进电机的连接,然后编写程序 ...

  7. 由简至难可以轻松无障碍自己学习的Arduino套件,学习各种传感器、执行器、电子元件等,制作Arduino小车,可以用来巡线、避障、无线遥控

    套件介绍 很多孩子从来没有接触过机器人,没有编程过(很害怕去接触,觉得很难),电子元件也没有接触过,不知道电阻.电容.二极管等,不知道电路知识! Arduino中级自学套件资料齐全,由浅至深,所有项目 ...

  8. 基于LEGO使用PID算法进行单光巡线机器人设计的心得体会

    高中毕业,高考成绩不错,这一个假期的时间相当富裕,准备静下心来研究PID算法,手边有LEGO EV3机器人,正好是很优秀的实验平台,研究完了以后,在这里谈谈我的感想. 公式: 光感测定值 - OFFS ...

  9. 机器人编程按时巡线_ros机器人编程实践(12.2)- 用turtlebot仿真巡线机器人

    前言 巡线设计 用自定义的图片设计gazebo的地板 首先我们需要设计一个gazebo的地板,这里感谢前辈的回答:参考问答 第一步:在home目录下ctrl+h显示隐藏文件 第二步:在.gazebo文 ...

最新文章

  1. 解读:数据科学、机器学习和AI的区别
  2. 用c语言链表做一个词典,电子字典C语言链表版
  3. (转载)python多行注释
  4. wojilu系统的ORM介绍
  5. 编程书籍阅读随谈(第四篇)
  6. java.lang.IllegalArgumentException: invalid comparison: java.time.LocalDateTime and java.lang.String
  7. Chromedriver的安装
  8. 基于vue.js的dialog插件art-dialog-vue2.0发布
  9. 最新发布|深度学习必学“圣经”花书出视频课了!附带论文代码精读讲解!
  10. POJ-2262 Goldbach's Conjecture
  11. 《王家视频教程图书馆》
  12. python itchat库学习笔记 + 微信防撤回实现详解(超详细)(已上传)
  13. Elasticsearch 运行时类型 Runtime fields 深入详解
  14. 单域安全评估以及加固方案
  15. 如何屏蔽百度网盟广告
  16. 让逆向工程师们头疼的代码混淆,就像永远也走不出的“浪浪山”
  17. 简谈高通Trustzone的实现【转】
  18. 谈谈Linux打补丁的原理以及如何判别打补丁的错误 --- 从补丁学内核
  19. python实现牛顿法_牛顿法求极值及其Python实现
  20. 我为何想参加2011年IT博客大赛?从心出发的选择

热门文章

  1. jQuery on()
  2. UE4 Lightmass 全局光照
  3. Java单元测试实践-21.使用Gradle执行单元测试
  4. 北航操作系统课程-20200330课堂小测-线程与调度
  5. 「诺亚」升级|进阶主动防御,勒索病毒持续免疫
  6. 【Java注释:单行 多行 文档注释】
  7. iText介绍和使用案例详解以及教程
  8. MySQL的下载安装配置教程(很详细!!!)
  9. 《机器学习算法竞赛实战》笔记 - 第一部分 磨刀事半,砍柴功倍
  10. 计算机量子化学计算实验报告物化实验,量子化学计算方法及应用实验报告.docx...