python firmata协议利用arduino操控麦克纳姆轮小车
- 前言
- 一、python中pyfirmata的环境
-
- 材料
- 二、使用步骤
-
- 1.小车的安装方式 我在这采用的是X型安装方式
- 总结
前言
麦克纳姆轮小车的安装不在过多赘余 有需要的可以看看。在硬件安装上我们是如出一辙的 小车底盘是淘宝买的 。
王若依博客
他在博客中提到了利用自定义串口的方法操作麦克纳姆轮小车另外提到了小车的安装
一、python中pyfirmata的环境
在使用之前需要先下载pyfirmata 和serial两个库文件 通过pip即可下载
材料
1.L298N驱动板2
2.麦克纳姆轮4
3.3000MA电池
4.小车底盘
5.Arduino板子
L298N的工作原理
1.小车的安装方式 我在这采用的是X型安装方式
图片来源于网络
麦克纳姆轮小车的轮子并不是随便安装都可以实现万向的 注意安装方向。
这里用arduino UNO 来进行操控四个轮子分别用四个舵机驱动 。
话不多说 上代码
代码如下(示例):
# -*- coding: utf-8 -*- """ Created on Thu Jul 1 16:33:32 2021 @author: 23119 """ from pyfirmata import Arduino board=Arduino('com3') LB_IN1=2 LB_IN2=4 #LB_EN=3 LU_IN1=6 LU_IN2=7 #LU_EN=5 RU_IN1=8 RU_IN2=9 #RU_EN=10 RB_IN1=12 RB_IN2=14 #RB_EN=11 LB_EN=board.get_pin('d:3:p') LU_EN=board.get_pin('d:5:p') RU_EN=board.get_pin('d:10:p') RB_EN=board.get_pin('d:11:p') RB_IN2=board.get_pin('a:A0:P') #150映射为0.6 def Up(): LB_EN.write(0.6) LU_EN.write(0.6) RU_EN.write(0.6) RB_EN.write(0.6) board.digital[LB_IN1].write(0) board.digital[LB_IN2].write(1) board.digital[LU_IN1].write(0) board.digital[LU_IN2].write(1) board.digital[RB_IN1].write(0) board.digital[RB_IN2].write(1) RB_IN2.write(1) board.digital[RU_IN1].write(0) board.digital[RU_IN2].write(1) def Back(): board.digital[LB_IN1].write(1) board.digital[LB_IN2].write(0) board.digital[LU_IN1].write(1) board.digital[LU_IN2].write(0) board.digital[RB_IN1].write(1) board.digital[RB_IN2].write(0) board.digital[RU_IN1].write(1) board.digital[RU_IN2].write(0) LB_EN.write(0.6) LU_EN.write(0.6) RU_EN.write(0.6) RB_EN.write(0.6) def TurnRight(): #左侧正转右侧反转 board.digital[LB_IN1].write(0) board.digital[LB_IN2].write(1) board.digital[LU_IN1].write(0) board.digital[LU_IN2].write(1) board.digital[RB_IN1].write(1) board.digital[RB_IN2].write(0) board.digital[RU_IN1].write(1) board.digital[RU_IN2].write(0) LB_EN.write(0.6) LU_EN.write(0.6) RU_EN.write(0.6) RB_EN.write(0.6) #ba #ab #LU RU #LB RB def TurnLeft(): #左侧反转右侧正转 board.digital[LB_IN1].write(1) board.digital[LB_IN2].write(0) board.digital[LU_IN1].write(1) board.digital[LU_IN2].write(0) board.digital[RB_IN1].write(0) board.digital[RB_IN2].write(1) board.digital[RU_IN1].write(0) board.digital[RU_IN2].write(1) LB_EN.write(0.6) LU_EN.write(0.6) RU_EN.write(0.6) RB_EN.write(0.6) def RightLine(): #a反转b正转 board.digital[LB_IN1].write(1) board.digital[LB_IN2].write(0) board.digital[LU_IN1].write(0) board.digital[LU_IN2].write(1) board.digital[RB_IN1].write(0) board.digital[RB_IN2].write(1) board.digital[RU_IN1].write(1) board.digital[RU_IN2].write(0) LB_EN.write(0.6) LU_EN.write(0.6) RU_EN.write(0.6) RB_EN.write(0.6) def LeftLine(): #a正转b反转 board.digital[LB_IN1].write(0) board.digital[LB_IN2].write(1) board.digital[LU_IN1].write(1) board.digital[LU_IN2].write(0) board.digital[RB_IN1].write(1) board.digital[RB_IN2].write(0) board.digital[RU_IN1].write(0) board.digital[RU_IN2].write(1) LB_EN.write(0.6) LU_EN.write(0.6) RU_EN.write(0.6) RB_EN.write(0.6) def Stop(): board.digital[LB_IN1].write(0) board.digital[LB_IN2].write(0) board.digital[LU_IN1].write(0) board.digital[LU_IN2].write(0) board.digital[RB_IN1].write(0) board.digital[RB_IN2].write(0) board.digital[RU_IN1].write(0) board.digital[RU_IN2].write(0) LB_EN.write(0.6) LU_EN.write(0.6) RU_EN.write(0.6) RB_EN.write(0.6) Up() #Back() #TurnRight() # TurnLeft() # RightLine() # LeftLine() # Stop()
总结