当前位置: 首页 > article >正文

物联网之超声波测距模块、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);
}

http://www.kler.cn/news/359971.html

相关文章:

  • 【Flutter】状态管理:高级状态管理 (Riverpod, BLoC)
  • 计算机网络最后错题本-cy
  • Centos7搭建minio对象存储服务器
  • Unity之如何使用Unity Cloud Build云构建
  • 【算法系列-栈与队列】栈与队列的双向模拟
  • 新手向-pkg-config的原理和使用
  • (六) 进程控制
  • Android中的SSL/TLS加密及其作用
  • centos系统查看端口占用情况并杀死进程
  • Java缓存技术(java内置缓存,redis,Ehcache,Caffeine的基本使用方法及其介绍)
  • 机器学习驱动的智能化电池管理技术与应用
  • 音乐如何去除人声只剩背景音乐?轻松享受背景旋律
  • 戴尔电脑win11找不到D盘的解决办法
  • Python 学习笔记(十三)—— urllib获取网页
  • `connection.commit()` 和 `res = cur.fetchall()`的区别是什么
  • RTMP、FFmpeg安装测试
  • Java中巧用 parseInt 实现高效数值变换,进制转换
  • 13. Request请求与Response响应
  • 后端绘制二维码图片(支持带Logo)
  • Android中的内存泄漏及其检测方式