×

用于Arduino的ADXL335加速度计

消耗积分:0 | 格式:zip | 大小:0.03 MB | 2022-07-04

无人岛

分享资料个

PCB图如下:
pYYBAGKxrhaABX1QAAAolszwfo4713.png
poYBAGKxrhiADxAoAAAYmban80Q347.png

成分

 

ADXL335BCPZ-RL
模拟设备
× 1
741C083510JP
CTS电阻器产品
× 1
227CKS035M
伊利诺伊电容器
× 1
16针公头 × 1

 

描述

用于 Arduino 的 ADXL335 加速度计

这个加速度计模块基于流行的 ADXL335 三轴模拟加速度计 IC,它将 X、Y 和 Z 加速度读取为模拟电压。通过测量重力引起的加速度,加速度计可以计算出它相对于地球的倾斜角度。通过感测动态加速度的量,加速度计可以了解设备移动的速度和方向。使用这两个属性,您可以制作各种很酷的项目,从乐器(想象演奏并将倾斜连接到失真水平或弯音)到汽车(或您孩子的汽车)上的速度监视器。加速度计是使用 3 个模拟输入引脚连接到 Arduino 微控制器的非常简单的接口,并且可以与大多数其他微控制器一起使用,例如 PIC 或 AVR。

poYBAGKxriGAbiNVAAAkySaNmXc514.jpg

对于大多数加速度计,操作所需的基本连接是电源和通信线路。具有模拟接口的加速度计通过不同的电压水平显示加速度。这些值通常在接地和电源电压电平之间波动。然后可以使用微控制器上的 ADC 读取该值。这些通常比数字加速度计便宜。 

ADXL335 是 3 轴加速度计,带有板载稳压器 IC 和信号调理模拟电压输出。该模块由 Analog Devices 的 ADXL335 组成。该产品以 ±3 g 的最小满量程范围测量加速度。它可以测量倾斜感应应用中的静态重力加速度,以及运动、冲击或振动产生的动态加速度。

用户使用 XOUT、YOUT 和 ZOUT 引脚上的 CX、CY 和 CZ 电容器选择加速度计的带宽。可以选择适合应用的带宽,X 轴和 Y 轴的范围为 0.5 Hz 至 1600 Hz,Z 轴的范围为 0.5 Hz 至 550 Hz。这是经过验证的长期系列中的最新产品模拟传感器——加速度计的圣杯。加速度计通常是低功耗设备。所需电流通常在微 (μ) 或毫安范围内 ADXL335 是一款三轴加速度计,具有极低的噪声和功耗——仅 320uA!该传感器具有 +/-3g 的完整感应范围。

有一个板载电压调节器,可让您使用 3V 至 6V DC 为电路板供电。电路板已完全组装并经过安装外部组件的测试。随附的 0.1uF 电容器将每个轴的带宽设置为 50Hz。

pYYBAGKxriOAfTYgAACIGPIi-nQ664.jpg

特征:poYBAGKxriaAa3D5AAA1OqGTUcU140.jpg

3V-6V 直流电源电压

板载 LDO 稳压器

可与 3V3 或 5V 微控制器接口。

所有必要的组件都已填充。

超低功耗:测量模式40uA,待机0.1uA@2.5V

点击/双击检测

自由落体检测

模拟输出

规格:poYBAGKxriaAa3D5AAA1OqGTUcU140.jpg
pYYBAGKxriuAGVJdAAA12MpUc3E177.jpg

带调节器的 3 轴加速度计的描述 – ADXL335 如下所示
poYBAGKxri6Adq2NAABEdQcRsS8589.jpg

poYBAGKxriaAa3D5AAA1OqGTUcU140.jpg

输入电压范围 (VCC) = 3V3- 6V

如何测试poYBAGKxriaAa3D5AAA1OqGTUcU140.jpg1. 带调节器的 3 轴加速度计 – 使用 Arduino 的 ADXL335

这是说明如何将 Arduino 连接到 ADXL335 三轴加速度计的指南。下图描述了 Arduino 上的哪些引脚应连接到加速度计上的引脚:

poYBAGKxrjiAFEaLAACiCRkLSpg702.png

使用 Arduino 板进行测试,示例程序如下所示。使用这个程序,我们在振动期间读取 X、Y 和 Z 轴的输出。

诠释 x; // x 轴变量

整数y; // y轴变量

诠释z; // z 轴变量

/************************************************* *************************************

功能:设置()

描述:用它来初始化变量、引脚模式、开始使用库等。

设置功能只会在每次上电或重启 Arduino 板后运行一次。

****************************************************** *************************************/

无效设置()

{

序列号.开始(9600);// 打开串口,设置数据速率为 9600 bps

}

/************************************************* *************************************

功能:循环()

描述:连续循环,允许您的程序更改和响应。

用它来主动控制 Arduino 板。

****************************************************** *************************************/

无效循环()

{

x = 模拟读取(0);//读取第0个模拟输入引脚

y = 模拟读取(1);//读取第一个模拟输入引脚

z = 模拟读取(2);//读取第二个模拟输入引脚

Serial.print("X = "); // 打印 x adc 值

序列号.println(x);

Serial.print("Y = "); // 打印 y adc 值

序列号.println(y);

Serial.print("Z = "); // 打印 z adc 值

序列号.println(z);

延迟(100);

}

将 ADXL335 模块与 Arduino 连接并上传 Arduino 示例代码。然后打开串口监视器,ADXL335会输出加速度

pYYBAGKxrjuARAIzAABTCC6ZWOw981.jpg

2. 使用调节器测试 3 轴加速度计——使用 PIC16F877A 的 ADXL335 

当将 3 轴加速度计与调节器 - ADXL335 与 PIC16F877A 微控制器连接时,传感器的 X、Y、Z 引脚连接到微控制器的端口 A。这里 X、Y、Z 引脚分别连接到 RA1、RA2、RA3。连接图如下所示pYYBAGKxrj6AXtkiAAF6cy1txHE903.jpg

使用调节器测试 3 轴加速度计 – ADXL335 和 PIC16F877A,示例程序如下所示。使用这个程序,我们

#include

#include“延迟.c”

诠释 X_Value=0;

int Y_Value=0;

int Z_Value=0;

无效 ADC_init() ;

无效发送(字符);

int adc_conv(int);

无效的 SerialPortInit() ;

无效发送数据(字符);

无效显示(整数值);

无效 MSdelay(无符号整数);

静态无效 Send2USART(const char *CPtr1);

无效的主要()

{

TRISC=0X80;

TRISE=0X07;

串行端口初始化();

ADC_init();

而(1)

{

Send2USART("X轴:");

X_Value=adc_conv(1);

显示(X_Value);

发送数据(' ');

Send2USART("Y轴:");

Y_Value=adc_conv(2);

显示(Y_值);

发送数据(' ');

Send2USART("Z轴:");

Z_Value=adc_conv(3);

显示(Z_Value);

发送数据('\n');

发送数据('\r');

}

}

/************************************************* ******************************

* 功能:发送2USART

* 描述:串行发送的一组数据  

****************************************************** ******************************/

静态无效 Send2USART(const char *Cptr1)

{

while(*Cptr1 != '\0')

{

发送数据(*Cptr1);

cptr1++;

}

}

/************************************************* ******************************

* 功能:显示

* 说明:显示adc值功能

****************************************************** ******************************/

无效显示(整数值)

{

字符 k=1;

字符数组[4];

for(k=1;k<=4;k++)

{

数组[k]=值%10;

价值=价值/10;

}

for(k=4;k>=1;k--)

{

发送数据(数组[k]+'0');

}

}

/************************************************* ******************************

* 功能:SerialPortInit

* 描述:Usart 初始化函数 - 波特率 9600

****************************************************** ******************************/

无效的 SerialPortInit()

{

GIE=1;

同步=0;

TXEN=1;

BRGH=1;

SPEN=1;

CREN=1;

PEIE=1;

RCIE=1;

SPBRG=129;

}

/************************************************* ******************************

* 功能:ADC_init

* 说明:Adc 初始化函数

****************************************************** ******************************/

无效 ADC_init()

{

ADFM=1;

PCFG3=0;

PCFG2=0;

PCFG1=0;

PCFG0=0;

}

/************************************************* ******************************

* 功能:adc_conv

* 说明:Adc 转换功能

****************************************************** ******************************/

int adc_conv(int 通道)

{

诠释AB;

ADCON0=0x81|通道<<4; //通道选择

延迟Ms(1);

ADGO=1;//开始AD转换

而(ADGO!= 0);//等待AD转换的竞争

ab=地址;//将2bit值ADRSH寄存器赋给变量ab

ab=ADRESH<<8; //8次移位变量ab值

ab=ab|ADRESL; //结合ADRESL和ab值

返回(ab);

}

/************************************************* ******************************

* 功能:发送数据

* 描述:串行发送数据

****************************************************** ******************************/

无效发送数据(字符数据)

{

TXREG=sdata;

而(TRMT!= 1);

}

/************************************************* ******************************

* 功能:MSdelay

* 描述:产生1ms延迟

****************************************************** ******************************/

无效 MSdelay(无符号整数 val)

{

无符号整数德尔,德尔1;

for(del=1;del<=val;del++)

{

for(del1=0;del1<=331;del1++);

}    

}

当 PIC16F877A 微控制器接收到带调节器的 3 轴加速度计 – ADXL335 数据并在串行监视器上显示为

. poYBAGKxrkKAGqm5AAFb56q7c9s209.jpg

将 ADXL335 输出转换为加速度 (g)

?

下面的代码片段是程序中最重要的部分。它将来自传感器的模拟输出电压映射并转换为重力加速度 (G)。

IDE 的内置 map() 函数执行实际映射。因此,当我们调用 map(xRaw, RawMin, RawMax, -3000, 3000) 时,RawMin 的值将映射到 -3000,RawMax 的值映射到 3000,中间值映射到中间值。

值 -3000 和 3000 不是任意的。它们实际上代表由传感器测量的重力加速度(以毫克为单位,即 1/1000 ag),即 ±3g(-3000 毫克到 3000 毫克)。

例如,

当传感器在 x 轴上输出 0 伏即 xRaw=0 时,map() 函数将返回 -3000 表示 -3g。

当传感器在 x 轴上输出 3.3 伏特时,即 xRaw=1023,map() 函数将返回 3000,表示 +3g。

当传感器在 x 轴上输出 1.65 伏特时,即 xRaw=511,map() 函数将返回 0 表示 0g。

现在,随着输出电压随加速度在该范围内线性增加,比率这个术语现在将更有意义。

// 将原始值转换为“milli-Gs”

long xScaled = map(xRaw, RawMin, RawMax, -3000, 3000);

long yScaled = map(yRaw, RawMin, RawMax, -3000, 3000);

长 zScaled = map(zRaw, RawMin, RawMax, -3000, 3000);

最后,传感器的输出通过将其除以 1000 缩小到小数 Gs 并显示在串行监视器上。

// 重新缩放到小数 Gs

浮动 xAccel = xScaled / 1000.0;

浮动 yAccel = yScaled / 1000.0;

浮动 zAccel = zScaled / 1000.0;

Serial.print("X, Y, Z :: ");

串行打印(xRaw);

序列号.print(", ");

Serial.print(yRaw);

序列号.print(", ");

串行打印(zRaw);

Serial.print(" :: ");

Serial.print(xAccel,0);

Serial.print("G, ");

Serial.print(yAccel,0);

Serial.print("G, ");

Serial.print(zAccel,0);

序列号.println("G");

代码

adxl335 的测试代码

adxl335_test_code.ino

下载

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !