HC-SR04超声波传感器和Arduino IDE环境下的ESP32

HC-SR04超声波传感器简介

HC-SR04超声波传感器使用声纳来确定与物体的距离。该传感器的读数范围为2厘米至400厘米(0.8英寸至157英寸),精度为0.3厘米(0.1英寸),这对大多数业余爱好者的项目来说都很好。此外,该模块还配有超声波发射器和接收器模块。
下图显示了HC-SR04超声波传感器。
在这里插入图片描述
本教程涵盖以下内容:
A.超声波传感器HC-SR04引脚
B.将超声波传感器HC-SR04连接到ESP32
C.利用超声波传感器HC-SR04与ESP32进行物体距离测量
D.通过ESP32和HC-SR04在显示屏上显示目标距离

超声波传感器技术数据

电源 5v DC
工作电流15 mA
工作频率40khz
最大射程4米 最小距离2厘米
测量角度15º
分辨率0.3 cm
触发输入信号 10us TTL脉冲
回波输出信号 TTL脉冲与距离范围成比例
尺寸45mm x 20mm x 15mm

HC-SR04超声波传感器引脚

Vcc—传感器供电(5V)
Trig—输入引脚
Echo—输出引脚
GND—GND

HC-SR04超声波传感器工作原理

超声波传感器使用声纳来确定到物体的距离。
超声波发射器(Trig)发出高频声音(40kHZ)。声音在空气中传播。如果它找到一个对象,它就会弹回声波。超声波接收器(Echo)接收反射的声波。
在这里插入图片描述
考虑到声音在空气中的速度和传播时间(信号从传送到接收经过的时间),我们可以计算出到物体的距离。公式如下:

到物体的距离=((声速)*时间)/22

硬件部分

在这里插入图片描述

接线图

在这里插入图片描述

代码-获取距离到一个对象使用HC-SR04超声波传感器和ESP32

const int trigPin = 5;
const int echoPin = 18;

//define sound speed in cm/uS
#define SOUND_SPEED 0.034
#define CM_TO_INCH 0.393701

long duration;
float distanceCm;
float distanceInch;

void setup() {  

Serial.begin(115200);  // 开始串行通信
pinMode(trigPin, OUTPUT);  // 将trigPin设置为输出
 pinMode(echoPin, INPUT);   // 将echoPin设置为输入
 }
 void loop() { 
  // 清除trigPin  
  digitalWrite(trigPin, LOW);  
  delayMicroseconds(2);  
  // 将trigPin设置为HIGH状态10微秒
  digitalWrite(trigPin, HIGH);  
  delayMicroseconds(10);  
  digitalWrite(trigPin, LOW);   
//读取echoPin,返回声波传播时间(微秒)  
duration = pulseIn(echoPin, HIGH);    
  //计算距离  
  distanceCm = duration * SOUND_SPEED/2;    
  // 换算成英寸  
  distanceInch = distanceCm * CM_TO_INCH;   
   // 在串行监视器中打印距离  
   Serial.print("Distance (cm): ");  
   Serial.println(distanceCm);  
   Serial.print("Distance (inch): ");  
   Serial.println(distanceInch);    
   delay(1000);}

效果图如下:
在这里插入图片描述

ESP32与HC-SR04和OLED显示屏

接线图如下
在这里插入图片描述
在编程之前,要对arduino IDE进行库文件添加。
步骤如下:
Sketch > Library > Manage Libraries, 搜索“SSD1306,”
在这里插入图片描述
再进行GFX库添加,也是直接在加载库中搜索“GFX”即可。
在这里插入图片描述

程序如下

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED显示宽度,单位为像素
#define SCREEN_HEIGHT 64 // OLED显示高度,单位为像素

// 连接到I2C (SDA, SCL引脚)的SSD1306显示器的声明
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

const int trigPin = 5;
const int echoPin = 18;

//定义声速,单位为cm/uS
#define SOUND_SPEED 0.034
#define CM_TO_INCH 0.393701

long duration;
int distanceCm;
int distanceInch;

void setup() {
  Serial.begin(115200);  
  pinMode(trigPin, OUTPUT); // 将trigPin设置输出
  pinMode(echoPin, INPUT); // 将echoPin设置为输入

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));   
     for(;;);  
     }
delay(500); 
//显示设置
display.clearDisplay();  
display.setTextSize(2);  
display.setTextColor(WHITE);
}

void loop() {
  // 清除trigPin
  digitalWrite(trigPin, LOW);  
  delayMicroseconds(2);  
  // 将trigPin设置为HIGH状态10微秒
  digitalWrite(trigPin, HIGH); 
   delayMicroseconds(10);  
   #(trigPin, LOW);

// 读取echoPin,返回声波传播时间(微秒)
  duration = pulseIn(echoPin, HIGH);
  
  // 计算距离
  distanceCm = duration * SOUND_SPEED/2;
  
  // 换算成英寸
  distanceInch = distanceCm * CM_TO_INCH;
  
  // 在串行监视器中打印距离
  Serial.print("Distance (cm): ");
  Serial.println(distanceCm);
  Serial.print("Distance (inch): ");
  Serial.println(distanceInch);

  display.clearDisplay();
  display.setCursor(0, 25);
  //显示距离(厘米)
  display.print(distanceCm);
  display.print(" cm");
  
  // 显示距离(英寸),此处注释,若是使用,解除注释即可
  /* display.print(distanceInch);
  display.print(" in");*/
  display.display(); 

  delay(500);  
}

效果如下

在这里插入图片描述

(外网教程解读)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方圆工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值