微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > Python开发实例:TPYBoard开发板超声波测距仪DIY教程实例

Python开发实例:TPYBoard开发板超声波测距仪DIY教程实例

时间:10-02 整理:3721RD 点击:
        说到超声波测距,最贴近我们日常生活的要数倒车雷达了。时至今日,越来越多的汽车都配备了倒车雷达,倒车雷达的主要作用是在倒车时,利用超声波原理,由装置于车尾保险杠上的探头发送超声波撞击障碍物后反射至声波探头,从而计算出车体与障碍物之间的实际距离,再提示给驾驶者,使停车和倒车更容易、更安全。
    今天就给大家带来这一款DIY爱好者都比较熟悉的东东——超声波测距仪的DIY教程(先看一下具体的视频演示吧)。

https://v.qq.com/x/page/t0347sgloth.html

    详细的制作教程可参考www。micropython。net。cn


   1.实验目的
    1. 学习在PC机系统中扩展简单I/O 接口的方法。
    2. 进一步学习编制数据输出程序的设计方法。
    3. 学习超声波模块的测距原理。
    4. 学习LCD5110接线方法
    5. 学习TPYboard控制超声波模块测距。
    2.所需元器件
    超声波模块一个
    TPYBoard板子一块
    5110LCD显示屏一个
    数据线一条
    杜邦线若干



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


    4.控制5110显示屏显示6x8字符
    先看一下LCD5110针脚含义吧(注意:LCD5110的针脚有些不一样的)
    TPYBoard的针脚与5110的针脚对应关系如下:
    TPYBoard       LCD5110    memo
    ----------------------------
    # any   Pin        => RST       Reset pin (0=reset, 1=normal)
    # any   Pin        => CE        Chip Enable (0=listen for input,   1=ignore input)
    # any   Pin        => DC        Data/Command (0=commands, 1=data)
    #   MOSI          => DIN       data flow (Master out, Slave in)
    #   SCK           => CLK       SPI clock
    # 3V3   or any Pin  => VCC       3.3V logic voltage (0=off, 1=on)
    # any   Pin        => LIGHT     Light (0=on, 1=off)
    #   GND           => GND
    还是看不明白的话,直接上针脚编号吧
    TPYBoard       LCD5110    memo
    ————————————————————————————
    Y10        => RST       Reset pin (0=reset, 1=normal)
    Y11        => CE        Chip Enable (0=listen for input, 1=ignore input)
    Y9         => DC        Data/Command (0=commands, 1=data)
    X8         => DIN       data flow (Master out, Slave in)
    X6         => CLK       SPI clock
    VCC
    Y12        => LIGHT     Light (0=on, 1=off)
    GND


    5.源代码

  1. import pyb
  2. from pyb import Pin
  3. from pyb import Timer
  4. import upcd8544
  5. from machine import SPI,Pin
  6.   
  7. Trig = Pin('X2',Pin.OUT_PP)
  8. Echo = Pin('X1',Pin.IN)
  9. num=0
  10. flag=0
  11. run=1
  12. def start(t):
  13.     global flag
  14.     global num
  15.     if(flag==0):
  16.         num=0
  17.     else:
  18.         num=num+1
  19. def stop(t):
  20.     global run
  21.     if(run==0):
  22.         run=1
  23. start1=Timer(1,freq=10000,callback=start)
  24. stop1=Timer(4,freq=2,callback=stop)
  25.   
  26. while True:
  27.     if(run==1):
  28.         SPI = pyb.SPI(1) #DIN=>X8-MOSI/CLK=>X6-SCK
  29.         #DIN =>SPI(1).MOSI 'X8' data flow (Master out, Slave in)
  30.         #CLK =>SPI(1).SCK  'X6' SPI clock
  31.         RST    = pyb.Pin('Y10')
  32.         CE     = pyb.Pin('Y11')
  33.         DC     = pyb.Pin('Y9')
  34.         LIGHT  = pyb.Pin('Y12')
  35.         lcd_5110 = upcd8544.PCD8544(SPI, RST, CE, DC, LIGHT)
  36.         Trig.value(1)
  37.         pyb.udelay(100)
  38.         Trig.value(0)
  39.         while(Echo.value()==0):
  40.             Trig.value(1)
  41.             pyb.udelay(100)
  42.             Trig.value(0)
  43.             flag=0
  44.         if(Echo.value()==1):
  45.             flag=1
  46.             while(Echo.value()==1):           
  47.                 flag=1
  48.         if(num!=0):
  49.             #print('num:',num)
  50.             distance=num/10000*34000/2
  51.             print('Distance')
  52.             print(distance,'cm')
  53.             lcd_5110.lcd_write_string('Distance',0,0)
  54.             lcd_5110.lcd_write_string(str(distance),6,1)
  55.             lcd_5110.lcd_write_string('cm',58,1)
  56.             lcd_5110.lcd_write_string('This is a test of Distance',0,2)
  57.         flag=0
  58.         run=0

复制代码



可以,不错,感谢分享!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top