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

这篇具有很好参考价值的文章主要介绍了使用Arduino Uno构建一个巡线机器人。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

原文

MX

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

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

巡线机器人的原理

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

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

巡线器机器人如何导航?

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

向前移动

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

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

左转:

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

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

右转:

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

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

停止:

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

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

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 Uno构建一个巡线机器人

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

装配巡线机器人

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 Pin
 digitalWrite(in2, LOW);  //Right Motor backword Pin
 digitalWrite(in3, HIGH); //Left Motor backword Pin
 digitalWrite(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 Uno构建一个巡线机器人

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

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

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

生产线跟随机器人的完整制作可以在本页底部链接的视频中找到。如果您有任何疑问,请在评论部分留下。文章来源地址https://www.toymoban.com/news/detail-499903.html

代码

// 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 function
  if ((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 function
  if ((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 function
  if ((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() {            //forword
  digitalWrite(in1, HIGH);  //Right Motor forword Pin
  digitalWrite(in2, LOW);   //Right Motor backword Pin
  digitalWrite(in3, LOW);   //Left Motor backword Pin
  digitalWrite(in4, HIGH);  //Left Motor forword Pin
}
void turnRight() {          //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() {           //turnLeft
  digitalWrite(in1, HIGH);  //Right Motor forword Pin
  digitalWrite(in2, LOW);   //Right Motor backword Pin
  digitalWrite(in3, HIGH);  //Left Motor backword Pin
  digitalWrite(in4, LOW);   //Left Motor forword Pin
}
void Stop() {              //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 forword Pin
}

到了这里,关于使用Arduino Uno构建一个巡线机器人的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【虹科分享】基于Redis Enterprise,LangChain,OpenAI 构建一个电子商务聊天机器人

    如何构建你自己的商务聊天机器人?注意哦,是你自己的聊天机器人。一起来看看 Redis Enterprise的向量检索是怎么帮你实现这个愿望的吧。   鉴于最近人工智能支持的 API和网络开发工具的激增,似乎每个人都在将聊天机器人集成到他们的应用程序中。   LangChain是一种备受欢

    2024年02月05日
    浏览(60)
  • 微信机器人的构建与使用

    一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com Time of completion:2022.12.15 Last edited: 2022.12.17 目录 《微信机器人》程序使用说明 微信机器人使用说明 1.项目说明 2.  系统环境 3.准备条件 4.操作步骤 部分代码: 首先启动 Flask项目 ,然后启动 小米球内

    2024年02月09日
    浏览(32)
  • 使用LangChain构建问答聊天机器人案例实战(一)

    使用LangChain构建问答聊天机器人案例实战 现场演示GPT-4代码生成 本节我们会通过一个综合案例,跟大家讲解LangChain,这个案例产生的代码会直接在浏览器中运行,并且会输出结果,如图14-1所示,用户问:“What was the highest close price of IBM?”(“IBM的最高收盘价是多少?”)

    2024年02月15日
    浏览(55)
  • 使用LangChain构建问答聊天机器人案例实战(三)

    使用LangChain构建问答聊天机器人案例实战 LangChain开发全流程剖析 接下来,我们再回到“get_prompt()”方法。在这个方法中,有系统提示词(system prompts)和用户提示词(user prompts),这是从相应的文件中读取的,从“system.prompt”文件中读取系统提示词(system_template),从“u

    2024年02月14日
    浏览(35)
  • 使用Discord机器人和Midjourney构建图像生成服务

    前言         探讨如何利用Discord机器人和Midjourney工具构建一个图像生成服务,使用户能够通过发送消息来生成图像,而无需直接与Midjourney进行交互 准备工作 确保您拥有一个 Discord 账号,并能够创建一个 Discord 服务器。 注册并获取一个 Discord 机器人的令牌(Token),以便用

    2024年02月22日
    浏览(29)
  • 如何使用自定义知识库构建自定义ChatGPT机器人

    目录   隐藏  使用自定义数据源为您的 ChatGPT 机器人提供数据 1. 通过Prompt提示工程提供数据 2. 使用 LlamaIndex(GPT 索引)扩展 ChatGPT 如何添加自定义数据源 先决条件 怎么运行的 最后的总结 ChatGPT 已成为许多人日常用来自动执行各种任务的不可或缺的工具。如果您已经使用

    2024年02月08日
    浏览(40)
  • 使用Streamlit 实现一个聊天机器人界面

    效果如下: 只需要效果generate_llama2_response 为你的 llm的输出即可。

    2024年03月09日
    浏览(67)
  • 使用Node+Wechaty做一个机器人

    目录 前言 准备工作 起步 实践 写在最后 这篇文章将结合Wechaty去实现一个机器人 在开始编码之前,我们先了解一下 wechaty Wechaty是一个聊天机器人,只需6行代码即可实现一个机器人,其跨平台性,多编程语言支持,使其在众多开源的bot项目中大放光彩。 关于它的使用,官方

    2024年02月11日
    浏览(41)
  • 如何使用OpenAI API和Python SDK构建自己的聊天机器人

    近日,OpenAI公司的ChatGPT模型走红网络。同时,OpenAI也推出了Chat API和gpt-3.5-turbo模型,让开发者能够更轻松地使用与ChatGPT类似的自然语言处理模型。 通过OpenAI API,我们可以使用gpt-3.5-turbo模型,实现多种任务,包括:撰写电子邮件或其他文本内容,编写Python代码,创建对话代

    2024年02月01日
    浏览(39)
  • LangChain入门(五)-使用GPT3.5模型构建油管频道问答机器人

    目录 一、安装依赖 二、使用示例  一、安装依赖 二、使用示例  结尾、扫一扫下方微信名片即可+博主徽信哦  ↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓  ↓↓↓

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包