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

article/2025/10/8 10:39:38

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

原文

MX

基于Arduino的巡线机器人

巡线机器人(LFR: line follower robot)是一种简单的自主引导机器人,它遵循在地面上绘制的线来检测白色表面上的暗线或黑暗表面上的白线。在本教程中,使用 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,一个电池和几根连接线。传感器检测从表面反射的红外光,并将输出馈送到板载运算放大器比较器。当传感器位于白色背景上时,传感器发出的光被白色地面反射并被接收器接收。但是当传感器位于黑色背景上方时,来自光源的光线不会反射到它身上。传感器感根据反射光的强度以提供输出。传感器的输出被馈送到微控制器,微控制器向电机驱动板发出命令,以相应地驱动电机。在我们的项目中,Arduino Uno使机器人向前移动,向右或向左转,并根据来自传感器的输入停止。Arduino的输出被馈送到电机驱动板。

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

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

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

在这里插入图片描述

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

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

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

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

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

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

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

电机驱动板和 Arduino 连接

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

装配巡线机器人

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

基于Arduino的巡线机器人

要制造这个机器人,首先我们需要一个机器人身体;在这里,我使用的是自制车身。

现在,借助一些热胶安装BO电机,如下图所示。

巡线电机组件

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

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

红外发光二极管传感器

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

DIY阿杜伊诺乌诺巡线机器人

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

在这里插入图片描述

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

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

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

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

巡线器机器人底盘板

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

Arduino巡线机器人工作

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上传此代码。

测试和校准

Arduino巡线机器人

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

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

DIY从线机器人

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

代码

// 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
}

http://chatgpt.dhexx.cn/article/qcrwx4vf.shtml

相关文章

网络科学—Windows下生成LFR人工网络数据集的步骤

目录 1 引言 2 步骤 2.1 下载LFR程序包 2.2 解压LFR程序包 2.3 进入cmd程序 2.4 生成LFR网络 1 引言 很多做网络科学研究的学者研究生等都需要经常用到人工网络的数据,最为常用的就是LFR人工网络,下面详细描述了LFR网络的生成方式 2 步骤 2.1 下…

查看gcc编译器版本

我们在windows下DS5中编译时使用GCC交叉编译器,但是在ubuntu时也需要使用GCC编译器,这时最好时保持版本一致,所以就需要查看windows下版本,如下图,在按装的文件夹中找到对应得文件即可。 转载于:https://www.cnblogs.c…

linux下gcc版本切换

今天在linux环境下编译c文件的时候发现库函数居然找不到路径,查了好久都没有找到是什么问题,最后想到的解决办法:把gcc版本切回到linux自带版本 1.查看linux下已安装gcc版本 ls /usr/bin/gcc* 结果如下: 2.手动设置候选版本优先…

linux中gcc版本升级

环境 Linux version 3.10.0-1160.el7.x86_64 (mockbuildkbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020 目前gcc版本4.8.5 正文 所需资源可以在gnu安装包下载_开源镜像站-阿里云下载 包括&#x…

Linux升级gcc到最新版本--gcc-9.1.0

Linux升级gcc到最新版本–gcc-9.1.0详细步骤 一、下载gcc最新的源码包–>wget http://ftp.gnu.org/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.gz 二、解压缩–>tar -xzvf gcc-9.1.0.tar.gz 三、进入解压缩后目录–>cd gcc-9.1.0 四、运行download_prerequisites脚本&#xff0…

所有Gcc版本对C和C++的支持情况(超详细版本)

在最近接触的新的项目,由于技术使用为C98风格实现,遇到一个问题需要加锁解决,本能反应用lock_guradmutex解决,但是没设置CFLAGS为C11标准,不确定当前gcc编译器默认支持的C和C标准是什么,索性就一把都研究透…

Linux 安装指定版本GCC方法

今天来记录一下如何安装指定版本gcc,因为在linux中有些软件需要指定gcc的版本,所以记录一下还是很有必要的。好了,直接上安装步骤。 第一步:安装默认版本gcc 首先我们需要安装一个gcc,我们使用yum命令来进行安装。 $ y…

linux升级gcc版本详细教程

0.前言 一般linux操作系统默认的gcc版本都比较低,例如centos7系统默认的gcc版本为4.8.5。gcc是从4.7版本开始支持C11的,4.8版本对C11新特性的编译支持还不够完善,因此如果需要更好的体验C11以及以上版本的新特性,需要升级gcc到一个…

ubuntu20.04查看gcc版本以及各版本切换

1、查看自己当前的gcc版本 gcc -v通过下图的最后一行可以得到,这里电脑当前gcc的版本是 7.5.0 查看Eigen版本: pkg-config --modversion eigen32.安装另一个版本gcc 这里安装的是gcc-9: sudo add-apt-repository ppa:ubuntu-toolchain-r…

最新:斐讯K3千兆无线路由器刷官改版固件的详细图文教程

2018年1月31日更新:本教程已经同步增添Phitools 作者最新修改的固件以便支持 K3_V21.6.12.66 版刷机。 如果喜欢折腾的话可以刷LEDE固件,刷机方法看:[图文教程] 斐讯K3金/银色版路由器免拆机通用刷机教程 此前蓝点网已经发布了借助恩山论坛开…

斐讯k2刷不死breed K2 22.5.11.14

[k2] 斐讯K2 22.5.11.14 A5 原厂固件 刷breed刷官方固件定制版方法 这个是我刷机之前备份的,有用的拿去。 首先是刷breed,按照abccba94大神的终极方法刷入成功,参考【刷机必读】斐讯K2刷breed的安全方法及开源一键刷机脚本 终极的不行&…

用编程器免拆夹子刷斐讯K2 K2P解决难搞固件 刷BREED 无损原EEPROM

文章中放的几个地址都是思路来源,感谢各路大神原帖子的思路,因为我刷机时候没有拍照,只好借用各位大佬的图来说明步骤,我做一下整理会放出本篇刷机流程,很简单! K2 22.6.532.231软件版本已经无解&#xff…

k2p—b1版本刷固件遇到的问题

因为之前刷过梅林华硕的固件,但是今天手贱,点了个升级,然后路由器就gg了,当时想再刷一遍就好了,但是好久没刷过了,难免有些生疏,看完教程就上手了,但是发现固件一直传不上去&#xf…

msdn i tell you网址及下载系统详细步骤

一、msdn i tell you网址及下载系统详细步骤 msdn i tell you地址: 2.进去网站以后会让你免费注册以一个账号,然后用邮箱方式让你激活。 3.注册完以后,你就可以正常下载了。

Travel English

Tong lau or Chinese tenement building - 唐楼

MSDN i tell you 下载说明

i tell you 如何下载文件 网址:https://msdn.itellyou.cn/ 1、这里复制 BT类型,原因是百度网盘不支持ED2K 2、使用百度网盘下载文件,下载速度慢的话,就自己想办法,别问我!!!&…

Travel

Description 给出一个有 个顶点 条边的有向图,对于一条边长度为len的边有两种走法。   1、如果a和b可以互达,则走过这条边的时间为len   2、如果a和b不可以互达,则走过这条边的时间为2*len   现在给出一个k,问&#xff0…

Don't forget your original intention.

生活不止眼前的苟且 妈妈坐在门前 哼着花儿与少年 虽事隔多年 记得她泪水涟涟 那些幽暗的时光 那些坚持与慌张 在临别的门前 妈妈望着我说 生活不止眼前的苟且,还有诗和远方的田野, 你赤手空拳来到人世间,为找到那片海不顾一切。 她…

I tell you 如何下载文件

地址:https://msdn.itellyou.cn/ I tell you 可以下载一些office,windows系统等,还是十分方便的。 如何下载(可以使用迅雷或者百度网盘等) 展开详细信息 —— 复制框中的链接——打开迅雷 直接下载就好了。