当前位置: 首页 > news >正文

瓦力机器人-编码电机控制(基于树莓派5)

🚗 树莓派5 + MX1508 双路电机驱动控制教程(含完整代码)

本文将手把手教你如何使用 树莓派5 + MX1508 电机驱动模块 实现双路电机正反转控制、PWM 调速,并提供控制台交互模式,轻松打造你的智能小车。

🧠 一、项目简介

MX1508 是一种常见的 双路直流电机驱动模块,内部集成了两个 H 桥,可以控制两个直流电机(M1、M2)正反转和速度。

我们将使用 Python + gpiozero 库 来控制电机,从而让小车实现:

  • 前进 / 后退

  • 左转 / 右转

  • 停止

  • 控制台输入速度调节

最终效果:在树莓派终端输入命令即可让小车运动。

🔌 二、硬件准备

设备数量说明
树莓派 51系统建议 Raspberry Pi OS 64位
MX1508 电机驱动模块1支持两路直流电机
直流电机2建议 6V~12V 小电机
外部电源1电机电源(建议独立供电)
杜邦线若干连接模块与树莓派

⚙️ 三、引脚连接示意

MX1508 引脚连接到树莓派 (BCM)说明
IN1GPIO17电机1 控制 A
IN2GPIO18电机1 控制 B
IN3GPIO22电机2 控制 A
IN4GPIO23电机2 控制 B
VCC电机电源正极6~12V
GND树莓派 GND共地

⚠️ 一定要保证 电机电源与树莓派共地(GND相连),否则无法正常工作。

💻 四、安装依赖

在树莓派终端中运行以下命令:

sudo apt update sudo apt install python3-gpiozero 

gpiozero 是官方推荐的 Raspberry Pi 控制 GPIO 的 Python 库,语法简洁,支持 PWM 输出。

🧩 五、完整代码

保存为 mx1508_car.py

from gpiozero import PWMOutputDevice
import timeclass MX1508_MotorDriver_RPi5:def __init__(self):# 电机引脚定义 (BCM编号)self.MOTOR1_PIN1 = 17  # IN1self.MOTOR1_PIN2 = 18  # IN2self.MOTOR2_PIN1 = 22  # IN3  self.MOTOR2_PIN2 = 23  # IN4# 初始化电机self.setup_motors()def setup_motors(self):"""使用gpiozero初始化电机"""self.motor1_in1 = PWMOutputDevice(self.MOTOR1_PIN1, frequency=1000)self.motor1_in2 = PWMOutputDevice(self.MOTOR1_PIN2, frequency=1000)self.motor2_in1 = PWMOutputDevice(self.MOTOR2_PIN1, frequency=1000)self.motor2_in2 = PWMOutputDevice(self.MOTOR2_PIN2, frequency=1000)print("✅ MX1508电机驱动器初始化完成 (树莓派5)")def motor1_control(self, speed):"""控制电机1"""self._motor_control(self.motor1_in1, self.motor1_in2, speed)def motor2_control(self, speed):"""控制电机2"""self._motor_control(self.motor2_in1, self.motor2_in2, speed)def _motor_control(self, in1, in2, speed):"""内部电机控制方法"""speed = max(-1.0, min(1.0, speed / 100.0))  # 转换为-1到1范围if speed > 0:in1.value = speedin2.value = 0elif speed < 0:in1.value = 0in2.value = abs(speed)else:in1.value = 0in2.value = 0def car_forward(self, speed=50):"""小车前进"""self.motor1_control(speed)self.motor2_control(speed)print(f"🚗 前进 - 速度: {speed}%")def car_backward(self, speed=50):"""小车后退"""self.motor1_control(-speed)self.motor2_control(-speed)print(f"🚙 后退 - 速度: {speed}%")def car_turn_left(self, speed=50):"""小车左转"""self.motor1_control(-speed)self.motor2_control(speed)print(f"↩️ 左转 - 速度: {speed}%")def car_turn_right(self, speed=50):"""小车右转"""self.motor1_control(speed)self.motor2_control(-speed)print(f"↪️ 右转 - 速度: {speed}%")def car_stop(self):"""小车停止"""self.motor1_control(0)self.motor2_control(0)print("🛑 停止")def cleanup(self):"""清理资源"""self.car_stop()self.motor1_in1.close()self.motor1_in2.close()self.motor2_in1.close()self.motor2_in2.close()print("🔚 资源已清理")# 控制台调试接口
def console_control():motor_driver = MX1508_MotorDriver_RPi5()print("\n==== MX1508 控制台模式 ====")print(" forward <速度>   → 前进")print(" backward <速度>  → 后退")print(" left <速度>      → 左转")print(" right <速度>     → 右转")print(" stop             → 停止")print(" exit             → 退出程序")print("===========================\n")try:while True:cmd = input("请输入命令 > ").strip().lower()if not cmd:continueparts = cmd.split()action = parts[0]speed = int(parts[1]) if len(parts) > 1 else 50if action == "forward":motor_driver.car_forward(speed)elif action == "backward":motor_driver.car_backward(speed)elif action == "left":motor_driver.car_turn_left(speed)elif action == "right":motor_driver.car_turn_right(speed)elif action == "stop":motor_driver.car_stop()elif action == "exit":print("🧹 退出程序...")breakelse:print("❌ 无效命令,请重新输入")except KeyboardInterrupt:print("\n⏹ 手动中断")finally:motor_driver.cleanup()if __name__ == "__main__":console_control()

🧭 六、运行效果

执行:

python3 mx1508_car.py

终端输出:

🧩 七、代码结构讲解

方法功能说明
setup_motors()初始化 PWM 引脚频率设置为 1000Hz
_motor_control()电机基础控制速度范围 -100~100
car_forward()前进两个电机同向转动
car_turn_left()左转左电机反转,右电机正转
car_stop()停止所有电机输出置 0
console_control()交互控制台输入命令控制动作

🧰 八、常见问题

❓ 电机不转怎么办?

  1. 检查电机电源是否供电(VCC ≥ 6V)

  2. 检查 GND 是否与树莓派共地

  3. 确保 Python 运行权限足够(sudo python3

  4. 电机方向相反可交换 IN1/IN2、IN3/IN4 接线

🧠 九、进阶玩法

  • ✅ 加入 超声波避障 模块,实现自动避障行驶

  • ✅ 结合 摄像头识别 实现图像跟随或颜色跟踪

  • ✅ 通过 Flask + WebSocket 打造网页控制界面

  • ✅ 使用 蓝牙串口模块 HC-06 用手机蓝牙控制

🎯 十、总结

本教程完整实现了使用树莓派5 + MX1508 模块控制双路电机的基础功能。

优点:

  • 无需外部库,只依赖 gpiozero

  • 代码清晰,模块化设计

  • 支持命令行动态调速

http://www.dtcms.com/a/524594.html

相关文章:

  • dw做网站怎么上线大良用户网站建设
  • Node.js 进阶:掌握高性能服务器开发的核心技术
  • Elasticsearch 的 SQL 与 DSL 转换
  • 快速做网站的软件腾讯企业邮箱电脑版登录入口
  • API测试工具进化:从Postman到Apipost的全局参数管理革命
  • 数据结构——排序的超级详解(Java版)
  • C# 加密解密字符方法Cryptography
  • 教做详情页的网站关键词优化公司电话
  • 中企动力科技股份有限公司网站梵克雅宝官网官方网
  • 自己电脑做电影网站中国建设教育协会培训中心
  • 第三章、React项目国际化介绍(`react-i18next`)
  • RHCA - DO374 | Day03:通过自动化控制器运行剧本
  • 深圳微商城网站建设温州 网站开发
  • 何谓RSS
  • 【SpringCloud】Eureka
  • 网站后台尺寸一般做多大的如何把优酷视频放到网站上
  • 帝国建站模板淘宝网络营销案例分析
  • 企业选择内容+人工智能供应商应该考虑什么?​
  • CI/CD(一)—— 从零搭建 GitLab 全流程(Docker 部署 + 实战指南)
  • 【Android】 Gradle 下载后本地使用方式(macOS / Windows通用)
  • 华为od面经-23届-Java面经
  • Kubernetes LoadBalancer系列|MetalLB介绍与配置
  • 网站制作及管理教程模板网站建设公司 东莞
  • 网站内容品质网站开发的相关语言有哪些
  • 淘宝自己网站怎么建设怎么制作网站编辑页面
  • SQLMap 终极渗透手册(2025全功能版)
  • 微硕WSP4884双N沟MOSFET:汽车智能座舱PMIC“微型稳压核”
  • 【Redis 全解析】高性能内存数据库的原理、实践与优化
  • 手机壳在线设计网站网站都不需要什么备案
  • Ubuntu 系统使用 Docker 部署 Jenkins 详细教程