在这个arduino项目,我们正在详细介绍线跟随机器人使用arduino,一对LDR传感器对和两个电机。当你学习新的微控制器如8051或AVR或PIC时,直线跟随机器人是一个非常基础的项目。

线跟随机器人使用Arduino DIY电子项目

一个直线跟随机器人采用8051单片机已经在CircuitsToday这一次,同样的项目是用arduino.这条直线跟随机器人基本上是设计来跟踪白色表面上的黑线。任何方式都可以使用相同的项目来遵循相反的配置软件的变化

这个使用arduino的简单直线跟随机器人的整个硬件可以分为三个部分;传感器、Arduino板和电机驱动电路。让我们先看一下传感器。

1.传感器

该传感器由两个LED/LDR对和适当的限流电阻组成。LDR的电阻与落在它上面的光的强度成反比。传感器电路图如下图所示。

arduino线追随者

电阻R1和R2限制通过led的电流。电阻R6、R8、R3和R5与相应的ldr一起形成单独的分压器网络。当传感器正确对齐时,两个LED/LDR对将覆盖白色表面。在这种情况下,足够的光被反射回ldr,因此它们的电阻将会很低。所以LDR上的电压下降会很低。当机器人漂移到一边时,另一边的传感器落在黑线上,反射回相应LDR的光强度会较低。结果,LDR的电阻上升,电压下降,它将是高。通过左、右ldr(上电路中R、L节点)降下的电压作为Arduino板模拟输入引脚A4和A3的输入。测试上述电路时观察到的左右传感器输出如下表所示。

线跟随机器人使用arduino

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直线跟随电机驱动

电路图- 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评论

  1. Apoorvakumar

    ldr横档上的电阻是如何计算的??

  2. Gunjan班达里

    长官,马达控制器上各有两个引脚。有没有办法配置它,这样我们就可以从每个电机都有一个引脚?或者有没有其他编码策略来帮助控制电机?请尽快回复。

    • 舒如提Khandeparkar

      在这个代码中,左电机被配置为引脚13和右电机引脚12。

  3. vinit晚

    先生,我正在用上面的方法做一个
    指令。但是我在理解机器人的结构上有一个问题,所以请你发一张你的机器人的照片。

  4. Bhupendra

    嗨朋友. .
    我从它那里购买了一个直线跟踪机器人。我对产品的质量非常满意。货物装船这么快。卓越的客户服务!非常好的折扣系统!我喜欢这个网上商店,我将再次购买从http://www.Robomart.com

  5. 史蒂夫

    尝试使用arduino uno进行线路跟踪。我注意到在原理图中R1和R2是不同的值,2.2k和220欧姆,R3和R6也是不同的。我猜它们被调换了位置。什么是预期值。“弓”在指定的电机中指的是什么。

    • 岩石

      Hi Steve, R1和R2用于led。所以它必须是2.2k。它是用来保护led免受损坏的。你甚至可以改变电阻的值,比如1K,但这取决于你的电源。从9V到12V的电源最好使用2.2k。

  6. Pulkit沙玛

    每个人都请仔细听。
    本教程中显示的方法是,计算....上的电位下降等等……
    所有的垃圾。
    大多数情况下,这是行不通的。
    你需要看到arduino的实际读数。
    代码,
    int analogPin = 3;//红外传感器(右引线)连接模拟引脚3
    //外部引到地和+5V
    Int val = 0;//存储读取的值的变量

    无效的设置()

    Serial.begin (9600);/ /设置串行
    }

    无效循环()

    val = analogRead (analogPin);//读取输入引脚
    以(val);/ /调试价值
    }

    在arduino中,从A3的传感器插入一个引脚,然后在arduino软件上切换到工具-串行监视器。
    然后启动串行监视器,同时供电传感器板ARDUINO。
    将传感器板的正极插入arduino板电源部分“5V”,负极插入“GND”。
    然后读取和记录屏幕上的值,同时传感器保持白色和黑色。然后根据您的需要更改教程中代码中的值。
    谢谢你!

  7. Pulkit

    先生,
    我遵循了你在指南中所说的每一步。但是我想说的是,如果我们用9V电池给arduino板供电,同样的电池也给电机供电,那么只有电机能工作,否则如果我用不同的电源给电机和arduino供电,电机在黑色和白色上都不动。但如果我用同一块电池供电,两个马达在所有表面都能工作。请帮帮我,我可能会出错的地方。这真的是非常紧急的事情。

    • 乔乔

      @Pulkit -你可能错过了“禁足”。当你使用两种不同的电源时,确保两种电源都有共同的接地。

  8. Pulkit

    先生,我想问一下ldr的长度是否应该比led长?
    而且,我按照你的电路图,但当我连接完整的电路时,两个电机即使在黑色状态下也能工作。请尽快回复。请告诉我可能会犯的错误。拜托,这真的很重要。
    而且,我的参考点是不同的,我已经根据它们改变了数值。
    请帮助

  9. hariprasadus

    谁能把详细的项目报告发给我....

  10. 斯里赫里饶米

    我可以使用Arduino提供的+5Volt电源给传感器模块上电吗??

    • Pulkit

      你是在问你如何提供5V给传感器模块供电吗?

  11. 成员mukul

    先生,我想知道如何用编码控制电机的速度。我想学习完整的意义od编码和每个步骤,所以你可以告诉我它是如何工作的。我做了一个简单的带编码的机器人,它可以向各个方向移动,但没有任何传感器。所以请告诉我如何用传感器编码

  12. 阿卡什

    先生,你能告诉我如何在阿迪奴堡安装程序吗??

  13. 阿卡什

    先生,你能给我发一张arduino uno板连接的照片吗?请告诉我如何安装arduino板上的程序…!!

  14. 吟游诗人的学生

    你是怎么得到这个值的

    • praveen

      当它在白色表面以上时,LDR的电压为4.4V,当它在黑色条纹以上时,电压为4.84V。按照上述方案,4.4V的数字等效将是900(当由avr328 adc转换时),而4.84V的数字等效将是990。这两个值的平均值为945,作为参考点来检查机器人的位置。

      如果传感器的读数大于945,则假定传感器位于黑色条纹之上。如果某一特定传感器的读数小于945,则假定该传感器位于白色表面之上。

  15. vishva bhate

    先生,我正在用arduino UNO R3 ATMEGA 328做一个直线跟随机器人。所以这是真的,它将遵循一条黑线在白色的表面,但它将移动,即使没有这样的线的帮助arduino..为什么,如果不是....。告诉我怎么做..........pls........

  16. vishva bhate

    先生,我想问一下,如果rduino uno板连接好了,所有其他东西都连接好了,机器人就制造出来了,那么在它之后,如果它不保持在一条线上,保持在一个表面上,它会移动吗?还是它只会沿着一条线走?如果没有直线,那么如何使它在直线上和在没有直线的表面上移动。请尽快回复……

  17. 彼得

    很好,先生,但是如何编程,我们需要任何设备和软件来编程微控制器

  18. sahil聊汗

    先生,你能告诉我,单对led和LDR之间的距离是多少,他们紧密连接。请分享你的项目电路的照片或任何视频教程将不胜感激。

    谢谢. .

  19. 匿名Techvirus

    将上述程序编制的机器人通过弯道。还没有实现它,但我担心由于实现成本,然后它失败了。我是说矩形的角…或弯曲。任何一个。谢谢

    • Seetharaman

      请把这些笔记看一遍。黑白背景的宽度至少为20毫米。用30转轮驱动的电机不能取直角角。它会错过并且失速。如果你让它很慢,比如说1到3转,它就能反应。

  20. anonmous

    长官,我想知道二极管的规格

  21. Soorya

    先生,arduino需要连接多少伏特的电池

    • 乔乔

      @ Surya - 5V直流电源就足够了。

  22. Soorya

    我可以使用Arduino的9v Battery作为输入电源吗

    • 乔乔

      可以,建议使用9伏直流电压。

  23. 亚许帕蒂尔

    先生,你能不能用arduino uno或freeduino uno发布四轴飞行器的电路??谢谢你!

    • 乔乔

      @Yash -我们会尽快开发一个。

Baidu