آردوینو Arduino Uno شتاب و ژایرو قطعات الکترونیک مدارهای الکترونیک پروژه های آردوینو

آموزش راه اندازی ماژول شتاب و ژایرو ADXL345 با برد آردوینو Uno

آموزش راه اندازی ماژول ADXL345 با استفاده از آردوینو
نوشته شده توسط علیرضا قربانی

ماژول ADXL345 یک سنسور شتاب‌سنج (Accelerometer) و ژایروسکوپ (Gyroscope) است که توسط کمپانی Analog Devices تولید می‌شود. این سنسور برای اندازه‌گیری شتاب و سرعت زاویه‌ای در سه جهت مختصاتی (سه محور x، y و z) استفاده می‌شود. این ماژول از رابط ارتباطی I2C یا SPI برای ارتباط با میکروکنترلرها یا میکروپروسسورها استفاده می‌کند.در سری آموزش های پروژه محور آردوینو اینبار قصد داریم به آموزش راه اندازی ماژول شتاب سنج سه محوره ADXL345  با استفاده از آدوینو Uno بپردازیم.با دیجی اسپارک همراه باشید.


معرفی ماژول ADXL345


ADXL345 یک ماژول شناب سنج سه محوره می باشد که می توان آن را توسط دو پروتکل ارتباطی I2C  و  SPI راه اندازی نمود. ماژول  ADXL345 قادر است  رنج ±۲g  الی ±۱۶g را با مقادیر پیش فرض ۲و۴و۸و۱۶  با رزولوشن بالای ۱۳ بیت اندازه گیری کند. ماژول ADXL345 قادر است شتاب استاتیک و شتاب داینامیک را اندازه گیری کند. منظور از شتاب استاتیک گرانش در کاربردهایی مثل اندازه گیری زاویه کجی و شتاب داینامیک   حاصل از تکان یا حرکت ناگهانی می باشد.با اسنفادده از یک FIFO 32 سطحی می‌توان اطلاعات سنسور را ذخیره نمود تا بار پردازش از پروسسور میزبان کاهش یابد.این سنسور مجهز به ساختار هوشمند مدیریت مصرف توان است که متناسب با اعمال شتاب به سنسور عمل میکند و باعث اتلاف کمترین توان روی چیپ خواهد شد.برای برنامه نویسی از دو کتابخانه  Adafruit_ADXL345   و Adafruit Sensor Library  کمپانی Adafruit استفاده میکنیم(قابل ذکر است برنامه و کتابخانه بر اساس پروتکل ارتباطی I2C می باشند)

 

 


مشخصات فنی ماژول ADXL345


سنسور ADXL345 یکی از محبوب‌ترین سنسورهای شتاب‌سنج در صنعت الکترونیک و روباتیک است و به عنوان یکی از سنسورهای معروف این دسته از سنسورها محسوب می‌شود.ADXL345 یک سنسور شتاب‌سنج سه محوره است، به این معنی که می‌تواند شتاب در جهت‌های x، y و z را اندازه‌گیری کند. این شتاب‌سنج با استفاده از اصول نیروی جاذبه‌ای کار می‌کند و تغییرات شتاب را در سه جهت مختصاتی تشخیص می‌دهد. ADXL345 دارای دو رابط ارتباطی معروف است، از جمله رابط I2C (Inter-Integrated Circuit) و SPI (Serial Peripheral Interface) که به صورت موازی و سری قابل اتصال است. این رابط‌ها به کنترلرها یا میکروپروسسورها امکان ارتباط با سنسور را می‌دهند و داده‌ها را به آن‌ها منتقل می‌کنند. ADXL345 قابلیت اندازه‌گیری شتاب در چهار دامنه‌ی مختلف را دارد، شامل ±۲g، ±۴g، ±۸g و ±۱۶g. این محدوده‌ها به معنی توانایی اندازه‌گیری شتاب در محدوده‌های مختلف نسبت به نیروی جاذبه‌ای هستند. دقت ADXL345 وابسته به دامنه‌ی اندازه‌گیری مورد استفاده است، اما به طور عمومی دقت آن برابر با ۰٫۱g است. این به این معنی است که مقادیر شتاب تا حدود یک دهم g قابل اندازه‌گیری هستند. ADXL345 دارای قابلیت کار در دماهای گسترده است، از -۴۰ درجه سانتی‌گراد تا +۸۵ درجه سانتی‌گراد است. ADXL345 دارای مصرف انرژی کم است و از این جهت برای برنامه‌ها و دستگاه‌هایی که از باطری کار می‌کنند، بسیار مناسب است.

  • نوع سنسور: شتاب‌سنج سه محوره
  • رابط ارتباطی: I2C و SPI
  • دامنه‌ی اندازه‌گیری: ±۲g، ±۴g، ±۸g، ±۱۶g
  • دقت: حدود ۰٫۱g
  • قابلیت کار در دماهای گسترده: -۴۰°C تا +۸۵°C
  • ولتاژ کاری: ۳٫۳ ولت
  • مصرف انرژی کم
  • کاربردها: روباتیک، اندازه‌گیری وضعیت حرکتی، ابزارهای پوشیدنی، دستگاه‌های هوشمند و …
  • دارای کتابخانه‌ها و راه‌اندازهای مختلف برای برنامه‌نویسی آسان.


بررسی پایه های ماژول ADXL345


 

 

  • VCC: پایه‌ی تغذیه، با ولتاژ ۳٫۳ ولت به آن وصل می‌شود.
  • GND: اتصال به منبع زمین یا زمین مدار.
  • CS (Chip Select): این پایه برای انتخاب دستگاه در رابط SPI استفاده می‌شود.
  • INT1: خروجی اعلان ۱، به وسیله‌ی این پایه می‌توانید خروجی تغییر شتاب را کنترل کنید.
  • INT2: خروجی اعلان ۲، برای کنترل تغییرات شتاب در صورتی که INT1 به‌عنوان خروجی مورد استفاده‌ قرار نگیرد، از این پایه استفاده می‌شود.
  • SDO/ALT ADDRESS: این پایه برای تنظیم آدرس I2C دستگاه استفاده می‌شود.
  • SDA: اتصال داده I2C، برای ارتباط با کنترلرها و دستگاه‌ها.
  • SCL: اتصال ساعت I2C، برای ارتباط با کنترلرها و دستگاه‌ها.
  • SA0/ALT ADDRESS: پایه‌ای برای تنظیم آدرس I2C دستگاه به‌صورت جایگزین.
  • CS: پایه‌ای که به‌صورت جایگزین می‌تواند برای انتخاب دستگاه در رابط SPI استفاده شود.
  • NC (Not Connected): پایه‌ای که به‌صورت استفاده‌نشده (غیرمتصل) است و باید خالی باقی‌بماند.

 

روش اتصال ADXL345 به آردوینو

 

برای راه اندازی ماژول از پروتکل I2C استفاده شده است. پایه SDA به پایه A4 آردوینو Uno متصل شده و پایه ی SCL به پایه A5 آردوینو Uno متصل شده است.

اموزش راه اندازی adxl345


برنامه آردوینو ماژول ADXL345


در این برنامه  ۵ LED در روی برد برد قرار گرفته است .LED وسط سقوط آزاد را تشخیص میدهد و در هنگا م سقوط آزاد چراغ آن خاموش میشود.۴ LED اطراف با متمایل شدن برد برد به سمت هر یک ازLED ها، آن LED روشن شده و با افزایش زاوایه شدن نور آن تغییر میکند.کد کلی برنامه به صورت زیر می باشد.

 

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

 

دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندس‌های دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید.

 

 


تحلیل کدآردوینو ماژول ADXL345


در ابتدا کتابخانه ی Adafruit_ADXL345  را از این لینک دانلود کنید. سپس کتابخانه  Adafruit_Sensor را از این لینک دانلود کنید. کتابخانه ی این ماژول را با نام Adafruit_ADXL345_U.h به برنامه اضافه میکنیم. برای استفاده از این کتابخانه باید کتابخانه های Adafruit_Sensor.h و Wire.h را نیز به برنامه اضافه کنیم.

Adafruit_ADXL345_Unified accel (54321);

 

از کلاس Adafruit_ADXL345_Unified یک شی به نام accel میسازیم.درون سازنده آن ID دلخواهی برای سنسور انتخاب میکنیم.انجام این کار زمانی که از چند ماژول استفاده میکنیم بسیار مفید می باشد.

if (!accel.begin())
{
Serial.println(" no ADXL345 detected ... Check your wiring!");
while (1);
}

با استفاده از این کد بالا اگر در تشخیص  ماژول و یا ارتباط با آن با مشکلی برخوردیم ،بر روی سریال مانیتور ارور no ADXL345 detected … Check your wiring به نمایش در می آید و برنامه متوقف می شود.

accel.setRange(ADXL345_RANGE_16_G);

تابع  setRange(range_t range)  دقت اندازه گیری سنسور را مشخص میکند. این تابع ممیتواند مقادیر زیر را دریافت کند.

  • ADXL345_RANGE_16_G
  • ADXL345_RANGE_8_G
  • ADXL345_RANGE_4_G
  • ADXL345_RANGE_2_G

در صورتی که از این تابع استفاده نشود، کامپایلر مقدار  ADXL345_RANGE_2_G  را به طور پیشفرض برای ماژول در نظر میگیرد.استفاده از مقادیر کوچکتر باعث افزایش دقت  و استفاده از مقادیر بزرگتر باعث میشود محدوده ی بیشتری اندازه گیری شود.

accel.setDataRate(ADXL345_DATARATE_0_20_HZ);

با استفاده از این تابع  میتوان سرعت آپدیت شدن مقادیر خروجی را تنظیم نمود. این تابع میتواند مقادیر زیر را دریافت کند:

  • 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

 

در صورت استفاده از فرکانس بیش از ۱۰۰ هرتز ، نویزگیری بسیار زیاد میشود.وو ددر صورت استفاده از فرکانس کمتر از ۶٫۲۵ هرتز ، سنسور به تغییرات دما بسیار حساس میشود .در صورتی که از این تابع در برنامه استفاده نشود ، کامپایلر به طور پیش فرض مقدار ADXL345_DATARATE_0_10_HZ را برای ماژول در نظر میگیرد.

sensors_event_t event;

یک اینستنس از  sensors_event_t به نام evevnt می سازیم و توسط تابع ()getEvent ،به شی ساخته شده از کلاس Adafruit_ADXL345_U.h به نام accle نسبت میدهیم. ما بقی کد ها نسبتا ساه می‌باشند و نیازی به توضیح آن ها نیست. برای دانلود کد های برنامه اینجا کلیک کنید

 


سخت افزار مورد نیاز


ماژول شتاب سنج سه محوره ADXL345

Arduino Uno

 

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

علیرضا قربانی

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

تبادل نظر و رفع عیب با ثبت دیدگاه

۴۴ دیدگاه

  • سلام
    با تشکر از زحماتتون اگه ممکنه کد محاسبه زاویه توسط این ماژول و نمایش اون روی lcd رو هم بزارین
    بازم ممنون

      • با سلام
        به دو روش کتابخانه ها در دسترس است. سریع ترین روش در صفحه محصول کالا در بخش دانلود کتابخانه قرار دارد، دانلود کرده و در مسیر نصب نرم افزار آردوینو در سیستم خود در پوشه libraries کپی کنید.
        روش دوم از طریق نرم افزار آردوینو بر روی manage libraries کلیک کنید و کتابخانه را فیلتر و نصب کنید.

        • آیا برای دانلود کتابخانه از سایت دانشجو کیت باید با مرور گر خاصی وارد شد؟ من با موبایلم وارد شدم اما موفق نشدم دانلود کنم چون قسمت دانلود نمایان نشد! اما با لپ تاپم وارد شدم دانلود کردم ولی وقتی با آردینو به مسیر زیپ ها میرم پوشه ها خالی نشون میده ! آیا میشه مشکل از سایت باشه و به درستی فایل ها دانلود نشن؟

        • در حال حاظر با دقت ترین سنسور ژیروسکوپ چیه ؟ میشه لینک دانلود کتابخانه برای mpu 6050برای رزبری پای ۴ واسم بگذارین؟ چه کتاب خانه هایی نیاز داره ؟

            • سلام من متوجه نشدم کجای این صفحه برای دانلود برم وقتی Go to file هم میرم هیچ قسمتی برای دانلود نمیبینم.. درضمن من لینک کتابخانه mpu6050 برای رزبری پای میخوام نه ADEXL345

              • با سلام
                برای رزبری پای این مورد تست نشده است و این آموزش فقط برای آردوینو است.

  • با سلام
    تشخیص وضعیت سقوط آزاد وقتی ماژول در حال چرخش به دور خودش هست امکان پذیره؟ اگر هست . نحوی انجام اون چطوره؟

  • سلام من این مدار رو بستم ولی اعدادی که نمایش داده میشه تغییرات لحظه ای داره بدون این که زاویه سنج رو تغییر بدیم اعداد بین سه عدد در حدود همون زاویه ای که قرار گرفته نوسان داره ایا میشه این تغییرات رو حذف کرد

    • با سلام
      همانطور که در متن آموزش توضیح داده شده است. در صورت اتتخاب فرکانس‌های بالا روی برد نویز دریافت می‌کنید. لطفا اطلاعات دقیق‌تری از برد و روش اجرای پروژه بیان بفرمایید؛ تا بتوانم مشکل را پیدا کنم.

  • سلام . ما وقتی لایبری هارو نصب میکنیم . و کد رو میزنیم میگه همچین اسمی (اسم کتابخونه) وجود ندارد

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

    • با سلام
      در اینصورت نیازی به تغییر در کدها نیست. رله را جایگزین ال ای دی کنید.

  • خسته نباشید مدتی درگیر این ماژولم و تقریبا با کاربرد های دیگشم هم اشنا شدم مثل تشخیص ضربه ، تشخیص حالت سکون و فعالیت ، تشخیص سقوط آزاد و… الان میخوام مقدار شتاب رو بدونم دقیقا چند؟ سوالم اینه آیا مقادیری که برای تغییر جهت در راستای محور ها نشان میده همون مقدار شتاب تو اون محور؟ یا بزارین سوالم رو اینطور بگم من میخوام مقدار لحظه ای (real time ) شتاب را در سقوط آزاد بدونم چقدره این سنسور مناسب این کار هست یا نه؟ اگر بله ممنون میشم راهنماییم کنین

  • سلام و تشکر از مهندس عزیز. جناب مهندس بنده کد های شما را ران کردن.همش ارور کتابخانه adxl345 و sensor و wprogram میده. کتابخونه ها رو هم دانلود کردم ولی مشکل رفع نمیشه.لطفا راهنمایی کتید

  • سلام خسته نباشید، بنده یک پروژه با همین ضمیمه دارم، ولی جوری هست که در یک سمت ماژول شتاب سنج و آردوینو wemos d1 که اطلاعات رو از طریق وای فای به یک آردوینوwemos دیگر ارسال کرده و روی صفحه نمایش نشان داد. چطور میتونید کمکم کنید ممنون میشم.