基于树莓派(python)的平衡小车

2023-05-16

目前普遍是STM32或者51来实现平衡小车,基于树莓派的平衡小车少见(因为树莓派适合用于数据处理)但有部分同学的毕设选择了用树莓派来做平衡小车的,接下来分享一下基于树莓派的平衡小车如何完成。
驱动:L298N或者TB6612都可。
陀螺仪:JY901(自带滤波)比6050好一点 python再加滤波就看着烦了
电机:建议用大扭矩的即1秒1转或者1秒2 3转的编码器电机 太大不好控制

TB6612
在这里插入图片描述
L298N
在这里插入图片描述
JY901
在这里插入图片描述
编码器电机
在这里插入图片描述
接线部分L298N与TB6612并无太大的差异,在CSDN上均能够找到。编码器电机在调速度环的时候需要插上并且用于测量脉冲值。而JY901与树莓派进行IIC通信,即只需要插SDA SCL VCC GND 即可
下面附上一张树莓派的引脚
在这里插入图片描述
前期准备工作之后,进行硬件的组装,我所组装的样子如图所示
在这里插入图片描述
因为所使用的是python,用来控制硬件并不是那么的方便。引脚需要进行导入GPIO库(自行下载)

GPIO.setmode(GPIO.BCM)
GPIO.setup(16,GPIO.OUT)
GPIO.setup(21,GPIO.OUT)
GPIO.setup(20,GPIO.OUT)

GPIO.setup(13,GPIO.OUT)
GPIO.setup(19,GPIO.OUT)
GPIO.setup(26,GPIO.OUT)
引脚初始化,用于输出pwm与正负极控制移动。

pwm = GPIO.PWM(16,25)
pwm2 = GPIO.PWM(13,25)

后续初始化编码器
GPIO.setup(A1, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(B1, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(A2, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(B2, GPIO.IN, pull_up_down=GPIO.PUD_UP)
encoder_left = 0
encoder_right = 0
A1 = 24
B1 = 23
A2 = 6
B2 = 5

后续需要编码器计算脉冲
def my_callback1(channel): #huitiao
global encoder_left
if GPIO.input(A1): #A1 B1
if not GPIO.input(B1):
encoder_left += 1
elif GPIO.input(B1):
encoder_left -= 1
#print(encoder_left)

def my_callback2(channel):
global encoder_right
if GPIO.input(A2): #A2 B2
if not GPIO.input(B2):
encoder_right += 1
elif GPIO.input(B2):
encoder_right -= 1
#print(encoder_right) #encoder shuliang weichuli

GPIO.add_event_detect(A1, GPIO.RISING, callback=my_callback1)#chufatiaojian
GPIO.add_event_detect(A2, GPIO.RISING, callback=my_callback2)#chufatiaojian

这里编码器只是进行了脉冲数量的计数,这个值是累加的,需要对这个值进行处理,不然轮子转速会越来越大。即采取定时中断的方法,让树莓派在50ms的时间就进行一次计算并且将编码器的数值清0.目前网上的教程大部分都是只有教到轮询法,并没有进一步对编码器脉冲数处理的教程。
timer_interval = 0.05
encoder_left = 0
encoder_right = 0
def timerDelay():
global encoder_left
global encoder_right
#print(encoder_left)
global t
t=Timer(timer_interval,timerDelay)
t.start()

encoder_left=0
#print(encoder_left)
encoder_right=0

t=Timer(timer_interval,timerDelay)
t.start() #sofe time

因编码器会存在跳值的现象,若不处理会导致数据错误然后轮子跑飞,因此需要在执行函数再加入一个低通滤波器,用于抑制编码器的值跳动。
EK_speed = left-(encoder_left + encoder_right) #suduhuan
EK_speed2*=0.3
EK_speed2+=EK_speed*0.1 #lvbo

到这里之后,电机以及编码器都处理完成,即到陀螺仪部分,因自带滤波,可以不再用卡尔曼滤波进行数据处理,可以参考官方的JY901例程。能够直接得到数值。

最后是PID算法。如果只是让车平衡,我所采取的是直立环并速度环的方法。先对直立环进行调试,在能够来回振荡之后对直立环进行关闭处理,单独调试速度环进行极性测试。即只给速度环的i,手向一边拧动之后,另一个轮子向拧动方向旋转则是正确的极性,反之错误。确定极性之后便可以开始调车了。因每个人熟悉的PID算法不同,因此PID就不放出来啦,最后看看实际效果

基于树莓派的自平衡小车(python语言)

如果有需要源码的进行私聊,看到会进行回复,有其他关于单片机或者树莓派的项目也可进行交流。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于树莓派(python)的平衡小车 的相关文章

  • 2020-12-28

    大数据发展必备三个条件 大数据概念的横空出世 xff0c 有赖于短短几年出现的海量数据 据统计 xff0c 互联网上的数据每两年翻一番 xff0c 而目前世界上90 以上的数据都是最近几年才产生的 当然 xff0c 海量数据仅仅是 大数据
  • Casbin

    Model Model语法 Model CONF 至少应包含四个部分 request definition policy definition policy effect matchers 如果 model 使用 RBAC 还需要添加 ro
  • STM32串口发送字符串

    在STM32串口学习中 xff0c 串口发送字符串是必不可少的 xff0c 但是 在学习过程中可能会遇到下面这个问题 xff0c 就由我来给大家分享一下吧 下面是封装的串口发送字符串的函数 xff1a void Usart SendStri
  • 树莓派4b安装Ubuntu20.04+ROS-noetic(也适用于历史版本)

    树莓派4b安装Ubuntu20 04 43 ros noetic 前言一 镜像下载二 烧录系统1 插入tf卡 xff0c 首先对tf卡进行格式化2 烧录镜像方法1 官方烧录软件 Raspberry Pi Imager方法2 Win32Dis
  • vscode 项目中安装配置webpack及其插件

    1 安装webpack 在终端运行如下的命令 xff0c 安装webpack相关的两个包 xff1a npm install webpack 64 5 42 1 webpack cli 64 4 7 2 D D表示 xff1a npm安装完
  • 【02】FreeRTOS获取10.4.6源码+移植到STM32F429步骤

    目录 1 获取FreeRTOS源码 1 1 FreeRTOS官网下载步骤 1 2FreeRTOS源码内容 1 3FreeRTOS内核文件 1 3 1Demo文件夹 1 3 2Source文件夹 2 FreeRTOS移植 2 1添加FreeR
  • M1-MAC-MYSQL安装+启动的笔记

    前言 xff1a 安装Mysql之前应该先安装JAVA JDK 1 开始安装Mysql xff08 1 xff09 下载Mysql xff1a 官网下载地址 xff1a https dev mysql com downloads mysql
  • OpenCV 与 OpenGL 的区别与关系是什么?

    老婆和老婆饼的关系 没啥关系 xff01 CV Computer Vision 和CG Computer Graphics 两者的区别和联系 CV相当于给了计算机摄像头 xff1f 让它捕获处理视觉信息的技术 xff0c 比如进行图像分类
  • 自制STLinkV2.1

    步骤 绘制原理图 layout 打板 焊接 烧录固件 更新固件 绘制原理图 layout 为了方便焊接 xff0c 元器件都放同一面 烧录固件 用现有STLink及软件STM32 ST LINK Utility为其烧录固件 软件及固件已打包
  • IAR下载报错 “Fatal error: Failed to connect to CPU Session aborted!”

    当IAR下载程序进入单片机运行时出现这个弹窗之后就再也下载不进去程序了 xff0c 报以下错误 解决办法 xff1a 这时候就需要对单片机进行复位了 xff0c 一般是先看电路有没有复位按键如果没有复位按键则需要找到复位电路然后找到电路中的
  • uboot和ubuntu ping通测试结果

    前一段时间开始研究uboot xff0c 首先遇到的问题就是下载的别人移植的uboot始终ping不通主机 xff08 Windows中VMWare虚拟机中的ubuntu10 04 xff09 这几天终于找到了一份可以配合手头开发板的移植说
  • PID算法原理及基本实现

    自动控制中 xff0c PID及其衍生出来的算法是应用最广的算法之一 各个做自动控制的厂家基本都有会实现这一经典算法 我们在做项目的过程中 xff0c 也时常会遇到类似的需求 xff0c 所以就想实现这一算法以适用于更多的应用场景 1 PI
  • linux下miniconda+torch环境配置

    几个很简单的步骤却陆陆续续配置了一整天 记录一下 部分步骤来自该博文 xff1a https blog csdn net m0 46336568 article details 127836072 下载miniconda安装包 wget c
  • 树莓派4B安装Ubuntu18.04 + vnc远程桌面

    在实验室对写程序的欲望越来越低下的时候 xff0c 学长给了一个树莓派4B xff0c 让我研究一下 xff0c 因为机器人的上位机就靠它运行 一说新东西我就来劲了 xff0c 可惜实验室里没有SD卡 xff08 旧的断掉了 xff09 x
  • 字符串简单操作(C++中的strrev函数)

    C 43 43 中有函数strrev xff0c 功能是对字符串实现反转 xff0c 但是要记住 xff0c strrev函数只对字符数组有效 xff0c 对string类型是无效的 如下题所示 xff1a Ignatius likes t
  • STC学习:蜂鸣器

    本文需要用到定时器与中断的相关内容 xff0c 已做该内容总结 xff1a STC学习 xff1a 定时器与中断 程序设计目标及程序运行效果说明 程序设计目标 xff1a 通过按下按键1来控制无源蜂鸣器的发声 程序运行效果说明 xff1a
  • STM32F103寄存器方式点亮LED流水灯

    一 点灯 点亮LED灯 xff0c 需要用到GPIO端口 为了点亮LED灯 xff0c 需要三个步骤 xff1a 打开GPIO口的时钟 初始化GPIO口 xff08 选择推挽输出 xff09 设置低电平 1 打开时钟 gpio地址 2 时钟
  • 决策树挑出好西瓜

    一 决策树 1 介绍 决策树是在已知各种情况发生概率的基础上 xff0c 通过构成决策树来求取净现值的期望值大于等于零的概率 xff0c 评价项目风险 xff0c 判断其可行性的决策分析方法 xff0c 是直观运用概率分析的一种图解法 主要
  • SVM算法与用python3+opencv3.4+dlib库编程提取人脸特征

    一 SVM算法 1 1 向量机简述 简介 xff1a 支持向量机 support vector machine SVM xff1a 是监督学习中最有影响力的方法之一 类似于逻辑回归 xff0c 这个模型也是基于线性函数wTx 43 b的 不
  • 游戏客户端编程

    一 测试能否ping通服务器 打开cmd xff0c 输入ping 10 1 230 74 游戏服务器的校园内网IP地址为 10 1 230 74 需要连接校园网 接着输入telnet xff0c 如果输入telnet提示无效命令 xff0

随机推荐

  • 基于I2C/SPI的温湿度采集与OLED显示

    一 I2c通讯协议 I2C通讯协议 Inter xff0d Integrated Circuit 引脚少 xff0c 硬件实现简单 xff0c 可扩展性强 xff0c 不需要USART CAN等通讯协议的外部收发设备 xff0c 现在被广泛
  • S3C2440 cp15协处理器详解

    2440的协处理器CP15总共有c0 c15这16个协处理器寄存器 xff0c 各自具有一定的功能定义 但总的来说 xff0c cp15主要跟以下功能有关 xff1a 1 获取device id和cache type等一些CPU相关信息 2
  • 动态网页的信息爬取

    一 Selenium介绍 Selenium是一系列基于Web的自动化工具 xff0c 提供一套测试函数 xff0c 用于支持Web自动化测试 函数非常灵活 xff0c 能够完成界面元素定位 窗口跳转 结果比较 具有如下特点 xff1a 1
  • 数字电路基础与Quartus-II入门

    一 安装Quartus II软件和Modsim仿真软件 1 安装Quartus 打开exe安装文件 一路默认next下去 xff0c 安装地址不要有中文空格路径 xff0c 最后弹出的对话框选择ok 2 破解Quartus 下载好破解器把文
  • FPGA基于DE2-115平台的VGA显示

    一 VGA简介 VGA xff08 Video Graphics Array xff09 视频图形阵列是IBM于1987年提出的一个使用模拟信号的电脑显示标准 VGA接口即电脑采用VGA标准输出数据的专用接口 VGA接口共有15针 xff0
  • 树莓派assert初步使用练习

    一 创建用户 用户密码 sudo useradd m 用户名 sudo passwd 用户名 给予用户sudo权限 切换到root用户 su 编辑配置文件 vi etc sudoers 增加配置 xff08 按i开始编辑 xff0c Esc
  • 计算机网络/谢希仁(第八版)第四章习题

    4 01 网络层向上提供的服务有哪两种 xff1f 试比较其优缺点 答 xff1a xff08 1 xff09 面向连接服务 xff08 或虚电路服务 xff09 和无连接服务 xff08 或数据报服务 xff09 xff08 2 xff0
  • Nginx正向代理任何域名的实现

    正向代理是一种代理方式 xff0c 在代理服务器和客户端之间建立连接 xff0c 并代表客户端向目标服务器发起请求 在正向代理模式下 xff0c 目标服务器并不知道请求来自代理服务器 xff0c 而是以为请求来自客户端 要在nginx中实现
  • MySQL设置允许远程连接与用户(Linux系统)

    要允许MySQL远程连接 xff0c 需要进行以下步骤 xff1a 修改MySQL配置文件 在Ubuntu上 xff0c MySQL的配置文件通常位于 etc mysql mysql conf d mysqld cnf或 etc mysql
  • 用Swift开发一个简单的iOS备忘录列表应用程序

    iOS提供了许多在应用程序里面可以调用的框架 xff0c 下面列举一些 xff1a 1 UIKit框架 xff1a 用于iOS用户界面设计 xff0c 包括按钮 标签 文本框 表格等控件 2 Foundation框架 xff1a 包含了iO
  • 【MATLAB】SIMULINK 基本模块的使用

    以下是使用SIMULINK构建基本通信系统模型的步骤 xff1a 1 打开MATLAB xff0c 点击SIMULINK图标 xff0c 创建一个空模型 2 从库浏览器中拖拽 信号发生器 Signal Generator 模块和 示波器 S
  • 【MATLAB】构建 SIMULINK 子系统和模块的封装

    构建SIMULINK的子系统可以使用自建模块进行封装 xff0c 帮助文档编写 xff0c 并掌握模型空间与MATLAB命名空间的交互 具体步骤如下 xff1a 1 创建自定义模块 在Simulink中 xff0c 可以使用Subsyste
  • rmmod时提示 rmmod : chdir(/lib/modules): No such file or directory

    insmod后 xff0c 使用lsmod查看 xff0c 如果成功则可以看到刚才安装的module 此时如果修改了module代码要重新安装 xff0c 则需要先rmmod刚才安装的模块才能重新安装 xff0c 否则在insmod时会提示
  • 无源蜂鸣器按特定频率发出相对应的音调

    蜂鸣器是什么 xff1f 蜂鸣器是什么呢 xff1f 相信大家在做项目中肯定多多少少都会用到蜂鸣器 xff0c 蜂鸣器呢是一种一体化结构的电子讯响器 xff0c 采用直流电压供电 xff0c 广泛应用于计算机 打印机 复印机 报警器 电子玩
  • 树莓派上安装Pytorch

    没有踩坑和报错 xff0c 浅浅记录以下 将torch 1 7 0a0 cp37 cp37m linux armv7l whl和torchvision 0 8 0a0 43 45f960c cp37 cp37m linux armv7l w
  • FreeRTOS学习记录(3)——任务创建与启动总结

    对FreeRTOS的使用过程进行精简后会发现 xff0c 它的整个过程其实非常简单 xff0c 首先创建任务 xff0c 其次登记任务 xff0c 根据任务所登记的位置不断开始执行任务 下面进行详细的解释 创建任务 xff0c 这个过程中会
  • 执行HQL直接被退出:Remote side unexpectedly closed network connection

    执行HQL直接被退出 xff1a Remote side unexpectedly closed network connection 文章目录 执行HQL直接被退出 xff1a Remote side unexpectedly close
  • 使用mybatisplus要导入的依赖

    lt dependency gt lt groupId gt com spring4all lt groupId gt lt artifactId gt spring boot starter swagger lt artifactId g
  • Hadoop中HDFS的读写流程详解

    一 HDFS写流程示意图 xff1a xff08 1 xff09 客户端通过Distributed FileSystem模块向NameNode请求上传文件 xff0c NameNode检查目标文件是否已存在 xff0c 父目录是否存在 检查
  • 基于树莓派(python)的平衡小车

    目前普遍是STM32或者51来实现平衡小车 xff0c 基于树莓派的平衡小车少见 xff08 因为树莓派适合用于数据处理 xff09 但有部分同学的毕设选择了用树莓派来做平衡小车的 xff0c 接下来分享一下基于树莓派的平衡小车如何完成 驱