sponsored links

超聲波測距儀實驗(Arduino邊做邊學:從點亮Led到物聯網)

本系列文章為作者原創,未經作者書面同意,不得轉載!

超聲波測距儀實驗(Arduino邊做邊學:從點亮Led到物聯網)



首先,我們來了解一下超聲波,科學家們將每秒鐘振動的次數稱為聲音的頻率,它的單位是赫茲(Hz)。我們人類耳朵能聽到的聲波頻率為20Hz-20000Hz。因此,我們把頻率高於20000赫茲的聲波稱為“超聲波”。

超聲波方向性好,穿透能力強,易於獲得較集中的聲能,在水中傳播距離遠,可用於測距、測速、清洗、焊接、碎石、殺菌消毒等。在醫學、軍事、工業、農業上有很多的應用:

超聲波測距儀實驗(Arduino邊做邊學:從點亮Led到物聯網)

在動物的世界裡,超聲波也起著不可替代的作用:

超聲波測距儀實驗(Arduino邊做邊學:從點亮Led到物聯網)

蝙蝠和海豚就是依靠自身發出的超聲波來定位捕獲獵物。

超聲波測距儀就是根據超聲波的特點設計而成:

超聲波測距儀實驗(Arduino邊做邊學:從點亮Led到物聯網)

我們今天的專案就是製作一個數字超聲波測距儀。


在這個專案中,您將學到的

  • 學會使用超聲波測距感測器
  • 學習使用四位數碼管

另外,透過這個專案您也會學習到LED顯示模組的一般驅動原理。

我們選用Arduino Uno作為數字超聲波測距儀的主控板,還會用到一個超聲波測距模組和一個共陰四位數碼顯示模組,由於我們採用的超聲波測距模組最大測距為4.5米,精度為0.2釐米,考慮到我們的顯示模組為4位,所以我們將顯示距離的單位設定為釐米,前三位顯示整數部分,最後一位顯示小數部分,正好能夠滿足超聲波測距模組的精度要求。

工具和元件

2.1 工具列表

本專案不需要額外的工具。

2.2 元器件列表

2.3.1 SR-04超聲波測距模組

SR-04超聲波測距模組效能穩定,測度距離精確,盲區小,關鍵是還很便宜,在創客圈應用最為廣泛,包括:機器人避障、物體測距、液位檢測等等。

超聲波測距儀實驗(Arduino邊做邊學:從點亮Led到物聯網)

2.3.1.1 技術引數

  • 使用電壓DC 5V
  • 靜態電流小於2mA
  • 感應角度不大於15度
  • 探測距離2cm-450cm
  • 探測精度0.2cm

2.3.1.2 引腳說明

  • VCC:供電 5V DC
  • TRIG:控制端
  • ECHO:接收端
  • GND:接地,電源負極

2.3.1.3 工作原理

  • 採用IO口TRIG觸發測距,給至少10us的高電平訊號;
  • 模組自動傳送8個40khz的方波,自動檢測是否有訊號返回;
  • 有訊號返回,透過IO口ECHO輸出一個高電平,高電平持續的時間就是超聲波從發射到返回的時間。

測試距離 = (高電平時間 * 聲速(340M/S)) / 2

所以這個模組的使用方法還是比較簡單的,在TRIG控制口發一個10US以上的高電平,就可以在ECHO接收口等待高電平輸出,一有輸出就可以開定時器計時,當此口變為低電平時就可以讀定時器的值,此時就為此次測距的時間,根據上面的公式即可計算出距離。

小知識:
聲音的傳播需要物質,物理學中把這樣的物質叫做介質。
聲音在不同的介質中的傳播速度:
真空 0m/s(也就是不能傳播)
空氣(15℃) 340m/s
空氣(25℃) 346m/s
軟木 500m/s
煤油(25℃) 1324m/s
蒸餾水(25℃) 1497m/s
海水(25℃) 1531m/s
銅(棒) 3750m/s
大理石 3810m/s
鋁(棒) 5000m/s
鐵(棒) 5200m/s
聲音在不同的物質中的傳播速度不同。

2.3.2 共陰四位數碼管

數碼管是一種半導體發光器件,數碼管可分為七段數碼管和八段數碼管,區別在於八段數碼管比七段數碼管多一個用於顯示小數點的發光二極體單元DP(decimal point),其基本單元是發光二極體。

共陰四位數碼管是一種數字顯示屏,由4個八段數碼管組成,能夠顯示4個數字,支援顯示小數點和時間格式。

數碼管是一種半導體發光器件,其基本單元是發光二極體。因此也需要串聯電阻,以防電流過大。

超聲波測距儀實驗(Arduino邊做邊學:從點亮Led到物聯網)

2.3.2.1 引腳說明

如下圖所示:abcdefgh 為數碼管LED引腳,每個數字由7條線(LED)組成,用a-g控制,h控制小數點;同時透過1-4引腳控制當前設定的四個數字中的哪一個。

超聲波測距儀實驗(Arduino邊做邊學:從點亮Led到物聯網)

3 電路設計

3.1 電路圖

根據我們的專案需求,設計電路圖如下:

超聲波測距儀實驗(Arduino邊做邊學:從點亮Led到物聯網)

3.2 電路原理

由於四位數碼管基本上用掉了所有數字口,除了0、1之外,由於0、1這兩個引腳是UNO連線電腦的串列埠,為了方便透過串列埠列印除錯資訊,一般儘量少佔用,所以超聲波測距模組在這裡使用了模擬口A4和A5。

知識點:
Arduino UNO電路板的數字口有13個,但有的專案我們可能需要更多的數字口,當我們數字埠不夠用時,該怎麼辦呢?當然,您可以購買效能更為強大的Arduino電路板,如MEGA 2560,但有沒有其它辦法呢?
其實Arduino電路板的模擬輸入口可以很方便的當數字口用,以UNO為例,對應的GPIO:A0=14、A1=15、A2=16......以此類推,使用方法和使用數字埠一樣。

4 程式設計

4.2 主程式設計

/*
 *名稱:超聲波測距儀
 *功能:
 *作者:YXK
 *時間:2018.6.5
 */

const int trigPin = 18; //定義超聲波測距模組trig引腳 A4
const int echoPin = 19; //定義超聲波測距echo引腳 A5

const int led[8] = {2,3,4,5,6,7,8,9};  //定義數碼管的LED引腳
const int com[4] = {13,12,11,10};      //定義數碼管的數字位引腳

float checkDistance(int trig, int echo); //超聲波測距函式
int firstBit,secondBit,thirdBit,fourthBit; //定義四位數碼管每位要顯示的值,依次是第1、2、3、4位

float distFloat; //宣告一個浮點型距離變數
int distInt;     //宣告一個整形距離變數
int eyeDelay=500;   //視覺延遲時間,單位微秒

//數碼管0-F .碼值表
unsigned char num[17][8] =
{
 //a  b  c  d  e  f  g  h
  {1, 1, 1, 1, 1, 1, 0, 0},     //0
  {0, 1, 1, 0, 0, 0, 0, 0},     //1
  {1, 1, 0, 1, 1, 0, 1, 0},     //2
  {1, 1, 1, 1, 0, 0, 1, 0},     //3
  {0, 1, 1, 0, 0, 1, 1, 0},     //4
  {1, 0, 1, 1, 0, 1, 1, 0},     //5
  {1, 0, 1, 1, 1, 1, 1, 0},     //6
  {1, 1, 1, 0, 0, 0, 0, 0},     //7
  {1, 1, 1, 1, 1, 1, 1, 0},     //8
  {1, 1, 1, 1, 0, 1, 1, 0},     //9
  {1, 1, 1, 0, 1, 1, 1, 1},     //A
  {1, 1, 1, 1, 1, 1, 1, 1},     //B
  {1, 0, 0, 1, 1, 1, 0, 1},     //C
  {1, 1, 1, 1, 1, 1, 0, 1},     //D
  {1, 0, 0, 1, 1, 1, 1, 1},     //E
  {1, 0, 0, 0, 1, 1, 1, 1},     //F
  {0, 0, 0, 0, 0, 0, 0, 1},     //.
};

void setup()
{
  for(int i=0;i<8;i++)
    pinMode(led[i],OUTPUT);
  for(int i=0;i<4;i++)
    pinMode(com[i],OUTPUT);

  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop()
{
  distFloat = checkDistance(trigPin, echoPin);
  distInt = (int)distFloat*10;

  //將距離顯示在四位數碼管上,需要將dist變數拆分成第一位、第二位、第三位、第四位
  firstBit = distInt/1%10;
  secondBit = distInt/10%10;
  thirdBit = distInt/100%10;
  fourthBit = distInt/1000%10; 

  for(int i=0;i<=500;i++){            //開始在數碼管上進行顯示
      display(2,16);                  //顯示小數點
      display(1,firstBit);            //顯示第一位,即整數部分的百位
      delayMicroseconds(eyeDelay);    //做了一個視覺延遲
      display(2,secondBit);
      delayMicroseconds(eyeDelay);
      display(3,thirdBit);
      delayMicroseconds(eyeDelay);
      display(4,fourthBit);
      delayMicroseconds(eyeDelay);
  }
}

void display(unsigned char d,unsigned char n)     //顯示函式,d可選數值範圍1-4,n可選數值範圍0-16,16為小數點
{
  for(int i=0;i<8;i++)       //去除餘暉
    digitalWrite(led[i],LOW);

  switch(d)           //選通位選
  {
    case 1:
      digitalWrite(com[0],LOW);   //選擇位1
      digitalWrite(com[1],HIGH);
      digitalWrite(com[2],HIGH);
      digitalWrite(com[3],HIGH);
      break;
    case 2:
      digitalWrite(com[0],HIGH);
      digitalWrite(com[1],LOW);   //選擇位2
      digitalWrite(com[2],HIGH);
      digitalWrite(com[3],HIGH);
      break;
    case 3:
      digitalWrite(com[0],HIGH);
      digitalWrite(com[1],HIGH);
      digitalWrite(com[2],LOW);   //選擇位3
      digitalWrite(com[3],HIGH);
      break;
    case 4:
      digitalWrite(com[0],HIGH);
      digitalWrite(com[1],HIGH);
      digitalWrite(com[2],HIGH);
      digitalWrite(com[3],LOW);   //選擇位4
      break;
    default:break;
  }

  for(int i=0;i<8;i++)
    digitalWrite(led[i],num[n][i]);      //按照碼值表進行顯示
}

float checkDistance(int trig, int echo) //超聲波測距函式
{
  digitalWrite(trig, LOW);                  //控制端TRIG先發一個低電平,2微妙
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);                 //控制端TRIG先一個高電平,2微妙
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  float distance = pulseIn(echo, HIGH)/58;   //根據接收端ECHO獲得的高電平時長計算距離
  delay(10);
  return distance;
}

這個程式就不再解釋了,程式中的註釋已經非常清楚了!

4 安裝除錯

下面我們根據電路圖將兩個模組跟UNO連線上:

超聲波測距儀實驗(Arduino邊做邊學:從點亮Led到物聯網)

測試一下,效果不錯!這裡稍微提醒一下,由於超聲波本身的特性,對於測試軟目標距離,如衣物,會有一定誤差,對於硬目標距離的測試,如牆壁,會比較準確,您可以測試測試!

5 總結擴充套件

為了能夠讓大家明白LED顯示模組的一般驅動原理,這個專案我沒有使用任何庫,您會發現主程式比較長,看起來似乎也比較複雜,關鍵是還不能複用。

您能夠根據這個主程式,為超聲波測距模組和四位數碼管寫兩個庫嗎?後續,如果有專案中也需要它們,您就可以很方便的複用了!

後面我們還會採用採用基於I2C介面的四位數碼管制作一個超聲波測距儀!

如果您喜歡本文,您可以點選一下下面的喜歡按鈕,您也可以關注我,謝謝您的支援!

分類: 體育
時間: 2022-04-10

相關文章

陳浩民慶祝52歲生日,一家六口幸福同框,蔡少芬冉瑩穎帶娃現身

陳浩民慶祝52歲生日,一家六口幸福同框,蔡少芬冉瑩穎帶娃現身
10月7日晚,蔣麗莎在個人社交平臺分享了一組為老公陳浩民慶祝52歲生日的照片,還開心發文:"祝老公生日快樂,感謝朋友們的陪伴和祝福-滿滿的幸福感和暖暖的愛,再次感謝". 曬出的照片 ...

墨鏡氣質!特雷-楊曬海邊度假照慶祝23歲生日
虎撲09月20日訊 今日是老鷹後衛特雷-楊的23歲生日.特雷-楊更新推特曬照慶生. 特雷-楊曬出一張他在海邊的度假照寫道:"23

我,美國人,8歲時第一次來中國,25歲嫁給了中國人

我,美國人,8歲時第一次來中國,25歲嫁給了中國人
黃小貓/口述 邵峋/撰文 我是黃小貓(@黃小貓毛芹),英文名Katherine Elizabeth Ackerman,1990年冬天出生於美國賓夕法尼亞州費城的一個郊區.從8歲那年第一次來到中國,住進 ...

中國晶片奇才,年僅28歲成博導,黃芊芊憑實力吊打美國晶片技術

中國晶片奇才,年僅28歲成博導,黃芊芊憑實力吊打美國晶片技術
中國晶片奇才,年僅28歲成博導,黃芊芊憑實力吊打美國晶片技術! 我國科技人才輩出,中國晶片奇才黃芊芊年僅28歲就成為了博士生導師.就是這位絕世奇才,憑藉自己的實力吊打美國晶片技術.那麼她究竟是一名怎麼 ...

68歲法國第一夫人是怎麼用氣質碾壓25歲美國超模的?

68歲法國第一夫人是怎麼用氣質碾壓25歲美國超模的?
有人說法國女人穿得更好,未必這句話就代表普遍真理,但#法國總統夫人#再次證明法國女人肯定比美國女人有氣質,68歲的#布麗吉特·馬克龍#完勝#海莉·比伯#. 25歲的超模海莉在68歲的布麗吉特襯托下,顯 ...

伊藤鬱子:25歲嫁中國軍人,47歲回家辭別老母親:我的心在中國

伊藤鬱子:25歲嫁中國軍人,47歲回家辭別老母親:我的心在中國
"我來中國是為了贖罪,為了替日本人還債,日本人欠你們的太多了--" --伊藤鬱子 抗日戰爭進行到1945年時,日本的敗局已定,可日本士兵在軍國主義的影響下,始終都不願意相信這一事實 ...

25歲肯亞長跑名將被丈夫刺死家中,世界田聯:震驚、悲痛

25歲肯亞長跑名將被丈夫刺死家中,世界田聯:震驚、悲痛
14日,肯亞田協釋出訊息,25歲的長跑選手蒂羅普被丈夫刺死在家中.隨後,世界田聯也表示對此深感震驚和悲痛. 據<衛報>報道,近日,肯亞25歲長跑運動員Agnes在家中遇害,丈夫已被警方列為 ...

年僅25歲的肯亞長跑名將蒂羅普被刺身亡,其丈夫為嫌疑人
路透社10月13日訊息,肯亞田徑隊週三表示,兩屆世錦賽銅牌得主.肯亞長跑運動員阿格妮絲·蒂羅普(Agnes Tirop)在家中被刺身亡,年僅25歲. 蒂羅普代表肯亞參加了東京奧運會5000米比賽,在決 ...

25歲女子胸部查出9個腫瘤,醫生提醒:這種性格的人患癌風險高

25歲女子胸部查出9個腫瘤,醫生提醒:這種性格的人患癌風險高
根據楚天都市報報道,25歲的武漢女孩劉佳(化名)不經意間發現自己的左胸長了一個綠豆大小的腫塊,摸上去硬硬的,但是不痛也不癢,所以就沒有放在心上. 幾個月過去了,劉佳發現左胸時不時會出現針扎般的刺痛感, ...

因抑鬱症自殺的6位明星,每一位都讓人心痛,最小的年僅25歲

因抑鬱症自殺的6位明星,每一位都讓人心痛,最小的年僅25歲
深受抑鬱症困擾的明星太多了! 大多數都選擇了自殺,結束自己痛苦的一生,在這些明星中,每一位都讓人心痛,最小的年僅25歲. 喬任梁:28歲 9月16日,是喬任梁去世五週年的日子,昔日好友陳喬恩,連續五年 ...

申通創始人聶騰飛:22歲白手起家,25歲不幸去世,公司歸了大舅哥

申通創始人聶騰飛:22歲白手起家,25歲不幸去世,公司歸了大舅哥
隨著電商行業的蓬勃發展,人們網購的頻率越來越高,我們的生活也已經被大大小小的快遞所包圍,幾乎每過兩三天就會收到大箱小箱的快遞,目前大家熟知的快遞企業莫過於三通一達,即我們經常見到的:申通.圓通.中通. ...

CBA2021-2022賽季25歲以下最好的五名年輕球員,胡金秋穩居第一

CBA2021-2022賽季25歲以下最好的五名年輕球員,胡金秋穩居第一
CBA這幾年出色的年輕球員並不少,雖然不足以在國際賽場上立足,也不足以登陸 NBA這樣的大舞臺.但是在CBA他們依舊是聯賽最好最有天賦的年輕球員,讓我們看看CBA下賽季25歲以下最好的五名球員(不包含 ...

他25歲保送清華,11年少將升中將,父親是元帥,岳父是開國少將

他25歲保送清華,11年少將升中將,父親是元帥,岳父是開國少將
戰爭讓中華大地滿目瘡痍,中國近代,在經歷過抗日戰爭.解放戰爭後,才讓中國重新統一起來,國人也免受戰爭的痛苦.在那個時代裡,有許許多的年輕人,他們的夢想都是為了新中國的崛起而努力奮鬥著. 為了實現自己的 ...

NBA三訊息:克萊有望打出高水準;25歲以下球星排名,東契奇居首

NBA三訊息:克萊有望打出高水準;25歲以下球星排名,東契奇居首
今天是星期六,也是農曆8月12號,在這裡小編先祝大家中秋節快樂.同時NBA也有了新的訊息.濃眉有望新賽季觸底反彈,重返巔峰:專家看好克萊新賽季打出高水準,同時美媒也評選出了NBA25歲以下的25大球星 ...

重磅:中國軍艦出現在美國專屬經濟區!已不止一次

重磅:中國軍艦出現在美國專屬經濟區!已不止一次
美國艦隊多次穿越我國臺海.南海水域,來而不往非禮也,我軍也不滿足僅僅在近海警告驅離,不是有人常說,最好的防守是進攻.近期,我國海軍出現在了美國家門口,而且出動了055和052D這樣的先進艦船,中國這個 ...

在CBA打過球的NBA球員過得如何?一人25歲無球可打,一人將拿頂薪

在CBA打過球的NBA球員過得如何?一人25歲無球可打,一人將拿頂薪
國際球員來CBA打球除了撈金以外就是鍛鍊自己的競技狀態尋找機會回到NBA的大舞臺.畢竟CBA和NBA是兩個級別的聯賽:先不說薪水高低,NBA的曝光率是全世界的,是國際舞臺.那在CBA打過球的被NBA球 ...

著名主持人魏笑,25歲僅當36小時新娘不幸離世,丈夫為愛至今不娶

著名主持人魏笑,25歲僅當36小時新娘不幸離世,丈夫為愛至今不娶
一. 她是鏡頭前端莊知性的女主持,也是生活裡愛笑樂觀的漂亮女孩! 卻與相戀十年男友領完結婚證的第二天,僅做了36個小時的新娘就突然離世! 婚禮變葬禮! 25歲的著名主持人魏笑,就這樣永遠離開了我們,令 ...

25歲火遍全國,28歲嫁老師,52歲跌落神壇,傅藝偉經歷了什麼?

25歲火遍全國,28歲嫁老師,52歲跌落神壇,傅藝偉經歷了什麼?
1989年,25歲的傅藝偉在拍<封神榜>時拒絕和56歲的達奇拍吻戲,傅藝偉非常不情願,他說:"他太老了,這可是我的初吻,我憑什麼要拍!" 後來傅藝偉憑藉這部劇一夜爆紅, ...

中國該開心?美國堵死了法國“反華”之路,反華勢力已分裂成2派

中國該開心?美國堵死了法國“反華”之路,反華勢力已分裂成2派
最近澳大利亞要從美國手上採購8艘核潛艇這件事,鬧得很大.但我把平臺上相關的分析文章看了下,發現大部分文章都沒有觸及這件事的根本.這件事的根本原因是什麼?所謂"軍政不分家",軍售的背 ...

今年已經有7位明星去世,最大的74歲,最小的年僅25歲,令人痛心

今年已經有7位明星去世,最大的74歲,最小的年僅25歲,令人痛心
又一位明星去世了,真是令人惋惜的事情. 國家一級舞蹈演員周潔,被譽為了"最美楊貴妃",據導演胡雪樺稱,"剛接到噩耗,著名舞蹈家演員周潔駕鶴西去.親愛的周潔一路走好!從此天 ...