Arduino 驱动 ADXL335三轴加速度计模块

Arduino 驱动 ADXL335三轴加速度计模块

简介

ADXL335是一个小,薄,低功率,完整的三轴加速度计,具有信号调节电压输出。该产品测量加速度的最小全尺度范围为±3 g。它可以测量倾斜传感应用中重力的静态加速度,以及由运动、冲击或振动产生的动态加速度。
在这里插入图片描述

电气参数

供电电源 3~5 V
供电电流 400uA
通信接口 模拟量输出
工作温度 -40°~ 85°

原理图

在这里插入图片描述
工作原理:
该传感器是建立在硅晶片上的多晶硅表面微加工结构。多晶硅弹簧使结构悬浮在晶片表面,并提供加速阻力。结构的偏转是用一个差动电容器来测量的,它由独立的固定板和附着在移动质量上的板组成。固定板由180°的失相方波驱动。加速度使移动质量偏转,使差分电容器失衡,导致传感器输出的振幅与加速度成正比。然后使用相敏解调技术来确定加速度的幅度和方向。

接线

Arduino ADXL335 OLED
5V VCC VCC
GND GND GND
A1 x-OUT -
A2 y-OUT -
A3 Z-OUT -
A4 - SDA
A5 - SCL

代码

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>  //1306的库文件
#define OLED_RESET 13                   //设置复位是13号引脚
Adafruit_SSD1306 display(OLED_RESET);
const int xInput = A1;
const int yInput = A2;
const int zInput = A3;

// initialize minimum and maximum Raw Ranges for each axis
int RawMin = 0;
int RawMax = 1023;

// Take multiple samples to reduce noise
const int sampleSize = 10;

void setup() 
{
  analogReference(EXTERNAL);
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC,0x3C); //刷新
  display.clearDisplay(); //清屏
  display.setTextColor(WHITE);   //字体白色
  display.display();  //显示
}

void loop() 
{
  //Read raw values
  int xRaw = ReadAxis(xInput);
  int yRaw = ReadAxis(yInput);
  int zRaw = ReadAxis(zInput);

  // Convert raw values to 'milli-Gs"
  long xScaled = map(xRaw, RawMin, RawMax, -3000, 3000);
  long yScaled = map(yRaw, RawMin, RawMax, -3000, 3000);
  long zScaled = map(zRaw, RawMin, RawMax, -3000, 3000);

  // re-scale to fractional Gs
  float xAccel = xScaled / 1000.0;
  float yAccel = yScaled / 1000.0;
  float zAccel = zScaled / 1000.0;
  

  Serial.print("X, Y, Z:: ");
  Serial.print(xRaw);
  Serial.print(", ");
  Serial.print(yRaw);
  Serial.print(", ");
  Serial.print(zRaw);
  Serial.print(" :: ");
  Serial.print(xAccel,0);
  Serial.print("G, ");
  Serial.print(yAccel,0);
  Serial.print("G, ");
  Serial.print(zAccel,0);
  Serial.println("G"); 
  display.setTextSize(1);       //字体大小为1号
  display.setCursor(35,0); //字体排布在oled里面的行、列数
   display.print("ADXL335");
  display.setCursor(0,12); 
  display.print("X, Y, Z:"); 
  display.print(xRaw);   
  display.print(", ");
  display.print(yRaw);
  display.print(", ");
  display.print(zRaw);
  display.setCursor(0,24);
  display.print("Accel:");          
  display.print(xAccel,0); 
  display.print(" G");
  display.print(yAccel,0);
  display.print(" G");
  display.print(zAccel,0);
  display.print(" G");
 display.display();
 display.clearDisplay(); 
  delay(200);
}

// Take samples and return the average
int ReadAxis(int axisPin)
{
  long reading = 0;
  analogRead(axisPin);
  delay(1);
  for (int i = 0; i < sampleSize; i++)
  {
  reading += analogRead(axisPin);
  }
  return reading/sampleSize;
}

实验结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42250136/article/details/133988142