Arduino学习(2)——HC-SR04超声波测距模块原理及代码实现
1.Arduino学习(2)——HC-SR04超声波测距模块原理及代码实现
(1)超声波传感器原理
本项目使用的是HC-SR04超声波测距模块,如下图所示:

-
VCC:供电电源引脚
-
Trig:触发信号引脚
-
Echo:回声信号引脚
-
GND:电源地引脚
模块主要参数如下:
- 工作电压范围:3~5.5V宽电压供电
- 工作电流:<20mA
- 测量距离:2cm~450cm
- 测量精度:0.5cm
- 通信接口:IO数字接口
工作原理如下描述:
- 超声波的Trig引脚负责发送声波,触碰到物体后声波返回被Echo引脚接收,根据接收的时间长短以及声音在空气中的传播速度为340m/s,可以计算出所测得的距离。
- 给Trig引脚输入一个长为10us的高电平方波,输入方波后,模块会自动发射8个40kHz的声波,在同一时刻,Echo引脚电平会从0变为1。程序设计中,在Echo引脚电平翻转时,启动定时器进行计时。
- 当超声波触碰到物体并返回被模块接收到后,Echo引脚电平会由1变为0。程序设计中,在Echo引脚电平再次翻转时,停止定时器计时。
- 根据定时器定时时长,即可得到所测距离。
HC-SR04超声波传感器模块工作时序图如下所示:
(2)Arduino代码解析
/*
介绍:利用Arduino Uno板的Pin9和Pin10分别作为Trig引脚和Echo引脚
分别设置为输出和输入模式,根据Echo电平翻转的时长计算距离
最后用串口将所得到的距离打印到串口监视器上
*/
#define TRIG_PIN 9
#define ECHO_PIN 10
// 串口、Trig引脚、Echo引脚定义
void setup()
{
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop()
{
long duration, distance;
// 发送10微妙的高电平脉冲给Trig引脚
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(2);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.0344 / 2;
// 打印所测得的距离
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// 间隔0.5秒采集一次数据
delay(500);
}
实验结果如下:
特殊函数说明:
pulseIn()是Arduino中的一个内建函数,用来测量一个数字引脚上脉冲的宽度(高电平或低电平的持续时间)。该函数通常用于捕捉输入信号的时间长度,并将其以微秒为单位返回。
函数原型如下:
long pulseIn(uint8_t pin, uint8_t value);
long pulseIn(uint8_t pin, uint8_t value, unsigned long timeout);
- pin:数字引脚的编号,连接到需要测量脉冲的输入信号。
- Value:要测量的脉冲类型,通常为HIGH或LOW:
- HIGH:测量信号为高电平的持续时间
- LOW:测量信号为低电平的持续时间
- timeout(可选):最大等待时间,单位为毫秒。如果在这个时间内没有检测到脉冲,函数返回0。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比