两年前在CSDN上面也写过HC-SR04
模块的使用,当时是使用的wiringPi
库操作的,这次使用的Node.js
。这个系列的文章也都是使用Node.js
操作树莓派。
1.产品特点
HC-SR04 超声波测距模块可提供 2cm-400cm
的非接触式距离感测功能, 测距精度可达高到 3mm
;模块包括超声波发射器、接收器与控制电路。基本工作原理:
采用 IO 口
TRIG
触发测距,给至少10us
的高电平信号;模块自动发送 8 个
40khz
的方波,自动检测是否有信号返回;有信号返回,通过 IO 口
ECHO
输出一个高电平,高电平持续的时间就是超声
波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2
;
2.实物图
3.引脚说明
序号 | 引脚 | 说明 |
1 | Vcc | 电源正极 DC 5V |
2 | Trig | 触发信号控制引脚 |
3 | Echo | 回响接收引脚 |
4 | Gnd | 电源负极 |
注意:
此模块不宜带电连接,若要带电连接,则先让模块的 GND 端先连接,否则会影响 模块的正常工作。
测距时,被测物体的面积不少于 0.5 平方米且平面尽量要求平整,否则影响测量的
4.超声波时序图
这里的时序图和产品特点中介绍的也就一样了。
5.电路原理图
6.实验电路图
7.实验代码
const Gpio = require('pigpio').Gpio;// 每ms的声速const MICROSECDONDS_PER_CM = 1e6/34321;const trigger = new Gpio(23, {mode: Gpio.OUTPUT}); // 设置 trigger 引脚为输出引脚const echo = new Gpio(24, {mode: Gpio.INPUT, alert: true}); // 设置 echo 引脚为输入trigger.digitalWrite(0); // 设置 trigger 引脚为低电平const watchHCSR04 = () => { let startTick; echo.on('alert', (level, tick) => { if (level == 1) { startTick = tick; } else { const endTick = tick; const diff = (endTick >> 0) - (startTick >> 0); // 无符号的 32位数据 console.log('测量的距离 = ',diff / 2 / MICROSECDONDS_PER_CM + 'cm'); } });};watchHCSR04();// 每1s测量一次巨鹿setInterval(() => { trigger.trigger(10, 1); // 设置 trigger 为高电平 10ms 时长}, 1000);
这次使用的是pigpio
这个库,这个库使用的引脚关系是BCM编码
,之前的rpio
这个库使用的物理引脚BOARD编码
。这里是最大的区别,其他的就是看文档怎么使用了。
关于引脚图可以看之前的文章。
8.测量数据
root@raspberrypi:/home/pi/Desktop/nodePai# node 4.hc-sr042.js测量的距离 = 133.5944925cm测量的距离 = 133.1826405cm测量的距离 = 132.3932575cm测量的距离 = 196.48772499999998cm测量的距离 = 196.57352749999998cm测量的距离 = 196.48772499999998cm测量的距离 = 135.56795cm测量的距离 = 31.403715cm测量的距离 = 29.7734675cm
经过最近的使用发现,在用Node.js
操作树莓派使用这些模块,都不需要去怎么在乎时序图,在I2C
和SPI
中这两个中体现还要明显。
这里我们可以发散一下,当距离小于某一个值的时候,就让蜂鸣器响,随着距离的减小,蜂鸣器的响动频率越来越大;这里就是我们常见的汽车后面的超声波雷达了,汽车后面使用的收发一体的超声波探头。