رباتیک و هوافضا

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

به نام خدا

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

 

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

 

شتاب سنج با محور سه گانه و یک رابط دیجیتال است.

نگاه اجمالی :

 

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

 

ADXL345 یک ماژول شتاب سنج سه بعدی MEMS است که با هر دو رابط I2C و SPI کار میکند. برد Adafruit Breakout برای این ماژول ولتاژ ۳٫۳v را آماده کرده اند ،از این رو آنها با میکروکنترلر های ۵v مثل آردوینو به راحتی ارتباط برقرار میکنند.

ADXL345 دارای ۴ محدوده ی حساسیت +/-۲G تا +/-۱۶G است . از  داده های خروجی با د رنج ۱۰Hz تا ۳۲۰۰Hz پشتیبانی میکند.

 

نحوه ی کار سنسور:

این سنسور از یک ساختار میکرو مکانیکی روی سلیکون ساخته شده است. این ساختار توسط چند سلیکون به صورت تعلیق در آمده است که در صورت تحریک در محور های X،Y و یا Z به همان سمت منحرف میشود. این انحراف باعث تغییر در ظرفیت خازنی بین صفحه ثابت و صفحه ی متصل به ساختار معلق می شود. این تغییر ظرفیت در هر محور به یک ولتاژ خروجی متناسب با شتاب در هر محور تبدیل می شود.

 

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

 

برد و سیم کشی:

 

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

 

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

مونتاژ:

پین هدر را قرار دهید:

رشته ی پین هدر را در صورت نیاز برش دهید . پین هدر را از سمت سیم های کوتاه ترش بر روی برد بورد سوار کنید.

 

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

 

اضافه کردن Breakout :

برد را روی رشته ی پین هدر ثابت کنید.

 

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

 

لحیم کردن :

از اتصال الکتریکی همه ی پین ها اطمینان حاصل کنید.

 

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

 

ارتباط I2C :

ADXL345 Breakout یک آدرس I2C_0X53 دارد.

برای ارتباط I2C فقط ۴ اتصال لازم است:

زمین به زمین

پین VIN به ۵V

پین SDA به SDA (پین ۴ آنالوگ در آردوینو کلاسیک)

پین SCL به SCL (پین ۵ آنالوگ در آردوینو کلاسیک)

 

Adafruit breakout دارای سطح بی ثبات و مدار تنظیم کننده است، بنابر این شما میتوانید در ولتاژ بین ۳ و ۵ راه اندازی کنید و از سطح ۳V و ۵V منطقی I2C استفاده کنید.

 

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

 

برنامه نویسی و کالیبراسیون :

 

کتابخانه را نصب کنید :

کتابخانه ADXL345 را دانلود کرده و آن را نصب کنید.اگه قبلا این کتابخانه را نداشتید شما به کتابخانه Adafruit Sensor  نیز نیاز دارید. شما میتوانید کتابخانه ی Adafruit Sensor را از لینک زیر دانلود کنید.

دانلود فایل

 

امتحان کردن :

بر روی “File->Examples->Adafruit_ADXL345->sensortest” کلیک کنید تا نمونه ای اجرایی از این کتابخانه مشاهده کنید.

حال روی compile/upload کلیک کنید تا طرح به آردوینو آپلود شود. شما باید خروجی مشابه زیر را ببینید. برد را حرکت دهید تا تغییرات را ببینید.

بیشتر بخوانید...  ساخت سیستم هشدار درب با استفاده از آردوینو و سنسور آلتراسونیک

 

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

 

کالیبره کردن:

تراشه های ADXL را در کارخانه در حد معمول کالیبره می کنند. برای برنامه های مهم که در آن به دقت بالاتر نیاز دارید ،ممکن است به کالیبره کردن نیاز پیدا کنید.

کالیبره کردن خروجی های سنسور را تغییر نمی دهد. اما خروجی سنسور را نسبت به مرجعی که برای آن مشخص کرده اید به شما میدهد.

 

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

 

گرانش به عنوان مرجع کالیبرراسیون :

شتاب را می توان در نسبت به گرانش زمین اندازه گیری کرد. جایی که ۱G را نشان میدهد جاذبه در سطح زمین است. گرانش زمین یک نیروی پایدار و یک مرجع کالیبراسیون مناسب و قابل اعتماد است.

روش کالیبراسیون:

برای سنسور کالیبره شده شما باید خروجی را برای هر محور به طور دقیق در جهت محور های گرانش مشخص کنید.

نصب سنسور :

سنسور را به یک تکه چوب وصل کنید. اندازه تا زمانی که تمام گوشه های آن با یک زاویه و سطح آن کاملا صاف باشد مهم نیست.

اسکن کالیبراسیون را انجام دهید.

بار گیری را به صورت زیر انجام دهید و منتظر بمانید.

  • تکه چوب را روی یک سطح نرم و صاف مانند یک میز محکم قرار دهید. یک کارکتر را در سریال مانیتور سپس return را وارد کنید.

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

  • این کارکتر اندازه گیری را در این محور انجام میدهد و نتایج را برای ما چاپ میکند.

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

  •  بلوک را بچرخانید تا سمت دیگر آن روی میز قرار بگیرد. یک کارکتر دیگر برای اندازه گیری محور آن تایپ کنید.

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

  • برای تمام شش وجه این تکه چوب این کار را انجام دهید.

نکته: برای وجه ی که سیم ها روی آن است کارکتر را وارد کرده و از سطح زیر میز استفاده کنید.

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

 

نتایج کالیبراسیون:

هنگامی که تمام شش وجه قطعه چون نمونه برداری شد، مقادیری که در مانیتور چاپ شده اند نشان دهنده ی اندازه ی واقعی برای نیرو های +/-۱G در هر محور است. از این مقادیر میتوان برای دریافت دقت بالاتر استفاده کرد.

طرح کالیبراسیون:

دانلود کد

 

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>
 
/* Assign a unique ID to this sensor at the same time */
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);
 
 
float AccelMinX = 0;
float AccelMaxX = 0;
float AccelMinY = 0;
float AccelMaxY = 0;
float AccelMinZ = 0;
float AccelMaxZ = 0;
 
 
void setup(void) 
{
  Serial.begin(9600);
  Serial.println("ADXL345 Accelerometer Calibration"); 
  Serial.println("");
  
  /* Initialise the sensor */
  if(!accel.begin())
  {
    /* There was a problem detecting the ADXL345 ... check your connections */
    Serial.println("Ooops, no ADXL345 detected ... Check your wiring!");
    while(1);
  }
}
 
void loop(void)
{
    Serial.println("Type key when ready..."); 
    while (!Serial.available()){}  // wait for a character
    
    /* Get a new sensor event */ 
    sensors_event_t accelEvent;  
    accel.getEvent(&accelEvent);
    
    if (accelEvent.acceleration.x < AccelMinX) AccelMinX = accelEvent.acceleration.x;
    if (accelEvent.acceleration.x > AccelMaxX) AccelMaxX = accelEvent.acceleration.x;
    
    if (accelEvent.acceleration.y < AccelMinY) AccelMinY = accelEvent.acceleration.y;
    if (accelEvent.acceleration.y > AccelMaxY) AccelMaxY = accelEvent.acceleration.y;
  
    if (accelEvent.acceleration.z < AccelMinZ) AccelMinZ = accelEvent.acceleration.z;
    if (accelEvent.acceleration.z > AccelMaxZ) AccelMaxZ = accelEvent.acceleration.z;
  
    Serial.print("Accel Minimums: "); Serial.print(AccelMinX); Serial.print("  ");Serial.print(AccelMinY); Serial.print("  "); Serial.print(AccelMinZ); Serial.println();
    Serial.print("Accel Maximums: "); Serial.print(AccelMaxX); Serial.print("  ");Serial.print(AccelMaxY); Serial.print("  "); Serial.print(AccelMaxZ); Serial.println();
 
    while (Serial.available())
    {
      Serial.read();  // clear the input buffer
    }
}

خروجی کالیبراسیون معمولی:

 

بیشتر بخوانید...  دانلود پروژه ی کنترل سروو موتور با آردوینو Due به همراه کد کامل
دانلود کد
ADXL345 Accelerometer Calibration
 
Type key when ready...
Accel Minimums: 0.00  0.00  0.00
Accel Maximums: 0.12  0.20  1.14
Type key when ready...
Accel Minimums: 0.00  0.00  0.00
Accel Maximums: 0.12  0.20  1.14
Type key when ready...
Accel Minimums: 0.00  0.00  0.00
Accel Maximums: 0.12  0.20  1.14
Type key when ready...
Accel Minimums: 0.00  0.00  0.00
Accel Maximums: 0.12  0.20  1.14
Type key when ready...
Accel Minimums: 0.00  0.00  -0.24
Accel Maximums: 0.12  1.37  1.14
Type key when ready...
Accel Minimums: 0.00  0.00  -0.24
Accel Maximums: 0.12  1.37  1.14
Type key when ready...
Accel Minimums: 0.00  -1.22  -0.27
Accel Maximums: 0.12  1.37  1.14
Type key when ready...
Accel Minimums: 0.00  -1.22  -0.27
Accel Maximums: 0.12  1.37  1.14
Type key when ready...
Accel Minimums: -1.18  -1.22  -0.27
Accel Maximums: 0.12  1.37  1.14
Type key when ready...

 

ساختار:

Adafruit_ADXL345(int32_t sensorID = -1)

یک  درایور ADXL345 را ایجاد میکند. ‘sensorID’ شناسه ی دستگاه است. در هر فرا خوانی  getEvent() مقدار هر sensor_event باز خواهد گشت. sensorID هیچ تاثیری بر عملکرد سنسور ها ندارد ولی برای مدیریت sensor events در سیستم با سنسور های چند گانه مفید است.

bool begin(void)

تابع begin() مقدار دهی دستگاه را آغاز میکند. اگر در اتصال به ADX:345 موفق شود true را برمی گرداند.

void getSensor(sensor_t*);

 getSensor() اطلاعات اولیه را در مورد سنسور چاپ میکند.

void setRange(range_t range)

تابع setRange() محدوده عملیاتی برای سنسور را تعیین میکند. هر چه محدوده کوچک تر باشد مقادیر دقیق تر خواهند بود.

محدوده ی معتبر برای این سنسور عبارتند از

  • ADXL345_RANGE_16_G
  • ADXL345_RANGE_8_G
  • ADXL345_RANGE_4_G
  • ADXL345_RANGE_2_G (default value)

range_t getRange(void);

 تابع getRange() محدوده ی عملیاتی فعلی که توسط setRange() تعیین شده است return میکند.

در یافت و تنظیم رنج اطلاعات :

void setDataRate(dataRate_t dataRate);

setDataRate()  اندازه تغییرات خروجی را نمایش میدهد.

ارزش بالاتر از ۱۰۰ هرتز موجب نویز میشود. مقدار کمتر از ۶٫۲۵ به تغییرات دما حساس میشود.

جزئیات داده را ببینیم.

  • ADXL345_DATARATE_3200_HZ
  • ADXL345_DATARATE_1600_HZ
  • ADXL345_DATARATE_800_HZ
  • ADXL345_DATARATE_400_HZ
  • ADXL345_DATARATE_200_HZ
  • ADXL345_DATARATE_100_HZ
  • ADXL345_DATARATE_50_HZ
  • ADXL345_DATARATE_25_HZ
  • ADXL345_DATARATE_12_5_HZ
  • ADXL345_DATARATE_6_25HZ
  • ADXL345_DATARATE_3_13_HZ
  • ADXL345_DATARATE_1_56_HZ
  • ADXL345_DATARATE_0_78_HZ
  • ADXL345_DATARATE_0_39_HZ
  • ADXL345_DATARATE_0_20_HZ
  • ADXL345_DATARATE_0_10_HZ (default value)

 

dataRate_t getDataRate(void);

تابع  getDataRate() مقدار داده هایی که توسط setDataRate() تنظیم شده را return میکند.

void getEvent(sensors_event_t*);

تابع getEvent() نتیجه را به صورت یک sensor_event باز میگرداند. sensor_event حاوی sensor_id که به سازنده منتقل شده ، همچنین مقادیری که از محور های X،Y و Z خوانده شده است.

فایل ها :

فایل EagleCAD PCB

دانلود فایل

 

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

 

آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

دیدگاه‌ها (8)

*
*

    فاطمه علی پور مهمان مرداد 2, 1397 پاسخ

    سلام خسته نباشید میشه لطفا این قسمت کالیبراسیون رو بیشتر توضیح بدید بعد از به دست آوردن مقادیر ماکزیممو مینیمم چیکار باید کرد واقعا ممنون میشم اگه راهنمایی کنید.

      Admin مدیر کل دی 21, 1399 پاسخ

      سلام... ممنون
      به واحد تولید محتوا ارجاع داده میشه

    پوریا مهمان فروردین 5, 1399 پاسخ

    سلام
    مقادیر آفست رو در موقعیت خاصی از ماژول بدست آوردم.چطور باید کالیبر کنم؟

      Admin مدیر کل آبان 16, 1399 پاسخ

      سلام
      توضیحات داده شده

    الیاس مهمان آذر 13, 1399 پاسخ

    سلام خیلی عالی بود. ببخشید من یک دیتالاگر دارم و برای مچ کردن با این شتاب سنج میخواستم ازتون بپرسم به چه ترتیبی عمل کنم؟ با تشکر

      Admin مدیر کل دی 21, 1399 پاسخ

      سلام. ممنون
      منظورتون چیه به چه ترتیبی عمل کنم؟!!!
      یه ماژول ساعت بذارید با توجه به زمان داده ها رو توی sd کارت ( با ماژول میکرو sd ) ذخیره کنید دیگه

    pouya مهمان آذر 23, 1399 پاسخ

    با سلام نیاز به راهنمایی و کمک دارم در استفاده از این شتاب سنج، آیا برای سنجش g وارد شده به چتر باز در هنگام سقوط از ارتفاع میشه از این ماژول استفاده کرد؟ اساسا تفاوت g با شتاب چیه؟

      Admin مدیر کل دی 21, 1399 پاسخ

      سلام
      بله میشه
      g شتاب گرانش هست که تقریبا برابر 10 هستش ولی شتاب میتونه هر عددی داشته باشه