极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 929|回复: 3

Micropython 进阶小实验 如何用单片机制作鞋码匹配仪

[复制链接]
发表于 2018-1-4 10:29:46 | 显示全部楼层 |阅读模式
本帖最后由 董董soul 于 2018-1-4 12:00 编辑

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

HEETNC4TOCMKJU21}T35}D5.png C2KE}9N~JHJMPCHZ6)%}MBX.png

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

数码管(位选)  TPYBoard v10x开发板
1              X3
2              X4
3              X5
4              GND(鞋码匹配用不到四位所以该脚拉低)
a              X6
b              X7
c              X8
d              Y9
e              Y10
f               Y11
g              Y12
dp(h)        留空(此脚为小数点的控制脚悬空即可)
5. 接线图
CY`1[A5{1FLYNCA7BDKNYE0.jpg
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

复制代码
回复

使用道具 举报

发表于 2018-1-5 09:05:59 | 显示全部楼层
不展示一下视频?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-5 16:38:52 | 显示全部楼层
maxims 发表于 2018-1-5 09:05
不展示一下视频?

等我录一个  回头传上去。自己做的有点糙哈哈哈
回复 支持 反对

使用道具 举报

发表于 2018-1-5 17:13:34 | 显示全部楼层
不用VL53L0X更精准?
回复 支持 反对

使用道具 举报

高级模式  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2018-7-16 11:10 , Processed in 0.084996 second(s), 7 queries , File On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表