python firmata协议利用arduino操控麦克纳姆轮小车(附完整代码)

2 篇文章 0 订阅
1 篇文章 0 订阅


前言

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


一、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()


总结

亲测有效。在过程中如果有问题欢迎留言。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁六加.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值