發布日期:2022-10-09 點擊率:48
?
圖
1
方案一原理圖
?
?
如上圖所示是方案一,采用純模電硬件電路設計,所設計的電路沒有控制模
塊功能,
只能通過光敏電阻檢測當前的環境光強是否符合一個定值之下,
若光強
低于設定值則蜂鳴器蜂鳴和
LED
閃而報警。此方案雖然輸入光強定制可以調節,
但是檢測靈敏度不高且不可以讀出當前的光強以及電阻。
因此應用不強,
不符合
一般的應用,所以本系統設計不采用。
?
?
?
圖
2
方案二原理圖
?
如上圖是方案二,也是本系統所采用的方案。
?
?
本方案通過光敏電阻檢測周圍的光強變化,
通過
ADC0832
將模擬數據轉換為
我會通過本系列文章,詳細介紹如何從零開始用51單片機去實現智能小車的控制,在本系列的上一篇文章中介紹了3種可用來讓小車實現避障的傳感器,本文作為本系列的第三篇文章,主要介紹如何讓車實現自動避障。
本系列文章鏈接:
-----------------------------------------------------------------------------
詳細介紹如何從零開始制作51單片機控制的智能小車(一)———讓小車動起來
詳細介紹如何從零開始制作51單片機控制的智能小車(二)———超聲波模塊、漫反射光電管、4路紅外傳感器的介紹和使用
詳細介紹如何從零開始制作51單片機控制的智能小車(三)———用超聲波模塊和漫反射光電傳感器實現小車的自動避障
詳細介紹如何從零開始制作51單片機控制的智能小車(四)———通過藍牙模塊實現數據傳輸以及通過手機藍牙實現對小車運動狀態的控制
詳細介紹如何從零開始制作51單片機控制的智能小車(五)———對本系列第四篇文章介紹的手機藍牙遙控加減速異常的錯誤的介紹及糾正
-----------------------------------------------------------------------------
一、避障思路及傳感器的選擇
1、利用4路紅外尋跡避障傳感器模塊實現避障
?可以讓一路傳感器檢測左邊的障礙物,一路傳感器檢測右邊的障礙物,兩路傳感器檢測前方的障礙物,如下圖所示:
?這種方法呢實現起來是最簡單的,對于0基礎的可以嘗試一下,障礙物檢測距離一般在20cm左右,在車速不太快,而且在室內(也就是無陽光直射)時是可行的,也可以很好的實現避障。
?缺點呢或者說不足之處,也就很明確了,在室外(或者陽光直射時)傳感器受陽光干擾可能不能正常工作,檢測距離20cm左右,車速過快時,在檢測到障礙物時,不能直接轉彎(因為車速過快,還沒來得及轉彎可能就撞上了),需要往回倒一下,再轉彎。
2、利用4個漫反射光電傳感器模塊實現避障
?可以讓一個傳感器檢測左邊的障礙物,一個傳感器檢測右邊的障礙物,兩路傳感器檢測前方的障礙物。就像上面的4路紅外尋跡避障傳感器的擺放方向一樣
?這種方法呢,避障思路跟利用4路紅外尋跡避障傳感器模塊實現避障是相同的,只是換了傳感器類型而已,但是漫反射光電傳感器抗陽光干擾能力強,克服了4路紅外尋跡避障傳感器模塊在室外(或者陽光直射時)傳感器受陽光干擾可能不能正常工作的缺點。
?缺點呢或者說不足之處,檢測距離也在20cm附近,依然沒能克服車速過快時,在檢測到障礙物時,不能直接轉彎的不足,而且呢漫反射光電傳感器模塊體積、重量、價格都要高一些。
3、利用超聲波模塊和舵機云臺實現避障
?避障思路呢大體是這樣的,正常情況下超聲波模塊檢測前方障礙物,當檢測到障礙物時,小車停止前行,舵機云臺轉動,讓超聲波模塊分別轉向小車的左右兩側檢測左右兩側是否有障礙物,來決定下一步的轉向,超聲波模塊重新超前,開始轉向。
?這種方法呢,利用超聲波模塊測距遠,一般常見的超聲波模塊測距最遠在4.5米左右,完全不用擔心車速過快來不及反應的情況,而且基本不受陽光干擾(當環境溫度升高時,聲音的傳播速度會加快,對測距產生一定的誤差,但是誤差很小很小,對于超聲波模實現避障來說完全可以忽略)也就是說超聲波模塊很好的解決了以上兩個問題
?缺點呢或者說不足之處,也很明確,從避障思路我們可以看出這種方案小車不能連續的運動,當遇到障礙物時,小車就會停下來判斷下一步該往哪個方向轉彎,除此之外,超聲波模塊用起來比前兩種難一些
4、利用超聲波模塊和2個漫反射光電傳感器實現避障(也就是本文采用的方法)
?避障思路呢就是利用超聲波模塊檢測前面的障礙物,兩個漫反射光電傳感器分別檢測左右兩側的障礙物。
?這種思路結合了這兩種傳感器的優點,互補了他們的不足,即同時克服陽光直射時傳感器不能正常工作、車速過快時,在檢測到障礙物時,不能直接轉彎、遇到障礙物需要停車判斷 這三種不足可以說是一種比較理想的方案。唯一的缺點呢,就是超聲波模塊本身用起來難度要大一些,當然對富有挑戰精神的人,也就不算缺點了
二、超聲波測距程序的編寫
1、概述
?我將在本系列第一篇博文中介紹的程序的基礎上進行超聲波測距程序的編寫的介紹,前提是理解超聲波模塊的測距的工作流程(不明白的可以去看本系列第二篇文章的介紹),我們需要用到兩個定時器,而STC89C52單片機只有兩個定時器,前面呢我們已經把定時器0中斷用來控制電機的PWM輸出,所以我們把超聲波測距的啟動信號也合并到定時器0里面,讓定時器1來檢測超聲波模塊有無信號返回。
2、I/O口觸發測距的實現程序的編寫
?超聲波模塊工作的第一步呢就是讓塊Trig 管腳所接的單片機I/O口置為高電平,而且需要持續10us以上,(本例中我采用的是讓單片機P14 I/O口 接在了超聲波模塊的Trig 管腳上,讓單片機P15 I/O口 接在了超聲波模塊的Echo管腳上,大家可以根據實際情況自己選擇,只要跟程序對應起來就行),此處有一點需要注意就是為了避免下一次超聲波模塊發出的信號,對上一次的返回信號產生影響,超聲波模塊發出信號的時間間隔要在60ms以上,本例中我配置的定時器0是每1ms產生一次中斷,設置一個變量HC_SR04_time,定時器0每產生一次中斷,該變量累加1,每當加到250時,讓該變量清零,同時讓超聲波模塊發出檢測信號,也就是說每250ms 超聲波模塊發出一次檢測信號(數值呢大家可以自行調節),發出檢測信號只需要讓Trig為高電平并且持續10us以上 ,再讓Trig為低電平,這樣超聲波模塊就會自動發出一次檢測信號了,我把這個過程寫在函數StartModule() 里面本部分相關程序如下:
3、檢測有無障礙物的程序編寫以及檢測距離的調節方法
?上面呢我們已經利用定時器0來通過 Trig口讓超聲波模塊每250ms發出一次檢測信號,接下來我們需要用定時器1來檢測有沒有信號返回,也就是前方有沒有障礙物,怎么實現呢,通過前面的介紹我們知道,只要Echo管腳為高電平就有信號返回,通過定時器1來測量高電平持續的時間,通過公式:測試距離=(高電平時間*聲速(340M/s)/2) 就可以計算障礙物距離傳感器的距離了,當Echo變為高電平時,就讓定時器1清零,并打開定時器1,開始計數,當Echo變為0時,利用公式計算障礙物距離,計算完后令定時器1清零 并關閉定時器1 這樣只要有信號返回,即只要Echo被置為1 定時器1就會被及時的清零,也就不會觸發定時器1溢出中斷,若是沒有信號返回(也就是沒有障礙物,或者障礙物超出了傳感器的測量范圍,本文用的傳感器測量最大值為4.5米),Echo就不會被置1,定時器1也就不會被清零,從而產生溢出中斷,在溢出中斷里放一個變量flag ,若產生中斷則讓其置1,這樣就通過定時器是否產生溢出中斷,即flag是否為1,來判斷是否檢測到障礙物了。
?有一點需要注意,這樣檢測的是距離傳感器最大檢測距離內有無障礙物,但是我們把它用來讓小車避障,我不能距離障礙物4.5米就讓小車轉彎吧,這就需要通過程序調節檢測距離了,只需要增加一個判斷條件就行了,我們利用公式算出來障礙物的距離S ,將flag=1或者S>我們設定的檢測距離,都視為沒有障礙物處理就可以了,如 if(flag==1||S>50) 就是把50cm作為檢測距離,檢測的是50cm內有無障礙物,50呢是暫定的,在后期調車的時候,根據實際情況進行調節
?本部分有關程序如下(完整的工程文件會在介紹完避障程序后一并給出):
三、自動避障的實現
?目前呢我們用于避障的傳感器有檢測左右兩側障礙物的漫反射光電管,檢測前方障礙物的超聲波模塊,大體思路是這樣的,當超聲波模塊沒有檢測到設定距離內的障礙物時,小車直行,當檢測到前方障礙物時,若此時左邊漫反射傳感器沒有檢測到障礙物,則左轉,當此時左邊有障礙物時,若右邊沒有障礙物則右轉,若右邊也有障礙物則后退,大家看的可能比較亂,我整理成如下的邏輯表:
?表格中的有代表有障礙物,無代表無障礙物,X代表可以有也可以沒有障礙物 若前方有障礙物則 M_sensor=0 沒有則 M_sensor=1,若左側有障礙物 ,則 L_sensor=0 ,沒有則 L_sensor=1 若右側有障礙物則 R_sensor=0 沒有則 R_sensor=1,程序如下:
?在測試中我發現,當電池電量較低時,原來的轉彎方式(一側電機停轉,另一側電機前進)轉彎效率較低,所以說把轉彎的函數修改為一側后退,另一側前進,代碼如下:
?經過測試后,這種方案呢并沒有理想的那么好,因為超聲波模塊存在一些缺陷,比如偶然會產生誤判,明明前方什么障礙物都沒有,會在一瞬間突然檢測到障礙物,又突然消失,而且在以下兩種情況下檢測不到障礙物
?如上圖的這種情況呢,超聲波模塊檢測不到返回的信號,產生誤判
?如上圖的這種情況呢,超聲波模塊檢測不到側前方的細柱型障礙物,產生誤判
? 以上兩種缺陷呢,是超聲波模塊固有的缺陷,是無法通過超聲波模塊本身去糾正的,解決方法呢,可以在超聲波模塊的兩側分別再加一個朝前的檢測前方障礙物的漫反射光電傳感器,這樣呢可以克服以上的幾個缺陷,經過我的實際測試,漫反射光電傳感器幾乎不會產生誤判,除了檢測距離有點短之外,可以說是比較好的,這樣呢就是4路漫反射光電傳感器為主,超聲波模塊呢只是輔助檢測前方的較遠的的障礙物,補充漫反射傳感器檢測距離有限的缺陷,這種方案呢我就不詳細介紹了,有興趣的可以自己嘗試一下
四、完整的各文件代碼
?main.c文件
?motor_control.c文件
?HC_SR04.c文件
?car.h文件
本文到這里就結束了,本文介紹的內容的完整的keil文件會放在附件里,需要者自取,我放的時候都是免費的,但是過段時間它會自己漲…需要的在評論區留言我可以直接發給你,歡迎大家繼續閱讀本系列的后續文章“詳細介紹如何從零開始制作51單片機控制的智能小車(四)———通過藍牙模塊實現數據傳輸以及對小車狀態的控制”
歡迎大家積極交流,本文未經允許謝絕轉載
系統功能
系統利用STM32F103C8T6最小系統開發板進行開發,采用RPR220光電傳感器檢測停車位上是否有汽車。系統分為4個停車區A、B、C、D,每個停車區暫設2個停車位。每個停車區某個停車位上有車時[車位狀態LED]亮,無車時[車位狀態LED]滅;每個停車區均 有一個顯示停車 狀態的LED,當該停車區車位已滿時,[停車狀態LED]滅,車位未滿時,[停車狀態LED]亮。
系統組成
STM32F103C8T6最小系統開發板 開發板鏈接
光電檢測模塊8個(共4個停車區,每個停車區2個) RPR220反射型傳感器
車位狀態LED8個(共8個車位)
停車狀態LED4個(每個停車區均有1個)
電路圖
實物圖
演示視頻
STM32智能停車系統【RPR220光電傳感器遮擋檢測LED顯示排阻區域控制】
全套資料
企鵝:
不知道您指的是機械鼠標嗎?激光接收器得到的是離散的脈沖信號
一般鼠標上的光流傳感器自帶圖像處理,大概原理是光源發光被鼠標下面的東西比如鼠標墊反射回接收器,因為鼠標墊表面的形貌是不同的,所以接收器收到的間隔很短時間兩幀圖像是有差別的,處理器通過算法由前后幾幀圖像的差別解算出鼠標移動的距離,方向,速度。
至于處理器收到的信號,我猜我猜我猜可能是各像素點灰度的數字編碼吧
不知道你說的是哪個型號的光流傳感器,因為我最近在研究無人機的室內定位,所以這方面了解比較多點,我拆解了一款清華同方的光電鼠標,發現里面的光流傳感器是PAN3204 DIP8封裝,(如圖)
查詢下技術手冊可以發現是串行接口,如圖:
其中SDIO是串口數據輸入/輸出端口SCK是串口的時鐘端口。時鐘信號由主控制器發出。
當向SDIO端口寫入讀/寫地址以后,數據就通過這個端口寫入或讀出。
支持這類型的串行接口還有ADNS-2610(DIP8)等等。
可以看看結構,主要由COMS sensor + DSP 組成,內嵌成熟的光流算法。
不過后來,我發現APM的光流傳感器方案是基于ADNS-3080這個顆SOC的,它同樣集成了圖像傳感器、DSP、內嵌光流算法,接口是SPI的,單片機可以直接驅動??梢钥纯矗?br/>光流傳感器 |
ArduCopter中文網
當然不同光流傳感器接口不一樣啦,還有PS/2協議的,例如:OM02
好啦,知道通信協議,你自然就能明白“光電傳感器向單片機發出的信號是怎樣的”,本質上就是一連串數字離散信號,數據內容基本都是幀頭,x和y方向的移動量,幀尾,校驗。
PS:測試發現ADNS-3080 and STM32F4使用DMA來做室內定位效果不錯,特別是融合九軸姿態數據。 如果有什么需要補充說明我還會再來的。。
下一篇: PLC、DCS、FCS三大控
上一篇: 電氣控制線路圖控制原
型號:E3FARP21
價格:面議
庫存:10
訂貨號:E3FARP21
型號:E3Z-LS61 2M BY OMS
價格:面議
庫存:10
訂貨號:E3Z-LS61 2M BY OMS
型號:BOS R020K-PS-RX11-00,2-S49
價格:面議
庫存:10
訂貨號:BOS R020K-PS-RX11-00,2-S49
型號:HG-C1400
價格:面議
庫存:10
訂貨號:HG-C1400
型號:EE-SX672P
價格:面議
庫存:10
訂貨號:EE-SX672P
型號:E3Z-T61-D 2M
價格:面議
庫存:10
訂貨號:E3Z-T61-D 2M