超声波模块简介:
我们看一下它的引脚排列。
VCC 是HC-SR04超声波距离传感器的电源,连接树莓派上的 5V 引脚。
Trig 引脚用于触发超声波脉冲,连接树莓派上的 GPIO 引脚。
Echo 引脚当接收到反射信号时,引脚产生一个脉冲,连接树莓派上的 GPIO 引脚。
GND 连接树莓派的 0V 引脚。
模块工作原理:
- 采用IO触发测距,给至少10us的高电平信号;
- 模块自动发送8个40khz的方波,自动检测是否有信号返回;
- 有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间.
- 测试距离=(高电平时间*声速(340M/S))/2;
代码实现:
#include<stdio.h>
#include<wiringPi.h>
#include<sys/time.h>
#include <unistd.h>
#define Trig 4
#define Echo 5
float distance()
{
float dis;
long stat,stop;
struct timeval t1;
struct timeval t2;
digitalWrite(Trig,LOW);
usleep(2);
digitalWrite(Trig,HIGH);
usleep(10);
digitalWrite(Trig,LOW);
while(digitalRead(Echo)!=1);
gettimeofday(&t1,NULL);
while(digitalRead(Echo)!=0);
gettimeofday(&t2,NULL);
stat=t1.tv_sec*1000000+t1.tv_usec;
stop=t2.tv_sec*1000000+t2.tv_usec;
dis=(float)(stop-stat)/1000000*34000/2;
return dis;
}
int main()
{
if(wiringPiSetup()==-1){
printf("初始化失败");
return -1;
}
pinMode(Trig,OUTPUT);
pinMode(Echo,INPUT);
while(1){
printf("dis=%.2f cm\n",distance());
sleep(1);
}
return 0;
}
运行成果:
当超声波模块接近障碍物时,测试的距离变小。