1.Arduino入门项目1-超声波测距仪(附项目源码、库文件、电路图、材料清单等资料)
1.Arduino入門項目1-超聲波測距儀
(項目源碼、庫文件、電路圖、材料清單等可在文末獲取)
設計者:STCode(公眾號同名)
后臺回復:入門項目1
獲取完整資料
1.Arduino入門項目1-超聲波測距儀(附項目源碼、庫文件、電路圖、材料清單等資料)
①項目描述
本項目使用Arduino、超聲波傳感器、lcd1602液晶顯示屏等器件,實現超聲波傳感器檢測距離,通過Arduino數據分析和處理后,將距離數值顯示到lcd1602液晶顯示屏上。
②元件介紹
①HC-SR04超聲波傳感器
模塊描述:
? 本模塊性能穩定,測度距離精確。能和國外的SRF05,SRF02等超聲波測距模塊相媲美。模塊高精度,盲區(2cm)超近,采用IO觸發測距,給至少10us的高電平信號。模塊自動發送8個40KHz的方波,自動檢測是否有信號返回;有信號返回,通過IO輸出一高電平,高電平持續的時間就是超聲波從發射到返回的時間。距離=(高電平時間X聲速(340m/s))/2。
技術參數:
-
使用電壓:DC5V
-
靜態電流:小于2mA
-
電平輸出:高5V
-
電平輸出:底0V
-
感應角度:不大于15度
-
探測距離:2cm-450cm
作用:
該模塊在本項目中的作用為進行測距。
②lcd1602液晶顯示器
模塊描述:
- 標準版:LCD1602字符液晶板,主板采用全新優質 2 行 16 個字符液晶,1602液晶在應用中非常廣泛,最初的1602液晶使用的是HD44780控制器,現在各個廠家的1602模塊基本上都是采用了與之兼容的IC,所以特性上基本都是一致的。
- IIC版:由于Arduino的I/O口數量有限,如果直接用Arduino的I/O口直接驅動LCD1602,會占用較多的I/O口資源,也不利于連接更多的其他設備。IIC LCD1602轉接板可以大大減少需要使用的IO接口,原來的1602屏需要7個IO口才能驅動起來,這個模塊可以幫你節省5個IO口。對于 Arduino初學者來說,不必為繁瑣復雜液晶驅動電路連線而頭疼了,只需兩根線就可以實現數據顯示,還可以與其它IIC設備連接,可輕松實現數據的記錄顯示。
技術參數:
- 供電電壓:+5V
- 支持I2C協議
- 具有背光燈,和對比度調節電位器
- 4線輸出更簡單
- 設備地址:0x27 或 0x3F或其他
作用:
本項目使用的為IIC版的lcd1602模塊,原因為IIC方式節省引腳,接線比較方便。該模塊在本項目中的作用為進行距離數值的顯示。
③電路連接
| VCC | +5V |
| GND | GND |
| Echo | 3 |
| Trig | 2 |
| VCC | +5V |
| GND | GND |
| SDA | A4 |
| SCL | A5 |
④源代碼
#include <Wire.h> //引入庫文件 #include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27,16,2); //定義lcd對象 int TrigPin = 2; //定義超聲波傳感器引腳 int EchoPin = 3; float distance; //定義距離變量 void setup() {Serial.begin(9600); //開啟串口lcd.init(); //初始化lcdlcd.backlight(); //開啟lcd背光pinMode(TrigPin, OUTPUT); //設置超聲波傳感器引腳模式pinMode(EchoPin, INPUT);lcd.setCursor(0,0); //設置光標位置lcd.print("Distance test"); //顯示內容 } void loop() {get_dis(); //獲取距離函數lcd_display(); //lcd顯示函數delay(500); //延時 }void get_dis() //獲取距離子函數 {digitalWrite(TrigPin, LOW);delayMicroseconds(2);digitalWrite(TrigPin, HIGH);delayMicroseconds(10);digitalWrite(TrigPin, LOW);distance = pulseIn(EchoPin, HIGH) / 58.0; Serial.print(distance);Serial.println("cm"); }void lcd_display() //lcd顯示子函數 {int dis = int(distance);lcd.setCursor(0,1);if(dis >= 0 && dis < 1000){lcd.print("Dis:");lcd.print(dis);}if(dis < 100) lcd.print(' ');lcd.setCursor(8,1);lcd.print("cm"); }
關鍵代碼解釋:
LiquidCrystal_I2C lcd(0x27,16,2); //定義lcd對象該行代碼定義了lcd對象,其中0x27為該lcd1602模塊的IIC地址,不同商家購買的lcd1602,其地址可能會有所不同,大部分lcd1602的IIC地址為0x27或者0x3F,可以兩個地址都進行嘗試,如果還是不能顯示的話可以咨詢商家;代碼中的16表示一行有16個位,2表示一共有兩行。(還有其他型號的lcd,其顯示的行數和列數可以不相同,但是能用同一個庫文件,比如lcd2004A等。)
distance = pulseIn(EchoPin, HIGH) / 58.0;將距離算成厘米,聲音的速度340m/s或29us/cm,脈沖傳播出來再折返回來,所以所求對象的距離行程為(高電平時間)/29/2,即/58.
if(dis >= 0 && dis < 1000){lcd.print("Dis:");lcd.print(dis);}因為在測距的時候,偶爾會出現測出大于1000cm的情況,正常情況下,HC-SR04的測距在200cm以內,所以大于三位數的數值肯定是不正常的,因此在此做一個限制,在0-1000數值以內的值才會進行顯示。
if(dis < 100) lcd.print(' ');在顯示大于三位數的距離數值時,占用了lcd1602的三個位,因此三個位上都有數據,但是當距離變為兩位數時,由于在代碼中沒有編寫清屏的語句,因此在顯示了兩位數時,第三位會仍然顯示之前顯示的數值,對測距數值形成一定的干擾,因此在這里,當測距為兩位數時,在后邊顯示一個’ ',即顯示一個空格,這樣就可以覆蓋掉之前顯示三位數時的個位數數值。
更多創意作品及源碼獲取歡迎關注公眾號:STCode
后臺回復:入門項目1
總結
以上是生活随笔為你收集整理的1.Arduino入门项目1-超声波测距仪(附项目源码、库文件、电路图、材料清单等资料)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对pgm格式图片的批量格式转换(pgm)
- 下一篇: π型滤波器 计算_T型π型滤波器计算软件