1. 超声波测距
超声波测距的主要原理为发射装置发出超声波,根据接收器接到超声波时的时间差,与雷 达测距原理相似.
超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时.
根据超声波在空气中的传递速度为 340m/s,在转换成距离
2. 超声波模块
在 Arduino 智能小车中,我们使用的超声波模块为 HC-SR04,具体如下图
在上述模块中共有4个引脚,具体解释如下:
VCC : 接 +5v 电 源
GND : 接 GND
Trig : 发出超声波引脚
Echo : 接收超声波引脚
3. Arduino 超声波编程
3.1 定义 Trig 与 Echo 引脚与初始化
将 Trig 与 Echo 引脚与 Arduino 引脚进行连接, 其中将 Echo 对应的 Arduino 引脚设置为 input,Trig 则设置为 output,具体编程如下:
3.2 超声波测距
在使用超声波模块时,具体的编程步骤如下: 设置 TRIG 引脚为低电平
设置 TRIG 引脚为高电平,维持10us
digitalWrite(PIN_TRIG,HIGH);//设置 TRIG 引脚为高电平 delayMicroseconds(10);//延时10us
设置 TRIG 引脚为低电平,准备下一次测距
digitalWrite(PIN_TRIG,LOW);//设置 TRIG 引脚为低电平
调用 pulseIn() 函数来计算从发出到接收的时间,在转换成距离
duration = float(pulseIn(PIN_ECHO,HIGH)); distance = (duration * 17)/1000;
在换算具体的过程如下:
340m/1s 换算成 34000cm / 1000000 us 经过约分之后,则表示成
34cm / 1000 us,表示 1us 对应的传输的距离(cm) 由于考虑传输包含发送的距离,故要除以2
3.3 超声波测距完整代码
以下代码可以进行超声波测距,并在串口终端显示距离,单位为 cm
void setup() { Serial.begin(115200); pinMode(PIN_TRIG,OUTPUT); pinMode(PIN_ECHO,INPUT); } void loop() { float distance = ultrasonic_distance(); Serial.print(distance); Serial.println(" cm"); } float ultrasonic_distance(void) { float distance; float duration; digitalWrite(PIN_TRIG,LOW); delayMicroseconds(2); digitalWrite(PIN_TRIG,HIGH); delayMicroseconds(10); digitalWrite(PIN_TRIG,LOW); //340m/1s ----> 34000cm / 1000000 us ----> 34 / 1000 // 1us = 34cm ,计算距离时需要除以2 duration = float(pulseIn(PIN_ECHO,HIGH)); distance = (duration * 17)/1000; return distance; }
4. 超声波避障
利用超声波模块可以进行避障与跟随,当遇到障碍物时可以选择停车或者改变小车运动方向.