18luck网站

18luck网站電子設計 | 18luck网站Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 18luck网站 >> 基礎入門 >> Arduino開發學習 >> 正文

Arduino項目式編程教學第四章——超聲波測距_arduino超聲波測距,HCSR04超聲波傳感器

作者:佚名    文章來源:網絡整理    點擊數:    更新時間:2024/11/2

硬件清單
一、超聲波測距原理
二、HCSR04超聲波傳(chuan) 感器的使用
三、LCD1602液晶顯示屏的使用
1.Arduino上的I2C通信協議
2.使用LCD1602液晶顯示屏顯示“Hello World!”字符
四、完成超聲波測距
五、總結

硬件清單

 

一、超聲波測距原理

超聲波測距原理詳解 
我們(men) 所使用的超聲波傳(chuan) 感器型號為(wei) HCSR04,可觀察到他有兩(liang) 個(ge) “眼睛”狀的部件,兩(liang) 個(ge) 部件的作用一樣,均可發射接收超聲波,並且按照上述原理圖進行工作。
首先傳(chuan) 感器發射超聲波,並計時,當超聲波接觸到障礙物會(hui) 被反射,當傳(chuan) 感器接收到反射波,計時結束,然後利用距離、速度、時間公示進行計算,得到傳(chuan) 感器到障礙物間的距離。
其具體(ti) 工作原理簡單了解即可,並不影響後述對超聲波傳(chuan) 感器的使用。
HCSR04超聲波傳(chuan) 
因此HCSR04超聲波傳(chuan) 感器的四個(ge) 引腳的作用就比較明顯了,除了VCC接正極、GND接負極外,還有兩(liang) 個(ge) 引腳“Trig”及“Echo”,其中“Trig”用於(yu) 控製發射超聲波,“Echo”用於(yu) 接收反射波,所以“Trig”所接引腳應為(wei) 輸出,“Echo”所接引腳應為(wei) 輸入,因此在後續接線時可以把兩(liang) 個(ge) 引腳分別接到兩(liang) 個(ge) 數字端口,在端口初始化時分別設置輸入和輸出即可。

二、HCSR04超聲波傳感器的使用

接下來將HCSR04超聲波傳(chuan) 感器與(yu) Arduino進行連接,除了VCC及GND分別接正負極外,這裏“Trig”與(yu) 數字端口D5連接,“Echo”與(yu) 數字端口D4連接,如下圖所示:
HCSR04超聲波傳(chuan) 

並且確定安裝的庫文件是否一致,不同的開發者貢獻的庫文件不同,調用方法的名稱也就不同,因此如果與(yu) 本文按裝的庫文件不同的話,大概率會(hui) 報錯,建議安裝與(yu) 下圖一致的庫文件。
 

將超聲波傳(chuan) 感器與(yu) Arduino板連接之後,繼續完成以下程序:

//此程序功能為(wei) 將SR04超聲波傳(chuan) 感器測的的距離數值,通過串口進行輸出 #include<HCSR04.h> //導入超聲波SR04庫 HCSR04 ultrasonic(5,4); //聲明一個(ge) 對象,其名為(wei) ultrasonic(自定義(yi) 的名稱) //4號為(wei) “Echo”,5號為(wei) “Trig” void setup() { pinMode(4, INPUT); //設置“Echo”接入的引腳為(wei) 輸入 pinMode(5, OUTPUT); //設置“Trig”接入的引腳為(wei) 輸出 Serial.begin(9600); //串口監視器初始化 } int distance; //定義(yi) 一個(ge) 名為(wei) “distance”的變量,用於(yu) 存放檢測的距離數值 void loop() { distance = ultrasonic.dist(); //調用了超聲波庫裏的“dist()”方法,獲得檢測距離數值 Serial.print(distance); //輸出distance數值,且不換行 Serial.println(" cm"); //緊接著輸出單位,且換行 }

將程序上傳(chuan) 之前先對以上程序的部分代碼塊進行解釋:
1.“HCSR04 ultrasonic(4, 5)”我們(men) 稱之為(wei) 對象的實例化,即HCSR04為(wei) 超聲波庫的名稱,在其後自定義(yi) 一個(ge) 名稱“ultrasonic”(即超聲波的英文,可自定義(yi) 任意名稱),並且不同的實例化過程有不同的參數要輸入,比如HCSR04後需要加入“Trig”和“Echo”所接引腳的端口號,從(cong) 而在後述程序中,如果要調用HCSR04庫內(nei) 的方法的話,僅(jin) 需使用“ultrasonic.方法名()”,即可。
2.“distance = ultrasonic.dist()”這一代碼塊是調用了超聲波傳(chuan) 感器中獲取距離的方法“dist()”,與(yu) 前麵int定義(yi) 的distance截然不同,int定義(yi) 的變量可取任意名稱,僅(jin) 為(wei) 變量名,但“Distance()”為(wei) 超聲波傳(chuan) 感器固定的方法。
接下來將上述程序上傳(chuan) 至Arduino板,並且打開串口監視器,觀測所測的數值是否準確。
 

另外HCSR04型號的超聲波傳(chuan) 感器的測量範圍官方聲稱為(wei) 2cm ~ 450cm,因此超出這個(ge) 範圍的數值會(hui) 不準確。

三、LCD1602液晶顯示屏的使用

LCD1602液晶顯示屏 
LCD1602液晶顯示屏 
首先觀察LCD1602顯示屏的正反麵(其中反麵為(wei) 實物圖),當前LCD顯示屏的驅動板(即黑色的電路板)上共6個(ge) 引腳,左側(ce) 兩(liang) 個(ge) 相鄰的引腳直接連接即可,連接後便打開了背光;右側(ce) 的引腳“GND接負極”“VCC接正極”已經比較熟悉了,對於(yu) “SDA”及“SCL”引腳,我們(men) 先對此進行詳細介紹。

1.Arduino上的I2C通信協議

 
I2C總線是由Philips公司開發的一種簡單、雙向二線製同步串行總線。它隻需要兩(liang) 根線即可在連接於(yu) 總線上的器件之間傳(chuan) 送信息。
每種不同的硬件都有不同的I2C地址,因此對於(yu) I2C通信的工作原理我們(men) 可以理解為(wei) :SCL(時鍾線)用於(yu) 規定當前時刻是否要傳(chuan) 輸數據,就如同紅綠信號燈的作用,防止數據傳(chuan) 輸混亂(luan) ;SDA(數據線)用於(yu) 在給定時間內(nei) 給不同地址的硬件傳(chuan) 輸數據,並且雙向傳(chuan) 輸。當前我們(men) 僅(jin) 需了解不同硬件的I2C地址即可輕鬆使用I2C通信。

2.使用LCD1602液晶顯示屏顯示“Hello World!”字符

 
在Arduino拓展板的複位鍵旁邊設有專(zhuan) 門的I2C引腳,可直接對應連接,當然也可以“SDA - A4”“SCL - A5”的線序連接。
連接好之後觀察屏幕,在未寫(xie) 入程序之前,LCD顯示屏的第一行應該是可以顯示16個(ge) 小方塊的,如果未顯示,則使用十字螺絲(si) 刀來擰動顯示屏背板藍色的旋鈕,直到小方塊清晰可見。這也就是為(wei) 什麽(me) LCD1602顯示屏標有“1602”——此顯示屏可顯示16列2行字符(英文)。
本章使用的LCD顯示屏為(wei) I2C通信,因此使用的庫文件也需要對應,可看下圖使用的庫文件:
 

接下來完成下列程序:

//此程序功能為(wei) 使用LCD1602輸出“Hello World!”字符 #include <Wire.h> //導入I2C通信庫 #include <LiquidCrystal_I2C.h> //導入LCD顯示屏庫 LiquidCrystal_I2C lcd(0x27,16,2); //實例化一個(ge) 名為(wei) “lcd”的對象,並且內(nei) 部有三個(ge) 參數 //分別為(wei) (I2C通信地址,顯示列數,顯示行數) void setup() { lcd.init(); //顯示屏初始化 lcd.backlight(); //開啟顯示屏背光 lcd.setCursor(0,0); //設置顯示光標位置(列,行) lcd.print("Hello, world!"); //顯示字符 lcd.setCursor(0,1); //在第一列,第二行開始顯示 lcd.print("Successful!"); //顯示字符 } void loop() { }

將以上程序上傳(chuan) ,並觀察是否顯示了兩(liang) 行字符,分別是“Hello, world!”及“Successful!”;接下來對部分代碼塊進行解釋:
1.“#include <Wire.h>”為(wei) 導入I2C通信庫。
2.“#include <LiquidCrystal_I2C.h>”為(wei) 導入本程序使用的基於(yu) I2C通信協議的LCD顯示屏庫。
3.“LiquidCrystal_I2C lcd(0x27,16,2)”為(wei) 實例化了一個(ge) 名為(wei) “lcd”的對象,並規定了LCD的I2C地址“0x27”,以及顯示屏顯示的列行數。
其他的代碼作用均已在程序中進行了注釋解釋,則不再贅述。

四、完成超聲波測距

超聲波測距_arduino超聲波測距 
按照上圖將“SR04超聲波傳(chuan) 感器”及“LCD1602顯示屏”與(yu) Arduino板進行連接;“Trig”與(yu) 數字端口D5連接,“Echo”與(yu) 數字端口D4連接,LCD顯示屏的引腳連接到IIC區域;然後完成以下程序:

//此程序功能為(wei) 將超聲波傳(chuan) 感器測得的數值使用LCD進行顯示 //並且在2cm-450cm內(nei) 正常顯示,超出範圍則輸出錯誤提示 #include<HCSR04.h> //導入超聲波SR04庫 #include<Wire.h> //導入I2C通信庫 #include<LiquidCrystal_I2C.h> //導入LCD顯示屏庫 LiquidCrystal_I2C lcd(0x27,16,2); //聲明使用LCD庫的對象 HCSR04 ultrasonic(5,4); //聲明一個(ge) 對象,其名為(wei) ultrasonic(自定義(yi) 的名稱) //4號為(wei) “Echo”,5號為(wei) “Trig” void setup() { lcd.init(); //顯示屏初始化 lcd.backlight(); //開啟LCD顯示屏背光 pinMode(4,INPUT); //Echo引腳 pinMode(5,OUTPUT); //Trig引腳 } int distance; //定義(yi) 一個(ge) 變量用於(yu) 存儲(chu) 超聲波測量的數值 void loop() { distance = ultrasonic.dist(); //將超聲波測得的數值賦值給變量 if(distance >= 2 && distance <= 450) //判斷測得數值是否在測量範圍內(nei) { lcd.setCursor(0,0); //設置LCD顯示光標位置 lcd.print(distance); //使用LCD顯示屏顯示distance的數值 lcd.print(" cm"); //顯示單位“cm” delay(200); //延時200毫秒 lcd.clear(); //LCD顯示屏清屏,用於(yu) 顯示下一個(ge) 數值 } else //如果超出範圍 { lcd.print("Wrong!"); //輸出“Wrong!” delay(200); lcd.clear(); } }

上述程序是對超聲波傳(chuan) 感器及LCD顯示屏的綜合應用,並且使用了“if判斷”,其代碼塊的作用均已標柱到代碼區域,不再詳細解釋。
將上述代碼進行上傳(chuan) ,並測試是否可實現超聲波測距功能。

五、總結

本章使用SR04超聲波傳(chuan) 感器結合LCD液晶顯示屏來實現了超聲波測距的功能;並且對於(yu) 超聲波傳(chuan) 感器及顯示屏都需要調用相應的庫文件進行控製,這裏需要注意的是一定要使用正確的庫文件,因為(wei) 各類硬件的庫文件均來自於(yu) 不同的開發者,不同的開發者貢獻的庫會(hui) 存在庫文件名稱及方法名不同的情況,當然理論上不同的庫文件都能實現對硬件的控製,所以最好使用與(yu) 本文相同的庫文件。完成本章的超聲波測距功能之後,不妨聯想汽車的倒車雷達原理,其功能也是可以通過Arduino平台來實現的,後續還會(hui) 帶來更多硬件的使用方法及組合成完整功能的教學。

Tags:arduino,超聲波測距,超聲波  
責任編輯:admin
  • 上一個文章:
  • 下一個文章: 沒有了
  • 請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
    1分 2分 3分 4分 5分

    還可以輸入 200 個字
    [ 查看全部 ] 網友評論
    關於我們 - 聯係我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
    返回頂部
    刷新頁麵
    下到頁底
    晶體管查詢