美文网首页
(6)ESP32+Python 做一个超声波探测器

(6)ESP32+Python 做一个超声波探测器

作者: ScottX | 来源:发表于2022-01-16 08:49 被阅读0次

我们经常在智能小车上都能看到一个长这么样得一个东西。

image.png

这个东西就是一个超声波测距模块,一共有4个引脚VCC,Trig,Echo,Gnd。

VCC:接VCC电源,一般都是5V,但是现在市面上也有支持3.3V的

Trig: 给这个引脚输入一个10us的高电平,就可以触发测距。

Echo: 在测距结束时,这个引脚会输出一个高电平。电平的宽度经过计算的后,就是测距的距离

GND:接地

这里有一个计算公式:

测距距离 = (高电平的时间 * 音速【340M/S】/2)

简单的来讲实现原理是当我们需要测试距离时,

  1. 把Trig输入10us的高电平,然后拉低。测距开始。

  2. 当Echo收到发出的信号后,会把引脚的电平拉高。

  3. 计算第一步和第二步的时间差。

  4. 套入公式,计算距离(音速的时间是340米每秒,第一步和第二步的时间是US,所以计算时要用10000计算回来)

注意,超声波是一种波,并不是百分之百的和下面的图一样,发送的是直线。

image.png

在了解好原理后,把传感器和硬件进行连接,然后开始写代码吧。

第一个实现,我们还是采用原生的写法。


from machine import Pin
import utime

class ORGHCSR04:

    trig = None
    echo = None

    def __init__(self): 
        global trig, echo
        trig = Pin(25, Pin.OUT)
        echo = Pin(26, Pin.IN)
        trig.off()
        echo.off()

    def start_scan(self): 
        while True:
            self.start_hc() 
            utime.sleep_ms(800) # 这里根据需要设定SLEEP时间
            print('>_<')

    def start_hc(self):
        global trig, echo
        trig.on()
        utime.sleep_us(10)
        trig.off()

        while echo.value() == 0 : 
            pass

        start_us = utime.ticks_us()
        
        while echo.value() == 1 : 
            pass

        end_us = utime.ticks_us()
        
        rang_us = utime.ticks_diff(end_us,start_us)/10000

        dist = rang_us*340/2
        print("dist is: %0.2f CM" % dist)

完成后烧录到开发板进行测试


image.png

如果要用HAAS进行,首先需要在board.json当中进行定义

{
    "name": "haasedu",
    "version": "1.0.0",
    "io": {
        "hc_triger":{ 
          "type": "GPIO",
          "port": 25,
          "dir": "output",
          "pull": "pulldown"
        },
        "hc_echo":{ 
          "type": "GPIO",
          "port": 26,
          "dir": "input",
          "pull": "pulldown"
        } 
    },
    "debugLevel": "ERROR",
    "repl": "disable"
  }

Haas 实现代码如下:

import utime
from driver import GPIO
class HAASHCSR04:
    triger_gpio = None
    echo_gpio = None
    def __init__(self): 
        global triger_gpio, echo_gpio  
        triger_gpio = GPIO()
        triger_gpio.open('hc_triger')
        triger_gpio.write(0)
        echo_gpio = GPIO()
        echo_gpio.open('hc_echo')
        echo_gpio.write(0)
        
    def start_scan(self):  
        while True:
            self.start_hc() 
            utime.sleep_ms(800) # 这里根据需要设定SLEEP时间
          
    def start_hc(self):
        global triger_gpio, echo_gpio  
        triger_gpio.write(1)
        utime.sleep_us(10)
        triger_gpio.write(0)
        while(echo_gpio.read()==0):  
            pass
        start_us = utime.ticks_us()  
        
        while(echo_gpio.read()==1):  
            pass
        end_us = utime.ticks_us()
        
        rang_us = utime.ticks_diff(end_us,start_us)/10000
        dist = rang_us*340/2
        print("dist is: %0.2f CM" % dist)

但是,上面代码的输出都是通过print输出的,不太灵性。之前我们有做过连接OLED,这里我们可以把OLED也用起来。

效果如下,我们还可以把之前的红绿灯也插上去。红灯停,绿灯行。哈哈。

image.png

相关文章

  • (6)ESP32+Python 做一个超声波探测器

    我们经常在智能小车上都能看到一个长这么样得一个东西。 这个东西就是一个超声波测距模块,一共有4个引脚VCC,Tri...

  • (7)ESP32 Python 使用看门狗 脱坑HC-SR04

    在使用超声波探测器的时候,因为计算距离是需要靠echo引脚的高低电平变化的时间差来进行数据的判断。在某些未知的情况...

  • 超声波测厚仪和涂层测厚仪有什么不同

    超声波测厚仪和涂层测厚仪有什么不同?超声波测厚仪是利用超声波的原理对金属、塑料、陶瓷、玻璃及其他任何超声波的良导体...

  • 【Arduino基础教程】HC-SR04超声波测距模块

    超声波测距原理:通过超声波发射装置发出超声波,根据接收器接到超声波时的时间差就可以知道距离。 模块特征 HC-SR...

  • FRC | RRF Prog 132 超声波传感器

    06/21/2019 什么是超声波传感器 超声波传感器是利用超声波信号来测量距离的传感器。超声波是振动频率高于 2...

  • 2019-07-31

    超声波清洗机中超声波技术的进展 超声波清洗技术的特点与机理超声波清洗与其它清洗相比具有洗净率高、残留物少(见表1)...

  • laser assit AF技术

    激光辅助对焦在单反上的前生是潜艇的超声波测距系统。 超声波测距原理就是发出一组超声波,接收器根据超声波的返回时间来...

  • 中级班 3 超声波传感器

    第六次课超声波传感器 1.超声波传感器 超声波测距模块是用来测量距离的一种产品,通过发送和就接收超声波,利用时间差...

  • 企学教育消防工程师 | 每日一练

    实务 1.关于火灾探测器的说法,正确的是( ) A.点型感温探测器是不可复位探测器 B.感烟型火灾探测器都是点型火...

  • 超声波测厚仪校准注意事项

    为了保证超声波测厚仪的测量精度及可靠性,以确保检测数据的准确,可靠,保证检测的质量,需要对超声波测厚仪校准 超声波...

网友评论

      本文标题:(6)ESP32+Python 做一个超声波探测器

      本文链接:https://www.haomeiwen.com/subject/dwoocrtx.html