物联网之超声波测距模块、arduino、esp32

MENU

  • 原理
  • 硬件电路设计
  • 软件程序设计

  • 原理

    超声波是一种频率高于20000Hz的声波,功率密度为p≥0.3W/cm,它的方向性好,反射能力强,易于获得较集中的声能。超声波用于许多不同的领域,比如检测物体和测量距离,清洗设备,消毒杀菌等。
    模块
    超声波传感器使用声纳来确定与物体的距离。使用的超声波模块由2个超声波探头组成。
    1、T表示Transmitter(发射),负责发送超声波信号;
    2、R表示Receiver(接收),负责接收回响信号。
    如果在使用过程中,对其中任意一个探头进行遮挡,都会使超声波无法正常测量距离。
    底部有四个引脚,分别是VCC、GND、TRIG和ECHO。
    1、VCC:5V供电引脚;
    2、GND:接地;
    3、TRIG:控制信号输入;
    4、ECHO:回响信号输出。

    方波
    以上时序图表示超声波模块的基本工作原理。
    1、采用IO口TRIG触发测距,给一个10us的高电平信号;
    2、模块自动发送8个40khz的方波,自动检测是否有信号返回;
    3、有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
    测试距离 = (高电平时间 * 声速(340M/S)) / 2

    回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。
    距离 = 高电平时间 * 声速(340m/s) / 2


    硬件电路设计

    物料清单(BOM表)

    材料名称 数量
    0.96寸OLED屏幕 1
    杜邦线(跳线) 若干
    面包板 1
    超声波模块 1
    电路

    软件程序设计

    该程序的功能是通过超声波模块测算距离并显示在OLED屏幕上。

    #include <SPI.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    
    // 定义超声波模块引脚
    #define TRIG 13
    #define ECHO 14
    
    // OLED 显示屏尺寸
    #define SCREEN_WIDTH 128
    #define SCREEN_HEIGHT 64
    
    // 软件SPI总线
    #define OLED_MOSI 19
    #define OLED_CLK 18
    #define OLED_DC 2
    #define OLED_CS 4
    #define OLED_RESET 15
    
    Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
    
    void setup() {
      // 初始化超声波模块引脚
      pinMode(TRIG, OUTPUT);
      pinMode(ECHO, INPUT);
    
      // 初始化 OLED
      oled.begin();
      // 设置字体大小
      oled.setTextSize(2);
      // 设置文本颜色
      oled.setTextColor(SSD1306_WHITE);
      // 显示内容
      oled.display();
    }
    
    void loop() {
      // 清除trigPin
      digitalWrite(TRIG, LOW);
      delay(2);
      // 将trigPin设置为HIGH状态10微秒
      digitalWrite(TRIG, HIGH);
      delay(10);
      digitalWrite(TRIG, LOW);
      // 读取echoPin,返回声波传播时间(微秒)
      float time = pulseIn(ECHO, HIGH);
      // 计算距离
      float distance = time * 0.034 / 2;
    
      // 清空屏幕
      oled.clearDisplay();
      // 设置光标位置
      oled.setCursor(0, 15);
      // 显示文字
      oled.print("Distance: ");
      oled.print(distance);
      oled.print("cm");
      // 刷新屏幕
      oled.display();
    
      // 延迟一段时间后更新显示
      delay(100);
    }
    

    作者:编程录(MJ682517)

    物联沃分享整理
    物联沃-IOTWORD物联网 » 物联网之超声波测距模块、arduino、esp32

    发表回复