MicroPythonESP32 超声波测距传感器应用

MicroPython&ESP32超声波测距传感器应用

在这里插入图片描述
在这里插入图片描述

  • MicroPython GPIO的简单操作
    • MicroPython 库导入
    from machine import Pin
    import time
    
    • GPIO 普通输入输出
    trig = machine.Pin(27,machine.Pin.OUT) #设置输出
    trig.value(0) #IO输出电平状态(0:低电平 1:高电平)
    echo = machine.Pin(26,machine.Pin.IN) #设置输入
    print(echo.value()) #打印输入电平状态(0:低电平 1:高电平)
    '''
    超声波trig管脚发送10us高电平开始测距
    声音在空气中传播速度340m/s,(340*1000)mm/1000000us= 0.34mm/us
    记录echo管脚高电平持续时间 
    所测声音传播时间为遇到障碍的往返时间所测距离/2
    '''
    trig.value(1)
    time.sleep_us(10)
    trig.value(0)while echo.value() != 1: #echo管脚电平为0时未发送超声波信号pass #空运行
    startTime = time.ticks_us() #发送超声波信号后记录开始时间
    while echo.value() != 0: #echo管脚电平为1时未接收超声波信号pass #空运行
    endTime = time.ticks_us()   #接收超声波信号后记录结束时间
    timediff = endTime - startTime #超声波空中运行时间distance = (timediff * 0.34)/2 #超声波往返距离 = 超声波空中运行时间*声音在空气中传播速度;实际距离 = 超声波往返距离/2print("distance:",distance,"mm") #打印实际距离
    
    • GPIO 中断输入
    '''
    创建超声波测距类
    '''
    class Sound_distance(object):def __init__(self):self.trig = machine.Pin(27,machine.Pin.OUT) #设置输出self.trig.value(0) #IO输出电平状态(0:低电平 1:高电平)self.echo = machine.Pin(26,machine.Pin.IN) #设置输入self.echo.irq(trigger=(self.echo.IRQ_RISING|self.echo.IRQ_FALLING),handler = self.__irq) #设置中断触发以及回调函数self.timemark =[0,0] #创建时间记录表self.index = 0 #'''准备发送超声波'''self.trig.value(1)time.sleep_us(10)self.trig.value(0)'''中断回调函数'''    def __irq(self,souce):markTime = time.ticks_us()if self.index == 0:if self.echo.value() == 1:self.timemark[self.index] = markTimeself.index += 1elif self.index == 1:if self.echo.value() == 0:self.timemark[self.index] = markTimeself.index += 1'''实际距离计算函数'''    def distance(self):while self.index<=1:passself.index = 0passTime = self.timemark[1]-self.timemark[0]return passTime/2*0.34distance = Sound_distance() #实例化超声波测距类
    print("distance:",distance.distance(),"mm") #打印测量距离


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部