資料介紹
描述
LM393 速度傳感器模塊 (H206)
在開始項目的電路圖和代碼之前,讓我們先了解一下LM393速度傳感器模塊,因為它在項目中起著至關重要的作用。H206速度傳感器模塊由紅外光傳感器和LM393電壓比較器IC組成,故命名為LM393速度傳感器。該模塊還包括一個網格板,該網格板必須安裝在電機的旋轉軸上。所有組件都在下圖中標出。

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

安裝這些類型的傳感器有點棘手。只能安裝在軸兩側突出的電機上。軸的一側連接車輪,而另一側用于安裝網格,如上圖所示。
由于車輪和車輪連接在同一軸上,都以相同的速度旋轉,因此通過測量車輛速度,我們可以測量車輪的速度。在傳感器可以計算通過的間隙數量之前,請確保網格板中的間隙通過紅外傳感器。只要滿足規定條件,也可以自行設置機械裝置安裝傳感器。紅外傳感器常用于許多機器人項目中,用于引導機器人了解障礙物。
上面顯示的網格板有 20 個槽(網格)。這意味著傳感器將發現車輪一整圈的 20 個間隙。通過計算傳感器檢測到的間隙數量,我們可以計算出車輪行進的距離,同樣通過測量傳感器發現的間隙的速度,我們可以檢測出車輪的速度。在我們的機器人中,我們將此傳感器安裝在兩個輪子上,因此我們也可以找到機器人的角度。但是,使用加速度計或陀螺儀可以更明智地計算旋轉角度。在這里我們學習使用Arduino將加速度計與陀螺儀連接,并嘗試使用它們來測量旋轉角度。
示意圖
速度和距離傳感機器人的完整電路圖如下所示。該機器人以Arduino Nano為大腦,兩個用于車輪的直流電機由L298N H橋電機驅動模塊驅動。操縱桿用于控制機器人的速度和方向,兩個速度傳感器H206用于測量機器人的速度、距離和角度。然后,測量值顯示在 1602 LCD 模塊中。連接到 LCD 的電位器可用于調節 LCD 的對比度,電阻器用于限制流向 LCD 背光的電流。

整個電路由7.4V鋰電池供電。7.4V 電源提供給電機驅動模塊的 12V 引腳。然后,電機驅動模塊上的穩壓器將 7.4V 轉換為穩壓 + 5V,為 Arduino、LCD、傳感器和操縱桿供電。
電機由 Arduino 數字引腳 8、9、10 和 11 控制。由于還必須控制電機的速度,因此我們應該向電機的正極提供 PWM 信號。因此,我們有引腳 9 和 10,它們都是 PWM 引腳。操縱桿的 X 和 Y 值分別使用模擬引腳 A2 和 A3 讀取。
我們知道 H206 傳感器在檢測到網格中的間隙時觸發。由于無法始終準確地讀取這些觸發器來計算正確的速度和距離,因此觸發器(輸出)引腳連接到 Arduino 板的外部中斷引腳 2 和 3。將整個電路組裝在底盤上,按照說明安裝速度傳感器。連接完成后,機器人將如下圖所示。

硬件部分已經完成。下面讓我們深入了解如何測量機器人的速度、距離和角度,然后進入編程部分。
使用 H206 傳感器測量速度背后的邏輯
從傳感器安裝設置中,您應該知道 H206 傳感器僅測量網格中存在的間隙。安裝時,確保車輪(應測量其速度)和擋板以相同的速度旋轉。就像這里一樣,由于我們將輪子和輪子安裝在同一根軸上,它們都會以相同的速度旋轉。
在我們的設置中,我們為每個車輪安裝了兩個傳感器來測量機器人的角度。但如果您的目標只是測量速度和距離,我們可以將傳感器安裝在任何車輪上。傳感器的輸出(觸發信號)最常連接到微控制器的外部中斷引腳。每次檢測到網格中的間隙時,都會觸發中斷并執行 ISR(中斷服務程序)中的代碼。如果我們可以計算出兩個這樣的觸發器之間的時間間隔,我們就可以計算出車輪的速度。
在 Arduino 中,我們可以使用 millis() 函數輕松計算出這個時間間隔。由于設備上電,這個毫秒函數會每毫秒增加1。因此,當第一次中斷發生時,我們可以將millis()的值保存在一個啞變量中(比如代碼中的pevtime),然后當第二次中斷發生時,我們可以計算出從millis()中減去所需要的時間為 pevtime 值。
公式:
所用時間=當前時間-上一次
timetaken = millis()-pevtime; //以毫秒為單位的時間
一旦我們計算了使用的時間,我們可以使用以下公式簡單地計算 rpm 的值,其中 (1000 / timetaken) 給出 RPS(每秒轉數)并將其乘以 60 以將 RPS 轉換為 RPM 每分鐘轉數)。
公式:
rpm=(1000/timetaken)*60;
計算出速度后,我們可以使用下面的公式來計算車輛的速度,前提是我們知道車輪的半徑。
公式:
速度 = 2π × RPS × 車輪半徑。
v = radius_of_wheel * rpm * 0.104
請注意,上述公式用于計算速度,單位為 m/s。如果要使用 km / hr,請將 0.0104 替換為 0.376。如果您想知道如何獲得 0.104 的值,請嘗試簡化公式 V = 2π × RPS × 車輪半徑。
即使霍爾傳感器用于測量旋轉物體的速度,也使用相同的技術。但是H206傳感器有一個缺陷,網格板有20個插槽,所以用來測量兩個插槽間隙的時間會使單片機過載。因此,我們只測量車輪完全旋轉時的速度。由于每個間隙都會產生兩次中斷(一個在間隙開始,另一個在間隙結束),我們將總共獲得 40 次中斷,以使輪子完成一個完整的旋轉。所以我們在實際計算輪速之前等待 40 次中斷。代碼如下。
代碼:
如果(旋轉> = 40)
{
timetaken = millis()-pevtime; //以毫秒為單位的時間
rpm=(1000/timetaken)*60;//計算轉速的公式
pevtime = 毫秒();
旋轉=0;
}
這種方法的另一個缺點是速度值不會降到零,因為中斷會一直等待車輪完成一圈來計算轉速值。通過添加一個簡單的代碼來監控兩個中斷之間的時間間隔,可以輕松克服這個缺點。如果它超過正常值,那么我們可以將 rpm 和速度值強制為零。鏈接 在下面的代碼中,我們使用變量 dtime 來檢查時間差。如果超過 500 毫秒,則將速度和 rpm 值強制為零。
代碼:
/*如果車輛停止則降為零*/
if(millis()-dtime>500) //500ms 內沒有找到 inetrrupt
{
轉速= v = 0;// 使 rpm 和速度為零
dtime=毫秒();
}
測量車輪行駛距離背后的邏輯
我們已經知道,當輪子完成一個完整的旋轉時,Arduino 會感應到 40 次中斷。因此,對于輪子每轉一圈,顯然輪子行進的距離等于輪子的周長。由于我們已經知道車輪的半徑,我們可以使用以下公式輕松計算覆蓋距離。
距離 = 2πr * 轉數
距離 = (2*3.141*radius_of_wheel) * (left_intr/40)
在使用公式 2πr 計算車輪周長的情況下,然后乘以車輪的轉數。
測量機器人角度背后的邏輯
確定機器人角度的方法有很多。加速度計和陀螺儀通常用于確定這些值。但另一種便宜的方法是在兩個車輪上都使用 H206 傳感器。這樣,我們就可以知道每個輪子的轉數。下圖說明了如何計算角度。

機器人初始化時,其所面對的角度為 0°。從那里開始,當它向左旋轉初始化機器人時,它所面對的角度被認為是 0°。從那里它向左旋轉,角度負增加,如果它向右旋轉,角度增加正。為了便于理解,讓我們考慮 -90 到 +90 的范圍,如圖所示。在這種布置中,由于兩個輪子的直徑相同,如果任一輪子完全旋轉,我們將以 90° 的角度轉動。
例如,如果左輪完成一圈(80 次中斷),機器人將向左轉 90°,如果右輪完成一圈(80 次中斷),機器人將向右轉 90°。現在我們知道,如果Arduino在一個輪子上檢測到80次中斷,那么機器人已經轉動了90°,我們可以通過正(右)或負(左)來判斷機器人是在旋轉。所以可以用下面的公式來計算左右角:
公式:
int angle_left = (left_intr % 360) * (90/80) ;
int angle_right = (right_intr % 360) * (90/80) ;
90 是中斷 80 時所覆蓋的角度。結果值乘以中斷次數。我們還使用了 360 的模數,因此得到的值不超過 36。一旦我們計算了左右角,我們可以通過從右角中減去左角來簡單地獲得機器人所面對的有效角度。
角度 = 角度右 - 角度左;
Arduino編程
我們通過為兩個電機定義數字 I/O 引腳來啟動程序。請注意,我們還必須控制電機的速度,因此必須使用 Arduino 上的 PWM 引腳來控制電機。此處使用引腳 8、9、10 和 11。
代碼:
#define LM_pos 9 // 左電機
#define LM_neg 8 // 左電機
#define RM_pos 10 // 右電機
#define RM_neg 11 // 右電機
#定義joyX A2
#definejoyY A3
要測量行駛的速度和距離,我們需要知道車輪的半徑,測量值以米為單位輸入,如下所示。對于機器人,半徑為 0.033 米,但根據您的機器人,可能會有所不同。
代碼:
浮動radius_of_wheel = 0.033;//測量你的輪子的半徑并在這里輸入厘米
在 setup 函數中,我們將所有值初始化為零,然后在 LCD 上顯示一個簡短的文本。我們還初始化了串行監視器以進行調試。然后我們提到速度傳感器 H206 連接到引腳 2 和 3 作為外部中斷。這是檢測到中斷的地方,ISR 函數 Left_ISR 和 Right_ISR 將相應地執行。
代碼:
無效設置()
{
旋轉 = rpm = pevtime = 0;//將所有變量初始化為零
序列號.開始(9600);
lcd.begin(16, 2); //初始化16*2 LCD
lcd.print("機器人監視器"); //介紹消息第 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,輸出);
數字寫入(LM_neg,低);
數字寫入(RM_neg,低);
attachInterrupt(digitalPinToInterrupt(2), Left_ISR, CHANGE); //Left_ISR在左輪傳感器被觸發時調用
attachInterrupt(digitalPinToInterrupt(3), Right_ISR, CHANGE);//右輪傳感器觸發時調用Right_ISR
}
在 Left_ISR 函數代碼中,我們簡單地添加了一個名為 left_intr 的變量,稍后將使用該變量來測量機器人的角度。在 Right_ISR 內部,我們做同樣的事情,但除此之外,我們還在此處計算速度。每次中斷都會增加變量旋轉,然后使用上面的邏輯來計算速度。
代碼:
無效 Left_ISR()
{
left_intr++;延遲(10);
}
無效 Right_ISR()
{
right_intr++; 延遲(10);
旋轉++;
dtime=毫秒();
如果(旋轉> = 40)
{
timetaken = millis()-pevtime; //以毫秒為單位的時間
rpm=(1000/timetaken)*60;//計算轉速的公式
pevtime = 毫秒();
旋轉=0;
}
}
在主循環函數中,我們監控操縱桿中 X 和 Y 的值。根據移動操縱桿的值,我們相應地控制機器人。機器人的速度取決于操縱桿的推動距離。
代碼:
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);
以下函數將幫助用戶移動機器人并檢查獲得的值是否符合預期。最后,我們可以用上面的邏輯計算出機器人的速度、距離和角度,并用下面的代碼在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 機器人以測量距離、速度和角度
硬件準備好后,將代碼上傳到 Arduino 并使用操縱桿移動機器人。機器人的速度、距離和角度將顯示在液晶屏上,如下圖所示。

在 LCD 上,術語 Lt 和 Rt 分別表示左中斷計數和右中斷計數。您會發現傳感器檢測到的每個間隙都會增加這些值。時間 S 表示機器人的速度,單位為米/秒,項 D 表示距離,單位為米。機器人的角度以0°顯示為直線的終點,逆時針旋轉為負,順時針旋轉為正。
希望大家喜歡這個項目,如果喜歡,還可以查看這篇關于輪速傳感器的相關帖子。享受閱讀!
?
- 如何制作Arduino智能移動機器人
- 開發用于移動機器人的Arduino擴展
- 移動機器人路徑規劃與運動控制 12次下載
- 如何使用Matlab和VR技術實現移動機器人的建模和仿真 13次下載
- 移動機器人的關鍵技術有哪些 17次下載
- 使用Matlab和VR技術實現移動機器人的建模及仿真的方案說明 10次下載
- 如何使用模糊PID的輪式移動機器人進行軌跡控制 36次下載
- ARM-Linux平臺上移動機器人的傳感器檢測數據讀取 0次下載
- 移動機器人相關技術及其定位傳感器的設計與詳解 7次下載
- 移動機器人的分類與移動機器人技術研究現狀和未來發展的分析 13次下載
- 基于Arduino的移動機器人控制系統設計_彭攀來 5次下載
- 移動機器人無線通訊擴展
- 基于多傳感器信息融合的移動機器人的路徑規劃
- 基于車體加速度反饋的輪式移動機器人軌跡跟蹤控制研究
- 基于達芬奇的移動機器人開發平臺設計
- 智能移動機器人系統方案指南 481次閱讀
- LM393比較器的應用電路 4490次閱讀
- ROS移動機器人中常用的編碼器 1958次閱讀
- 基于S3C44B0X芯片和SPCE061A單片機實現移動機器人的設計 1033次閱讀
- 移動機器人是如何定位的 4526次閱讀
- 移動機器人控制系統的發展方向? 1529次閱讀
- 移動機器人控制系統設計與仿真 3641次閱讀
- 仙知機器人自主研發用于移動機器人應用專業級客戶端軟件Roboshop 6250次閱讀
- 移動機器人的機構與分類分析 8268次閱讀
- 如何區分機器人、協作機器人和移動機器人? 7029次閱讀
- 關于被動同心轉向式多履帶全向移動機器人的設計 9148次閱讀
- lm393與lm358的特點及區別 8.6w次閱讀
- 自主移動機器人的定位與地圖創建(SLAM)關鍵性問題 1986次閱讀
- LM393應用電路及LM393相關的應用資料 3w次閱讀
- 小生境遺傳算法的移動機器人路徑優化技術 1254次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論