1. 程式人生 > 其它 >樹莓派超聲波測距

樹莓派超聲波測距

<div align="center">

<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=100% height=86 src="//music.163.com/outchain/player?type=2&id=1430429719&auto=1&height=66"></iframe>
</div>

一.需要只用的標準庫是wiringPi庫需要自己去下載

二、超聲波原理圖

 

 

 

1.VCC:連線5v電源

2.GND:連線電源負極

3.Tring:超聲波發射引腳

4.Echo: 超聲波接收引腳

超聲波工作原理解析:超聲波觸發的方式是Trig產生大約10us的方波,需要進行嚴格的延時處理,當發射超聲波以後,ECHO引腳電平將會被拉為高電平,

等待超聲波的返回,當ECHO接收到返回的超聲波時,將會自動的被拉為低電平。通過測定ECHO的高電平的時間,再乘以聲音在空氣中傳播的速度從而計算距離。

5:這裡使用wiring PI庫索引使用的引腳是WPI對應的引腳。也就是 ,

 

 

 

 

直接上程式碼:

 

 

#include<wiringPi.h>
#include <sys/time.h>
#include<stdio.hnclude<wiringPi.h>
#include <sys/time.h>
#include<stdio.h>
#define Trig 5
#define Echo 4
void chaoShengBoInit(){
pinMode(Trig,OUTPUT);// 超聲波得引腳的配置,發射波輸出引腳
pinMode(Echo,INPUT); // 接受波輸入引腳

 

}
float dismeasure(){
struct timeval tv1; // 定義獲取當前時間的結構體,注意這是庫函式中固有的結構體。
struct timeval tv2; // 定義獲取當前時間的結構體
long start, stop;
float dis;

 

digitalWrite(Trig,LOW); // 將發射波的引腳配置成低電平,確保後面具有完整的方波
delayMicroseconds(2); //短暫的延時
digitalWrite(Trig,HIGH);
delayMicroseconds(10); //形成10微妙高電平的方波
digitalWrite(Trig,LOW);// 將發射波的引腳設定成高電平,此後將會發射波
//並且在發射波的同時模組會制動的將Echo引腳拉為高電平
while(!(digitalRead(Echo)==1)); // 等待波是否發出
//while(digitalRead(Echo)!=1);
gettimeofday(&tv1,NULL); // 獲取當前的時間
while(!(digitalRead(Echo)==0));//等待波是否接收
//while(digitalRead(Echo)!=0);
gettimeofday(&tv2,NULL); // 獲取當前的時間
stop=tv2.tv_sec*1000000+tv2.tv_usec; // 將時間全部轉化成微秒處理
start=tv1.tv_sec*1000000+tv1.tv_usec;
dis=(float)(stop-start)/1000000*34000/2; // 獲取距離,注意這裡注意需要將獲取的結果進行強制的資料型別轉換處理。
return dis;
}
int main(){
float dis;
if(wiringPiSetup()==-1){
printf("初始化串列埠失敗\n");
return -1;

 

}else{
printf("初始化串列埠成功\n");

 

}
chaoShengBoInit();
while(1){
dis=dismeasure();
printf("當前泳池水深為:%0.2fCM\n",dis);
delay(500); // 延時
}
}

 

編譯: gcc mode.c -lwiringPi

執行: ./a.out

效果: