三轴加速度传感器和六轴惯性传感器_[算法][三轴、六轴、九轴传感器算法分析] 1、分享一个三轴加速计matlab动态可视化脚本...
一、有啥用
这里用的是LIS3DH三轴加速计,输出为X、Y、Z轴的加速度,通过串口连接电脑,电脑里运行matlab脚本通过串口实时获取数据并做可视化显示。
这里虽然是针对LIS3DH的,其实稍作修改即可适用其他型号的运动传感器,如:MPU6050,甚至是其他格式的串口数据。
二、具体分析
首先通过串口传来的数据格式为:6位X轴加速计整数+空格+6位Y轴+空格+6位Z轴+换行
printf("%6d %6d %6d\r\n", data.AXIS_X/16, data.AXIS_Y/16, data.AXIS_Z/16);
那么matlab如何读取串口并对其数据进行可视化展示的呢?
serial.m
1 %http://blog.csdn.net/qwertyuj/article/details/12108155%
2 clc;3
4 globalt;5 globalx;6 global ii;%数组下标7
8 global m_x;%3轴加速度9 globalm_y;10 globalm_z;11
12 global d_a;%差分13
14 t = [0];15 ii = 0;16 x = -100;17
18 m_x = [0];19 m_y = [0];20 m_z = [0];21 d_a = [0];22
23 subplot(1,2,1);%将x,y,z轴加速度图像绘制在整个1X2界面中的第1格
24 p = plot(t,m_x,t,m_y,t,m_z,'EraseMode','background','MarkerSize',5);%初始化图像,图像中有3条线(t,m_x),(t,m_y),(t,m_z)
25 axis([x-200 x+200 -1600 1600]);%设置显示窗口,前两个是x轴的最小、最大极限;后两个是y轴最小、最大极限
26 grid on;%绘制网格(如果不加这句就不绘制网格)27 subplot(1,2,2);28 q = plot(t,d_a,'EraseMode','background','MarkerSize',5);%同理,这里只有一条线29 axis([x-200 x+200 -1600 1600]);30 grid on;31
32 %%
33
34 try
35 s=serial('com5');36 catch
37 error('cant serial');38 end
39 set(s,'BaudRate', 38400,'DataBits',8,'StopBits',1,'Parity','none','FlowControl','none');%设置串口属性等40 s.BytesAvailableFcnMode = 'terminator';41 s.BytesAvailableFcn = {@callback,p,q};%设置串口回调函数,串口有数据传输过来就会转到回调函数,p、q为参数42
43 fopen(s);%打开串口44
45 pause;%按任一按键结束46 fclose(s);47 delete(s);48 clear s49 close all;50 clear all;
该文件是主文件,首先声明各种全局变量(matlab全局变量其他函数使用时需要用global声明),然后对这些全局变量初始化,接着实例化两个绘图窗口(第一个窗口3条线——分别是x、y、z三轴的加速度随时间变化曲线;第二个窗口一条线——是差分随时间变化曲线)。34行之后为设置串口、打开串口,接下来动态绘图所有操作均在回调函数中进行了。
来看看回调函数
callback.m
1 %%
2 function callback(s,BytesAvailable,p,q)3
4 global t; %引用全局变量(4-12行)
5 global x;
6 global ii;%数组下标
7
8 global m_x;%3轴加速度
9 global m_y;
10 global m_z;
11
12 global d_a;%差分13
14 out = fscanf(s);%读取串口数据,转换为num数据存储在data中
15 data = str2num(out);16
17 t = [t ii];%数组插入最新数据在最后面
18 m_x = [m_x data(1,1)];
19 m_y = [m_y data(1,2)];
20 m_z = [m_z data(1,3)];21
22 d_a = [d_a abs(m_x(1,ii+2)-m_x(1,ii+1))+abs(m_y(1,ii+2)-m_y(1,ii+1))+abs(m_z(1,ii+2)-m_z(1,ii+1))];23
24
25 set(p(1), 'XData',t,'YData',m_x(1,:));%用新数据更新图
26 set(p(2), 'XData',t,'YData',m_y(1,:));
27 set(p(3), 'XData',t,'YData',m_z(1,:));
28
29 set(q(1), 'XData',t,'YData',d_a(1,:));30
31 drawnow %重新绘制图,并移动两个图的窗口,使之呈现运动效果
32 x = x + 1;
33 subplot(1,2,1)
34 axis([x-200 x+200 -1600 1600]);
35 subplot(1,2,2)
36 axis([x-200 x+200 -1600 1600]);
37 ii=ii+1;38 end
每次串口有数据均会触发回调函数。在回调函数中,首选获取串口流,并将串口数据流转换为data数组。接着用读取的新的data数据插入到老的数组(17~22行)。第25~29行则是用新的3+1个曲线的数据更新图。第31行之后的负责移动视窗,使之呈现出数据在滚动的效果。
三、最终效果
四、楼主讲话
好长时间没写文章了!就拿这个水水的小工具作为开篇~
三轴加速度传感器和六轴惯性传感器_[算法][三轴、六轴、九轴传感器算法分析] 1、分享一个三轴加速计matlab动态可视化脚本...相关推荐
- 三轴加速度计测量值生成算法matlab,[算法][三轴、六轴、九轴传感器算法分析] 1、分享一个三轴加速计matlab动态可视化脚本...
一.有啥用 这里用的是LIS3DH三轴加速计,输出为X.Y.Z轴的加速度,通过串口连接电脑,电脑里运行matlab脚本通过串口实时获取数据并做可视化显示. 这里虽然是针对LIS3DH的,其实稍作修改即 ...
- mf模型 svd++_算法小板报(六)——初探MF(矩阵分解)和FM模型
一.简介 矩阵分解(Matrix Factorization,MF)是推荐系统中非常经典的一个算法,虽然现今工业界直接使用的较少,但其背后蕴含的编码降维思想,得以广泛应用于推荐领域之中.本文则主要来梳 ...
- 谷粒商城三阶段课件_苏科版初中物理九年级上册二、变阻器公开课优质课课件教案视频...
课题: 14.2变阻器 教学目标: 1.知道滑动变阻器的构造及工作原理. 2.能画出滑动变阻器的结构示意图和符号. 3.会正确连接和使用滑动变阻器. 4.了解生活中变阻器的一些应用. 教学重点.难点: ...
- 【Java语言】请输入任意一个三位数,输出个位 , 十位 , 和百位,输入:123,输出:3,2,1
package com.njwbhz.path;import java.util.Scanner;public class Test13 {/*** @author FairyKunKun* @sin ...
- 三轴加速度传感器和六轴惯性传感器_六轴加速度传感器Beacon
六轴加速度传感器Beacon 一.产品简介: 六轴加速度传感器Beacon是重庆金瓯科技发展有限责任公司基于Beacon技术研发的新一代传感器产品.该产品可以将采集的加速度数据信息通过Beacon广播 ...
- 三轴加速度传感器和六轴惯性传感器_美泰产品推介MSV3100A三轴加速度传感器
1 产品介绍 MSV3100A三轴加速度传感器 MSV3100A是一款三轴向模拟输出的MEMS加速度传感器.传感器由三个相互正交的微加速度计和信号变换电路组成.能够承受高达10,000g的冲击载荷和恒 ...
- shineblink ADXL345传感器测量三轴加速度/倾斜角
ADXL345传感器测量三轴加速度/倾斜角 一.本例程实现功能 二.基本概念 三. 传感器参数配置描述 四.接线图 六.完整代码 七.代码运行结果 八.测量倾斜角 九.ADXL345传感器的低功耗休眠 ...
- STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- STM32学习值传感器篇——MPU6050六轴加速度传感器
这个传感器整体来说不难只要将模拟iic的时序写对基本问题不大 剩下的驱动文件 按照我介绍的加进去就可以实现了,还是有官方算法的好啊,直接用就完事了,很方便,节省了不少代码开发时间, 注意mpu6050 ...
最新文章
- python pillow库_python pillow模块用法
- 数据库数据用Excel导出的3种方法
- 一个大数据排序问题的巧妙解法
- Python基础知识(第十一天)
- 用Perl做个简单”下载者病毒”
- Android 开发笔记___初级控件之实战__计算器
- 工业用微型计算机(21)-指令系统(17)
- 【小游戏】有意思的小游戏集合
- java生成首字母拼音简码的总结
- Java BufferedReader reset()方法及示例
- 容器编排技术 -- Kubernetes kubectl 命令表
- 内存分配(malloc()和free())
- c语言输入括号配对成功输出1,用数组实现括号配对检查,输出不正确,请大家指点解决办法...
- python全局变量的修改 线程共享全局变量
- 完成图书管理系统类图的绘制_如何在线免费绘制各类图形
- 计算机怎么调整桌面图标的大小,电脑显示器屏幕图标大小如何设置_电脑显示屏内图标大小怎么调...
- BZOJ 3162 独钓寒江雪
- 知乎周源微信_每周源代码34-F#的兴起
- duilib最新版地址
- 生态脆弱性评价的线上软件(在线计算)
热门文章
- boost::gil模块实现打包像素格式的测试程序
- GDCM:gdcm::StreamImageWriter的测试程序
- GDCM:使用Stream Image Writer伪造图像的测试程序
- Boost:BOOST_ASSERT扩展的用法测试程序
- ITK:遮盖一张图像给定标签图
- ITK:二进制图像的莫拉尔距离图
- VTK:几何对象之ParametricSuperToroid
- OpenCV形态morphology的实例(附完整代码)
- OpenCV使用MultiTracker
- Qt中的JSON支持