久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 33952|回復: 4
打印 上一主題 下一主題
收起左側

Arduino超聲波測距實驗示例教程

[復制鏈接]
跳轉到指定樓層
樓主


全部資料51hei下載地址:
超聲波測距.zip (2.58 MB, 下載次數: 133)


Arduino示例教程模塊版——超聲波測距實驗
超聲波發射器向某一方向發射超聲波,在發射的同時開始計時,超聲波在空氣中傳播,途中碰到障礙物就立即返回來,超聲波接收器收到反射波就立即停止計時。聲波在空氣中的傳播速度為340m/s,根據計時器記錄的時間t,就可以計算出發射點距障礙物的距離s,即:s=340m/s× t / 2 。這就是所謂的時間差測距法。本實驗利用超聲波測得的距離從串口中顯示。
元器件清單:
Zduino UNO × 1;
OJ傳感器擴展板× 1;
USB數據線 × 1 ;
1p杜邦線 × 4 ;
超聲波傳感器 × 1;

知識要點:
pulseIn():用于檢測引腳輸出的高低電平的脈沖寬度。
pulseIn(pin, value)
pulseIn(pin, value, timeout)
Pin---需要讀取脈沖的引腳
Value---需要讀取的脈沖類型,HIGH或LOW
Timeout---超時時間,單位微秒,數據類型為無符號長整型。
使用方法及時序圖:
1、使用Arduino采用數字引腳給SR04的Trig引腳至少10μs的高電平信號,觸發SR04模塊測距功能;
2、觸發后,模塊會自動發送8個40KHz的超聲波脈沖,并自動檢測是否有信號返回。這步會由模塊內部自動完成。
3、如有信號返回,Echo引腳會輸出高電平,高電平持續的時間就是超聲波從發射到返回的時間。此時,我們能使用pulseIn()函數獲取到測距的結果,并計算出距被測物的實際距離。
SR04與Arduino接線示意圖:
Arduino示例程序:
  1. /*
  2. IDE 版本:1.0.1
  3. 功能:利用SR04超聲波傳感器進行測距,并用串口顯示測出的距離值
  4. */

  5. // 設定SR04連接的Arduino引腳
  6. const int TrigPin = 2;
  7. const int EchoPin = 3;
  8. float distance;
  9. void setup()
  10. {   // 初始化串口通信及連接SR04的引腳
  11.         Serial.begin(9600);
  12.         pinMode(TrigPin, OUTPUT);
  13.     // 要檢測引腳上輸入的脈沖寬度,需要先設置為輸入狀態
  14.         pinMode(EchoPin, INPUT);
  15.     Serial.println("Ultrasonic sensor:");
  16. }
  17. void loop()
  18. {
  19.     // 產生一個10us的高脈沖去觸發TrigPin
  20.         digitalWrite(TrigPin, LOW);
  21.         delayMicroseconds(2);
  22.         digitalWrite(TrigPin, HIGH);
  23.         delayMicroseconds(10);
  24.         digitalWrite(TrigPin, LOW);
  25.     // 檢測脈沖寬度,并計算出距離
  26.         distance = pulseIn(EchoPin, HIGH) / 58.00;
  27.         Serial.print(distance);
  28.         Serial.print("cm");
  29.         Serial.println();
  30.         delay(1000);
  31. }
復制代碼

連線實物圖:
下載完程序后,打開串口監視器,并將超聲波傳感器對向需要測量的物體,即可看到當前超聲波傳感器距物體的距離,如下圖:

第56講Arduino入門教程實驗16超聲波實驗

1實驗原理
    科學家們將每秒鐘振動的次數稱為聲音的頻率,它的單位是赫茲(Hz)。我們人類耳朵能聽到的聲波頻率為20Hz~20000Hz。當聲波的振動頻率小于20Hz或大于 20000Hz時,我們便聽不見了。因此,我們把頻率高于20000赫茲的聲波稱為“超聲波”。由于超聲波指向性強,能量消耗緩慢,在介質中傳播的距離較遠,因而超聲波經常用于距離的測量。
超聲波測距原理:超聲波發射器向某一方向發射超聲波,在發射時刻的同時開始計時,超聲波在空氣中傳播,途中碰到障礙物就立即返回來,超聲波接收器收到反射波就立即停止計時。超聲波在空氣中的傳播速度為340m/s,根據計時器記錄的時間t,就可以計算出發射點距障礙物的距離(s),即:s=340t/2 。這就是所謂的時間差測距法。
超聲波測距的原理是利用超聲波在空氣中的傳播速度為已知,測量聲波在發射后遇到障礙物反射回來的時間,根據發射和接收的時間差計算出發射點到障礙物的實際距離。由此可見,超聲波測距原理與雷達原理是一樣的。
測距的公式表示為:
L=C×T

式中L為測量的距離長度;C為超聲波在空氣中的傳播速度;T為測量距離傳播的時間差(T為發射到接收時間數值的一半)。
這節課我們就介紹一下怎樣使用SR04超聲波模塊來進行距離測量。會用到上節課脈沖計時所學到的知識,通過計算脈沖時常來算出來超聲波傳感器所感知到的距離.
                              
4-16-1SR04超聲波模塊參數
2硬件電路
超聲波測距實驗參考表4-16-2。

實驗器件

數量
landzoduino開發板
1
編程線
1
杜邦線
若干
面包板
1
超聲波模塊
1

4-16-2超聲波測距實驗器件表
4-16-3超聲波測距實驗電路圖
3程序設計
測試程序如下:
  • /****************************************************
  • 超聲波測距實驗程序
  • 使用超聲波傳感器測距并串口顯示距離值
  • This example code is in the public domain.
  • ****************************************************/
  • const int TrigPin = 8;
  • const int EchoPin = 9;
  • float cm;
  • /****************************************************
  • 初始化部分_setup()函數
  • ****************************************************/
  • void setup()
  • {
  • Serial.begin(9600);
  • pinMode(TrigPin, OUTPUT);
  • pinMode(EchoPin, INPUT);
  • }
  • /****************************************************
  • 執行部分_loop()函數
  • ****************************************************/
  • void loop()
  • {
  • //低高低電平發一個短時間脈沖去TrigPin
  • digitalWrite(TrigPin, LOW);
  • delayMicroseconds(2);
  • digitalWrite(TrigPin, HIGH);
  • delayMicroseconds(10);
  • digitalWrite(TrigPin, LOW);
  • //將回波時間換算成cm
  • cm= pulseIn(EchoPin, HIGH) / 58.0;
  • Serial.print(cm);
  • Serial.print("cm");
  • Serial.println();
  • delay(1000);
  • }
復制代碼
4實驗操作
1)   按照圖4-16-3將電路連接到landzoduino開發板上。
2)   插上編程線,把程序下載到Landzoduino控制板。
3)   觀察運行情況。
5實驗結果
通過超聲波模塊的收發,可以準確的檢測3米之內事物到超聲波模塊的距離。

6實驗視頻

Arduino連接超聲波傳感器測距

注:方法已經過時,新方法使用timer去計時,請看https://code.google.com/p/arduino-new-ping/

超聲波傳感器適用于對大幅的平面進行靜止測距。普通的超聲波傳感器測距范圍大概是2cm~450cm,分辨率3mm(淘寶賣家說的,筆者測試環境沒那么好,個人實測比較穩定的距離10cm~2m左右,超過此距離就經常有偶然不準確的情況發生了,當然不排除筆者技術問題。)

測試對象是淘寶上面最便宜的SRF-04超聲波傳感器,有四個腳:5v電源腳(Vcc),觸發控制端(Trig),接收端(Echo),地端(GND)


模塊工作原理:
  •        采用IO觸發測距,給至少10us的高電平信號;
  •        模塊自動發送840KHz的方波,自動檢測是否有信號返回;
  •        有信號返回,通過IO輸出一高電平,高電平持續的時間就是超聲波從發射到返回的時間.測試距離=(高電平時間*聲速(340m/s))/2;
電路連接方法:


Arduino程序例子:
  1. const int TrigPin = 2;
  2. const int EchoPin = 3;
  3. float cm;
  4. void setup()
  5. {
  6. Serial.begin(9600);
  7. pinMode(TrigPin, OUTPUT);
  8. pinMode(EchoPin, INPUT);
  9. }
  10. void loop()
  11. {
  12. digitalWrite(TrigPin, LOW); //低高低電平發一個短時間脈沖去TrigPin
  13. delayMicroseconds(2);
  14. digitalWrite(TrigPin, HIGH);
  15. delayMicroseconds(10);
  16. digitalWrite(TrigPin, LOW);

  17. cm = pulseIn(EchoPin, HIGH) / 58.0; //將回波時間換算成cm
  18. cm = (int(cm * 100.0)) / 100.0; //保留兩位小數
  19. Serial.print(cm);
  20. Serial.print("cm");
  21. Serial.println();
  22. delay(1000);
  23. }
復制代碼




Arduino教程(提高篇)——SR04超聲波類庫的使用
SR04是最常見的超聲波傳感器之一,價格便宜,好用,是arduino開發的必備良品~


其工作原理如下
  •        采用IO觸發測距,給至少10us的高電平信號;
  •        模塊自動發送840KHz的方波,自動檢測是否有信號返回;
  •        有信號返回,通過IO輸出一高電平,高電平持續的時間就是超聲波從發射到返回的時間.距離=(高電平時間*聲速(340m/s))/2;


下面使用的是arduino官方推薦的SR04超聲波傳感器類庫
  •        將附件下載后解壓到arduinoIDE下的libraries文件夾即可,如下圖

  •        打開ArduinoIDE,選擇SR04例程


  •        打開后即可見到如下程序
  1. #include "SR04.h"
  2. #define TRIG_PIN 2
  3. #define ECHO_PIN 3
  4. SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
  5. long a;
  6. void setup() {
  7. Serial.begin(9600);
  8. Serial.println("Example written by Coloz From Arduino.CN");
  9. delay(1000);}
  10. void loop() {
  11. a=sr04.Distance();
  12. Serial.print(a);
  13. Serial.println("cm");
  14. delay(1000);}
復制代碼
  •        如下連接你的超聲波傳感器
#define TRIG_PIN 2
#define ECHO_PIN 3

TRIG接到arduino的第二腳
ECHO接到arduino的第三腳
VCC、GND接上
  •        打開串口調試,即可看到效果了


最后提供一個不用庫直接驅動SR04的程序(上面庫,就是把這個程序封裝了一次)
  1. const int TrigPin = 2;
  2. const int EchoPin = 3;
  3. float cm;
  4. void setup()
  5. {
  6. Serial.begin(9600);
  7. pinMode(TrigPin, OUTPUT);
  8. pinMode(EchoPin, INPUT);
  9. }
  10. void loop()
  11. {
  12. //發一個10ms的高脈沖去觸發TrigPin
  13. digitalWrite(TrigPin, LOW);
  14. delayMicroseconds(2);
  15. digitalWrite(TrigPin, HIGH);
  16. delayMicroseconds(10);
  17. digitalWrite(TrigPin, LOW);

  18. cm = pulseIn(EchoPin, HIGH) / 58.0; //算成厘米
  19. cm = (int(cm * 100.0)) / 100.0; //保留兩位小數
  20. Serial.print(cm);
  21. Serial.print("cm");
  22. Serial.println();
  23. delay(1000);
  24. }
復制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:471632 發表于 2019-4-23 20:47 | 只看該作者
就是不知道那個58是怎么來的?
回復

使用道具 舉報

板凳
ID:538902 發表于 2019-5-15 15:00 | 只看該作者
這個可以有
回復

使用道具 舉報

地板
ID:281512 發表于 2019-8-21 14:56 | 只看該作者
好全啊    謝謝分享
回復

使用道具 舉報

5#
ID:710934 發表于 2020-4-29 17:40 | 只看該作者
tigerzq 發表于 2019-4-23 20:47
就是不知道那個58是怎么來的?

pulseIn()單位為微秒,聲速344m/s,所以距離cm=344*100/1000000*pulseIn()/2約等于pulseIn()/58.0
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91免费小视频 | 亚洲精品国产电影 | 国产免费一区二区三区免费视频 | 免费看一级毛片 | 天天狠狠 | 在线播放国产视频 | 国产精品亚洲精品日韩已方 | 欧美黄色片 | 日韩欧美一级片 | 国产在线视频一区二区 | 中文字幕视频在线观看 | 久草在线免费资源 | 国产成人综合一区二区三区 | 99精品免费久久久久久日本 | 最近日韩中文字幕 | 狠狠骚 | 真人毛片 | 久久久久网站 | 久久精品中文字幕 | 国产精品视频 | 福利片一区二区 | 成人h动漫精品一区二区器材 | 天天干天天操天天射 | 男女啪啪高潮无遮挡免费动态 | 中文字幕91 | 亚洲欧美国产精品久久 | 亚洲一区二区三区四区五区午夜 | 北条麻妃一区二区三区在线视频 | 国产精品免费在线 | 爱爱视频在线观看 | 精品乱码一区二区三四区 | 水蜜桃亚洲一二三四在线 | 亚洲精品九九 | 天天操一操 | 国产高清美女一级a毛片久久w | 日韩一区二区av | av网址在线播放 | 亚洲国产精品日韩av不卡在线 | 国产福利小视频 | 久久www免费人成看片高清 | 91在线视频播放 |