文章目錄:
一、超聲波傳感器工作原理
二、SR04超聲波庫的使用
三、SR04超聲波傳感器在Arduino中的使用
一、超聲波傳感器工作原理
如上圖所示:HCSR04超聲波傳感器擁有4個針腳,除了VCC接正極、GND接負極外,還有兩個引腳“Trig”及“Echo”;
其中“Trig”用于控制發射超聲波,“Echo”用于接收反射波。
其工作原理如上圖:首先傳感器發射超聲波,并計時,當超聲波接觸到障礙物會被反射,當傳感器接收到反射波,計時結束,然后利用距離、速度、時間公示進行計算,得到傳感器到障礙物間的距離。
二、SR04超聲波庫的使用
在使用SR04超聲波傳感器之前,需要先配置好庫文件;
一般這種較基礎的庫文件,在下載Arduino軟件后會自動配置好,可以根據下圖所示檢驗是否有超聲波傳感器的庫:
如果在示例文件中存在SR04超聲波傳感器的示例文件,則一般已配置好庫文件。
如果未配置好庫文件,則可使用2.0以后版本的Arduino軟件直接搜索然后安裝;
若Arduino軟件版本較舊,則可參照Arduino平臺軟硬件原理及使用——開源庫的使用來進行配置安裝。
由于不同的庫文件貢獻者所創建庫的差異性,可以通過按下【Alt/cmd鍵】+【點擊庫名稱】的方法來打開其頭文件:
#pragma once
#include <Arduino.h>class HCSR04
{
public:HCSR04(int out, int echo); //initialisation class HCSR04 (trig pin , echo pin)HCSR04(int out, int echo[], int n); //initialisation class HCSR04 (trig pin , echo pin)~HCSR04(); //destructorfloat dist() const; //return curent distance of element 0float dist(int n) const; //return curent distance of element nprivate:void init(int out, int echo[], int n); //for constructorint out; //out pinint *echo; //echo pin listint n; //number of el
};
如上代碼則為此庫文件的頭文件,其可使用的方法均位于public公有類里面。
三、SR04超聲波傳感器在Arduino中的使用
將SR04超聲波傳感器與Arduino進行連接,除了VCC及GND分別接正負極外;
“Trig”與數字端口D5連接
“Echo”與數字端口D4連接
如下圖所示:
完成以下程序:
//此程序功能為將SR04超聲波傳感器測的的距離數值,通過串口進行輸出#include<HCSR04.h> //導入超聲波SR04庫
HCSR04 ultrasonic(5,4); //聲明一個對象,其名為ultrasonic(自定義的名稱)//4號為“Echo”,5號為“Trig”void setup()
{pinMode(4, INPUT); //設置“Echo”接入的引腳為輸入pinMode(5, OUTPUT); //設置“Trig”接入的引腳為輸出Serial.begin(9600); //串口監視器初始化
}int distance; //定義一個名為“distance”的變量,用于存放檢測的距離數值void loop()
{distance = ultrasonic.dist(); //調用了超聲波庫里的“dist()”方法,獲得檢測距離數值Serial.print(distance); //輸出distance數值,且不換行Serial.println(" cm"); //緊接著輸出單位,且換行
}
將程序上傳之前先對以上程序的部分代碼塊進行解釋:
1.“HCSR04 ultrasonic(4, 5)”我們稱之為對象的實例化,即HCSR04為超聲波庫的名稱,在其后自定義一個名稱“ultrasonic”(即超聲波的英文,可自定義任意名稱),并且不同的實例化過程有不同的參數要輸入,比如HCSR04后需要加入“Trig”和“Echo”所接引腳的端口號(我們分別接到了D5和D4),從而在后述程序中,如果要調用HCSR04庫內的方法的話,僅需使用“ultrasonic.方法名()”,即可。
2.“distance = ultrasonic.dist()”這一代碼塊是調用了超聲波傳感器中獲取距離的方法“dist()”,與前面int定義的distance截然不同,int定義的變量可取任意名稱,僅為變量名,但“Distance()”為超聲波傳感器固定的方法。
接下來將上述程序上傳至Arduino板,并且打開串口監視器,觀測所測的數值是否準確。
另外HCSR04型號的超聲波傳感器的測量范圍官方聲稱為2cm ~ 450cm,因此超出這個范圍的數值會不準確。
關于SR04超聲波傳感器的具體實例可參考文章——Arduino項目式編程教學第四章——超聲波測距