企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## **超声波测距传感器** > **SEN136B5B**是一款来自**Seeedstudio**的超声波测距传感器。(不推荐购买,Seeed实在太贵,可以买其他替代)它能探测从传感器前3cm到400cm的物体。它的原理是先发射一束超声波并且开始计时,等到超声波碰到前方物体就会发生反射,超声波测距传感器在收到回声后会停止计时,通过这个时间结合声音的速度可以判定前方距离。  > 要启动测距过程,Arduino或Genuino板必须要在超声波测距传感器的引脚上发送一个很短的脉冲。然后使用**pulseln()**函数监听相同引脚上的脉冲宽度。测量到的脉冲宽度就是声音传播的时间了。 ### **所需硬件** * Arduino板或Genuino板 * SEN136B5B超声波测距传感器(可以用国产便宜的替代哦) * 跳线 * 连接线 ### **电路** ![图片来自官网](http://img.blog.csdn.net/20160629081253814)  SEN136B5B的**5V**引脚连接到板子上的**+5V**,**GND**引脚连接到板子上的**GND**。SIG引脚(signal (信号)的缩写)连接到7号引脚。 ### **原理图** ![图片来自官网](http://img.blog.csdn.net/20160629081314559) ### **代码** ~~~ /* 超声波测距传感器 本例通过读取超声波测距传感器的信息来确定与前方物体的距离。首先,我们应该在7号引脚上发送一个短脉冲来初始化测距。接着,我们对7号引脚上的脉宽进行测量,以确定声音传播的时间。最终我们根据这个时间通过数学运算测量距离。 电路搭建: * +V 连接到 +5V * GND 连接到 GND * SIG 连接到 连接到7号引脚 代码公开 */ // 不可变常量: const int pingPin = 7; void setup() { // 初始化串口: Serial.begin(9600); } void loop() { // 创建变量存储脉冲宽度和距离(用英尺和厘米两种单位保存); // 超声波测距传感器的测距过程可以通过一个2毫秒或以上的脉冲来触发。(脉冲并不是很神秘,说白了就是引脚先输出低电平,突然输出2ms的高电平然后再拉低,就产生了2ms的脉冲。因而只需要用普通引脚进行数字操作) // 先拉低,确保脉冲明显(下面会产生一个5ms脉冲): pinMode(pingPin, OUTPUT); digitalWrite(pingPin, LOW); delayMicroseconds(2); digitalWrite(pingPin, HIGH); delayMicroseconds(5); digitalWrite(pingPin, LOW); // 在相同引脚上我们需要测量脉宽,这个新脉冲是超声波传感器产生的,它的长度就是声音传播的时间。 pinMode(pingPin, INPUT); duration = pulseIn(pingPin, HIGH); //将时间换算成距离 inches = microsecondsToInches(duration); cm = microsecondsToCentimeters(duration); Serial.print(inches); Serial.print("in, "); Serial.print(cm); Serial.print("cm"); Serial.println(); delay(100); } long microsecondsToInches(long microseconds) { // 根据Parallax提供的数据手册,超声波的速度是73.746毫秒每英寸(1130英尺每秒)。我们已经可以算出声音传播的距离,别忘了除以2,因为声音是过去再回来,走了两遍。 return microseconds / 74 / 2; } long microsecondsToCentimeters(long microseconds) { // 声速是340 m/s(每走1cm大约29ms) // 我们已经可以算出声音传播的距离,别忘了除以2,因为声音是过去再回来,走了两遍。 return microseconds / 29 / 2; } ~~~ ### **相关资料** [pinMode()](https://www.arduino.cc/en/Reference/PinMode)  [delayMicroseconds()](https://www.arduino.cc/en/Reference/DelayMicroseconds)  [pulseIn()](https://www.arduino.cc/en/Reference/PulseIn)  [digitalWrite()](https://www.arduino.cc/en/Reference/DigitalWrite)  [return](https://www.arduino.cc/en/Reference/Return)  [serial.begin()](https://www.arduino.cc/en/Serial/Begin)  [serial.print()](https://www.arduino.cc/en/Serial/Print)  [原文链接](https://www.arduino.cc/en/Tutorial/Ping)