树莓派是一款小巧、低成本且功能强大的单板计算机,它的广泛应用使得它成为了物联网和嵌入式系统开发的理想选择。在这篇博客中,我将向大家介绍如何使用树莓派和Python来控制L9110电机。L9110电机控制器是一种常用的电机驱动模块,它可以实现电机的正转、反转和停止。
在开始之前,我们需要准备以下材料:
树莓派 | L9110电机 |
---|---|
VCC | VCC |
GND | GND |
GPIO12 | IA |
GPIO16 | IB |
import
引入GPIO库函数,用于控制GPIO的高低电平import RPi.GPIO as GPIO
.py
文件中的模式应该如下:class name:
def __init__(self):
……
def function1(self):
……
def function2(self):
……
def __init__(self, gpioPinIa: int, gpioPinIb: int):
"""
电机构造函数
:param gpioPinIa: 设置L9110芯片IA引脚
:param gpioPinIb: 设置L9110芯片IB引脚
:return:
"""
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引脚电压
:param pinIaMod:
:param pinIbMod:
:return:
"""
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()
import time
from Motor import Motor
def testMotor():
# 设置电机引脚 并且实例化
gpioPinIa, gpioPinIb = 12, 16
motor = Motor(gpioPinIa, gpioPinIb)
# 测试
for i in range(2):
print(1)
# 开始正转
motor.setForeward()
time.sleep(4)
print(2)
# 开始反转
motor.setReversal()
time.sleep(4)
print(3)
# 停止
motor.stop()
time.sleep(4)
motor.close()
if __name__ == '__main__':
testMotor()
在这个示例中,引入time
库是为了给予延时,如果不给予延时程序的效果就会是: 电机正转、反转、停止 这三个状态几乎同一时间完成,而我们人的肉眼根本无法捕获到三个状态的改变。
在这个示例中,引入print
函数式为了告诉程序员代码运行的进度,以便示例效果与示例代码匹配。
通过这篇博客,我们学习了如何使用树莓派和Python来控制L9110电机。我们编写了一个Motor类,可以方便地控制电机的正转、反转和停止。我们还提供了一个简单的示例代码,演示了如何使用Motor类来控制电机的运行。希望这篇博客能帮助你开始使用树莓派和Python来控制电机。
附:完整代码
class Motor(object):
"""
电机操作的基类
"""
def __init__(self, gpioPinIa: int, gpioPinIb: int):
"""
电机构造函数
:param gpioPinIa: 设置L9110芯片IA引脚
:param gpioPinIb: 设置L9110芯片IB引脚
:return:
"""
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引脚电压
:param pinIaMod:
:param pinIbMod:
:return:
"""
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()