Arduino mega2560+MPU6050利用加速度值控制舵机-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10506|回复: 10

Arduino mega2560+MPU6050利用加速度值控制舵机

[复制链接]
发表于 2018-9-7 13:06 | 显示全部楼层 |阅读模式
本帖最后由 晨曦的雨露222 于 2018-9-7 13:26 编辑

学习了几天时间,慢慢了解MPU6050这个6轴的姿态模块,现在整理一下这个模块与Arduino的结合使用方法!(如有错误麻烦请指出,谢谢!)
摘要:随着Arduino开发板的普及,许多朋友希望能够自己制作基于MPU6050的控制系统,但由于缺乏专业知识而难以上手。此外,MPU6050的数据是有较大噪音的,若不进行滤波会对整个控制系统的精准确带来严重影响。
MPU6050芯片内自带了一个数据处理子模块DMP,已经内置了滤波算法,在许多应用中使用DMP输出的数据已经能够很好的满足要求。关于如何获取DMP的输出数据,我将在以后的文章中介绍。本文将直接面对原始测量数据,从连线、芯片通信开始一步一步教你如何利用Arduino获取MPU6050的数据并进行卡尔曼滤波,最终获得稳定的系统运动状态。一、应用:
运动感测游戏
现实增强、电子稳像、光学稳像、行人导航器
“零触控”手势用户接口姿势快捷方式

下面可以看一下以下几个图片,这样你也许会了解一些!

第一张是MPU6000与MPU6050芯片的比较!





第二张是MPU6000与MPU6050芯片的最小驱动电路的连接!

二、Arduino与MPU-6050的通信
MPU6050的数据接口用的是I2C总线协议,因此我们需要Wire程序库的帮助来实现Arduino与MPU6050之间的通信。请先确定是否安装Wire库,Wire库的官方文档(http://www.arduino.cc/en/Reference/Wire)
这是Arduino uno与mpu6050接线图(紫色线为中断线,可不接SDA接口对应的是A4引脚,SCL对应的是A5引脚。
MEGA 2560开发板上20(SDA)引脚21(SCL)与mpu6050相对应的引脚对接即可
MPU6050需要5V的电源,可由UNO板直接供电。
111813itbp99cwbfyzjspy.jpg
二、我采用的是数字舵机DS3115 DS3109 数码舵机 反应灵敏,行程大,零盲区。绝非模拟 , 我们已经用4PL数码模式亲自使用测试过。
型号S3115MG 提供给机器人使用
重量:60g
尺寸:40*20*40.5mm
速度:15KG 0.16sec/60° 4.8-7.2V (工作电压)
堵转扭矩: 15kg/cm 4.8-7.2V
工作电压:4.8-7.2V
工作电流:>600mA
线长:32cm
与Futaba,JR,SANWA,Hitec 等遥控系统兼容.
控制特性
控制方式:改变脉冲宽度
工作频率:50-330Hz
可控角度:180°(脉宽在500-2500us可满范围变化时)
中立位置:1500us
脉宽范围:500-2500us
死区宽度:3us
数字(数码)舵机和模拟舵机的区别


字舵机(Digital Servo)和模拟舵机(Analog
Servo)在基本的机械结构方面是完全一样的,主要由马达、减速齿轮、控制电路等组成,而数字舵机和模拟舵机的最大区别则体现在控制电路上,数字舵机
控制电路比模拟舵机的多了微处理器和晶振。不要小看这一点改变,它对提高舵机的性能有着决定性的影响。
wKhQxFhh_VSEec1EAAAAAMDV2Ec791.jpg..400x400.jpg

三、实现代码
以下代码在Arduino软件1.6.9版本中编译、烧写以及测试通过[code]
#include<Servo.h>
Servo analogservo;

#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"

MPU6050 accelgyro;
int16_t ax, ay, az;
int16_t gx, gy, gz;
//int value;//定义一个整形变量用于存放读取到的信号值
int16_t value;//定义一个整形变量用于存放读取到的信号值

bool blinkState = false;
void setup() {
      Wire.begin();
      Serial.begin(38400);
      Serial.println("Initializing I2C devices...");
      accelgyro.initialize();
      Serial.println("Testing device connections...");
      Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
      analogservo.attach(7);//舵机连接在7号脚
}
void loop() {
      accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
      Serial.print("a/g:\t");
      Serial.print(gx/131);   
      Serial.print("\t");   

      value=91+gx/131;  
      Serial.println(value);  

      analogservo.write(value);
      blinkState = !blinkState;
}试验结果:只是利用一个x轴的加速度值

串口可以查看到的试验结果

串口可以查看到的试验结果


mpu6050控制舵机——X轴升级(加速度) - 副本.zip (42.35 KB, 下载次数: 204)








发表于 2018-9-18 08:55 | 显示全部楼层
有滤波算法吗

点评

有的  发表于 2018-9-18 13:47
 楼主| 发表于 2018-9-18 13:45 | 显示全部楼层

有点的
发表于 2019-2-9 13:13 | 显示全部楼层
兄弟 你好我在做个小东西和你用的模块一样 可否帮助一下我的微信号13657419330谢谢
发表于 2019-2-15 09:16 | 显示全部楼层
顶一下,之前用这个模块的时候得到的加速度变化实在太大,学到了。
发表于 2019-7-12 10:14 | 显示全部楼层
这个没有滤波算法吧
发表于 2019-12-22 05:48 来自手机 | 显示全部楼层
我想问问我要用他们两个控制我的数字舵机工作
发表于 2019-12-26 06:05 来自手机 | 显示全部楼层
用这种可以吗?第一二张用的是编码器马达第三张用的是PWM信号!那种可以,怎么连,
A6E91EE1-DB87-49BB-8603-115834F8C41B.png
DC9C24AB-87F7-4E11-B97A-7BA5E76C847B.jpeg
A978E04B-8697-4FF6-A7B0-BEE50C976543.png
发表于 2020-2-16 18:55 | 显示全部楼层
楼主最后实现的效果是什么样子的啊?看代码是读取到mpu角度之后,舵机旋转到对应的角度
发表于 2020-6-2 17:31 来自手机 | 显示全部楼层
楼主还在吗?有技术性请教你
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 11:42 , Processed in 0.094136 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表