Arduino加速度传感器与幻彩立方的互动

  • 10.jpg
  • 6.jpg
  • 7.jpg
  • 8.jpg
  • 9.jpg

本文地址:http://www.no-mori.com/P/182
文章摘要:Arduino加速度传感器与幻彩立方的互动,  按照《每日邮报》说法,外国买家购买的伦敦高档住宅数量达到5年来最高水平。但这很大程度上是靠政策,而非内生动力转换成功所致。他们的党建教学突出互动感,有效提升参与度和自主性。,  29日召开的中央政治局会议要求各级党委(党组)把年轻干部工作摆上重要议事日程,正是切实落实十九大报告精神的重要举措,旨在推进年轻干部工作制度化、规范化、常态化。在庆祝海南建省办经济特区30周年大会重要讲话中,习近平总书记坚持以人民为中心的发展思想,为海南等经济特区全面深化改革指明正确方向和奋斗目标,汇聚起砥砺奋进、共襄伟业的磅礴力量。新华社北京6月5日电题:专家解读:正确把握新一代共同条令中的授权性条款新华社记者刘济美、黎云5月1日起正式施行的解放军新一代共同条令对中央军委作出了授权,并设置了百余条针对旅(团)级单位、军兵种接口的授权性规范,标志着依法治军又向前迈出了重要一步。。

这篇文章介绍MM7361三轴加速度传感器的原理及应用。为了体验下这个传感器反馈物体运动姿态的功效,我设计了一个互动任务,任务为:根据MM7361加速度传感器绕坐标轴的倾斜角度,实时作用于Processing虚拟环境下的幻彩立方,使其旋转三维空间角度,让由Arduino采样的加速度传感器与幻彩立方产生互动效应。

MMA7361三轴加速度传感器把加速度分解成X、Y和Z三个方向上的分量,并产生相应的三个0~5V的电压值输出,然后从MM7361传感器的三个模拟量输出端,连线到Arduino控制器的模拟端口0、1、2上。如图3所示,接着Arduino控制器的10位模数转换器把它们转换成0~1023的整数值。

图3中的电控设备有:1、Arduino UNO控制板;2、Xbee传感器扩展板V5;3、MM7361三轴加速度传感器。这三个电控部件全部由DFRobot公司出品,公司网址:http://www.no-mori.com/995/。这个传感器的说明书网址:http://www.no-mori.com/776/056E7

Arduino IDE编程环境中的串口编程见附件代码。

void setup()
{
  Serial.begin(9600); //启动串行通信,波特率为9600bps
}
void loop()
{
      int x,y,z;
      x=analogRead(0); //采集重力加速度X轴分量的转换值,输入到模拟端口0
      y=analogRead(1);//采集重力加速度Y轴分量的转换值,输入到模拟端口1
      z=analogRead(2);//采集重力加速度Z轴分量的转换值,输入到模拟端口2
      //把重力加速度X、Y和Z轴分量的转换值上传到上位机串口监视器
      Serial.print("x= ");
      Serial.print(x ,DEC);
      Serial.print(',');
      Serial.print("y= ");
      Serial.print(y ,DEC);
      Serial.print(',');
      Serial.print("z= ");
      Serial.println(z ,DEC);
      delay(800);//延时0.8s,以便有足够时间观测各加速度分量值的变化
}

Arduino程序:

void setup() {
 Serial.begin(9600);//启动串行通信,波特率为9600b/s
}
//主程序
void loop() {
  //把MM7361加速度传感器重力加速度的X、Y、Z轴分量,分别接入
  //Arduino控制器的模拟量端子0、1、2。
  int xValue = analogRead(0);
  int yValue = analogRead(1);
  int zValue = analogRead(2);
  /*当Arduino稳压后的电压为5V(实测为4.95v~4.97v),并选择±1.5g量程时
  先把加速度传感器放置水平,若定义前方是Y轴,那么传感器向左旋转至90度垂直位置,
  则重力加速度X轴分量xValue值标定为175,而传感器向右旋转至垂直位置,xValue值为495。
  */
  //把绕Y轴旋转180度的两个特定位置的xValue值175~495转换成角度值0~180
  int yRotate=map(xValue,175,495,0,180);
  //把绕X轴旋转180度的两个特定位置的yValue值195~525转换成角度值0~180
  int xRotate=map(yValue,195,525,0,180);
  if(yRotate<=0) yRotate=0;//如果绕Y轴旋转的角度值出现负数,则强制为0
  if(xRotate<=0) xRotate-0;//如果绕X轴旋转的角度值出现负数,则强制为0
  Serial.print(yRotate,BYTE);//以字节形式,上传绕Y和X的旋转角度值
  Serial.print(xRotate,BYTE);
   delay(100);//延时100ms
}


Processing程序:

import processing.serial.*; //导入serial通信库
Serial duankou;//创建对象duankou
int   Y_Rotate=90, X_Rotate=90;
void setup()
{
  size(800,600, P3D); //设置画布尺寸,创建3D环境
  stroke(102); //图形线条颜色为灰色
  strokeWeight(20);//图形线条的宽度
  colorMode(RGB, 1);
  //设定通讯端口为COM3,波特率为9600
 //(Arduino与Processing联机的串口号COM?可以通过设备管理器观查得到。)
  duankou = new Serial(this,"COM3",9600); 
}
//主程序
void draw()
{
  background(0.5); //设置画布背景颜色
  pushMatrix(); //把当前坐标值保存在堆栈中
  //把坐标原点移动到画布中央,同时向屏幕后移动-150
  translate(width/2, height/2, -150);
  while(duankou.available()<3);//读取Arduino上传的两个字节
  Y_Rotate= duankou.read();//第一个字节反映了加速度传感器,绕Y轴的旋转角度
  X_Rotate = duankou.read();//第一个字节反映了加速度传感器,绕X轴的旋转角度
  //把Arduino上传的0~180度值转换为-90~+90度
  rotateX((X_Rotate-90) * PI / 180.0);//使幻彩立方旋转
  rotateZ((Y_Rotate-90) * PI / 180.0);  
  scale(150);//放大1个单位的立方体到150倍
  beginShape(QUADS);//定义单位边长为1的幻彩立方体
  fill(0, 1, 1); vertex(-1,  1,  1);
  fill(1, 1, 1); vertex( 1,  1,  1);
  fill(1, 0, 1); vertex( 1, -1,  1);
  fill(0, 0, 1); vertex(-1, -1,  1);
  fill(1, 1, 1); vertex( 1,  1,  1);
  fill(1, 1, 0); vertex( 1,  1, -1);
  fill(1, 0, 0); vertex( 1, -1, -1);
  fill(1, 0, 1); vertex( 1, -1,  1);
  fill(1, 1, 0); vertex( 1,  1, -1);
  fill(0, 1, 0); vertex(-1,  1, -1);
  fill(0, 0, 0); vertex(-1, -1, -1);
  fill(1, 0, 0); vertex( 1, -1, -1);
  fill(0, 1, 0); vertex(-1,  1, -1);
  fill(0, 1, 1); vertex(-1,  1,  1);
  fill(0, 0, 1); vertex(-1, -1,  1);
  fill(0, 0, 0); vertex(-1, -1, -1);
  fill(0, 1, 0); vertex(-1,  1, -1);
  fill(1, 1, 0); vertex( 1,  1, -1);
  fill(1, 1, 1); vertex( 1,  1,  1);
  fill(0, 1, 1); vertex(-1,  1,  1);
  fill(0, 0, 0); vertex(-1, -1, -1);
  fill(1, 0, 0); vertex( 1, -1, -1);
  fill(1, 0, 1); vertex( 1, -1,  1);
  fill(0, 0, 1); vertex(-1, -1,  1);
  endShape();//结束立方体的造型
  popMatrix(); //从堆栈中复原当前坐标值
}


本文来自宜昌城老张的博客,感谢作者的分享。

评 论

e

选择昵称后请轻按空格键

提 交

请勿进行人身攻击,谩骂以及任何违法国家相关法律法规的言论。

a562442129 2013年03月17日

不会!!!!!!!!!!!!!!!!1

夕姚 2013年01月24日

佩服!!!

971669366 2013年01月23日

还是可以做坐

一支烟燃 2013年01月22日

强大!!!

4 条记录 1/1 页

信息

12678

浏览
5
oydean

作者:oydean

分享:42

高骚不止. >>
112

关键词: 三轴加速度传感器 传感器 arduino

猜你会喜欢

世界上最小的DS18B20温度计

DS18B20不少朋友都用过吧,南国彩票七星彩论坛:不过似乎...

iPhone控制的简易物联网

这次我尝试制作一个简单的物联网系统,可以...

TEM36温度传感器

非常容易解释什么是模拟温度传感器,它就是...

基于MK802的摄像头自动光源跟踪

基于MK802的摄像头自动光源跟踪,展示...

用Android和Arduino控制门锁

这次我制作一个简易的无线控制门锁,实现用...