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