## **超声波测距传感器**
> **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)
- 说明
- 系统示例文件目录结构及说明
- 01.Basics
- AnalogReadSerial
- BareMinimum
- Blink
- DigitalReadSerial
- Fade
- ReadAnalogVoltage
- 02.Digital
- BlinkWithoutDelay
- Button
- Debounce
- DigitalInputPullup
- StateChangeDetection
- toneKeyboard
- toneMelody
- toneMultiple
- tonePitchFollower
- 03.Analog
- AnalogInOutSerial
- AnalogInput
- AnalogWriteMega
- Calibration
- Fading
- Smoothing
- 04.Communication
- ASCIITable
- Dimmer
- Graph
- Midi
- MultiSerial
- PhysicalPixel
- ReadASCIIString
- SerialCallResponse
- SerialCallResponseASCII
- SerialEvent
- SerialPassthrough
- VirtualColorMixer
- 05.Control
- Arrays
- ForLoopIteration
- IfStatementConditional
- switchCase
- switchCase2
- WhileStatementConditional
- 06.Sensors
- ADXL3xx
- Knock
- Memsic2125
- Ping
- 07.Display
- barGraph
- RowColumnScanning
- 08.Strings
- CharacterAnalysis
- StringAdditionOperator
- StringAppendOperator
- StringCaseChanges
- StringCharacters
- StringComparisonOperators
- StringConstructors
- StringIndexOf
- StringLength
- StringLengthTrim
- StringReplace
- StringStartsWithEndsWith
- StringSubstring
- StringToInt
- 09.USB
- Keyboard
- KeyboardLogout
- KeyboardMessage
- KeyboardReprogram
- KeyboardSerial
- KeyboardAndMouseControl
- Mouse
- ButtonMouseControl
- JoystickMouseControl
- 10.StarterKit_BasicKit (与特定硬件相关,暂无)
- p02_SpaceshipInterface
- p03_LoveOMeter
- p04_ColorMixingLamp
- p05_ServoMoodIndicator
- p06_LightTheremin
- p07_Keyboard
- p08_DigitalHourglass
- p09_MotorizedPinwheel
- p10_Zoetrope
- p11_CrystalBall
- p12_KnockLock
- p13_TouchSensorLamp
- p14_TweakTheArduinoLogo
- p15_HackingButtons
- 11.ArduinoISP(暂无)
- ArduinoISP