BPI-CAR
最近收到了一个小车的开发板,二话不说先驱动起来
硬件
GitHub - yelvlab/BPI-CAR_CAR-FWD: BPI-BIT Car Four Wheel Drive 详细的可以看这个,这个小车的板子还是一个测试中的板子,存在一些小问题,但不妨碍我们把它跑起来。
-
硬件电路部分
要驱动小车我们看几个关键的部分就可以了
这里使用pca9685输出 pwm 驱动am1016A来控制电机的起动
而控制电机的正反转就要看am1016a的技术手册的描述。
根据真值表我们就可以轻松的控制电机的转动。
软件部分
- 这里使用的不是arduino而是micro python,关于pca9685的驱动 adafruit已经做好了,这里避免重复造轮子,我们直接使用他们的驱动就可以了 micropython-adafruit-pca9685/pca9685.py at master · adafruit/micropython-adafruit-pca9685 · GitHub 直接把这个文件上传到bpi:bit中就可以了
- 那么就到了最关键的部分了,怎么让小车动起来呢,show my code
"""
The MIT License (MIT)
Copyright © 2019 @Lyubiao
"""
"""
bpi-car
position
|-----------------| ------------------
| - | 前 | - | | 左前 | 12 13 |
| - | | - | ------------------
| | | 右前 | 14 15 |
|-----------------| ------------------
| | | 左后 | 8 9 |
| - | 后 | - | ------------------
| - | | - | | 右后 | 10 11 |
|-----------------| ------------------
"""
import pca9685
from machine import Pin, I2C
class bpicar(pca9685.PCA9685):
def __init__(self,i2c, address=0x40):
pca9685.PCA9685.__init__(self, i2c, address)
self.freq(1000)
def forward(self,speed):
self.duty(14,speed)
self.duty(15, 0)
self.duty(13, speed)
self.duty(12, 0)
self.duty(10, speed)
self.duty(11, 0)
self.duty(9, speed)
self.duty(8, 0)
def backward(self,speed):
self.duty(15, speed)
self.duty(14, 0)
self.duty(12, speed)
self.duty(13, 0)
self.duty(11, speed)
self.duty(10, 0)
self.duty(8, speed)
self.duty(9, 0)
def turn_left(self,speed):
self.duty(14, speed)
self.duty(15, 0)
self.duty(12, speed)
self.duty(13, 0)
self.duty(10, speed)
self.duty(11, 0)
self.duty(8, speed)
self.duty(9, 0)
def turn_right(self,speed):
self.duty(15, speed)
self.duty(15, 0)
self.duty(13, speed)
self.duty(12, 0)
self.duty(11, speed)
self.duty(10, 0)
self.duty(9, speed)
self.duty(8, 0)
def stop(self):
self.duty(15, 0)
self.duty(14, 0)
self.duty(13, 0)
self.duty(12, 0)
self.duty(11, 0)
self.duty(10, 0)
self.duty(9, 0)
self.duty(8, 0)
i2c = I2C(scl=Pin(22), sda=Pin(21), freq=10000)
car=bpicar(i2c)
import utime
car.forward(4095)
utime.sleep(5)
car.backward(4095)
utime.sleep(5)
car.turn_left(4095)
utime.sleep(5)
car.turn_right(4095)
utime.sleep(5)
car.stop()
utime.sleep(5)
简单的定义了小车的几个操作,前进、后退、左转、右转、停止,我们可以在这个基础上继续完善我们的程序,实现更多小车的骚操作。