爱板网论坛

查看: 130|回复: 0

[开发板硬件] Micropython进阶小实验 如何用单片机制作鞋码匹配仪

[复制链接]

24

主题

5

好友

306

积分

秀才

Rank: 3Rank: 3

  • TA的每日心情
    慵懒
    2018-1-6 09:01
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2018-1-4 09:53:46 |显示全部楼层
      非常简单的小制作,适合新手以及初学者 入门学习,也请各位大神多多指点。自己测了下稍微有些偏差,显示鞋码比我实际鞋码大了一号,各位大大有没有意见我改正下。下面是具体的制作过程和代码。
    1.原理
    鞋码匹配仪,利用超声波测距的原理。通过使用超声波遇到障碍返回的特性计算超声波放出与返回的时间计算来测定障碍超声波模块的距离
    鞋码匹配仪的固有大小已知,在脚放入时,大小会发生改变 使用已知距离对改变后的距离做差获得脚的尺寸,通过尺寸与距离的转换得到正确的鞋码(此处使用标准鞋码)。
    2. 所需元器件(某宝能买到 挺便宜的)
    · 超声波模块 1
    · TPYBoard v102板子 1
    · 四位数码管 1
    · micro USB数据线 1
    · 杜邦线 若干
    3. 超声波模块工作原理
    (1)采用IOTRIG触发测距,给最少10us的高电平信号。
    (2)模块自动发送 8 40khz 的方波,自动检测是否有信号返回。
    (3)有信号返回,通过 IO ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2
    如下图接线,VCC 5V电源GND 为地线,TRIG 触发控制信号输入,ECHO 回响信号输出等四个接口端。
      4. 控制四位数码管显示数字

            11234是“位选”针脚用于控制具体哪一位显示。
            2abcdefg、dp(h)是“段”针脚用法1数码管一致,用来显示具体的数值。

    数码管(位选)
    TPYBoard v10x开发板
    1
    X3
    2
    X4
    3
    X5
    4
    GND(鞋码匹配用不到四位所以该脚拉低)

    数码管(段选)
    TPYBoard v10x开发板
    a
    X6
    b
    X7
    c
    X8
    d
    Y9
    e
    Y10
    f
    Y11
    g
    Y12
    dp(h)
    留空(脚为小数点的控制脚悬空即可)
    5. 接线图
    6. 源代码
      1. import pyb
      2. from pyb import Pin
      3. from pyb import Timer
      4. from machine import SPI,Pin
      5. Trig = Pin('X2',Pin.OUT_PP)
      6. Echo = Pin('X1',Pin.IN)
      7. num=0
      8. flag=0
      9. run=1
      10. def start(t):
      11. global flag
      12. global num
      13. if(flag==0):
      14. num=0
      15. else:
      16. num=num+1
      17. def stop(t):
      18. global run
      19. if(run==0):
      20. run=1
      21. start1=Timer(1,freq=10000,callback=start)
      22. stop1=Timer(4,freq=2,callback=stop)
      23. sizecc = [35,36,37,38,39,40,41,42,43,44,45,46,47]#280-47 -5
      24. while True:
      25. if(run==1):
      26. Trig.value(1)
      27. pyb.udelay(100)
      28. Trig.value(0)
      29. while(Echo.value()==0):
      30. Trig.value(1)
      31. pyb.udelay(100)
      32. Trig.value(0)
      33. flag=0
      34. if(Echo.value()==1):
      35. flag=1
      36. while(Echo.value()==1):
      37. flag=1
      38. if(num!=0):
      39. #print('num:',num)
      40. distance=num/1000*34000/2
      41. print('Distance')
      42. print(distance,'mm')
      43. cc = (int)((distance-215)/5)
      44. if cc<0:
      45. cc=0
      46. elif cc>12:
      47. cc=12
      48. print(sizecc[cc],'cc')
      49. flag=0
      50. run=0
      复制代码


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /1 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2018-1-24 15:38 , Processed in 0.476464 second(s), 9 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部