این ماژول یک شتاب سنج بر پایه چیپ 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 راه اندازی شده است .


