این ماژول یک شتاب سنج بر پایه چیپ ADXL345 می باشد . ADXL345 دارای تکنولوژی MEMS است که قابلیت اندازه گیری شتاب در محور های x ، y و z را دارد . خروجی این ماژول به دو صورت I2C و SPI می باشد که امکان کنترل چندین ماژول از طریق یک باس کنترلی وجود دارد . ADXL345 توانایی تشخیص ضربه تکی ، دو ضربه و سقوط آزاد را نیز دارد . یکی از قابلیت های این ماژول وقفه خارجی آن است که در صورت تشخیص هر کدام از حالت های ضربه و سقوط ، وقفه خارجی فعال می گردد . این ماژول دارای رنج های اندازه گیری 2g ، 4g ، 8g و 16g است. همچنین دقت این ماژول به صورت 13 بیتی می باشد . از این ماژول می توان در تجهیزات روباتیک استفاده کنید .

 

مشخصات :

  • ولتاژ تغذیه 3.3 ولت
  • قابلیت اندازه گیری شتاب در سه جهت x ، y و z
  • دارای رنج های اندازیه گیری 2g ، 4g ، 8g و 16g
  • رابط ارتباطی I2C و SPI
  • دارای دقت 13 بیتی
  • دارای دو پین وقفه خارجی
  • قابلیت تشخیص تک ضربه ، دو ضربه و سقوط آزاد
  • دارای FIFO داخلی جهت نگه داری داده های خروجی
  • مصرف جریان بسیار کم 4uA

 

 

راه اندازی ماژول ADXL345 :

رابط ارتباطی این ماژول I2C می باشد که از طریق پین های SDA و SCL کنترل می شود . در تصویر زیر نحوه اتصال ماژول به آردوینو نشان داده شده است :

 

کد های آردوینو :

#include <Wire.h>  // Wire library - used for I2C communication
int ADXL345 = 0x53; // The ADXL345 sensor I2C address
float X_out, Y_out, Z_out;  // Outputs
void setup() {
  Serial.begin(9600); // Initiate serial communication for printing the results on the Serial monitor
  Wire.begin(); // Initiate the Wire library
  // Set ADXL345 in measuring mode
  Wire.beginTransmission(ADXL345); // Start communicating with the device 
  Wire.write(0x2D); // Access/ talk to POWER_CTL Register - 0x2D
  // Enable measurement
  Wire.write(8); // (8dec -> 0000 1000 binary) Bit D3 High for measuring enable 
  Wire.endTransmission();
  delay(10);
}
void loop() {
  // === Read acceleromter data === //
  Wire.beginTransmission(ADXL345);
  Wire.write(0x32); // Start with register 0x32 (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(ADXL345, 6, true); // Read 6 registers total, each axis value is stored in 2 registers
  X_out = ( Wire.read()| Wire.read() << 8); // X-axis value
  X_out = X_out/256; //For a range of +-2g, we need to divide the raw values by 256, according to the datasheet
  Y_out = ( Wire.read()| Wire.read() << 8); // Y-axis value
  Y_out = Y_out/256;
  Z_out = ( Wire.read()| Wire.read() << 8); // Z-axis value
  Z_out = Z_out/256;
  Serial.print("Xa= ");
  Serial.print(X_out);
  Serial.print("   Ya= ");
  Serial.print(Y_out);
  Serial.print("   Za= ");
  Serial.println(Z_out);
}

در کد های فوق از کتابخانه خاصی استفاده نشده است و به صورت مستقیم با ارسال مقادیر از طریق کتابخانه Wire راه اندازی شده است .

 

Tags:
About Author: USER_4