查看: 2213|回复: 0

MicroPython实例之TPYBoard v102 鞋码匹配仪

[复制链接]
  • TA的每日心情
    慵懒
    2018-1-6 09:01
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2018-6-9 10:58:20 | 显示全部楼层 |阅读模式
    分享到:
        鞋码匹配仪,利用超声波测距的原理。通过使用超声波遇到障碍返回的特性,计算超声波放出与返回的时间计算来测定障碍与超声波模块的距离。

        鞋码匹配仪的固有大小已知,在脚放入时,大小会发生改变 使用已知距离对改变后的距离做差获得脚的尺寸,再通过尺寸与距离的转换得到正确的鞋码(此处使用标准鞋码)。

        1. 所需元器件

        超声波模块 1个
        TPYBoard v102板子 1块
        四位数码管 1个
        micro USB数据线 1条
        杜邦线 若干

        2. 超声波模块工作原理

        (1)采用IO口TRIG触发测距,给最少10us的高电平信号。
        (2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回。
        (3)有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2。
        如下图接线,VCC 供 5V电源, GND 为地线,TRIG 触发控制信号输入,ECHO 回响信号输出等四个接口端。

    1.png

        3. 控制四位数码管显示数字

        2.png
    3.png

        (1)1、2、3、4是“位选”针脚,用于控制具体哪一位显示。
        (2)a、b、c、d、e、f、g、dp(h)是“段选”针脚,用法和1位数码管一致,用来显示具体的数值。

    4.png

        4. 接线图
    5.png

        5. 源代码
    1. import pyb
    2. from pyb import Pin
    3. from pyb import Timer
    4. from machine import SPI,Pin
    5.   
    6. Trig = Pin('X2',Pin.OUT_PP)
    7. Echo = Pin('X1',Pin.IN)
    8. num=0
    9. flag=0
    10. run=1
    11. def start(t):
    12.          global flag
    13.          global num
    14.          if(flag==0):
    15.                    num=0
    16.          else:
    17.                    num=num+1
    18. def stop(t):
    19.          global run
    20.          if(run==0):
    21.                    run=1
    22. start1=Timer(1,freq=10000,callback=start)
    23. stop1=Timer(4,freq=2,callback=stop)
    24.   
    25. sizecc = [35,36,37,38,39,40,41,42,43,44,45,46,47]#280-47 -5
    26. while True:
    27.          if(run==1):
    28.                    Trig.value(1)
    29.                    pyb.udelay(100)
    30.                    Trig.value(0)
    31.                    while(Echo.value()==0):
    32.                                      Trig.value(1)
    33.                                      pyb.udelay(100)
    34.                                      Trig.value(0)
    35.                                      flag=0
    36.                    if(Echo.value()==1):
    37.                                      flag=1
    38.                                      while(Echo.value()==1):
    39.                                                flag=1
    40.                    if(num!=0):
    41.                                      #print('num:',num)
    42.                                      distance=num/1000*34000/2
    43.                                      print('Distance')
    44.                                      print(distance,'mm')
    45.                                      cc = (int)((distance-215)/5)
    46.                                      if cc<0:
    47.                                                cc=0
    48.                                      elif cc>12:
    49.                                                cc=12
    50.                                      print(sizecc[cc],'cc')
    51.                    flag=0
    52.                    run=0
    复制代码


    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则



    手机版|小黑屋|与非网

    GMT+8, 2024-4-24 07:29 , Processed in 0.119909 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.