|
智能小車現(xiàn)在差不多是電子競賽或者DIY中的主流了,尋跡,壁障,遙控什么的,相信大家也都見得很多了,這次就大家探討一下尋跡小車的制作方法,不同于以往的是這次的程序不用C語言寫,而是要使用python語言寫。
視頻演示:
1.實驗?zāi)康?br />
研究智能小車結(jié)合紅外探頭尋跡前進(jìn)。
2.實驗材料
TPYBoard開發(fā)板1塊(能跑python語言的開發(fā)板,小車的大腦。)
v102.jpg (488.49 KB, 下載次數(shù): 112)
下載附件
2017-9-22 16:34 上傳
四路紅外感應(yīng)探頭(小車的眼睛)。
數(shù)據(jù)線一根。
充電寶一個(給整個系統(tǒng)供電)。
智能小車底盤(包括驅(qū)動模塊)。
杜邦線若干。
實驗?zāi)康暮蛯嶒灢牧蠝?zhǔn)備齊了,先來介紹一下各個主要部件。
2.1PYBoard開發(fā)板
MicroPython是在單片機上可以跑的Python,也就是說,你可以通過Python腳本語言開發(fā)單片機程序。由劍橋大學(xué)的理論物理學(xué)家喬治·達(dá)明設(shè)計。和Arduino類似,但MicroPython更強大。MicroPython開發(fā)板讓你可以通過Python代碼輕松控制微控制器的各種外設(shè),比如LED等,讀取管腳電壓,播放歌曲,和其他設(shè)備聯(lián)網(wǎng)等等。TPYBoard是TurnipSmart公司制作的一款MicroPython開發(fā)板,這款開發(fā)板運行很流暢,關(guān)鍵是價格很便宜。
2.2四路紅外感應(yīng)探頭
1、當(dāng)模塊檢測到前方障礙物信號時,電路板上紅色指示燈點亮,同時OUT端口持續(xù)輸出低電平信號,該模塊檢測距離2~60cm,檢測角度35°,檢測距離可以通過電位器進(jìn)行調(diào)節(jié),順時針調(diào)電位器,檢測距離增加;逆時針調(diào)電位器,檢測距離減少。
2、傳感器屬于紅外線反射探測,因此目標(biāo)的反射率和形狀是探測距離的關(guān)鍵。其中黑色探測距離最小,白色最大;小面積物體距離小,大面積距離大。
3、傳感器模塊輸出端口OUT可直接與單片機IO口連接即可,也可以直接驅(qū)動一個5V繼電器模塊或者蜂鳴器模塊;連接方式:VCC-VCC;GND-GND;OUT-IO
4、比較器采用LM339,工作穩(wěn)定;
5、可采用3.3V-5V直流電源對模塊進(jìn)行供電。當(dāng)電源接通時,綠色電源指示燈點亮。
2.3智能小車底盤
雙電機驅(qū)動,萬向輪改變方向。這是實驗中最常用到的小車底盤,使用差速的方法進(jìn)行轉(zhuǎn)彎。配合使用L298N電機驅(qū)動模塊,使用方法很簡單,不多做介紹。
3.尋跡原理
說完了原料的問題,下面說一下小車尋跡的原理。
3.1紅外探頭的安裝
小車尋跡的原理其實就光的吸收,反射和散射。大家都知道,白色反射所有顏色的光,而黑色吸收所有顏色的光,這就為小車尋跡提供了有力的科學(xué)依據(jù)。在小車的車頭上安裝上紅外探頭(我是安裝了四個),一字順序排開。哪個探頭接收不到反射或者散射回來的光時,說明這個探頭此時正在黑色的尋跡帶上。
3.2返回信號的判斷
如果要是正前方的探頭接收不到光,那么說明小車此時走在黑色的尋跡帶上。可以使小車直線行走。如果左面的探頭接收不到光,那么說明小車左面出現(xiàn)了黑色尋跡帶,此時小車應(yīng)該執(zhí)行左轉(zhuǎn)彎。右轉(zhuǎn)彎同左轉(zhuǎn)彎原理。
如果要是小車前面,左面,右面三個方向全都接收不到光,或者是兩個方向上的探頭都接收不到光,到底是左轉(zhuǎn)彎,右轉(zhuǎn)彎還是繼續(xù)直行,這個就要看你自己在程序里怎么做判斷了。
4.硬件接線:
接線其實很簡單四路紅外探頭接線很簡單,雖然有十八根線,但是有十二根是三根三根的分成四組的,對應(yīng)著很好接線,剩下的六根,VCC和GND不多說了,還有四根是直接接到單片結(jié)IO口上就可以的。 L298N的接線更簡單了,這里不多介紹。
上個簡單的幫助理解的原理圖(其實我們做實驗都是插線,不做PCB圖和原理圖的)。
1.png (27.02 KB, 下載次數(shù): 103)
下載附件
2017-9-22 16:34 上傳
再上個實物圖給大家看看。
2.jpg (128.88 KB, 下載次數(shù): 86)
下載附件
2017-9-22 16:34 上傳
5.運行與調(diào)試
制作完成后,剩下的就是該調(diào)試了,調(diào)試中應(yīng)該注意細(xì)節(jié)和小車穩(wěn)定性的優(yōu)化。
6.代碼編寫
再把我寫的程序給大家看一下,有需要的可以看一下。
源代碼:
- import pyb
- from pyb import UART
- from pyb import Pin
- M0 = Pin('X1', Pin.IN)
- M1 = Pin('X2', Pin.IN)
- M2 = Pin('X3', Pin.IN)
- M3 = Pin('X4', Pin.IN)
- N1 = Pin('Y1', Pin.OUT_PP)
- N2 = Pin('Y2', Pin.OUT_PP)
- N3 = Pin('Y3', Pin.OUT_PP)
- N4 = Pin('Y4', Pin.OUT_PP)
- print('while')
- while True:
- print('while')
- pyb.LED(4).off()
- pyb.LED(3).off()
- pyb.LED(2).off()
- if(M0.value()==1):#檢測到物體返回0。
- pyb.LED(4).on()
- pyb.delay(50)
- N1.low()
- N2.high()
- N3.low()
- N4.high()
- pyb.delay(30)
- #pyb.delay(5000)
- if(M3.value()==1):#檢測到物體返回0。
- pyb.LED(3).on()
- pyb.delay(50)
- N1.high()
- N2.low()
- N3.high()
- N4.low()
- pyb.delay(30)
- if(M2.value()&M1.value()==1):
- pyb.LED(2).on()
- N1.low()
- N2.high()
- N3.high()
- N4.low()
- pyb.delay(70)
復(fù)制代碼
|
|