Arduino 智能小车 - 超声波测距(20180512实训课--华清远见)

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. 超声波避障

利用超声波模块可以进行避障与跟随,当遇到障碍物时可以选择停车或者改变小车运动方向.


猜你喜欢

转载自blog.csdn.net/qq_40276310/article/details/80289569