使用Processing 软件, 通过 arduino 输入 电子罗盘的数据,通过PC端进行校准,程序如下:

import processing.serial.*;

Serial myPort;
ArrayList<Float> xList = new ArrayList<Float>();
ArrayList<Float> yList = new ArrayList<Float>();
ArrayList<Float> zList = new ArrayList<Float>(); float minX,maxX;
float minY,maxY;
float minZ,maxZ;
float moX,moY;
float count; void setup() {
size(600, 600, P3D);
myPort = new Serial(this,"COM5", 38400);
myPort.bufferUntil(10);
} void draw() {
background(100);
float midX = (minX+maxX)/2;
float midY = (minY+maxY)/2;
float midZ = (minZ+maxZ)/2;
if (mousePressed) {
moX= mouseX;
moY= mouseY;
} //camera(moX,moY, (height/2) / tan(PI/5), midX, midY,midZ, 0, 1, 0);
camera(moX,moY,(height/2) / tan(PI/5), width/2, height/2,0, 0, 1, 0);
translate(width/2, height/2, -100);
strokeWeight(2); // Default
stroke(255);
noFill(); //x
line(midX-100,midY,midZ,midX+100,midY,midZ);
//y
line(midX,midY+100,midZ,midX,midY-100,midZ);
//z
line(midX,midY,midZ-100,midX,midY,midZ+100); //box(200); for(int i = 0;i<xList.size();i++){
point(xList.get(i),yList.get(i),zList.get(i));
}
println(count);
println("midX:"+midX+","+"midY"+midY+","+"midZ:"+midZ); } void serialEvent (Serial myPort)
{ float mX = 0;
float mY = 0;
float mZ = 0;
String inString = myPort.readStringUntil(10); if (inString != null)
{
inString = trim(inString);
String[] list = split(inString, ',');
if(list.length ==4){
count = float(list[0]);
mX = float(list[1])/100;
mY = float(list[2])/100;
mZ = float(list[3])/100; //-------------------------
if(mX < minX){
minX = mX;
} if(mX > maxX){
maxX = mX;
} //----------------------------
if(mY < minY){
minY = mY;
} if(mY > maxY){
maxY = mY;
}
//----------------------------
if(mZ > maxZ){
maxZ = mZ;
}
if(mZ < minZ){
minZ = mZ;
} xList.add(mX);
yList.add(mY);
zList.add(mZ);
} }
}

  

arduino 代码如下:

   int mx,my,mz;
:
:
: 略 Serial.print(count);
Serial.print(",");
Serial.print(mx); //Inclination X axis (as measured by accelerometer)
Serial.print(",");
Serial.print(my); //Inclination X axis (estimated / filtered)
Serial.print(",");
Serial.print(mz); //Inclination X axis (estimated / filtered) Serial.println("");
count++;

  

PC端获取的效果如下图:

最终坐标系完全落入球内表示校准成功.

视频:

Processing 电子罗盘校准(以 MPU9250为例)的更多相关文章

  1. arduino 串口实时绘图(以mpu9250为例)

    兴趣之余,利用晚上的时间,做一些个人兴趣方面的开发. 之前没接触过 arduino, 无意之中买了个开发板做一些小开发, 这里利用python 读取 mpu9250 数据实时绘图. 下位机代码 C++ ...

  2. Storm 系列(一)基本概念

    Storm 系列(一)基本概念 Apache Storm(http://storm.apache.org/)是由 Twitter 开源的分布式实时计算系统. Storm 可以非常容易并且可靠地处理无限 ...

  3. Image Processing and Analysis_8_Edge Detection:Statistical edge detection_ learning and evaluating edge cues——2003

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

  4. Image Processing and Computer Vision_Review:Local Invariant Feature Detectors: A Survey——2007.11

    翻译 局部不变特征探测器:一项调查 摘要 -在本次调查中,我们概述了不变兴趣点探测器,它们如何随着时间的推移而发展,它们如何工作,以及它们各自的优点和缺点.我们首先定义理想局部特征检测器的属性.接下来 ...

  5. 转债---Pregel: A System for Large-Scale Graph Processing(译)

    转载:http://duanple.blog.163.com/blog/static/70971767201281610126277/   作者:Grzegorz Malewicz, Matthew ...

  6. 【WP 8.1开发】电子罗盘

    罗盘,估计也不用我过多介绍,学过初中物理的都知道,不管是指南针,还是指北针,其本质就是用来辨别方向的. 操作电子罗盘伟感器也不复杂,主要就是两个角度: 1.当前方向与磁北的夹角: 2.当前方向与地北的 ...

  7. DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例)

    转自:http://www.360doc.com/content/14/0116/16/15528092_345730642.shtml 以及参考网络. 首先,我们先了解一下内存的大体结构工作流程,这 ...

  8. MapReduce的模式、算法和用例

    英文原文:<MapReduce Patterns, Algorithms, and Use Cases> https://highlyscalable.wordpress.com/2012 ...

  9. [翻译]MapReduce: Simplified Data Processing on Large Clusters

    MapReduce: Simplified Data Processing on Large Clusters MapReduce:面向大型集群的简化数据处理 摘要 MapReduce既是一种编程模型 ...

随机推荐

  1. iOS按钮设置图片在上文字在下

    UIButton同时设置Title和Image后,默认是图片在左文字在右,如下图1,很多情况下我们希望图片在上图片在下,如下图2,只需要简单的几行代码,即可实现. (1)因为需要处理多个按钮,所以将实 ...

  2. 【LeetCode OJ】Binary Tree Level Order Traversal

    Problem Link: https://oj.leetcode.com/problems/binary-tree-level-order-traversal/ Traverse the tree ...

  3. MySQL - MySQL++在c++11环境下接口设计

    安装官方提供的mysqlconnect后,可以使用mysql++库,在官方的C API上再次做一个c++面向对象封装. 这里mysql++的安装依赖于mysql-connector-c.安装参考:ht ...

  4. eclipse中一些设置&配置项

    在学习过程中出现的一些问题,以备忘: 1.eclipse中手动生成项目目录结构                 按照这个项目结构建立文件夹,build path -configure build pa ...

  5. jQuery:cookie插件的使用

    Jquery插件就是在Jquery基础之上,开发的基于Jquery的javascript库. 在Jquery中,引入cookie插件后,可以很方便的定义某个cookie的名称,并设置cookie值.通 ...

  6. Java语言的安全性的体现

    Java语言的安全性的体现 1.严格遵循面向对象的规范.这样封装了数据细节,只提供接口给用户.增加了数据级的安全性. 2.无指针运算.java中的操作,除了基本类型都是引用的操作.引用是不能进行增减运 ...

  7. display:inline; display:block;

    block(块级元素): div .from. p .table. pre.h1~h6. dl .ol .ul等 inline(内联元素): span.a.strong.em.label.input. ...

  8. python 中*args 和 **kwargs

    简单的可以理解为python 中给函数传递的可变参数,args 是 列表的形式.kwargs 是 key,value的形式,也就是python 中的字典. *args 必须出现在**kwargs 的前 ...

  9. parentNode、parentElement,childNodes、children 它们有什么区别呢?

    parentNode.parentElement,childNodes.children 它们有什么区别呢?parentElement 获取对象层次中的父对象. parentNode 获取文档层次中的 ...

  10. 一次 surface pro 3 的售后保修 黑色三月维权(HSD)

    已更新结束....原创 半根毛线 博文原址 http://www.cnblogs.com/hsd-/ 发现大量转载 转载请与作者联系 drizzle1996@outlook.com或注明转载 ---- ...