微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > MicroPython制作红外寻迹小车实例

MicroPython制作红外寻迹小车实例

时间:10-02 整理:3721RD 点击:
转发请以链接的形式注明本帖来源和作者
    关于无线加速度传感器小车的制作,已经在本论坛做过两次实例讲解,分别是加速度无线传感器小车和不坠落的小车。详见:无线传感器小车、不掉地的小车。本帖是无线传感器小车系列的第三部分:红外寻迹小车。用的主要MCU还是MicroPython开发板TPYBoard(仅供参考,制作时可根据个人喜好进行选择)




    智能小车现在差不多是电子竞赛或者DIY中的主流了,寻迹,壁障,遥控什么的,相信大家也都见得很多了,这次就大家探讨一下寻迹小车的制作方法,不同于以往的是这次的程序不用C语言写,而是要使用python语言写。


以下为视频演示,大家可以看下效果



    1.实验目的
    研究智能小车结合红外探头寻迹前进。
    2.实验材料



    TPYBoard开发板1块(能跑python语言的开发板,小车
    的大脑。)
    四路红外感应探头(小车的眼睛)。
    数据线一根。
    充电宝一个(给整个系统供电)。
    智能小车底盘(包括驱动模块)。
    杜邦线若干。
    实验目的和实验材料准备齐了,先来介绍一下各个主要部件。
    2.1 TPYBoard开发板
    MicroPython是在单片机上可以跑的Python,也就是说,你可以通过Python脚本语言开发单片机程序。 由剑桥大学的理论物理学家乔治·达明设计。和Arduino类似,但Micro Python更强大。 MicroPython开发板让你可以通过Python代码轻松控制微控制器的各种外设,比如LED等,读取管脚电压,播放歌曲,和其他设备联网等等。TPYBoard是TurnipSmart公司制作的一款MicroPython开发板,这款开发板运行很流畅,关键是价格很便宜。
    2.2 四路红外感应探头
    1、当模块检测到前方障碍物信号时,电路板上红色指示灯点亮,同时OUT端口持续输出低电平信号,该模块检测距离2~60cm,检测角度35°,检测距离可以通过电位器进行调节,顺时针调电位器,检测距离增加;逆时针调电位器,检测距离减少。
    2、传感器属于红外线反射探测,因此目标的反射率和形状是探测距离的关键。其中黑色探测距离最小,白色最大;小面积物体距离小,大面积距离大。
    3、 传感器模块输出端口OUT可直接与单片机IO口连接即可, 也可以直接驱动一个5V继电器模块或者蜂鸣器模块;连接方式: VCC-VCC;GND-GND;OUT-IO。
    4、比较器采用LM339,工作稳定;
    5、可采用3.3V-5V直流电源对模块进行供电。当电源接通时, 绿色电源指示灯点亮。
    2.3 智能小车底盘
    双电机驱动,万向轮改变方向。这是实验中最常用到的小车底盘,使用差速的方法进行转弯。配合使用L298N电机驱动模块,使用方法很简单,不多做介绍。
    3.寻迹原理
    说完了原料的问题,下面说一下小车寻迹的原理。
    3.1红外探头的安装
    小车寻迹的原理其实就光的吸收,反射和散射。大家都知道,白色反射所有颜色的光,而黑色吸收所有颜色的光,这就为小车寻迹提供了有力的科学依据。在小车的车头上安装上红外探头(我是安装了四个),一字顺序排开。哪个探头接收不到反射或者散射回来的光时,说明这个探头此时正在黑色的寻迹带上。
    3.2返回信号的判断
    如果要是正前方的探头接收不到光,那么说明小车此时走在黑色的寻迹带上。可以使小车直线行走。如果左面的探头接收不到光,那么说明小车左面出现了黑色寻迹带,此时小车应该执行左转弯。右转弯同左转弯原理。
    如果要是小车前面,左面,右面三个方向全都接收不到光,或者是两个方向上的探头都接收不到光,到底是左转弯,右转弯还是继续直行,这个就要看你自己在程序里怎么做判断了。
    4.硬件接线:
    接线其实很简单四路红外探头接线很简单,虽然有十八根线,但是有十二根是三根三根的分成四组的,对应着很好接线,剩下的六根,VCC和GND不多说了,还有四根是直接接到单片结IO口上就可以的。L298N的接线更简单了,这里不多介绍。
    上个简单的帮助理解的原理图 (其实我们做实验都是插线,不做PCB图和原理图的)。



原理图


    再上个实物图给大家看看。




    5.运行与调试


    制作完成后,剩下的就是该调试了,调试中应该注意细节和小车稳定性的优化。


    6.代码编写
    再把我写的程序给大家看一下,有需要的可以看一下。
    源代码:




  1. import pyb
  2. from pyb import UART
  3. from pyb import Pin

  4. M0 = Pin('X1', Pin.IN)
  5. M1 = Pin('X2', Pin.IN)
  6. M2 = Pin('X3', Pin.IN)
  7. M3 = Pin('X4', Pin.IN)
  8. N1 = Pin('Y1', Pin.OUT_PP)
  9. N2 = Pin('Y2', Pin.OUT_PP)
  10. N3 = Pin('Y3', Pin.OUT_PP)
  11. N4 = Pin('Y4', Pin.OUT_PP)

  12. print('while')
  13. while True:
  14.     print('while')
  15.     pyb.LED(4).off()
  16.     pyb.LED(3).off()
  17.     pyb.LED(2).off()
  18.     if(M0.value()==1):#检测到物体返回0。
  19.         pyb.LED(4).on()
  20.         pyb.delay(50)
  21.         N1.low()
  22.         N2.high()
  23.         N3.low()
  24.         N4.high()
  25.         pyb.delay(30)
  26.         #pyb.delay(5000)
  27.     if(M3.value()==1):#检测到物体返回0。
  28.         pyb.LED(3).on()
  29.         pyb.delay(50)
  30.         N1.high()
  31.         N2.low()
  32.         N3.high()
  33.         N4.low()
  34.         pyb.delay(30)
  35.     if(M2.value()&M1.value()==1):
  36.         pyb.LED(2).on()
  37.         N1.low()
  38.         N2.high()
  39.         N3.high()
  40.         N4.low()
  41.         pyb.delay(70)

复制代码


你这写的很棒啊,给你顶一个!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top