zoukankan      html  css  js  c++  java
  • Micropython TturnipBit 体感遥控车

    所需器材:

    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()

    代码如上  ,那么如果用拼插编程怎么实现?[attach]619331[/attach]
    微信公众号:Micropython玩家汇
     
  • 相关阅读:
    算法训练 表达式计算
    基础练习 十六进制转十进制
    基础练习 十六进制转十进制
    基础练习 十六进制转十进制
    New ways to verify that Multipath TCP works through your network
    TCP的拥塞控制 (Tahoe Reno NewReno SACK)
    Multipath TCP Port for Android 4.1.2
    How to enable ping response in windows 7?
    NS3
    Multipath TCP Port for Android
  • 原文地址:https://www.cnblogs.com/xxosu/p/9070660.html
Copyright © 2011-2022 走看看