提问

MicroPython实例之PYBoard v115鞋码匹配仪

DIY专区  / 倒序浏览   © 著作权归作者本人所有

#楼主# 2018-6-9

跳转到指定楼层
鞋码匹配仪,利用超声波测距的原理。通过使用超声波遇到障碍返回的特性,计算超声波放出与返回的时间计算来测定障碍与超声波模块的距离。


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


    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. 源代码[code brush:python;toolbar:false;]import pyb
from pyb import Pin
from pyb import Timer
from machine import SPI,Pin
   
Trig = Pin('X2',Pin.OUT_PP)
Echo = Pin('X1',Pin.IN)
num=0
flag=0
run=1
def start(t):
         global flag
         global num
         if(flag==0):
                   num=0
         else:
                   num=num+1
def stop(t):
         global run
         if(run==0):
                   run=1
start1=Timer(1,freq=10000,callback=start)
stop1=Timer(4,freq=2,callback=stop)
   
sizecc = [35,36,37,38,39,40,41,42,43,44,45,46,47]#280-47 -5
while True:
         if(run==1):
                   Trig.value(1)
                   pyb.udelay(100)
                   Trig.value(0)
                   while(Echo.value()==0):
                                     Trig.value(1)
                                     pyb.udelay(100)
                                     Trig.value(0)
                                     flag=0
                   if(Echo.value()==1):
                                     flag=1
                                     while(Echo.value()==1):
                                               flag=1
                   if(num!=0):
                                     #print('num:',num)
                                     distance=num/1000*34000/2
                                     print('Distance')
                                     print(distance,'mm')
                                     cc = (int)((distance-215)/5)
                                     if cc<0:
                                               cc=0
                                     elif cc>12:
                                               cc=12
                                     print(sizecc[cc],'cc')
                   flag=0
                   run=0[/code]
4.png
转播转播 分享淘帖
回复

使用道具

成为第一个回答人

B Color Link Quote Code Smilies
Archiver|手机版|小黑屋|MakerTime 创客时代  
Powered by Discuz! X3.3  © 2001-2017 Comsenz Inc.