電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>使用Arduino和LM393傳感器測量移動(dòng)機(jī)器人

使用Arduino和LM393傳感器測量移動(dòng)機(jī)器人

2022-12-15 | zip | 0.03 MB | 次下載 | 免費(fèi)

資料介紹

描述

LM393 速度傳感器模塊 (H206)

在開始項(xiàng)目的電路圖和代碼之前,讓我們先了解一下LM393速度傳感器模塊,因?yàn)樗陧?xiàng)目中起著至關(guān)重要的作用。H206速度傳感器模塊由紅外光傳感器和LM393電壓比較器IC組成,故命名為LM393速度傳感器。該模塊還包括一個(gè)網(wǎng)格板,該網(wǎng)格板必須安裝在電機(jī)的旋轉(zhuǎn)軸上。所有組件都在下圖中標(biāo)出。

pYYBAGOYD4qAVb-AAABQes7kVYg24.jpeg
?

紅外光傳感器由紅外發(fā)光二極管光電晶體管組成,由一個(gè)小間隙隔開。如上圖所示,整個(gè)傳感器設(shè)備被放置在一個(gè)黑色的外殼中。柵板由凹槽組成,板設(shè)置在紅外光傳感器的間隙之間,使傳感器能夠感應(yīng)到柵板中的間隙。柵板中的每個(gè)縫隙在通過縫隙時(shí)都會觸發(fā)IR傳感器;然后使用比較器將這些觸發(fā)器轉(zhuǎn)換為電壓信號。比較器使用 ON Semiconductor 的 LM393 IC。模塊有3個(gè)引腳,其中2個(gè)用于給模塊供電,1個(gè)輸出引腳用于統(tǒng)計(jì)觸發(fā)次數(shù)。

H206 傳感器安裝

poYBAGOYD42AQ94aAACPT_LYKHk003.jpg
?

安裝這些類型的傳感器有點(diǎn)棘手。只能安裝在軸兩側(cè)突出的電機(jī)上。軸的一側(cè)連接車輪,而另一側(cè)用于安裝網(wǎng)格,如上圖所示。

由于車輪和車輪連接在同一軸上,都以相同的速度旋轉(zhuǎn),因此通過測量車輛速度,我們可以測量車輪的速度。在傳感器可以計(jì)算通過的間隙數(shù)量之前,請確保網(wǎng)格板中的間隙通過紅外傳感器。只要滿足規(guī)定條件,也可以自行設(shè)置機(jī)械裝置安裝傳感器。紅外傳感器常用于許多機(jī)器人項(xiàng)目中,用于引導(dǎo)機(jī)器人了解障礙物。

上面顯示的網(wǎng)格板有 20 個(gè)槽(網(wǎng)格)。這意味著傳感器將發(fā)現(xiàn)車輪一整圈的 20 個(gè)間隙。通過計(jì)算傳感器檢測到的間隙數(shù)量,我們可以計(jì)算出車輪行進(jìn)的距離,同樣通過測量傳感器發(fā)現(xiàn)的間隙的速度,我們可以檢測出車輪的速度。在我們的機(jī)器人中,我們將此傳感器安裝在兩個(gè)輪子上,因此我們也可以找到機(jī)器人的角度。但是,使用加速度計(jì)或陀螺儀可以更明智地計(jì)算旋轉(zhuǎn)角度。在這里我們學(xué)習(xí)使用Arduino將加速度計(jì)與陀螺儀連接,并嘗試使用它們來測量旋轉(zhuǎn)角度。

示意圖

速度和距離傳感機(jī)器人的完整電路圖如下所示。該機(jī)器人以Arduino Nano為大腦,兩個(gè)用于車輪的直流電機(jī)由L298N H橋電機(jī)驅(qū)動(dòng)模塊驅(qū)動(dòng)。操縱桿用于控制機(jī)器人的速度和方向,兩個(gè)速度傳感器H206用于測量機(jī)器人的速度、距離和角度。然后,測量值顯示在 1602 LCD 模塊中。連接到 LCD 的電位器可用于調(diào)節(jié) LCD 的對比度,電阻器用于限制流向 LCD 背光的電流。

pYYBAGOYD5KAMzymAAB_wJgl0Mo198.jpg
?

整個(gè)電路由7.4V鋰電池供電。7.4V 電源提供給電機(jī)驅(qū)動(dòng)模塊的 12V 引腳。然后,電機(jī)驅(qū)動(dòng)模塊上的穩(wěn)壓器將 7.4V 轉(zhuǎn)換為穩(wěn)壓 + 5V,為 Arduino、LCD、傳感器和操縱桿供電。

電機(jī)由 Arduino 數(shù)字引腳 8、9、10 和 11 控制。由于還必須控制電機(jī)的速度,因此我們應(yīng)該向電機(jī)的正極提供 PWM 信號。因此,我們有引腳 9 和 10,它們都是 PWM 引腳。操縱桿的 X 和 Y 值分別使用模擬引腳 A2 和 A3 讀取。

我們知道 H206 傳感器在檢測到網(wǎng)格中的間隙時(shí)觸發(fā)。由于無法始終準(zhǔn)確地讀取這些觸發(fā)器來計(jì)算正確的速度和距離,因此觸發(fā)器(輸出)引腳連接到 Arduino 板的外部中斷引腳 2 和 3。將整個(gè)電路組裝在底盤上,按照說明安裝速度傳感器。連接完成后,機(jī)器人將如下圖所示。

poYBAGOYD5WAM4UEAADu0Shra7U322.jpg
?

硬件部分已經(jīng)完成。下面讓我們深入了解如何測量機(jī)器人的速度、距離和角度,然后進(jìn)入編程部分。

使用 H206 傳感器測量速度背后的邏輯

從傳感器安裝設(shè)置中,您應(yīng)該知道 H206 傳感器僅測量網(wǎng)格中存在的間隙。安裝時(shí),確保車輪(應(yīng)測量其速度)和擋板以相同的速度旋轉(zhuǎn)。就像這里一樣,由于我們將輪子和輪子安裝在同一根軸上,它們都會以相同的速度旋轉(zhuǎn)。

在我們的設(shè)置中,我們?yōu)槊總€(gè)車輪安裝了兩個(gè)傳感器來測量機(jī)器人的角度。但如果您的目標(biāo)只是測量速度和距離,我們可以將傳感器安裝在任何車輪上。傳感器的輸出(觸發(fā)信號)最常連接到微控制器的外部中斷引腳。每次檢測到網(wǎng)格中的間隙時(shí),都會觸發(fā)中斷并執(zhí)行 ISR(中斷服務(wù)程序)中的代碼。如果我們可以計(jì)算出兩個(gè)這樣的觸發(fā)器之間的時(shí)間間隔,我們就可以計(jì)算出車輪的速度。

在 Arduino 中,我們可以使用 millis() 函數(shù)輕松計(jì)算出這個(gè)時(shí)間間隔。由于設(shè)備上電,這個(gè)毫秒函數(shù)會每毫秒增加1。因此,當(dāng)?shù)谝淮沃袛喟l(fā)生時(shí),我們可以將millis()的值保存在一個(gè)啞變量中(比如代碼中的pevtime),然后當(dāng)?shù)诙沃袛喟l(fā)生時(shí),我們可以計(jì)算出從millis()中減去所需要的時(shí)間為 pevtime 值。

公式:

所用時(shí)間=當(dāng)前時(shí)間-上一次

timetaken = millis()-pevtime; //以毫秒為單位的時(shí)間

一旦我們計(jì)算了使用的時(shí)間,我們可以使用以下公式簡單地計(jì)算 rpm 的值,其中 (1000 / timetaken) 給出 RPS(每秒轉(zhuǎn)數(shù))并將其乘以 60 以將 RPS 轉(zhuǎn)換為 RPM 每分鐘轉(zhuǎn)數(shù))。

公式:

rpm=(1000/timetaken)*60;

計(jì)算出速度后,我們可以使用下面的公式來計(jì)算車輛的速度,前提是我們知道車輪的半徑。

公式:

速度 = 2π × RPS × 車輪半徑。

v = radius_of_wheel * rpm * 0.104

請注意,上述公式用于計(jì)算速度,單位為 m/s。如果要使用 km / hr,請將 0.0104 替換為 0.376。如果您想知道如何獲得 0.104 的值,請嘗試簡化公式 V = 2π × RPS × 車輪半徑。

即使霍爾傳感器用于測量旋轉(zhuǎn)物體的速度,也使用相同的技術(shù)。但是H206傳感器有一個(gè)缺陷,網(wǎng)格板有20個(gè)插槽,所以用來測量兩個(gè)插槽間隙的時(shí)間會使單片機(jī)過載。因此,我們只測量車輪完全旋轉(zhuǎn)時(shí)的速度。由于每個(gè)間隙都會產(chǎn)生兩次中斷(一個(gè)在間隙開始,另一個(gè)在間隙結(jié)束),我們將總共獲得 40 次中斷,以使輪子完成一個(gè)完整的旋轉(zhuǎn)。所以我們在實(shí)際計(jì)算輪速之前等待 40 次中斷。代碼如下。

代碼:

如果(旋轉(zhuǎn)> = 40)

{

timetaken = millis()-pevtime; //以毫秒為單位的時(shí)間

rpm=(1000/timetaken)*60;//計(jì)算轉(zhuǎn)速的公式

pevtime = 毫秒();

旋轉(zhuǎn)=0;

}

這種方法的另一個(gè)缺點(diǎn)是速度值不會降到零,因?yàn)橹袛鄷恢钡却囕喭瓿梢蝗碛?jì)算轉(zhuǎn)速值。通過添加一個(gè)簡單的代碼來監(jiān)控兩個(gè)中斷之間的時(shí)間間隔,可以輕松克服這個(gè)缺點(diǎn)。如果它超過正常值,那么我們可以將 rpm 和速度值強(qiáng)制為零。鏈接 在下面的代碼中,我們使用變量 dtime 來檢查時(shí)間差。如果超過 500 毫秒,則將速度和 rpm 值強(qiáng)制為零。

代碼:

/*如果車輛停止則降為零*/

if(millis()-dtime>500) //500ms 內(nèi)沒有找到 inetrrupt

{

轉(zhuǎn)速= v = 0;// 使 rpm 和速度為零

dtime=毫秒();

}

測量車輪行駛距離背后的邏輯

我們已經(jīng)知道,當(dāng)輪子完成一個(gè)完整的旋轉(zhuǎn)時(shí),Arduino 會感應(yīng)到 40 次中斷。因此,對于輪子每轉(zhuǎn)一圈,顯然輪子行進(jìn)的距離等于輪子的周長。由于我們已經(jīng)知道車輪的半徑,我們可以使用以下公式輕松計(jì)算覆蓋距離。

距離 = 2πr * 轉(zhuǎn)數(shù)

距離 = (2*3.141*radius_of_wheel) * (left_intr/40)

在使用公式 2πr 計(jì)算車輪周長的情況下,然后乘以車輪的轉(zhuǎn)數(shù)。

測量機(jī)器人角度背后的邏輯

確定機(jī)器人角度的方法有很多。加速度計(jì)和陀螺儀通常用于確定這些值。但另一種便宜的方法是在兩個(gè)車輪上都使用 H206 傳感器。這樣,我們就可以知道每個(gè)輪子的轉(zhuǎn)數(shù)。下圖說明了如何計(jì)算角度。

pYYBAGOYD5mAACnjAAA98zlsYP4659.jpg
?

機(jī)器人初始化時(shí),其所面對的角度為 0°。從那里開始,當(dāng)它向左旋轉(zhuǎn)初始化機(jī)器人時(shí),它所面對的角度被認(rèn)為是 0°。從那里它向左旋轉(zhuǎn),角度負(fù)增加,如果它向右旋轉(zhuǎn),角度增加正。為了便于理解,讓我們考慮 -90 到 +90 的范圍,如圖所示。在這種布置中,由于兩個(gè)輪子的直徑相同,如果任一輪子完全旋轉(zhuǎn),我們將以 90° 的角度轉(zhuǎn)動(dòng)。

例如,如果左輪完成一圈(80 次中斷),機(jī)器人將向左轉(zhuǎn) 90°,如果右輪完成一圈(80 次中斷),機(jī)器人將向右轉(zhuǎn) 90°。現(xiàn)在我們知道,如果Arduino在一個(gè)輪子上檢測到80次中斷,那么機(jī)器人已經(jīng)轉(zhuǎn)動(dòng)了90°,我們可以通過正(右)或負(fù)(左)來判斷機(jī)器人是在旋轉(zhuǎn)。所以可以用下面的公式來計(jì)算左右角:

公式:

int angle_left = (left_intr % 360) * (90/80) ;

int angle_right = (right_intr % 360) * (90/80) ;

90 是中斷 80 時(shí)所覆蓋的角度。結(jié)果值乘以中斷次數(shù)。我們還使用了 360 的模數(shù),因此得到的值不超過 36。一旦我們計(jì)算了左右角,我們可以通過從右角中減去左角來簡單地獲得機(jī)器人所面對的有效角度。

角度 = 角度右 - 角度左;

Arduino編程

我們通過為兩個(gè)電機(jī)定義數(shù)字 I/O 引腳來啟動(dòng)程序。請注意,我們還必須控制電機(jī)的速度,因此必須使用 Arduino 上的 PWM 引腳來控制電機(jī)。此處使用引腳 8、9、10 和 11。

代碼:

#define LM_pos 9 // 左電機(jī)

#define LM_neg 8 // 左電機(jī)

#define RM_pos 10 // 右電機(jī)

#define RM_neg 11 // 右電機(jī)

#定義joyX A2

#definejoyY A3

要測量行駛的速度和距離,我們需要知道車輪的半徑,測量值以米為單位輸入,如下所示。對于機(jī)器人,半徑為 0.033 米,但根據(jù)您的機(jī)器人,可能會有所不同。

代碼:

浮動(dòng)radius_of_wheel = 0.033;//測量你的輪子的半徑并在這里輸入厘米

在 setup 函數(shù)中,我們將所有值初始化為零,然后在 LCD 上顯示一個(gè)簡短的文本。我們還初始化了串行監(jiān)視器以進(jìn)行調(diào)試。然后我們提到速度傳感器 H206 連接到引腳 2 和 3 作為外部中斷。這是檢測到中斷的地方,ISR 函數(shù) Left_ISR 和 Right_ISR 將相應(yīng)地執(zhí)行。

代碼:

無效設(shè)置()

{

旋轉(zhuǎn) = rpm = pevtime = 0;//將所有變量初始化為零

序列號.開始(9600);

lcd.begin(16, 2); //初始化16*2 LCD

lcd.print("機(jī)器人監(jiān)視器"); //介紹消息第 1 行

lcd.setCursor(0, 1);

lcd.print("-CircuitDigest"); //介紹消息第 2 行

延遲(2000);

lcd.clear();

lcd.print("Lt: Rt:");

lcd.setCursor(0, 1);

lcd.print("S:D:A:");

pinMode(LM_pos,輸出);

pinMode(LM_neg,輸出);

pinMode(RM_pos,輸出);

pinMode(RM_neg,輸出);

數(shù)字寫入(LM_neg,低);

數(shù)字寫入(RM_neg,低);

attachInterrupt(digitalPinToInterrupt(2), Left_ISR, CHANGE); //Left_ISR在左輪傳感器被觸發(fā)時(shí)調(diào)用

attachInterrupt(digitalPinToInterrupt(3), Right_ISR, CHANGE);//右輪傳感器觸發(fā)時(shí)調(diào)用Right_ISR

}

在 Left_ISR 函數(shù)代碼中,我們簡單地添加了一個(gè)名為 left_intr 的變量,稍后將使用該變量來測量機(jī)器人的角度。在 Right_ISR 內(nèi)部,我們做同樣的事情,但除此之外,我們還在此處計(jì)算速度。每次中斷都會增加變量旋轉(zhuǎn),然后使用上面的邏輯來計(jì)算速度。

代碼:

無效 Left_ISR()

{

left_intr++;延遲(10);

}

無效 Right_ISR()

{

right_intr++; 延遲(10);

旋轉(zhuǎn)++;

dtime=毫秒();

如果(旋轉(zhuǎn)> = 40)

{

timetaken = millis()-pevtime; //以毫秒為單位的時(shí)間

rpm=(1000/timetaken)*60;//計(jì)算轉(zhuǎn)速的公式

pevtime = 毫秒();

旋轉(zhuǎn)=0;

}

}

在主循環(huán)函數(shù)中,我們監(jiān)控操縱桿中 X 和 Y 的值。根據(jù)移動(dòng)操縱桿的值,我們相應(yīng)地控制機(jī)器人。機(jī)器人的速度取決于操縱桿的推動(dòng)距離。

代碼:

int xValue = 模擬讀取(joyX);

int yValue = 模擬讀取(joyY);

int 加速度 = 地圖 (xValue, 500, 0, 0, 200);

如果 (xValue<500)

{

類比寫入(LM_pos,加速度);

模擬寫入(RM_pos,加速度);

}

別的

{

類比寫入(LM_pos,0);

模擬寫入(RM_pos,0);

}

如果(y值>550)

類比寫入(RM_pos,80);

如果(y值<500)

類比寫入(LM_pos,100);

以下函數(shù)將幫助用戶移動(dòng)機(jī)器人并檢查獲得的值是否符合預(yù)期。最后,我們可以用上面的邏輯計(jì)算出機(jī)器人的速度、距離和角度,并用下面的代碼在LCD上顯示出來。

代碼:

v = radius_of_wheel * rpm * 0.104;//0.033 是車輪的半徑,以米為單位

距離 = (2*3.141*radius_of_wheel) * (left_intr/40);

int angle_left = (left_intr % 360) * (90/80) ;

int angle_right = (right_intr % 360) * (90/80) ;

角度 = 角度右 - 角度左;

lcd.setCursor(3, 0); lcd.print(""); lcd.setCursor(3, 0); lcd.print(left_intr);

lcd.setCursor(11, 0); lcd.print(""); lcd.setCursor(11, 0);lcd.print(right_intr);

lcd.setCursor(2, 1); lcd.print(""); lcd.setCursor(2, 1);lcd.print(v);

lcd.setCursor(9, 1); lcd.print(""); lcd.setCursor(9, 1);lcd.print(距離);

lcd.setCursor(13, 1); lcd.print(""); lcd.setCursor(13, 1);lcd.print(角度);

測試 Arduino 機(jī)器人以測量距離、速度和角度

硬件準(zhǔn)備好后,將代碼上傳到 Arduino 并使用操縱桿移動(dòng)機(jī)器人。機(jī)器人的速度、距離和角度將顯示在液晶屏上,如下圖所示。

pYYBAGOYD6mAT5e_AADA4Z7PHVk482.jpg
?

在 LCD 上,術(shù)語 Lt 和 Rt 分別表示左中斷計(jì)數(shù)和右中斷計(jì)數(shù)。您會發(fā)現(xiàn)傳感器檢測到的每個(gè)間隙都會增加這些值。時(shí)間 S 表示機(jī)器人的速度,單位為米/秒,項(xiàng) D 表示距離,單位為米。機(jī)器人的角度以0°顯示為直線的終點(diǎn),逆時(shí)針旋轉(zhuǎn)為負(fù),順時(shí)針旋轉(zhuǎn)為正。

希望大家喜歡這個(gè)項(xiàng)目,如果喜歡,還可以查看這篇關(guān)于輪速傳感器的相關(guān)帖子享受閱讀!

?


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

評論

查看更多

下載排行

本周

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

本月

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

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)