前言
HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达3mm,包括发射器、接收器与控制电路,它是一种压电式传感器,利用电致伸缩现象而制成。在压电材料切片上(如石英晶体、压电陶瓷、钛酸铅钡等)施加交变电压,使它产生电致伸缩振动而产生超声波。当外加交变电压的频率等于晶片的固有频率而产生共振,这时产生的超声波最强。压电式超声波接收器一般是利用超声波发生器的逆效应进行工作的,其结构和超声波发生器基本相同,有时就用同一个换能器兼作发生器和接收器两种用途。当超声波作用到压电晶片上时使晶片伸缩,在晶片的两个界面上便产生交变电荷后转换成电压经放大送到测量电路,最后记录或显示出来。
电气参数
工作电压 | DC 5V |
---|---|
工作电流 | 15mA |
工作频率 | 40HZ |
最远射程 | 4m |
测量角度 | 15度 |
输入触发信号 | 10uS的TTL脉冲 |
输出回响信号 | 输出TTL电平信号,与射程成正比 |
基本工作原理
(1)采用 IO 口 TRIG 触发测距,给最少 10us 的高电平信号。
(2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;
(3)有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;
时序图
以上时序图表明你只需要提供一个 10uS 以上脉冲触发信号,该模块内部将发出 8 个 40kHz 周期电平并检测回波。一旦检测到有回波信号则输出回响信号。 回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式:uS/58=厘米或者 uS/148=英寸;或是:距离= 高电平时间*声速(340M/S)/2;建议测量周期为 60ms 以上,以防止发射信号对回响信号的影响。
接线
Arduino | LCD1602 | HC-SR04 |
---|---|---|
5V | VCC | VCC |
GND | GND | GND |
A4 | SDA | - |
A5 | SCL | - |
Trig | - | A2 |
Echo | - | A3 |
程序
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
const int TrigPin = A2;
const int EchoPin = A3;
float cm;
void setup()
{
lcd.init(); //初始化LCD
lcd.backlight(); //打开LCD背光
Serial.begin(9600); //初始化串口
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop()
{
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //echo time conversion into a distance
cm = (int(cm * 100.0)) / 100.0; //keep two decimal places
Serial.print("Distance:");
Serial.print(cm);
Serial.print("cm");
lcd.setCursor(0,0);
lcd.print("Distance:");
lcd.setCursor(9,0);
lcd.print(cm);
lcd.setCursor(14,0);
lcd.print("cm");
Serial.println();
delay(1000);
}
实验结果
通过LCD1602实时显示所测量的距离结果:
总结
1.测距时,被测物体的面积不少于 0.5平方米且平面尽量要求平整,否则会影响测量结果。
2.如果测试面不是很规则或则测试远距离物体时,可采用多次测量的方法来校正。