在这个arduino项目,我们正在详细介绍线跟随机器人使用arduino,一对LDR传感器对和两个电机。当你学习新的微控制器如8051或AVR或PIC时,直线跟随机器人是一个非常基础的项目。
线跟随机器人使用Arduino DIY电子项目
一个直线跟随机器人采用8051单片机已经在CircuitsToday这一次,同样的项目是用arduino.这条直线跟随机器人基本上是设计来跟踪白色表面上的黑线。任何方式都可以使用相同的项目来遵循相反的配置软件的变化.
这个使用arduino的简单直线跟随机器人的整个硬件可以分为三个部分;传感器、Arduino板和电机驱动电路。让我们先看一下传感器。
1.传感器
该传感器由两个LED/LDR对和适当的限流电阻组成。LDR的电阻与落在它上面的光的强度成反比。传感器电路图如下图所示。
电阻R1和R2限制通过led的电流。电阻R6、R8、R3和R5与相应的ldr一起形成单独的分压器网络。当传感器正确对齐时,两个LED/LDR对将覆盖白色表面。在这种情况下,足够的光被反射回ldr,因此它们的电阻将会很低。所以LDR上的电压下降会很低。当机器人漂移到一边时,另一边的传感器落在黑线上,反射回相应LDR的光强度会较低。结果,LDR的电阻上升,电压下降,它将是高。通过左、右ldr(上电路中R、L节点)降下的电压作为Arduino板模拟输入引脚A4和A3的输入。测试上述电路时观察到的左右传感器输出如下表所示。2.Arduino uno董事会
arduino板必须被编程,以保持机器人在正确的路径。这是通过读取左右传感器输出和适当地切换左右电机来实现的。右侧传感器输出接arduino的模拟输入A4,左侧传感器输出接arduino的模拟输入A3。arduino的特定模拟输入的电压范围是0到5V。这个范围可以转换成0到1023之间的数字值使用analogRead ()命令。例如,如果将3V应用于A3,下面的代码将返回3/(5/1023),在变量中等于613leftValue。
int leftInput = A3;int leftValue = 0;void loop () {leftValue = analogRead (leftInput);{
从上面的表格你可以看到,当它在白色和4.84V时,穿过特定的LDR电压将是4.4V当它在黑色。按照上述方案,4.4V的数字当量为900,4.84V的数字当量为990。这两个值的中值为945,设置为程序检查传感器模块方向的参考点。
该程序通过将传感器读数与参考点945进行比较来识别传感器模块的位置。如果特定传感器的读数大于945,程序可以假定该传感器高于黑色。如果某一传感器的读数小于945,则认为该传感器高于白色。如果两个传感器的读数都小于945,则意味着两个传感器都是白色的。如果两个传感器的读数都高于945,则假定两个传感器都高于黑色(如果我们把机器人抬离轨道,也会发生同样的情况)。根据以上四种情况,程序适当切换左右电机,使机器人沿黑线行走。
3.汽车司机
电机驱动电路是基于两个NPN晶体管Q1和Q2。每个晶体管被连接成一个开关,在其底部有一个电阻来限制基极电流。电机连接到相应晶体管的发射极端。一个0.1uF电容连接在每个电机上,以旁路电压峰值。电刷的反电动势和电弧是电压峰值背后的主要原因。如果这些电压峰值没有被旁路,可能会影响Arduino侧。电机驱动器电路图如下图所示。
电路图- Arduino的直线跟随机器人
随线机器人的全电路图如下图所示。
程序
int leftInput = A3;int rightInput = A4;int leftMotor = 13;int rightMotor = 12;int leftValue = 0;int rightValue = 0;void setup() {pinMode (leftMotor, OUTPUT);pinMode (rightMotor、输出);} void loop() {leftValue = analogRead (leftInput);rightValue = analogRead (rightInput); if ( leftValue < 945 && rightValue < 945) { digitalWrite (leftMotor, HIGH); digitalWrite (rightMotor, HIGH); } else { if ( leftValue > 945 && rightValue < 945) { digitalWrite (leftMotor, LOW); digitalWrite (rightMotor, HIGH); } else { if (leftValue < 945 && rightValue > 945) { digitalWrite (rightMotor, LOW); digitalWrite (leftMotor, HIGH); } else { if (leftValue > 945 && rightValue > 945) {digitalWrite (rightMotor, LOW); digitalWrite (leftMotor, LOW); }} } }}
设置电路
- 首先,记住每种LED和LDR都有自己的特点。
- 在两种情况下(在白色表面和黑色表面)仔细测量每个ldr的电压。
- 许多参数,如单个LDR/LED特性,环境光,传感器和表面之间的间隙等,都可能影响结果。
- 进入你自己的项目参考点。在我的例子中,它是945,但你可能会得到一个不同的值。
- 使用单独的电源单元为电机供电。对于USB端口来说,任何超过100mA的数据都将是困难的。
- 这里使用的电机是9V/30RPM直流弓电机。如果没有这样的配置,请选择最接近的配置。
- 焊接传感器模块时,两个LED/LDR对之间的间隙必须根据黑线的宽度来选择。在我的情况下,它是2厘米。
- 在我的箱子里,传感器离地面的距离大约是1厘米。
- 所使用的传感器led为4mm的亮绿色led。
- 使用的传感器ldr为通用ldr。
如果你对使用8051微控制器有兴趣,请检查我们的这篇文章-直线跟随机器人采用8051单片机
33评论
ldr横档上的电阻是如何计算的??
长官,马达控制器上各有两个引脚。有没有办法配置它,这样我们就可以从每个电机都有一个引脚?或者有没有其他编码策略来帮助控制电机?请尽快回复。
在这个代码中,左电机被配置为引脚13和右电机引脚12。
先生,我正在用上面的方法做一个
指令。但是我在理解机器人的结构上有一个问题,所以请你发一张你的机器人的照片。
嗨朋友. .
我从它那里购买了一个直线跟踪机器人。我对产品的质量非常满意。货物装船这么快。卓越的客户服务!非常好的折扣系统!我喜欢这个网上商店,我将再次购买从http://www.Robomart.com
尝试使用arduino uno进行线路跟踪。我注意到在原理图中R1和R2是不同的值,2.2k和220欧姆,R3和R6也是不同的。我猜它们被调换了位置。什么是预期值。“弓”在指定的电机中指的是什么。
Hi Steve, R1和R2用于led。所以它必须是2.2k。它是用来保护led免受损坏的。你甚至可以改变电阻的值,比如1K,但这取决于你的电源。从9V到12V的电源最好使用2.2k。
每个人都请仔细听。
本教程中显示的方法是,计算....上的电位下降等等……
所有的垃圾。
大多数情况下,这是行不通的。
你需要看到arduino的实际读数。
代码,
int analogPin = 3;//红外传感器(右引线)连接模拟引脚3
//外部引到地和+5V
Int val = 0;//存储读取的值的变量
无效的设置()
{
Serial.begin (9600);/ /设置串行
}
无效循环()
{
val = analogRead (analogPin);//读取输入引脚
以(val);/ /调试价值
}
在arduino中,从A3的传感器插入一个引脚,然后在arduino软件上切换到工具-串行监视器。
然后启动串行监视器,同时供电传感器板ARDUINO。
将传感器板的正极插入arduino板电源部分“5V”,负极插入“GND”。
然后读取和记录屏幕上的值,同时传感器保持白色和黑色。然后根据您的需要更改教程中代码中的值。
谢谢你!
先生,
我遵循了你在指南中所说的每一步。但是我想说的是,如果我们用9V电池给arduino板供电,同样的电池也给电机供电,那么只有电机能工作,否则如果我用不同的电源给电机和arduino供电,电机在黑色和白色上都不动。但如果我用同一块电池供电,两个马达在所有表面都能工作。请帮帮我,我可能会出错的地方。这真的是非常紧急的事情。
@Pulkit -你可能错过了“禁足”。当你使用两种不同的电源时,确保两种电源都有共同的接地。
先生,我想问一下ldr的长度是否应该比led长?
而且,我按照你的电路图,但当我连接完整的电路时,两个电机即使在黑色状态下也能工作。请尽快回复。请告诉我可能会犯的错误。拜托,这真的很重要。
而且,我的参考点是不同的,我已经根据它们改变了数值。
请帮助
谁能把详细的项目报告发给我....
我可以使用Arduino提供的+5Volt电源给传感器模块上电吗??
你是在问你如何提供5V给传感器模块供电吗?
先生,我想知道如何用编码控制电机的速度。我想学习完整的意义od编码和每个步骤,所以你可以告诉我它是如何工作的。我做了一个简单的带编码的机器人,它可以向各个方向移动,但没有任何传感器。所以请告诉我如何用传感器编码
先生,你能告诉我如何在阿迪奴堡安装程序吗??
先生,你能给我发一张arduino uno板连接的照片吗?请告诉我如何安装arduino板上的程序…!!
@Ahmad,
我们已经用一个工作模型进行了测试。也许你应该检查在Proteus设计中创建的任何错误。同样的型号我们也用8051测试过。你可以看到这里//www.snellingtn.com/line-follower-robot-using-8051-microcontroller
你是怎么得到这个值的
当它在白色表面以上时,LDR的电压为4.4V,当它在黑色条纹以上时,电压为4.84V。按照上述方案,4.4V的数字等效将是900(当由avr328 adc转换时),而4.84V的数字等效将是990。这两个值的平均值为945,作为参考点来检查机器人的位置。
如果传感器的读数大于945,则假定传感器位于黑色条纹之上。如果某一特定传感器的读数小于945,则假定该传感器位于白色表面之上。
先生,我正在用arduino UNO R3 ATMEGA 328做一个直线跟随机器人。所以这是真的,它将遵循一条黑线在白色的表面,但它将移动,即使没有这样的线的帮助arduino..为什么,如果不是....。告诉我怎么做..........pls........
先生,我想问一下,如果rduino uno板连接好了,所有其他东西都连接好了,机器人就制造出来了,那么在它之后,如果它不保持在一条线上,保持在一个表面上,它会移动吗?还是它只会沿着一条线走?如果没有直线,那么如何使它在直线上和在没有直线的表面上移动。请尽快回复……
很好,先生,但是如何编程,我们需要任何设备和软件来编程微控制器
先生,你能告诉我,单对led和LDR之间的距离是多少,他们紧密连接。请分享你的项目电路的照片或任何视频教程将不胜感激。
谢谢. .
将上述程序编制的机器人通过弯道。还没有实现它,但我担心由于实现成本,然后它失败了。我是说矩形的角…或弯曲。任何一个。谢谢
请把这些笔记看一遍。黑白背景的宽度至少为20毫米。用30转轮驱动的电机不能取直角角。它会错过并且失速。如果你让它很慢,比如说1到3转,它就能反应。
长官,我想知道二极管的规格
先生,arduino需要连接多少伏特的电池
@ Surya - 5V直流电源就足够了。
我可以使用Arduino的9v Battery作为输入电源吗
可以,建议使用9伏直流电压。
先生,你能不能用arduino uno或freeduino uno发布四轴飞行器的电路??谢谢你!
@Yash -我们会尽快开发一个。