1. 程式人生 > >17、新手入手樹莓派教程--超聲波測距(HC-SR04)的使用

17、新手入手樹莓派教程--超聲波測距(HC-SR04)的使用

1.元件外觀:


HC-SR04 模組可以測量 3cm - 4m 的距離,精確度可以達到 3mm。它包含了超聲波發射器、接收器和控制電路三部分。

2.接線方式

一共兩個電源引腳和兩個控制引腳。
Vcc 和 Gnd 接 5v DC 電源,但不推薦用獨立電源給它供電,應使用樹莓派或微控制器的 GPIO 口輸出 5v 和 Gnd 給它供電。不然會影響這個模組的執行。
Trig 引腳用來接收樹莓派的控制訊號。接任意 GPIO 口。
Echo 引腳用來向樹莓派返回測距資訊。接任意 GPIO 口。
(注意 Echo 返回的是 5v訊號,而樹莓派的 GPIO 接收超過 3.3v 的訊號可能會被燒燬,因此需要加一個分壓電路,博主沒有加,直接用杜邦線連的)。

3.工作原理

(1)樹莓派向 Trig 腳傳送一個 10us 的脈衝訊號。
(2) HC-SR04 接收到訊號,開始傳送超聲波,並把 Echo置為高電平,然後準備接收返回的超聲波。
(3) HC-SR04 接收到返回的超聲波,把 Echo 置為低電平。
(4)Echo 高電平持續的時間就是超聲波從發射到返回的時間間隔。
(5)計算距離:
    距離(單位:m)  =  (start - end) * 聲波速度 / 2 
    聲波速度取 343m/s 。
    然後再把測得的距離轉換為 cm。
    距離(單位:cm) = (start - end) * 聲波速度 / 2 * 100 
                            = (start - end) * 17150

4、程式碼
//
#include <wiringPi.h>  
#include <stdio.h>  
#include <sys/time.h>  
  
#define Trig    0  
#define Echo    1  
  
void ultraInit(void)  
{  
    pinMode(Echo, INPUT);  
    pinMode(Trig, OUTPUT);  
}  
  
float disMeasure(void)  
{  
    struct timeval tv1;  
    struct timeval tv2;  
    long start, stop;  
    float dis;  
  
    digitalWrite(Trig, LOW);  
    delayMicroseconds(2);  
  
    digitalWrite(Trig, HIGH);  
    delayMicroseconds(10);      //發出超聲波脈衝  
    digitalWrite(Trig, LOW);  
      
    while(!(digitalRead(Echo) == 1));  
    gettimeofday(&tv1, NULL);           //獲取當前時間  
  
    while(!(digitalRead(Echo) == 0));  
    gettimeofday(&tv2, NULL);           //獲取當前時間  
  
    start = tv1.tv_sec * 1000000 + tv1.tv_usec;   //微秒級的時間  
    stop  = tv2.tv_sec * 1000000 + tv2.tv_usec;  
  
    dis = (float)(stop - start) / 1000000 * 34000 / 2;  //求出距離  
  
    return dis;  
}  
  
int main(void)  
{  
    float dis;  
  
    if(wiringPiSetup() == -1){ //when initialize wiring failed,print messageto screen  
        printf("setup wiringPi failed !");  
        return 1;   
    }  
  
    ultraInit();  
      
    while(1){  
        dis = disMeasure();  
        printf("distance = %0.2f cm\n",dis);  
        delay(1000);  
    }  
  
    return 0;  
}  
//編譯同
14、新手入手樹莓派教程--DHT11感測器的使用

5、執行結果



致謝: