咸鱼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能检测到黑线直行即可,有以下6中情况
            # 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)
发布了166 篇原创文章 · 获赞 22 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45020839/article/details/105574613
今日推荐