python firmata协议利用arduino操控麦克纳姆轮小车

  • 前言
  • 一、python中pyfirmata的环境
    • 材料
  • 二、使用步骤
    • 1.小车的安装方式 我在这采用的是X型安装方式
  • 总结

 


前言

麦克纳姆轮小车的安装不在过多赘余 有需要的可以看看。在硬件安装上我们是如出一辙的 小车底盘是淘宝买的 。
王若依博客
他在博客中提到了利用自定义串口的方法操作麦克纳姆轮小车另外提到了小车的安装


一、python中pyfirmata的环境

在使用之前需要先下载pyfirmata 和serial两个库文件 通过pip即可下载

材料

1.L298N驱动板2
2.麦克纳姆轮4
3.3000MA电池
4.小车底盘
5.Arduino板子
L298N的工作原理
python firmata协议利用arduino操控麦克纳姆轮小车(附完整代码)_麦克纳姆轮

二、使用步骤

1.小车的安装方式 我在这采用的是X型安装方式

python firmata协议利用arduino操控麦克纳姆轮小车(附完整代码)_python_02
图片来源于网络
麦克纳姆轮小车的轮子并不是随便安装都可以实现万向的 注意安装方向。
这里用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()


总结