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