社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Micropython红外防坠落小车实验教程

FreeBuf • 7 年前 • 817 次点击  

*本文原创作者:bodasister,本文属FreeBuf原创奖励计划,未经许可禁止转载

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

下面给大家看一下视频演示:


实验目的

研究智能小车结合红外探头寻迹前进。

实验材料

TPYBoard开发板1块(能跑python语言的开发板,小车的大脑)

四路红外感应探头(小车的眼睛)

数据线一根

充电宝一个(给整个系统供电)

智能小车底盘(包括驱动模块)

杜邦线若干

1. TPYBoard v102开发板

MicroPython是在单片机上可以跑的Python,也就是说,你可以通过Python脚本语言开发单片机程序。 由剑桥大学的理论物理学家乔治·达明设计。和Arduino类似,但Micro Python更强大。 MicroPython开发板让你可以通过Python代码轻松控制微控制器的各种外设,比如LED等,读取管脚电压,播放歌曲,和其他设备联网等等。TPYBoard是TurnipSmart公司制作的一款MicroPython开发板,这款开发板运行很流畅,关键是价格很便宜。

2. 四路红外感应探头

1、当模块检测到前方障碍物信号时,电路板上红色指示灯点亮,同时OUT端口持续输出低电平信号,该模块检测距离2~60cm,检测角度35°,检测距离可以通过电位器进行调节,顺时针调电位器,检测距离增加;逆时针调电位器,检测距离减少。 2、传感器属于红外线反射探测,因此目标的反射率和形状是探测距离的关键。其中黑色探测距离最小,白色最大;小面积物体距离小,大面积距离大。 3、 传感器模块输出端口OUT可直接与单片机IO口连接即可, 也可以直接驱动一个5V继电器模块或者蜂鸣器模块;连接方式: VCC-VCC;GND-GND;OUT-IO。 4、比较器采用LM339,工作稳定; 5、可采用3.3V-5V直流电源对模块进行供电。当电源接通时, 绿色电源指示灯点亮。

3. 智能小车底盘

双电机驱动,万向轮改变方向。这是实验中最常用到的小车底盘,使用差速的方法进行转弯。配合使用L298N电机驱动模块,使用方法很简单,不多做介绍。

寻迹原理

1. 红外探头的安装

小车寻迹的原理其实就光的吸收,反射和散射。在小车的前端有安装孔,使用螺丝把红外传感器固定在安装孔上。保持发射端和接收端都保持竖直向下。

2. 返回信号的判断

在上面已经说了,红外探头在检测到物体存在的时候,在OUT端会持续的输出低电平。那么调节调距电阻,调节到一个适合的检测距离。在小车行驶路面检测到物体的时候,说明是前面是有路的,不是悬空的。那么小车 保持直行。如果前方检测到没有返回,没返回说明没有检测到物体,妈就说明前面是没有路的,是悬空的,那么小车就先进行后退,在进行右转(也可以左转,也可以一次右转一次左转,这个比较随意。)。

硬件接线

接线其实很简单四路红外探头接线很简单,虽然有十八根线,但是有十二根是三根三根的分成四组的,对应着很好接线,剩下的六根,VCC和GND不多说了,还有四根是直接接到单片结IO口上就可以的。L298N的接线更简单了,这里不多介绍。 上个简单的帮助理解的原理图 (其实我们做实验都是插线,不做PCB图和原理图的)。

再上个实物图给大家看看

运行与调试

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

代码编写

再把我写的程序给大家看一下,有需要的可以看一下。

源代码:

import pyb

from pyb import UART

from pyb import Pin

M0 = Pin('X1', Pin.IN)

M1 = Pin('X2', Pin.IN)

M2 = Pin('X3', Pin.IN)

M3 = Pin('X4', Pin.IN)

N1 = Pin('Y1', Pin.OUT_PP)

N2 = Pin('Y2', Pin.OUT_PP)

N3 = Pin('Y3', Pin.OUT_PP)

N4 = Pin('Y4', Pin.OUT_PP)

print('while')

while True:

        print('while')

        if(M2.value()|M1.value()|M3.value()|M0.value()==0):

                N1.low()

                N2.high()

                N4.high()

                N3.low()

                pyb.LED(2).on()

                pyb.LED(3).off()

        elif(M2.value()|M1.value()|M3.value()|M0.value()==1):

                N1.high()

                N2.low()

                N4.low()

                N3.high()

                pyb.delay(300)

                N1.low()

                N2.high()

                N3.high()

                N4.low()

                pyb.delay(200)

                pyb.LED(3).on()

                pyb.LED(2).off()

*本文原创作者:bodasister,本文属FreeBuf原创奖励计划,未经许可禁止转载


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/vTJkBM7ZnS
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/6190
 
817 次点击