【树莓派】在树莓派使用Python控制L9110电机转动的详细教程

文章目录

  • 引言
  • 准备工作
  • L9110电机知识储备
    • 特点
    • 电机的工作方式
  • 实现
  • 结论

引言

  树莓派是一款小巧、低成本且功能强大的单板计算机,它的广泛应用使得它成为了物联网和嵌入式系统开发的理想选择。在这篇博客中,我将向大家介绍如何使用树莓派和Python来控制L9110电机。L9110电机控制器是一种常用的电机驱动模块,它可以实现电机的正转、反转和停止。

准备工作

  在开始之前,我们需要准备以下材料:

  • 树莓派(任意型号)
  • L9110电机
  • 杜邦线
  • 电机

L9110电机知识储备

特点

  • 低静态工作电流;
  • 宽电源电压范围:2.5V-12V;
  • 每通道具有800mA连续电流输出能力,具有较低的饱和压降;
  • TTL/CMOS输出电平兼容,可直接连CPU;输出内置钳位二极管,适用于感性负载;控制和驱动集成于单片IC之中;
  • 具备管脚高压保护功能;
  • 工作温度:0℃-80℃;

电机的工作方式

  • IA输入高电平,IB输入低电平,【OA1 OB1】电机正转;
  • IA输入低电平,IB1输入高电平,【OA1 OB1】电机反转;
    (实际上,当我们接上电源后,电机即可转动,不过电流可能不太稳定)

实现

  • 树莓派与电机的连接方式;
树莓派L9110电机
VCCVCC
GNDGND
GPIO12IA
GPIO16IB
  • 使用import引入GPIO库函数,用于控制GPIO的高低电平
import RPi.GPIO as GPIO
  • 此处使用Python类的思想来编写代码,也就是说.py文件中的模式应该如下:
class name:def __init__(self):……def function1(self):……def function2(self):……
  • 在电机类Motor中,初始化时需要设置电机控制引脚的编码格式与引脚编号,如果一开始不想让电机转动还可以将电机引脚IA IB都设置成低电平(待机模式)
 def __init__(self, gpioPinIa: int, gpioPinIb: int):"""电机构造函数:param gpioPinIa: 设置L9110芯片IA引脚:param gpioPinIb: 设置L9110芯片IB引脚:return:"""self._gpioPinIa = gpioPinIaself._gpioPinIb = gpioPinIb# 设置编码方式GPIO.setmode(GPIO.BOARD)# 设置GPIO引脚GPIO.setup(self._gpioPinIa, GPIO.OUT)GPIO.setup(self._gpioPinIb, GPIO.OUT)# 将电机设置成待机模式self.setStand()
  • 为了提升代码的复用性,这里特意预设一个方法用于设置GPIO引脚的状态,后续直接传递参数即可设置GPIO引脚状态;
    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)
  • 还需要注意:每次使用完成GPIO引脚后需要释放GPIO引脚,否则:每次代码运行时否会给出警告说引脚应该被设置过,其次据说还会对树莓派造成损伤;
    @staticmethoddef close():"""释放所有已经使用过的GPIO:return:"""GPIO.cleanup()
  • 现在可以使用Motor类来控制电机了。下面是一个简单的示例代码,演示如何使用Motor类来控制电机的正转、反转和停止:
import time
from Motor import Motordef testMotor():# 设置电机引脚 并且实例化gpioPinIa, gpioPinIb = 12, 16motor = 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 = gpioPinIaself._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)@staticmethoddef close():"""释放所有已经使用过的GPIO:return:"""GPIO.cleanup()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/604148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【嵌入式移植】2、使用Crosstool-NG制作交叉编译工具链

【嵌入式移植】2、使用Crosstool-NG制作交叉编译工具链 1 准备工作1.1 下载Crosstool-NG1.2 尝试配置crosstool-ng,安装依赖项1.2.1 Crosstool-NG所需软件包 1.3 编译及安装 2 制作交叉编译工具链2.1 选择配置文件2.2 使用用户界面菜单进行配置2.2.1 Paths and misc…

Java多态,包,权限修饰符,final关键字

文章目录 今日内容教学目标 第一章 多态1.1 多态的形式1.2 多态的使用场景1.3 多态的定义和前提1.4 多态的运行特点1.5 多态的弊端1.6 引用类型转换1.6.1 为什么要转型1.6.2 向上转型(自动转换)1.6.3 向下转型(强制转换)1.6.4 案例…

【MySQL四大引擎,数据库管理,数据表管理,数据库账号管理】

一. MySQL四大引擎 查看存储引擎 SHOW ENGINES support 字段说明 defaulti的为默认的引擎 为YES表示可以使用 为NO表示不能使用 四大引擎 InnoDB InnoDB表类型可以看作是对MyISAM的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能,也是目前…

构建网络信息安全的中国方案 - 国密SSL协议介绍以及国密Nginx服务器部署

国密SSL协议 国密SSL协议指的是采用国密算法,符合国密标准的安全传输协议。简而言之,国密SSL就是SSL/TLS协议的国密版本。TLS协议定义有三个版本号,为0x0301、0x0302、0x0303,分别对应TLS 1.0、1.1、1.2。国密SSL为了避免冲突&am…

听GPT 讲Rust源代码--compiler(32)

File: rust/compiler/rustc_middle/src/middle/exported_symbols.rs 在Rust的源代码中,rust/compiler/rustc_middle/src/middle/exported_symbols.rs文件的作用是实现编译器中处理导出符号的功能。 该文件中定义了一些结构体和枚举,用于描述导出符号的信…

电脑丢失dll文件怎么办,dll修复工具可一键修复dll问题

在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“无法找到某某.dll文件”。这种情况通常是由于dll文件丢失或损坏导致的。那么,究竟是什么原因导致了dll文件的丢失呢?又该如何预防dll文件…

2024校招,网易互娱游戏测试工程师一面

前言 大家好,今天回顾一下,我前段时间参加的游戏测试工程师技术面试 两个面试官,一个提问,另一个负责记录 过程 自我介绍比赛经历介绍一下使用的博弈算法穷举算法对性能有什么影响怎么评估局面好坏出现的bug怎么解决的&#x…

mysql5.7安装-windows安装版本

下载地址 官网地址:https://www.mysql.com/官网下载地址:https://dev.mysql.com/downloads/mysql/阿里云镜像站下载:https://mirrors.aliyun.com/mysql/华为云镜像站地址:https://mirrors.huaweicloud.com/home华为云镜像站下载:https://mirrors.huaweicloud.com/mysql/Downlo…

自动驾驶apollo9.0 Dreamview Debug方法

Apollo 9.0 安装&编译方法 # 拉取源码 git clone gitgithub.com:ApolloAuto/apollo.git git checkout v9.0.0# 启动docker bash docker/scripts/dev_start.sh bash docker/scripts/dev_into.sh# 编译project ./apollo.sh build默认启动方式 default mode wget https:…

SpringBoot实用开发(十一)-- MongoDB的客户端(studio 3T)的安装与简单使用

目录 1.studio 3T的下载与安装 2.studio 3T的连接 3.studio 3T的简单使用 3.1 创建数据库

houdini python self tools

01.geo 对应创建mantra import hou null_path[] for i in hou.selectedNodes():mantrahou.node(out).createNode(ifd,{0}.format(i.name()))mantra.parm(trange).set(1)framehou.parmTuple({0}/f.format(mantra.path()))frame.deleteAllKeyframes()for s in i.children():if …

Web前端-JavaScript(BOM)

文章目录 1.1 常用的键盘事件1.1.1 键盘事件1.1.2 键盘事件对象1.1.3 案例一 1.2 BOM1.2.1 什么是BOM1.2.2 BOM的构成1.2.3 window1.2.4 window对象常见事件窗口/页面加载事件**第1种****第2种** 调整窗口大小事件 1.2.5 定时器setTimeout() 炸弹定时器停止定时器**案例&#x…

解决ImportError: Failed to import test module: sys.__init__

解决ImportError: Failed to import test module: sys.init 背景 学习通过文件夹执行测试脚本时,出现了错误:ImportError: Failed to import test module: sys.__init__ 解决过程 根据报错信息:sys is not a package大胆猜测可能是文件名…

VMware linux虚拟机卸载不干净导致二次安装之后虚拟机ping不通主机

问题就是主机能ping通虚拟机,虚拟机不能ping通主机,我看网上又说虚拟机和主机没在同一网段的, 有些确实是这个情况但是首先你要打开控制面板–》网络–》网络和共享中心-》更改适配器设置,然后 会弹出下面的界面 如果你的没有上面…

【UE Niagara学习笔记】01 - 浮动的蒲公英

目录 效果 步骤 一、创建材质 二、创建Niagara粒子 2.1 创建Niagara模板 2.2 通过用户参数设置粒子大小 2.3 设置数量、风速、透明度变化 效果 步骤 一、创建材质 1. 在虚幻商城中把“Realistic Starter VFX Pack Vol 2”添加到项目中,该资产中所包含的…

ubuntu开机卡在[OK],,,,,的界面无法正常开机后进入桌面

0.现象 ubuntu开机,进入一片代码行,会卡在某一行,一直没有新的进展 1.原因 有很多原因可能导致这个现象,内核升级与固件不匹配、磁盘出了问题等等如果没有做过什么特别的事情,也可能是存储空间满了,也会…

探索2024年软件测试的几大主导趋势

进入2024年,考虑影响测试环境的问题至关重要。这种思考将成为团队了解主要瓶颈和实现当今不断提高的期望的首要因素。 01 了解关键测试瓶颈 毋庸置疑,现代团队需要不断创新、适应和拥抱最新趋势,以保持竞争力并提供以客户为中心的解决方案。尽…

微信小程序 引导地址授权 获取位置信息 uniapp

概述 获取位置信息,需要保证是否授权位置信息,有几个条件是导致无法授权的原因 (1)微信应用未授权定位设置 (2)首次进入小程序未授权位置信息 (3)小程序之前阻止过授权位置信息 &…

力扣383.赎金信 -- 哈希表

思路&#xff1a;记录magazine每个字符个数&#xff0c;然后记录ransomNote每个字符&#xff08;每有一个减1&#xff09;&#xff0c;假如出现<0的情况说明ransomnode有字符的个数超过了magazine则无法构成&#xff0c;否则可以构成 代码&#xff1a; class Solution { pu…

SpringBoot实用开发(十二)-- MongoDB语句的简单使用

目录 1.新增文档 2.删除文档 3.修改文档 4.查询文档 4.1 基础查询 4.2 条件