在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>超聲波傳感器測量距離計算實例

超聲波傳感器測量距離計算實例

2023-07-07 | zip | 0.82 MB | 次下載 | 2積分

資料介紹

描述

該項目將向您展示如何使用超聲波傳感器計算距離。它將分為三個部分:

  • 編程超聲波傳感器 + 將其顯示到串行監視器上
  • 如何在 LCD 上顯示距離
  • 將中斷與超聲波傳感器結合使用

編程超聲波傳感器 + 將其顯示到串行監視器上:

在本節結束時,您的項目應如下所示:

?

如您所見,當我移動手時,距離會發生變化。當我將手移開時,距離也會發生變化——它會增加。當我將手移近傳感器時,距離會縮短。您可能已經注意到,有時距離是一個 3 位數。這是因為我的手離傳感器太近了。發送的聲波迅速反彈,供傳感器讀取。

示意圖:

?

?
pYYBAGOSwz6AAH9WAAFG9K78nf8729.png
4 針接頭代表超聲波傳感器。
?

?

連接到 Gnd 的電線是傳感器上的“Gnd”腳,連接到引腳號的電線。9,是“回聲”腿,連接到引腳號的電線。10 是“Trig”腳,連接到 5v 的電線是“Vcc”腳。

編碼:

首先,將其添加到代碼的開頭。

// defines pins numbers
const int trigPin = 9;
const int echoPin = 10; 

其次,我們需要定義變量。

long duration;
int distance; 

void setup()函數中,我們需要聲明每個引腳的輸入/輸出。我們還需要啟動串行通信

void setup() {
 pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
 pinMode(echoPin, INPUT); // Sets the echoPin as an Input
 Serial.begin(9600); // Starts the serial communication
}

現在,對于void loop()函數,添加以下內容:

 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);

此代碼清除 trigPin。然后,要將引腳設置為高電平 10 微秒,請添加:

 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);

接下來,編寫以下內容:

 duration = pulseIn(echoPin, HIGH);

此行讀取 echoPin,以微秒為單位返回聲波傳播時間。

最后,要計算距離并將其打印到您的串行監視器上,請將其寫入您的代碼。

 distance = duration * 0.034 / 2;
 Serial.print("Distance: ");
 Serial.println(distance);
 delay(10);

您的代碼應類似于以下內容:

// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;
// defines variables
long duration;
int distance;
void setup() {
 pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
 pinMode(echoPin, INPUT); // Sets the echoPin as an Input
 Serial.begin(9600); // Starts the serial communication
}
void loop() {
 // Clears the trigPin
 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 // Sets the trigPin on HIGH state for 10 micro seconds
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);
 // Reads the echoPin, returns the sound wave travel time in microseconds
 duration = pulseIn(echoPin, HIGH);
 // Calculating the distance
 distance = duration * 0.034 / 2;
 // Prints the distance on the Serial Monitor
 Serial.print("Distance: ");
 Serial.println(distance);
 delay(10);
} 

如果您的代碼有效,那就太好了。但如果沒有,那么您可能需要檢查以下內容:

  • 電路接線是否正確。
  • 你是否有相同的串口和串口連接(9600)。
  • 如果您的超聲波傳感器工作正常。

如何在 LCD 上顯示距離

現在,我們不再將距離顯示在串行監視器上,而是將其顯示在 LCD 上。最后,您的項目應如下所示:

?

示意圖:

?
pYYBAGOSw0OAE5Z3AAE0QY2DZI4826.png
LCD 的布線令人困惑但很重要。
?

?

?

編碼:

現在,將其添加到代碼的開頭。

#include <LiquidCrystal.h> // includes the LiquidCrystal Library 
LiquidCrystal lcd(

要顯示 2 種不同類型的距離,請將“ int distance”更改為以下內容:

int distanceCm, distanceInch;

這意味著 LCD 將以厘米和英寸為單位顯示距離。接下來,在void setup()函數中添加:

lcd.begin(16,2); 

另外,刪除serial.begin()函數,因為我們不需要與 CPU 通信。現在,要計算以英寸為單位的距離,我們需要添加以下代碼。

distanceInch = duration * 0.0113 / 2; /*remember to change the 'distance' variable 
                                        into distanceCm*/

添加此代碼以將距離打印到 LCD 上。

 lcd.setCursor(0,0); 
 lcd.print("Distance: "); 
 lcd.print(distanceCm); 
 lcd.print("cm   ");
 delay(10);
 lcd.setCursor(0,1);
 lcd.print("Distance: ");
 lcd.print(distanceInch);
 lcd.print("inch ");
 delay(10);

在此代碼中,光標設置為 LCD 上的第 0 行、第 0 列。然后,將顯示“距離:”一詞,在其旁邊,LCD 上將打印以厘米為單位的距離。與以英寸為單位的距離相同,但將向下一行。您的代碼應如下所示:

#include 
LiquidCrystal lcd(1,3,4,5,6,7);
// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;
// defines variables
long duration;
int distanceCm, distanceInch;
void setup() {
 lcd.begin(16,2);
 pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
 pinMode(echoPin, INPUT); // Sets the echoPin as an Input
}
void loop() {
 // Clears the trigPin
 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);
 distanceCm = duration * 0.034 / 2;
 distanceInch = duration * 0.0113 / 2;
 lcd.setCursor(0,0); 
 lcd.print("Distance: "); 
 lcd.print(distanceCm); 
 lcd.print("cm   ");
 delay(10);
 lcd.setCursor(0,1);
 lcd.print("Distance: ");
 lcd.print(distanceInch);
 lcd.print("inch ");
 delay(10);
} 

  • 檢查您的代碼是否正確。
  • 檢查您的電路和 LCD 接線是否正確。

將中斷與超聲波傳感器結合使用:

在項目的這一部分中,您將使用中斷來控制傳感器何時測量距離。它應該是這樣的:

?

您可能已經注意到,當我按下按鈕時,LCD 上的距離會發生變化。這是因為超聲波傳感器僅在按下按鈕時檢查距離。

示意圖:

?

?
pYYBAGOhWtaARbfIAAH1kKZWszc763.png
?

我將按鈕連接到 Arduino 板上的 2 號引腳,因為它和 3 號引腳是唯一可以使用 interrupt() 函數的引腳。

更新(08/08/2018)Interrupt()函數實際上可用于引腳 18、19、20 和 21 以及引腳 2 和 3。感謝 Walter Stroebel 指出這一點。

編碼:

首先,我們需要說明按鈕所連接的引腳,因此將其添加到代碼的開頭。

const int buttonPin = 2;

然后,要添加interrupt()函數,請將此行添加到void setup()函數中。

 attachInterrupt(digitalPinToInterrupt(buttonPin), pin_ISR, FALLING);

我們現在要做的就是從void loop()函數中獲取所有內容并將其添加到另一個函數中,這個函數稱為pin_ISR() 最后,您的代碼應如下所示:

#include 
LiquidCrystal lcd(1,3,4,5,6,7);
// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;
const int buttonPin = 2;
// defines variables
long duration;
int distanceCm, distanceInch;
void setup() {
 lcd.begin(16,2);
 pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
 pinMode(echoPin, INPUT); // Sets the echoPin as an Input
 pinMode(buttonPin, INPUT);
 attachInterrupt(digitalPinToInterrupt(buttonPin), pin_ISR, FALLING);
}
void loop() {
}
void pin_ISR(){
 // Clears the trigPin
 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);
 distanceCm = duration * 0.034 / 2;
 distanceInch = duration * 0.0113 / 2;
 lcd.setCursor(0,0); 
 lcd.print("Distance: "); 
 lcd.print(distanceCm); 
 lcd.print("cm   ");
 delay(10);
 lcd.setCursor(0,1);
 lcd.print("Distance: ");
 lcd.print(distanceInch);
 lcd.print("inch ");
 delay(10);
}

更新(08/08/2018)Walter Stroebel 發表評論,將當前代碼改進為以下內容:

#include 
LiquidCrystal lcd(1,3,4,5,6,7);
// defines pins numbers
volatile bool buttonPressed = false;
const int trigPin = 9;
const int echoPin = 10;
const int buttonPin = 2;
// defines variables
long duration;
int distanceCm, distanceInch;
void setup() {
 lcd.begin(16,2);
 pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
 pinMode(echoPin, INPUT); // Sets the echoPin as an Input
 pinMode(buttonPin, INPUT);
 attachInterrupt(digitalPinToInterrupt(buttonPin), pin_ISR, FALLING);
}
void loop() {
 if (buttonPressed) {
 // Clears the trigPin
 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);
 distanceCm = duration * 0.034 / 2;
 distanceInch = duration * 0.0113 / 2;
 lcd.setCursor(0,0); 
 lcd.print("Distance: "); 
 lcd.print(distanceCm); 
 lcd.print("cm   ");
 delay(10);
 lcd.setCursor(0,1);
 lcd.print("Distance: ");
 lcd.print(distanceInch);
 lcd.print("inch ");
 delay(10);
 buttonPressed = false;
 }
}
void pin_ISR(){
 buttonPressed = true;
}
// I would like to thank Walter Stroebel for suggesting this code.

這段代碼更好,因為它更短意味著中斷將更好地工作并且可以同時使用更多。

如果您的代碼不起作用,請檢查以下內容:

  • 如果您已正確連接 LCD、按鈕和傳感器。
  • 如果你的代碼寫對了。

希望你玩得開心。祝未來的項目好運!


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

请按住滑块,拖动到最右边
了解新功能

查看更多

广告

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 久久亚洲国产午夜精品理论片 | nxgx欧美| 性视频一区| 久久这里只有精品任你色 | 4455亚洲 | 国产精品午夜免费观看网站 | 日本a级精品一区二区三区 日本a级特黄三级三级三级 | 女上男下边吃奶边做视频成都 | 亚洲男同tv| 欧美特黄视频在线观看 | 94在线| 四虎tv在线观看884aa | 免费看欧美一级片 | 久久午夜视频 | 国产yw.8825.c免费 | 欧美在线专区 | 亚洲国产欧美日韩一区二区三区 | 久久综合性| 久久福利免费视频 | 国产成人精品视频一区二区不卡 | 午夜一级毛片不卡 | 97国内精品久久久久久久影视 | 在线观看视频播放 | 国产精品任我爽爆在线播放6080 | a男人的天堂久久a毛片 | 亚洲精品九色在线网站 | 久久久噜久噜久久gif动图 | 六月天丁香婷婷 | 女性一级全黄生活片 | 性色在线播放 | 五月婷婷丁香在线观看 | 成人在线播放av | 韩国特黄特色a大片免费 | www懂爱 | 国产高清视频免费最新在线 | 天天久 | 黄色精品视频 | 国产一级特黄 | 中文字幕777 | 国产精品资源站 | 国产精品伦理一区二区三区 |