鹹魚ZTMR實例—巡線入門

鹹魚ZTMR實例—巡線入門

之前我們用尋跡模塊簡單的做了一個防止小車高處跌落的功能,但是尋跡並不簡單(/滑稽)。本次我們使用尋跡來做一個巡線功能。簡單來說就是我們畫一條線,讓小車按照線來行駛~~

巡線比防跌落要難一些,防跌落只要傳感器沒有返回數據,讓車停了即可。巡線時線路是不確定的,要處理各種情況下的數據,所以比較難一些。爲了方便理解我們先來做一個簡單的尋跡。場地如下圖(夠簡單吧):
在這裏插入圖片描述
上圖就是我們的"賽道",小車向右行駛,我們要檢測“賽道"並按照賽道路線行駛。傳感器只返回兩種信號0和1(低電平和高電平)),所以我們先定好

  1. 檢測到黑線時循跡模塊相應的指示燈亮,端口電平爲LOW(0)
  2. 未檢測到黑線時循跡模塊相應的指示燈滅,端口電平爲HIGH(1)
    “需要調節傳感器精度"

信號2或者信號3在直線處應是亮燈狀態。
在這裏插入圖片描述
當轉彎時信號4檢測到黑線應該是亮燈狀態。
在這裏插入圖片描述

信號1在這裏做矯正使用(如果信號1檢測到黑線則說明車在賽道內部需要向左轉直到信號2信號3同時亮起。)
在這裏插入圖片描述

主控板:ZTMR1.1python開發板

N20減速馬達(四驅車上的電機)
在這裏插入圖片描述

ZT紅外尋跡
在這裏插入圖片描述

引腳說明

引腳 說明
VCC 5v
GND GND
x1~x4 都爲輸入

代碼如下

main.py

# main.py -- put your code here!
from car import Car            #調用car.py裏的Car類。
from pyb import Pin, Timer,LED
from time import sleep_us,ticks_us,sleep
#定義引腳,低電平時,指示燈亮。
xun1 = Pin(("B1"),Pin.IN)
xun4 = Pin(("B0"),Pin.IN)
xun3 = Pin(("C7"),Pin.IN)
xun2 = Pin(("C6"),Pin.IN)
while True:
	pyb.udelay(1000)
	print('xun1:%d,xun2:%d,xun3:%d,xun4:%d' %(xun1.value(),xun2.value(),xun3.value(),xun4.value()))
	#檢測到黑線時循跡模塊相應的指示燈亮,端口電平爲(0)
        #未檢測到黑線時循跡模塊相應的指示燈滅,端口電平爲(1)
	if(xun1.value()==0):
                #四路循跡引腳電平狀態
                #信號1檢測到黑線電平值爲0,左轉(或者原地左旋轉)
                # 0 1 1 1
                #Car.left(10)
                Car.spin_left(20)               
        elif(xun4.value()==0)#四路循跡引腳電平狀態
                # 信號4檢測到黑線了,右轉即可
                # 1 0 0 0
                # 1 1 0 0
                # 1 0 1 0                
                Car.right(20)
        else:
                #四路循跡引腳電平狀態
                # 信號2或信號3能檢測到黑線直行即可,有以下4中情況
                # 1 0 0 0
                # 1 1 0 0
                # 1 0 1 0
                # 1 0 1 1
                # 1 1 0 1
                # 1 0 0 1                
                Car.go(40)

                

在這裏插入圖片描述
car.py

# main.py -- put your code here!
from pyb import Pin, Timer,delay
from time import sleep_us,ticks_us,sleep
cs = Pin('B10',Pin.OUT_PP)    #B10設置爲輸出引腳輸出高電平
cs(1)
ch1 =None
ch2 =None     #初始化
AI1 = Pin('B12',Pin.OUT_PP)    #右側馬達
AI2 = Pin('B13',Pin.OUT_PP)
BI1 = Pin('B14',Pin.OUT_PP)    #左側馬達
BI2 = Pin('B15',Pin.OUT_PP)

#A電機(右)
p1 = Pin('B8') 
tim1 = Timer(10, freq=120)                  
ch1 = tim1.channel(1, Timer.PWM, pin=p1)
#B電機(左)
p2 = Pin('B9') 
tim2 = Timer(4, freq=120)                  
ch2 = tim2.channel(4, Timer.PWM, pin=p2)

#小車狀態
class Car():          #把小車行駛狀態存入Car類中
    def go(speed):    #直行狀態                
            ch1.pulse_width_percent(speed)   
            ch2.pulse_width_percent(speed)
            AI1(0)        
            AI2(1)
            BI1(1)
            BI2(0)
      
    def back(speed):  #逆行
            ch1.pulse_width_percent(speed)
            ch2.pulse_width_percent(speed)
            AI1(1)
            AI2(0)
            BI1(0)
            BI2(1)

    def stopdj(): #停止
            ch1.pulse_width_percent(0)
            ch2.pulse_width_percent(0)
            

    def spin_left(speed): #左旋
            ch1.pulse_width_percent(0)#右
            ch2.pulse_width_percent(speed)
            AI1(0)
            AI2(0)
            BI1(1)
            BI2(0)

    def spin_right(speed):#右旋
            ch1.pulse_width_percent(speed)
            ch2.pulse_width_percent(0)
            AI1(1)
            AI2(0)
            BI1(0)
            BI2(0)

    def left(speed):      #左轉
            ch1.pulse_width_percent(0)#右
            ch2.pulse_width_percent(speed)
            AI1(0)
            AI2(0)
            BI1(1)
            BI2(0)

    def right(speed):     #右轉
            ch1.pulse_width_percent(speed)
            ch2.pulse_width_percent(0)
            AI1(1)
            AI2(0)
            BI1(0)
            BI2(0)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章