“超声波测距”的版本间的差异
(→原理) |
(→原理) |
||
第37行: | 第37行: | ||
'''原理图''' | '''原理图''' | ||
+ | 传感器的Vcc接Microduino CoreSTM32的Vcc引脚,Trig接Microduino CoreSTM32的D3引脚,Echo接Microduino CoreSTM32的D2引脚,GND接Microduino CoreSTM32的GND引脚。 | ||
+ | 如下所示: | ||
[[File:advance4_3.jpg|600px|center|thumb]] | [[File:advance4_3.jpg|600px|center|thumb]] | ||
2015年1月26日 (一) 06:23的最新版本
目的
在做项目的时候,很多时候需要避障或者距离的测量。今天以一个常用的超声波测距传感器HC-SR04为例做一个距离测量的实验,并把测量的距离显示在串口监视界面上。
设备
Microduino-CoreSTM32是采用 STM32F103CBT6芯片的ARM开发板,采用独特的Upin7接口,大小与一枚一元硬币差不多大,完全兼容Microduino其他扩展模块。
- 其他硬件设备
- 面包板跳线 一盒
- 面包板 一块
- 超声波测距传感器 一个
- USB数据连接线 一根
原理
超声波是一种超出人类听觉极限的声波即其振动频率高于20 kHz的机械波。超声波传感器在工作的时候就是将电压和超声波之间的互相转换,当超声波传感器发射超声波时,发射超声波的探头将电压转化的超声波发射出去,当接收超声波时,超声波接收探头将超声波转化的电压回送到单片机控制芯片。超声波具有振动频率高、波长短、绕射现象小而且方向性好还能够为反射线定向传播等优点,而且超声波传感器的能量消耗缓慢有利于测距。在中、长距离测量时,超声波传感器的精度和方向性.都要大大优于红外线传感器,但价格也稍贵。
超声波测距传感器有四个脚:5v电源脚(Vcc),触发控制端(Trig),接收端(Echo),地端(GND)
HC-SR04技术参数:
- 典型工作用电压:5V。
- 超小静态工作电流:小于 2mA。
- 感应角度:不大于 15 度 。
- 探测距离:2cm-400cm
- 高精度:可达 0.3cm。
- 盲区(2cm)超近。
HC-SR04工作原理 超声波测距模块能提供2cm-450cm非接触式感测距离,测距的精度可 高达3mm,能很好的满足我们正常的要求。
触发测距超声波发射器后向某一方向发射超声波,在发射的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离s,即:s=340m/s× t / 2 。这就是所谓的时间差测距法。本实验利用超声波测得的距离从串口中显示。
超声波测距传感器的操作信号时序图如下所示:
操作顺序:
- 先拉低TRIG,然后至少给10us的高电平信号去触发;
- 触发后,模块会自动发射8个40KHZ的方波,并自动检测是否有信号返回。
- 如果有信号返回,通过ECHO输出一个高电平,高电平持续的时间便是超声波从发射到接收的时间。那么测试距离=高电平持续时间*340m/s*0.5或者us/58=cm,us/148=英寸。
注意:1、不宜带电连接,如果要带电连接,则先让模块的 Gnd 端先连接。否则会影响模块工作。
2、测距时,被测物体的面积不少于 0.5 平方米且要尽量平整。否则会影响测试结果。
原理图 传感器的Vcc接Microduino CoreSTM32的Vcc引脚,Trig接Microduino CoreSTM32的D3引脚,Echo接Microduino CoreSTM32的D2引脚,GND接Microduino CoreSTM32的GND引脚。 如下所示:
程序
int inputPin= 2; //echo pulse input pin
int CTLPin=3; //trigger pin
int32 t0,t1,deltaT;
void setup()
{
pinMode(inputPin, INPUT);
pinMode(CTLPin, OUTPUT);
digitalWrite(CTLPin,LOW);
}
void loop()
{
digitalWrite(CTLPin,HIGH);
delayMicroseconds(15);
digitalWrite(CTLPin,LOW);
while(digitalRead(inputPin)==LOW); //waiting for high pulse
t0=micros();
while(digitalRead(inputPin)==HIGH); //waiting for low
t1=micros();
SerialUSB.print(t1);
SerialUSB.print("-");
SerialUSB.print(t0);
SerialUSB.print("=");
deltaT=t1-t0;
SerialUSB.println(deltaT);
SerialUSB.print("Distance:");
SerialUSB.print(deltaT/58);
SerialUSB.println("cm");
t0=0;
t1=0;
delay(1000);
}
语句while(digitalRead(inputPin)==LOW); 和语句while(digitalRead(inputPin)==HIGH);用来获取超声波从发射出去到收到响应信号之间的时间差。
调试
步骤一:按照原理图连接电路图。如下所示:
步骤二:复制程序到Maple IDE,编译、下载后打开串口监视界面。
步骤三:转动超声波测距传感器的位置,使之对着不同距离的障碍物,观察串口监视界面距离的变化。
结果
改变传感器位置后,测量的距离随之变化,如下图所示: