咸鱼ZTMR实例—避障小车

咸鱼ZTMR实例—避障小车

我们之前写了小车状态的函数,可以看到代码量明显增加了。后面和小车配合的传感器会越来越多。如果不加以管理,之后会越来越乱。那么我们现在就要想办法管理一下了。 ——把之前写的小车状态弄成一个库。我们就可以直接使用了。

主控板:ZTMR1.1python开发板

超声波模块
在这里插入图片描述

引脚 说明
VCC 5v
Trig 输出
Echo 输入
GND GND

N20减速马达(四驱车上的电机)
在这里插入图片描述

引脚 说明
B10 只有为高电平时,马达才会转
B8 PWM控制A电机
B9 PWM控制B电机
B12 AIN1 右侧马达
B13 AIN2 右侧马达
B14 BIN1 左侧马达
B15 BIN2 左侧马达

class()使用方法如下:我们创建了一个学生类,里面记录了学生的名字和年龄。(后面会详细说明)

在这里插入图片描述
将小车状态的程序存入car.py中。在把多个状态的函数放到"一类"。之后我们开发板Flash中会有5个文件。
在这里插入图片描述
main.py

# main.py -- put your code here!

from car import Car                    #引用car.py文件里的Car
from pyb import Pin
from time import sleep_us,ticks_us

trig = Pin('A8',Pin.OUT_PP)
echo = Pin('A7',Pin.IN)
distance = 0
while True:	
	trig.value(1)
	sleep_us(20)
	trig.value(0)
	while echo.value == 0:
		trig.value(1)
		sleep_us(20)
		trig.value(0)
	if echo.value() == 1:
		ts = ticks_us()                 #开始时间
		while echo.value()==1:          #等待脉冲高电平结束
			pass
		te = ticks_us()         
		tc = te-ts				         #结束时间
		distance = (tc*170)/10000        #us(微秒) 1微秒等于一百万分之一秒(10的负6次方秒)
		print('distance',distance,'cm')  #距离计算 (单位为:cm)
	pyb.udelay(200)
	if distance < 15:					 #检测距离小于15CM则左转
                Car.left(40)                             
        else:							 #未达到条件就直行
                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/105531253
今日推荐