基于Openmv的超声波测距

基于Openmv的超声波测距_第1张图片

超声波测距需要openmv哪些资源?

openmv是一种基于micro机器视觉模块,它的功能主要是进行图像处理,同时也可以利用它的外设资源进行拓展。openmv的美妙在于具有 MicroPython 板载解析器, 因此可以把Python脚本下载到openmv模块中,板级编译基于(MicroPython)机器视觉算法。简单来讲,就是在openmv IDE里面用Python语言编写好程序可以直接通过编译到模块中。不用通过烧写器将程序烧写进芯片。超声波测距主要用到主控芯片的定时器和外部中断。

超声波测距原理解析

超声波(HC-SR04)测距时序:
基于Openmv的超声波测距_第2张图片
触发信号:通过trig引脚提供一个超过10ms的高电平信号;
内部信号处理:内部会发出8个40HZ的脉冲信号并检测回波。
输出响应信号:从收到回波开始,输出信号线echo会输出高电平,高电平的时间长短与所测的距离成正比。
距离的计算公式:s=高电平时间*声速(340m/s)/2

程序代码

#openmv利用超声波测距
import time,utime,pyb
from pyb import Pin

wave_echo_pin = Pin('P7', Pin.IN, Pin.PULL_NONE)
wave_trig_pin = Pin('P8', Pin.OUT_PP, Pin.PULL_DOWN)

wave_distance = 0
tim_counter = 0
flag_wave = 0

#超声波启动
def wave_start():
    wave_trig_pin.value(1)
    utime.sleep_us(15)
    wave_trig_pin.value(0)

#超声波距离计算
def wave_distance_calculation():
    #全局变量声明
    global tim_counter
    #频率f为0.2MHZ 高电平时间t=计数值*1/f                     
    wave_distance = tim_counter*5*0.017
    #输出最终的测量距离(单位cm)
    print('wave_distance',wave_distance)

#超声波数据处理
def wave_distance_process():
    global flag_wave
    if(flag_wave == 0):
        wave_start()
    if(flag_wave == 2):
        wave_distance_calculation()
        flag_wave = 0

#配置定时器
tim =pyb.Timer(1, prescaler=720, period=65535)  #相当于freq=0.2M

#外部中断配置
def callback(line):
    global flag_wave,tim_counter
    #上升沿触发处理
    if(wave_echo_pin.value()):
        tim.init(prescaler=720, period=65535)
        flag_wave = 1
    #下降沿
    else:
        tim.deinit()
        tim_counter = tim.counter()
        tim.counter(0)
        extint.disable()
        flag_wave = 2
#中断配置
extint = pyb.ExtInt(wave_echo_pin, pyb.ExtInt.IRQ_RISING_FALLING, pyb.Pin.PULL_DOWN, callback)

while(True):
    wave_distance_process()
    time.sleep(100)

要点

1.超声波的GND一定要与openmv模块的地相连,否则没办法正确读取echo
2.定时器的打开:tim.init(prescaler=720, period=65535)
定时器的关闭:tim.deinit()
3.中断配置: extint = pyb.ExtInt(pin, mode, pull, callback)
4.引脚状态读取:pin.value()

详细配置信息参考:
中断:
http://docs.openmv.io/reference/isr_rules.html
外部中断:.
http://docs.openmv.io/reference/isr_rules.html
io口配置:
http://docs.openmv.io/library/pyb.Timer.html
定时器:
http://docs.openmv.io/library/pyb.Timer.html

你可能感兴趣的:(openmv开发,单片机)