为了准备2024年TI杯,本团队提前封装一些可能用到的案例
树莓派小车控制
采用L19110S模块去控制
motor.py
class Motor(object):
电机操作的基类
def __init__(self, gpioPinIa: int, gpioPinIb: int):
self._gpioPinIa = gpioPinIa
self._gpioPinIb = gpioPinIb
# 设置编码方式
GPIO.setmode(GPIO.BOARD)
# 设置GPIO引脚
GPIO.setup(self._gpioPinIa, GPIO.OUT)
GPIO.setup(self._gpioPinIb, GPIO.OUT)
# 将电机设置成待机模式
self.setStand()
def _setGPIO(self, pinIaMod, pinIbMod):
GPIO.output(self._gpioPinIa, pinIaMod)
GPIO.output(self._gpioPinIb, pinIbMod)
def setStand(self):
"""
设置电机为待机模式
:return:
"""
# 设置GPIO低电平,实现电机待机
self._setGPIO(GPIO.LOW, GPIO.LOW)
def setForeward(self):
"""
将电机设置成正转模式
:return:
"""
# 设置GPIO高低电平,实现电机正转
self._setGPIO(GPIO.HIGH, GPIO.LOW)
def setReversal(self):
"""
将电机设置成反转模式
:return:
"""
# 设置GPIO低高电平,实现电机反转
self._setGPIO(GPIO.LOW, GPIO.HIGH)
def stop(self):
"""
电机停止工作
:return:
"""
# 设置GPIO高电平,实现电机停止工作
self._setGPIO(GPIO.HIGH, GPIO.HIGH)
@staticmethod
def close():
"""
释放所有已经使用过的GPIO
:return:
"""
GPIO.cleanup()
main.py
import time
import RPi.GPIO as GPIO
from Motor import Motor
# 定义四个电机对应的 GPIO 引脚
pinMap = {
'left_rear': (12, 16),
'left_front': (11, 15),
'right_rear': (36, 38),
'right_front': (35, 37)
}
def forward(motors):
motors['left_rear'].setForeward()
motors['right_rear'].setForeward()
motors['left_front'].setForeward()
motors['right_front'].setForeward()
def backward(motors):
motors['left_rear'].setReversal()
motors['right_rear'].setReversal()
motors['left_front'].setReversal()
motors['right_front'].setReversal()
def turn_left(motors):
motors['left_rear'].setReversal()
motors['right_rear'].setForeward()
motors['left_front'].setReversal()
motors['right_front'].setForeward()
def turn_right(motors):
motors['left_rear'].setForeward()
motors['right_rear'].setReversal()
motors['left_front'].setForeward()
motors['right_front'].setReversal()
def testCarControl():
# 实例化四个电机对象
motors = {}
for motor_name, pins in pinMap.items():
motor = Motor(pins[0], pins[1])
motors[motor_name] = motor
# 前进
forward(motors)
time.sleep(2)
# 后退
backward(motors)
time.sleep(2)
# 直走
motors['left_rear'].setForeward()
motors['right_rear'].setForeward()
motors['left_front'].setReversal()
motors['right_front'].setReversal()
time.sleep(5)
# 左转
turn_left(motors)
time.sleep(5)
# 右转
turn_right(motors)
time.sleep(5)
# 停止
for motor in motors.values():
motor.stop()
# 释放 GPIO 资源
for motor in motors.values():
motor.close()
if __name__ == '__main__':
testCarControl()