接下来我们就要开始程序的编写工作了。但在编程程序之前,我们先要对L298N直流电机驱动芯片和HC-SR04声波测距芯片说一些说明,以便我们能够通过编写程序来控制它们。先来看看L298N的6个引脚说明:
状态 |
IN1 |
IN2 |
IN3 |
IN4 |
ENA |
ENB |
|
电机A |
正转 |
高 |
低 |
-- |
-- |
高 |
-- |
电机A |
反转 |
低 |
高 |
-- |
高 |
-- |
|
电机A |
停止 |
低 |
低 |
-- |
-- |
高 |
-- |
电机B |
正转 |
-- |
-- |
高 |
低 |
-- |
高 |
电机B |
反转 |
-- |
-- |
低 |
高 |
-- |
高 |
电机B |
停止 |
-- |
-- |
低 |
低 |
-- |
高 |
上面表格很好理解,对于IN1和IN2的高低电压(在编程代码中用1和0表示)用于控制电机A;IN2和IN3用于控制电机B;而ENA和ENB称为调速端,由PWM信号空占比来设定电机转动速度。例如我们可以对ENA每隔1ms(1毫秒等于1000微秒)发送一个信号,而在这个信号中高电压持续时间与低电压持续时间的比例就是电机A当前速度与全速比:
再来对HC-SR04的4个引脚做一下简单的说明,由左向右依次为VCC、TRIG、ECHO和GND。VCC和GND分别接入树莓派5V逻辑输入和接地,而TRIG为测距触发器,在使用HC-SR04时首先要向TRIG引脚输出一个高电压(以后高电压均用程序中的1来表示,低电压均用0表示)并保持10微秒以上,建议时间为15微秒。然后一直从ECHO引脚中读取数据,起初ECHO引脚会一直为0,当ECHO引脚由0变为1时表示HC-SR04计时开始,而ECHO引脚再变为0时表示计时结束。也就是说声波在这段时间内向前传输当遇到障碍物时反射回来再次被HC-SR04接收。由于声波在空气中的传播速度为340米/秒,我们用 速度 x 时间 = 距离 这个简单的公式就可以计算出前方障碍物与HC-SR04所在位置的距离:
细心的朋友一定会发现一个小问题,当声波发送再返回的这个时间里,如果小车正在前进,这时根据距离公式所计算出的距离就会有一定的偏差。这的确是个问题,但是我们要考虑2点:
1、声波的传播速度远远大于小车的行驶速度。
2、HC-SR04的最大测距距离为4米,且测量角度为15度左右。
所以通过HC-SR04测量出的距离值只是一个近似值,对于在测距计时中小车所行驶的距离可以忽略不计。当然,如果非要将小车的速度也加入到测试距离算法中的话就还要加入一个小车测速芯片,我们这个例子中并没有这个处理,还是将这部分距离忽略。
Copyright © 2015-2023 问渠网 辽ICP备15013245号