圣源电子制作

 找回密码
 立即注册
查看: 8995|回复: 0
打印 上一主题 下一主题

arduino学习笔记25 ADXL345加速度传感器实验

[复制链接]
跳转到指定楼层
楼主
发表于 2012-4-27 20:54:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
arduino学习笔记25 ADXL345加速度传感器实验
前两天我们做了温度传感器实验,大家一定还有印象。今天我们来研究另外一种传感器加速度传感器。

什么是加速度传感器

加速度传感器,作用是测量在加速过程中产生的力。最基本的如咱们平常所熟悉的是重力加速度,大小是1g。

加速度传感器一般用于什么地方

通过测量由重力引起的加速度,你可以计算出设备相对于水平面的倾斜角度。通过分析动态加速度,你可以分析出设备的移动方式。自平衡车中就是使用加速度传感器与陀螺仪进行卡尔曼滤波进行姿态矫正。

本次试验使用的ADXL345数字传感器,通过I2C或者SPI接口直接输出数字信号。在1g的加速度下,输出数值为256.



下面是硬件连接图







下面是代码
1.  #include <Wire.h>  //调用arduino自带的I2C库
2.  #include <LiquidCrystal.h>   //调用arduino自带的LiquidCrystal库
3.   
4.  #define Register_ID 0
5.  #define Register_2D 0x2D
6.  #define Register_X0 0x32
7.  #define Register_X1 0x33
8.  #define Register_Y0 0x34
9.  #define Register_Y1 0x35
10. #define Register_Z0 0x36
11. #define Register_Z1 0x37
12.  
13. LiquidCrystal lcd(12, 11, 10, 9, 8, 7);//设置接口
14.  
15. int ADXAddress = 0xA7>>1;  //转换为7位地址
16. int reading = 0;
17. int val = 0;
18. int X0,X1,X_out;
19. int Y0,Y1,Y_out;
20. int Z1,Z0,Z_out;
21. double Xg,Yg,Zg;
22.  
23. void setup()
24. {
25.   lcd.begin(16, 2);  //初始化LCD
26.   delay(100);
27.   Wire.begin();  //初始化I2C
28.   delay(100);
29.   Wire.beginTransmission(ADXAddress);
30.   Wire.send(Register_2D);
31.   Wire.send(8);
32.   Wire.endTransmission();
33. }
34.  
35. void loop()
36. {
37.   Wire.beginTransmission(ADXAddress);
38.   Wire.send(Register_X0);
39.   Wire.send(Register_X1);
40.   Wire.endTransmission();
41.   Wire.requestFrom(ADXAddress,2);
42.   if(Wire.available()<=2);
43.   {
44.     X0 = Wire.receive();
45.     X1 = Wire.receive();
46.     X1 = X1<<8;
47.     X_out = X0+X1;
48.   }
49.   
50.   Wire.beginTransmission(ADXAddress);
51.   Wire.send(Register_Y0);
52.   Wire.send(Register_Y1);
53.   Wire.endTransmission();
54.   Wire.requestFrom(ADXAddress,2);
55.   if(Wire.available()<=2);
56.   {
57.     Y0 = Wire.receive();
58.     Y1 = Wire.receive();
59.     Y1 = Y1<<8;
60.     Y_out = Y0+Y1;
61.   }
62.   
63.   Wire.beginTransmission(ADXAddress);
64.   Wire.send(Register_Z0);
65.   Wire.send(Register_Z1);
66.   Wire.endTransmission();
67.   Wire.requestFrom(ADXAddress,2);
68.   if(Wire.available()<=2);
69.   {
70.     Z0 = Wire.receive();
71.     Z1 = Wire.receive();
72.     Z1 = Y1<<8;
73.     Z_out = Y0+Y1;
74.   }
75.   
76.   Xg = X_out/256.00;//把输出结果转换为重力加速度g,精确到小数点后2位。
77.   Yg = Y_out/256.00;
78.   Zg = Z_out/256.00;
79.   lcd.clear(); //清屏
80.   lcd.print("X="); //使屏幕显示文字X=
81.   lcd.print(Xg);
82.   lcd.setCursor(8, 0);
83.   lcd.print("Y=");
84.   lcd.print(Yg);
85.   lcd.setCursor(0, 1);
86.   lcd.print("Z=");
87.   lcd.print(Zg);
88.   delay(500);  //延时0.5秒,刷新频率这里进行调整
89.   
90. }
复制代码
试验效果如下

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|联系我们|闽公网安备 35012102000020号|闽ICP备11020110号-1|圣源电子

GMT+8, 2024-12-5 10:09 , Processed in 0.044095 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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