<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發網

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

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

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

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

      硬件清單

       

      一、超聲波測距原理

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

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

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

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

      將超聲波傳感器與Arduino板連接之后,繼續完成以下程序:

      //此程序功能為將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”所接引腳的端口號,從而在后述程序中,如果要調用HCSR04庫內的方法的話,僅需使用“ultrasonic.方法名()”,即可。
      2.“distance = ultrasonic.dist()”這一代碼塊是調用了超聲波傳感器中獲取距離的方法“dist()”,與前面int定義的distance截然不同,int定義的變量可取任意名稱,僅為變量名,但“Distance()”為超聲波傳感器固定的方法。
      接下來將上述程序上傳至Arduino板,并且打開串口監視器,觀測所測的數值是否準確。
       

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

      三、LCD1602液晶顯示屏的使用

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

      1.Arduino上的I2C通信協議

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

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

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

      接下來完成下列程序:

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

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

      四、完成超聲波測距

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

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

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

      五、總結

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

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

      還可以輸入 200 個字
      [ 查看全部 ] 網友評論
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 久久婷婷五月综合尤物色国产| 久久婷婷五夜综合色频| 亚洲综合激情五月丁香六月| 老色鬼久久亚洲AV综合| 伊人yinren6综合网色狠狠| 婷婷丁香五月天综合东京热| 精品久久人人做人人爽综合| 天天影视色香欲性综合网网站| 亚洲av综合av一区二区三区| 国产色产综合色产在线视频| 综合网日日天干夜夜久久| 久久婷婷色香五月综合激情| 天天做天天做天天综合网| 激情五月激情综合网| 婷婷综合激六月情网| 91精品国产综合久久香蕉 | 色婷婷综合久久久| 国产精品国产色综合色| 久久婷婷激情综合色综合俺也去| 国产一区二区三区亚洲综合| 亚洲综合综合在线| 亚洲综合在线观看视频| 国产精品激情综合久久| 狠狠色狠狠色很很综合很久久 | 国产综合精品女在线观看| 日韩综合在线视频| 婷婷综合激情五月中文字幕| 99久久国产综合精品1尤物| 亚洲成色在线综合网站| 青青草原综合久久大伊人 | 亚洲国产综合人成综合网站00| 五月天激情综合网| 奇米综合四色77777久久| 亚洲综合伊人制服丝袜美腿| 久久99国产综合精品| 天天影视色香欲综合免费| 狠狠色综合久久婷婷| 婷婷激情综合色五月久久| 色欲香天天综合网站| 丁香伊人五月综合激激激| 91精品国产色综合久久|