查看“自平衡小车/zh”的源代码
←
自平衡小车/zh
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{| style="width: 800px;" |- | ==概述== *项目名称:Microduino自平衡车 *目的:制作一台可以用遥控板控制的自平衡机器人小车 *难度:中 *耗时:2小时 *制作者: *简介: 两轮自平衡小车是一个集多种功能于一体的综合系统,是自动控制理论与动力学理论及技术相结合的研究课题,其关键问题是在完成自身平衡的同时,还能够适应各种环境下的控制任务。本次教程我们使用Microduino产品模块快速搭建一个可以用遥控板控制的自平衡机器人小车,玩家可以迅速上手,并且看到小车运动和平衡的效果,玩家们可以在制作结束后,继续更深一步的智能控制部分的研究。 ==材料清单== *Microduino设备 {|class="wikitable" |- |模块||数量||功能 |- |[[Microduino-Core+/zh]]||1||核心板 |- |[[Microduino-USBTTL/zh]] ||1||下载程序 |- |[[Microduino-nRF24/zh]] ||1||无线通信 |- |[[Microduino-Robot/zh]] ||1||驱动连接地板 |- |[[Microduino-Stepper/zh]] ||2||驱动步进电机 |} *其他设备 {|class="wikitable" |- |模块||数量||功能 |- |2.4G天线||1||2.4G通讯 |- |固定支架||1||固定支撑 |- |尼龙螺丝||4||固定 |- |尼龙螺母||12||固定 |- |电池盒 ||1||装载电池 |- |电池 ||2||供电 |- |Micro-USB数据线 ||1||串口通信,下载程序 |- |车轴 ||2||连接车轮 |- |车轮子 ||2||结构 |- |步进电机 ||2||驱动车轮 |} *Joypad材料 {|class="wikitable" |- |模块||数量||功能 |- |[[Microduino-Core]]||1||核心 |- |[[Microduino-nRF24]]||1||无线通讯 |- |[[Microduino-Joypad]]||1||遥控器 |- |[[Microduino-TFT]]||1||显示 |- |[[Microduino-USBTTL]]||1||下载程序 |- |锂电池 ||1||供电 |- |亚克力面板||1||面板 |- |尼龙柱 ||4||固定 |- |长尼龙螺丝 ||4||固定 |- |短尼龙螺丝 ||4||固定 |- |尼龙螺母 ||4||固定 |- |海绵板 ||1||固定 |} ==实验原理== *PID原理 PID在自动控制领域有着极其重要的作用,作为最早实用化的控制技术已经有70多年的历史,近几年一些创客们自制的一些很酷的东西,如:四轴飞行器,自平衡车等等都离不开它的身影。 首先了解什么是PID。PID实指“比例proportional”、“积分integral”、“微分derivative”,如果我们要求被控制的对象最终趋于一个稳定的结果,一般就可以使用PID算法。 假设说,有一辆速度为1m/s的小车,我们要求他的速度改变为5m/s,要完成这样的一件事,我们必须要有: *小车驱动装置(用程序控制它输出多大的电压,电压决定驱动的马力); *被驱动器控制的部分(即小车); *检测当前速度的装置(当前速度与目标速度的差称为误差); 本来,我们可以给小车一个驱动力让小车加速,直到检测到小车速度达到5m/s,撤去驱动力。但是,这样做会带来几个问题: 1)当小车速度达到5m/s时,从装置检测到这个速度,通知控制器,让控制器改变输出的电压,这一个过程需要耗费一定时间,在这个时间里面,小车速度可能增加了不少。 2)撤去驱动力后,外界条件如摩擦会让小车速度进一步改变。 然而,PID算法可以在一定误差内解决这些问题。 使用PID算法时,大致是这样的。每一个采样周期,通过速度检测装置获得当前速度,传入程序,通过程序计算得到电压控制小车得到新速度。下一个采样周期又把新速度传入,获得新电压,再传入速度,再获得电压,如此反复。 PID算法的关键,是如何根据当前得到的速度值,输出一个“恰当”的电压,以致小车最终能够趋于稳定。 PID算法采用比例,积分,微分(Proportion Integral Differential)三种方法进行控制。三种方法都有自己对应的一个常量(pconst,iconst,dconst)。这三个变量都需要在实验中多次尝试得出。用数学公式表达PID算法如下图所示: 此处:e = 期望值 – 输入值 [[File:PIDtheory.jpg||600px|center|thumb]] 平衡车之所以可以自己掌握平衡,首先通过Microduino-10DOF模块的加速度和陀螺仪测出相应的姿态数据,然后利用kalman滤波算法得出当前平衡车的角度。平衡的角度是180度,如果测出的角度偏离180,PID算法会调整输出相应的PWM值给电机,从而保持小车平衡。 PID原理有点像锅炉房里烧锅炉,首先定下来锅炉的恒定温度,比如26摄氏度,锅炉房里的墙上有一个温度计,能够实时测得锅炉的实时温度。锅炉房里通常有个老大爷时不时(每十分钟看一次)的看着墙上的温度计,如果温度高了就给锅炉降温,低了就给锅炉升温。如果让一个没有经验的年轻小伙子来管理锅炉的温度,可以想象温度表的值会上下浮动的,有经验的老大爷会把这个浮动降到最低。其实PID就是这个烧锅炉的例子,在代码中就有这个故事的影子: 1)规定的26度就是setpoint 2)当前的温度就是CurrentAngle 3)实际值与26度的偏差就是error 4)没有经验的小伙子有点像PID中的P 5)有经验的老大爷相当于PID了 6)每十分钟看一次相当于PID计算的周期时间 PID的主要代码: <source lang="cpp"> // PD的实施。 DT是毫秒 float stabilityPDControl(float DT, float input, float setPoint, float Kp, float Kd) { float error; float output; error = setPoint - input; // Kd的两部分实施 //仅使用输入(传感器)的一部分而不是设定值输入(T-2)最大的一个 //而第二个使用该设定值 output = Kp * error + (Kd * (setPoint - setPointOld) - Kd * (input - PID_errorOld2)) / DT; //Serial.print(Kd*(error-PID_errorOld));Serial.print("\t"); PID_errorOld2 = PID_errorOld; PID_errorOld = input; // 误差为Kd值是唯一的输入组件 setPointOld = setPoint; return(output); } //P控制实现。 float speedPControl(float input, float setPoint, float Kp) { float error; error = setPoint - input; return(Kp * error); } </source> 本套件利用陀螺仪和加速度传感器(Microduino-10DOF/zh)来检测车体态的变化,并利用步进电机控制核心(Microduino-Stepper/zh),精确地驱动电机进行相应的调整,以保持系统的平衡。 [[File:PIDtheory1.jpg||600px|center|thumb]] *主要传感器 [[Microduino-10DOF]] ==文档== ==调试过程== 将Microduino-Core+与Microduino-USBTTL叠加(无上下顺序),通过USB数据线与电脑连接起来 [[File:download1.jpg||600px|center|thumb]] 确认你搭建了Microduino的开发环境,否则参考附录1-Arduino IDE安装指导。 [[File:Gettingstarted.jpg||600px|center|thumb]] 打开Arduino IDE编程软件,点击 【文件】->【打开】 [[File:Dl1.jpg||600px|center|thumb]] 浏览到项目程序地址,点击“Joypad_Balance_Reception.ino”程序打开 [[File:Balancecaropen1.jpg||600px|center|thumb]] [[File:Balancecaropen2.jpg||600px|center|thumb]] 点击“工具”,在板选项里面选择板卡(Microduino-Core+),在处理器选项里面选择处理器(Atmega644pa@16M,5V),再在端口选项里面选择正确的端口号,然后直接烧录程序 [[File:WiFiStationopen4.jpg||600px|center|thumb]] *平衡车骨架搭建 [[File:balancecar1.jpg||600px|center|thumb]] [[File:balancecar2.jpg||600px|center|thumb]] [[File:balancecar3.jpg||600px|center|thumb]] 按下图步骤将步进电机装在骨架上 [[File:balancecar4.jpg||600px|center|thumb]] [[File:balancecar5.jpg||600px|center|thumb]] [[File:balancecar6.jpg||600px|center|thumb]] 再用 [[File:balancecar7.jpg||600px|center|thumb]] [[File:balancecar8.jpg||600px|center|thumb]] 安装电池和Microduino-Robot底板 [[File:balancecar9.jpg||600px|center|thumb]] [[File:balancecar10.jpg||600px|center|thumb]] [[File:balancecar11.jpg||600px|center|thumb]] [[File:balancecar12.jpg||600px|center|thumb]] *注意:装上电池之前请确认Microduino-Robot底板上的开关位于”off”位置 之后将 [[File:balancecar13.jpg||600px|center|thumb]] [[File:balancecar14.jpg||600px|center|thumb]] 把用到的模块叠加起来。 *Microduino-10DOF *Microduino-nRF(带天线) *Microduino-Core+ [[File:balancecar15.jpg||600px|center|thumb]] 再将叠加好的模块叠加到Microduino-Robot底板上 [[File:balancecar16.jpg||600px|center|thumb]] 将Microduino-Stepper模块叠加到Microduino-Robot底板上 [[File:balancecar17.jpg||600px|center|thumb]] 将电机线一头接到步进电机接口上,另一头接到Microduino-Stepper的电机接口上 [[File:balancecar18.jpg||600px|center|thumb]] 完成这一步平衡车就搭建完成了 *Joypad遥控板的搭建与调试 将Microduino-Core与Microduino-USBTTL叠加(无上下顺序),通过USB数据与电脑连接起来。 [[File:download1.jpg||300px|center|thumb]] 打开Arduino IDE编程软件,点击【文件】->【打开】 [[File:Dl1.jpg||300px|center|thumb]] 浏览到项目程序地址,点击“Joypad_RC_2.3.ino”程序打开。 [[File:Joypadopen.jpg||300px|center|thumb]] [[File:Joypadopen1.jpg||300px|center|thumb]] 点击【工具】,在板选项里面选择板卡(Microduino-Core),在处理器选项里面选择处理器(Atmega328p@16M,5V),再在端口选项里面选择正确的端口号,然后直接烧录程序。 [[File:Dl3.jpg||300px|center|thumb]] *安装Joypad 将Microduino-TFT安装在Microduino-Joypad面板上 [[File:Joypadgather1.jpg||300px|center|thumb]] 将尼龙螺丝安装在Microduino-Joypad上,并且将底面板粘贴在Microduino-Joypad底部 [[File:Joypadgather2.jpg||300px|center|thumb]] 将Microduino-TFT与Microduino-Joypad通过转接线连接起来 [[File:Joypadgather3.jpg||300px|center|thumb]] 将锂电池连接到底板上,注意正负极别接反了,板子背面标注了正负极 [[File:Joypadgather4.jpg||300px|center|thumb]] 将底板和面板用尼龙螺丝固定好 [[File:Joypadgather5.jpg||300px|center|thumb]] 可以打开电源开关,观察供电是否正常 [[File:Joypadgather6.jpg||300px|center|thumb]] 将下载好程序的core还有nRF24板卡放在Joypad底板上,完成这一步Joypad的搭建就完成了 *自平衡小车和Joypad测试 Joypad操作说明 [[File:Joypadtest.jpg||300px|center|thumb]] *左上边是油门控制开关,打开(拨到上面),才能进行控制,你可以摇动摇杆,观察屏幕的变化。 *右边开关是精度调整开关,开关拨到上面可以最大幅度控制,否则只能小幅度控制了,小幅度有助于稳定控制。 *左边摇杆本次未使用。 *右边摇杆在垂直方向上控制前后方向移动,往上向前,往下向后,在水平方向上控制左右方向移动。 Joypad开机设置 [[File:Joypadtest1.jpg||300px|center|thumb]] 打开遥控器电源开关,按下复位按键(左边USB接口右边那个)进入系统,请在4S内按下【key1】按键,进入遥控器校准和控制选择模式。 360度最大幅度旋转两个摇杆,遥控板会读入摇杆的位置数据,摇动至示数不再变化即可 [[File:Joypadtest2.jpg||300px|center|thumb]] 选择控制模式,可以通过【key3】按键来选择是控制四轴飞行器(Quad.)还是机器人(Robot),Robot模式可控制自平衡车和BOXZ mini,黑色表示选中。因此我们需要选择Robot模式。还可以通过【key4】按键来选择是否是体感控制模式,如果选择体感模式,你必须叠加Microduino-10DOF模块,选择“MPU ON”。如果是摇杆控制模式,选择“MPU OFF”。 这次搭建没有使用10DOF模块,因此选择MPU OFF模式; [[File:Joypadtest3.jpg||300px|center|thumb]] 选择完成后,通过【key2】按键退出配置,进入操作 [[File:Joypadtest4.jpg||300px|center|thumb]] 将左上边控制开关打开(拨到上面),才能进行控制,你可以摇动摇杆,观察屏幕的变化 [[File:Joypadtest5.jpg||300px|center|thumb]] 右边开关是幅度调节模式,开关拨到上面可以最大幅度控制Robot,否则只能小幅度控制。如果使用小幅度控制小车,右边摇杆拨到最大位置,小车速度也只能小范围变化,这样有助于稳定控制 [[File:Joypadtest6.jpg||300px|center|thumb]] 当启动小车时,只需要用到右边的摇杆,摇杆的方向和平衡车的方向一致,你可以尝试摇杆控制是否正确。 测试通过后,就可以打开平衡车上Microduino-Robot底板上的电源开关,拨到ON(左边),如果可以看到核心板上的红色led亮,说明供电正常。这样制作就完成了,可以愉快的玩耍了 [[File:Joypadtest7.jpg||300px|center|thumb]] ==注意问题== *下载程序时候最好只叠加core(core+)和USBTTL,虽然本次搭建涉及的nRF24不会引起冲突,但是别的通信模块有时会造成串口冲突,养成好习惯。 *Core+要叠在nRF24,USB的底下,紧贴ROBOT板。 *锂电池正负极别接错了,否则会烧坏电路。 *调试好后,实际运行时不要使用USB供电,供电电压不足,请使用电池 ==程序说明== ==视频==
返回至
自平衡小车/zh
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
Welcome
首页
创客大赛
大赛详情
3D打印
安装月球车
图形化编程
操控月球车
升级月球车
编程工具下载
软件下载
Arduino
Processing
Mixly
Scratch
模块套件
Microduino 102
mCookie 102
mCookie 202
mCookie 302
IBC
其他
应用套件
四轴飞行器
平衡车
小车CUBE
音乐播放器
刷卡音乐播放器
wifi气象站
彩虹音乐触摸灯
分贝检测仪
迎门汇报
LED点阵时钟
LED点阵屏幕
硬件
mCookie
Sensor
Microduino
MicroWrt
MicroNux
MicroRobot-Core
MicroRobot-CoreESP
ideaBoard
ideaBox
MicroMV
MicroAI
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息