这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » Micropython Turniobit 会思考的避障车

共1条 1/1 1 跳转至

Micropython Turniobit 会思考的避障车

助工
2018-03-14 10:15:35     打赏

在日常生活中,大家会经常见到各种各样的遥控车,它需要我们人为的操作,控制它的前进、后退和转弯。今天就带大家认识一个不一样的新朋友——会思考的避障车。

会思考的避障车和我们平时的遥控车最主要的区别就是智能化,它可以不需要我们去操控,自己就能行走。同时它还会实时检测前方是否有障碍物,思考自己是否要前进或者转弯。

听到这里,是不是已经跃跃欲试了呢。话不多说,动起手来吧!

 

所需器材:

Ø  TurnipBit开发板 1

Ø  下载数据线 1

Ø  智能小车套件 1套(底盘、车轮、电机等)

Ø  超声波模块(HC-SR041个(用作小车的眼睛

Ø  L298N电机驱动模块 1

Ø  接入互联网的电脑 1台(推荐使用Google Chome或者Firefox浏览器

 

电机驱动和超声波的安装

超声波模块共4个引脚,分别是VCCGNDTrigEchoVCCTurnipBit扩展板的+5V引脚,GNDTurnipBit扩展板的GND引脚,Trig触发引脚接P5Echo回传引脚接P8

L298N电机驱动模块左侧OUT3OUT4接线端子对应接入左轮电机的下侧、上侧侧铜片,右侧也是。L298N的输入端IN1IN2IN3IN4分别接入扩展板的P19P13P12P11

 

详细见下表:

 

TurnipBit扩展板

超声波模块

L298N

+5V

VCC

+12V+5V

GND

GND

GND

P5

Trig


P8

Echo


P11


IN4

P12


IN3

P13


IN2

P19


IN1


 

  程序设计伪代码分析

让我们先用伪代码来分析一下避障车的程序逻辑。首先,我们通过小车的超声波模块来检测前方是否存在障碍物,计算出与障碍物之间的距离。当与障碍物的距离小于或等于我们预设的安全距离时,控制小车进行转向避开障碍物;当与障碍物的距离大于我们预设的安全距离时,控制小车进行继续前进;逻辑顺序如下:

第一步,触犯超声波模块开始检测;

第二步:计算出与前方障碍物的距离;

第三步:判断与障碍物的距离是否小于设定的安全距离;

第四步:若小于或等于则进行转向,避开障碍物;

第五步:若大于则继续保持前进。

根据伪代码,画成流程图如下:

 

拼插编程

 

整体的拼插代码如下图:具体怎么一步一步拼插就不写了。

 

 

      

将程序名修改成turnipbit-car,点击【下载hex】按钮将程序保存到电脑里。

 

 

把保存的turnipbit- car.hex文件拖入TurnipBit磁盘中,我们会看到TurnipBit板子上的灯在闪烁,说明正在下载到控制板中。

下载成功后,将TurnipBit正确插入TurnipBit扩展板的金手指卡槽内,开始启动避障车吧。

 

代码分析

会思考的避障车整体代码,可参考右侧代码显示区,如下。

from microbit import *


display.show(Image.ARROW_N)
pin11.write_digital(0)
pin12.write_digital(1)
pin13.write_digital(0)
pin19.write_digital(1)
while True:
num = 0
pin5.write_digital(0)
pin5.write_digital(1)
sleep(0.01)
if pin8.read_digital() != True:
pin5.write_digital(0)
pin5.write_digital(1)
sleep(0.01)
while pin8.read_digital():
num = num + 1
if num <= 8:
display.show(Image.ARROW_W)
pin11.write_digital(1)
pin12.write_digital(0)
pin13.write_digital(0)
pin19.write_digital(1)
sleep(1000)
display.show(Image.ARROW_N)
pin11.write_digital(0)
pin12.write_digital(1)
pin13.write_digital(0)
pin19.write_digital(1)


       接下来,我们一起来分析一下代码。

       通过上面的代码,不难发现,控制避障车前进的代码部分我们重复编写了两遍,在实际项目中这种写法是不合理的。为了让代码更加简洁,优雅,我们将控制前进的代码部分提取出来建立名称为Go()的函数,在需要执行前进的地方直接调用Go()函数即可。

from microbit import *

def Go():
display.show(Image.ARROW_N)
pin11.write_digital(0)
pin12.write_digital(1)
pin13.write_digital(0)
pin19.write_digital(1)

Go()
while True:
num = 0
pin5.write_digital(0)
pin5.write_digital(1)
sleep(0.01)
if pin8.read_digital() != True:
pin5.write_digital(0)
pin5.write_digital(1)
sleep(0.01)
while pin8.read_digital():
num = num + 1
if num <= 8:
display.show(Image.ARROW_W)
pin11.write_digital(1)
pin12.write_digital(0)
pin13.write_digital(0)
pin19.write_digital(1)
sleep(1000)
Go()


按照同样的方式,我们将控制转向和检测障碍物的代码分别建立Turn()Detection()函数。

from microbit import *

def Go():
display.show(Image.ARROW_N)
pin11.write_digital(0)
pin12.write_digital(1)
pin13.write_digital(0)
pin19.write_digital(1)

def Turn():
display.show(Image.ARROW_W)
pin11.write_digital(1)
pin12.write_digital(0)
pin13.write_digital(0)
pin19.write_digital(1)

def Detection():
num=0
pin5.write_digital(0)
pin5.write_digital(1)
sleep(0.01)
if pin8.read_digital() != True:
pin5.write_digital(0)
pin5.write_digital(1)
sleep(0.01)
while pin8.read_digital():
num = num + 1
return num

Go()
while True:
num = Detection()
if num <= 8:
Turn()
sleep(1000)
Go()


 

 





关键词: Micropython     Turniobit     思考         

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]