咸鱼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)