Micropython TturnipBit 体感遥控车
STMCU
2907 人阅读
|
0 人回复
|
2018-05-22
TA的每日心情 | 慵懒 2018-1-6 09:01 |
|---|
签到天数: 7 天 连续签到: 1 天 [LV.3]偶尔看看II
进士
- 积分
- 1873
|
本帖最后由 酥小小酥 于 2018-5-22 10:06 编辑
所需器材:
? TurnipBit开发板 一块
? 下载数据线 一条
? 智能小车套件 一套(底盘、车轮、电机等)
? 超声波模块(HC-SR04)一个(用作小车的“眼睛”)
? L298N电机驱动模块 一个
? 接入互联网的电脑 一台(推荐使用Google Chome或者Firefox浏览器)
电机驱动和超声波的安装 超声波模块共4个引脚,分别是VCC、GND、Trig和Echo。VCC接TurnipBit扩展板的+5V引脚,GND接TurnipBit扩展板的GND引脚,Trig触发引脚接P5,Echo回传引脚接P8。 L298N电机驱动模块左侧OUT3、OUT4接线端子对应接入左轮电机的下侧、上侧侧铜片,右侧也是。L298N的输入端IN1、IN2、IN3、IN4分别接入扩展板的P19、P13、P12、P11。 详细见下表: | TurnipBit扩展板 | 超声波模块 | L298N | +5V | VCC | +12V、+5V | GND | GND | GND | P5 | Trig | | P8 | Echo | | P11 | | IN4 | P12 | | IN3 | P13 | | IN2 | P19 | | IN1 |
程序设计 伪代码分析
让我们先用伪代码来分析一下避障车的程序逻辑。首先,我们通过小车的超声波模块来检测前方是否存在障碍物,计算出与障碍物之间的距离。当与障碍物的距离小于或等于我们预设的安全距离时,控制小车进行转向避开障碍物;当与障碍物的距离大于我们预设的安全距离时,控制小车进行继续前进;逻辑顺序如下: 第一步,触犯超声波模块开始检测; 第二步:计算出与前方障碍物的距离; 第三步:判断与障碍物的距离是否小于设定的安全距离; 第四步:若小于或等于则进行转向,避开障碍物; 第五步:若大于则继续保持前进。 根据伪代码,画成流程图如下:
代码分析 会思考的避障车整体代码,可参考右侧代码显示区,如下。
- 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玩家汇
|
|
|
|
|
|
|
|
|