آموزش آردوینوپروژه های آردوینو

معرفی شتاب سنج ADXL335 و اتصال به آردوینو

آیا تا به حال فکر کرده‌اید که گوشی هوشمند شما چگونه تشخیص می‌دهد که جهت بالا کدام سمت است؟ این یکی از نوآورانه‌ترین ویژگی‌های گوشی‌های هوشمند امروزی است. همه آن‌ها یک دستگاه کوچک به نام شتاب‌ سنج (Accelerometer) در مدار خود دارند که تشخیص می‌دهد وقتی دستگاه را به چپ و راست کج می‌کنید، چه اتفاقی می‌افتد. این‌طور است که گوشی شما می‌فهمد چه زمانی باید از حالت عمودی (Portrait) به حالت افقی (Landscape) تغییر وضعیت دهد.

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

بیایید بررسی کنیم که شتاب‌سنج‌ها چیستند، چه کاری انجام می‌دهند و چگونه کار می‌کنند.

شتاب‌سنج چگونه کار می‌کند؟

برای درک نحوه عملکرد شتاب‌سنج‌ها، یک توپ را در داخل یک مکعب سه‌بعدی تصور کنید.

حالت بی‌وزنی

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

حالت بی‌وزنی شتاب سنج

حرکت ناگهانی

حال فرض کنید هر دیواره نشان‌دهنده یک محور خاص است. اگر مکعب را ناگهان با شتاب 1g به چپ حرکت دهیم (یک نیروی جی 1g معادل شتاب گرانشی 9.8 متر بر ثانیه‌مربع است)، توپ بدون شک به دیواره X برخورد می‌کند. اگر نیروی وارد شده توسط توپ به دیواره X را اندازه‌گیری کنیم، می‌توانیم یک مقدار خروجی 1g در امتداد محور X به دست آوریم.

حرکت ناگهانی سنسور شتاب سنج

نیروی گرانش

حالا ببینیم اگر این مکعب را روی زمین قرار دهیم چه اتفاقی می‌افتد. توپ به سادگی روی دیواره Z می‌افتد و نیرویی معادل 1g وارد می‌کند، همان‌طور که در نمودار زیر نشان داده شده است:

اثر نیروی گرانش بر سنسور شتاب سنج

در این حالت، مکعب حرکت نمی‌کند، اما همچنان مقدار 1g در محور Z خوانده می‌شود. این به این دلیل است که گرانش (که در واقع نوعی شتاب است) توپ را با نیروی 1g به سمت پایین می‌کشد.

اگرچه این مدل دقیقاً نشان‌دهنده نحوه ساخت یک شتاب‌سنج واقعی نیست، اما اغلب برای درک این موضوع مفید است که چرا سیگنال خروجی شتاب‌سنج معمولاً به صورت ±g مشخص می‌شود، یا چرا شتاب‌سنج در حالت سکون مقدار 1g در محور Z نشان می‌دهد، یا چه مقادیری از شتاب‌سنج در جهت‌های مختلف انتظار می‌رود.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

شتاب‌سنج MEMS چگونه کار می‌کند؟

شتاب‌سنج MEMS (سیستم میکروالکترومکانیکی) یک ساختار میکروماشین‌شده است که روی یک ویفر سیلیکونی ساخته شده است. این ساختار توسط فنرهای پلی‌سیلیکونی معلق شده است و به آن اجازه می‌دهد هنگام شتاب‌گیری در امتداد محورهای X، Y و/یا Z انحراف پیدا کند.

شتاب‌سنج MEMS چگونه کار می‌کند؟

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

مطلب پیشنهادی:  ساخت ربات گربه رقصنده با آردوینو (آموزش کامل)

بررسی ماژول ADXL335

در هسته این ماژول، یک شتاب‌سنج MEMS سه‌محوره کوچک، کم‌مصرف و کم‌نویز از شرکت Analog Devices به نام ADXL335 قرار دارد. این سنسور نه تنها می‌تواند شتاب استاتیک ناشی از گرانش را اندازه‌گیری کند، بلکه شتاب دینامیک ناشی از حرکت، ضربه یا لرزش را نیز اندازه‌گیری می‌کند.

بررسی ماژول ADXL335

این ماژول سازگار با برد بورد، تمام پین‌های ADXL335 را به یک هدر 6 پین با فاصله 0.1 اینچ منتقل می‌کند، از جمله 3 خروجی آنالوگ برای اندازه‌گیری محورهای X، Y و Z، 2 پین تغذیه و یک پین تست خودکار (Self-Test).

تغذیه

ADXL335 با ولتاژ 1.8 تا 3.6 ولت DC کار می‌کند (معمولاً 3.3 ولت). با این حال، رگولاتور 3.3 ولت روی برد، آن را برای اتصال به میکروکنترلرهای 5 ولتی مانند آردوینو ایده‌آل می‌کند. این سنسور در حین کار عادی تنها 350 میکروآمپر جریان مصرف می‌کند.

محدوده اندازه‌گیری

ADXL335 دارای محدوده اندازه‌گیری کامل ±3g است. این بدان معناست که حداکثر مقدار شتابی که ADXL335 می‌تواند به دقت اندازه‌گیری و به عنوان خروجی نشان دهد، ±3g است. اگر به عنوان مثال با شتاب 4g حرکت کند، شتاب‌سنج خراب نمی‌شود، اما خروجی ممکن است به حد اشباع برسد.

حداکثر شتاب مطلق ADXL335 برابر با 10,000g است. در صورت قرار گرفتن در معرض شتاب‌های بیشتر از 10,000g، ممکن است ADXL335 خراب شود.

خروجی نسبت‌سنج (Ratiometric)

خروجی ADXL335 نسبت‌سنج است، بنابراین ولتاژ خروجی به طور خطی با شتاب در محدوده افزایش می‌یابد. این بدان معناست که خروجی اندازه‌گیری 0g همیشه در نصف ولتاژ تغذیه 3.3 ولت (1.65 ولت) قرار دارد، -3g در 0 ولت و +3g در 3.3 ولت است، با مقیاس‌بندی کامل در بین این مقادیر.

مشخصات فنی

در اینجا مشخصات فنی ADXL335 آورده شده است:

  • ولتاژ کاری: 1.8 تا 3.6 ولت
  • جریان کاری: 350 میکروآمپر (معمولی)
  • محدوده اندازه‌گیری: ±3g (محدوده کامل)
  • محدوده دمایی: -40 تا +85 درجه سانتی‌گراد
  • محورهای اندازه‌گیری: 3 محوره
  • حساسیت: 270 تا 330 میلی‌ولت بر g (نسبت‌سنج)
  • مقاومت در برابر ضربه: تا 10,000g
  • ابعاد: 4mm x 4mm x 1.45mm

 

پین‌های ماژول ADXL335

قبل از اینکه به اتصالات و کد مثال بپردازیم، بیایید نگاهی به پین‌های آن بیندازیم.

پین‌های ماژول ADXL335

  • VCC: پین تغذیه ماژول. آن را به خروجی 5 ولت آردوینو متصل کنید.
  • X-Out: ولتاژ آنالوگ متناسب با شتاب در محور X را خروجی می‌دهد.
  • Y-Out: ولتاژ آنالوگ متناسب با شتاب در محور Y را خروجی می‌دهد.
  • Z-Out: ولتاژ آنالوگ متناسب با شتاب در محور Z را خروجی می‌دهد.
  • GND: پین زمین.
  • ST (Self-Test): این پین ویژگی تست خودکار را کنترل می‌کند که به شما امکان می‌دهد عملکرد سنسور را در برنامه نهایی آزمایش کنید. این ویژگی در انتهای آموزش به طور عمیق‌تر بررسی شده است.

اتصال شتاب‌سنج ADXL335 به آردوینو

حالا که می‌دانیم شتاب‌سنج ADXL335 چگونه کار می‌کند، می‌توانیم آن را به آردوینو متصل کنیم.

اتصالات بسیار ساده هستند. ابتدا شتاب‌سنج را روی برد بورد نصب کنید. پین VCC را به پین 5 ولت آردوینو و پین GND را به پین زمین آردوینو متصل کنید. خروجی‌های X، Y و Z را به پین‌های آنالوگ A0، A1 و A2 آردوینو وصل کنید.

برای دریافت نتایج دقیق، باید ولتاژ مرجع آنالوگ (AREF) روی آردوینو را تغییر دهیم. این کار با اتصال پین 3.3 ولت آردوینو به پین AREF انجام می‌شود.

مطلب پیشنهادی:  راه اندازی موتور پله ای با موتور درایور و آردوینو

تصویر زیر نحوه اتصال را نشان می‌دهد.

اتصال شتاب‌سنج ADXL335 به آردوینو

کد آردوینو خواندن مقادیر شتاب‌سنج ADXL335

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

کد با تعریف پین‌های ورودی آنالوگ آردوینو شروع می‌شود که پین‌های خروجی X، Y و Z سنسور به آن‌ها متصل شده‌اند.

const int xInput = A0;
const int yInput = A1;
const int zInput = A2;

در ادامه، دو متغیر RawMin و RawMax تعریف می‌شوند. از آنجا که آردوینو دارای یک ADC 10 بیتی است (2^10 = 1024)، ولتاژهای خروجی ADXL335 که بین 0 تا 3.3 ولت هستند، به مقادیر عددی بین 0 تا 1023 تبدیل می‌شوند. به همین دلیل RawMin روی 0 و RawMax روی 1023 تنظیم شده است.

// تعیین محدوده کمینه و بیشینه برای هر محور
int RawMin = 0;
int RawMax = 1023;

متغیر sampleSize تعداد نمونه‌هایی را مشخص می‌کند که آردوینو باید در هر تبدیل ADC بگیرد. در اینجا sampleSize روی 10 تنظیم شده است تا نتایج دقیق‌تری به دست آید.

// گرفتن چندین نمونه برای کاهش نویز
const int sampleSize = 10;

در بخش setup()، ابتدا مرجع آنالوگ را با استفاده از تابع analogReference(EXTERNAL) روی حالت EXTERNAL تنظیم می‌کنیم. سپس ارتباط سریال با کامپیوتر را راه‌اندازی می‌کنیم.

هشدار: این کار ضروری است زیرا ما پین AREF آردوینو را به 3.3 ولت متصل کرده‌ایم. اگر analogReference(EXTERNAL) را فراخوانی نکنید، ولتاژ مرجع داخلی آردوینو و پین AREF به هم اتصال کوتاه می‌شوند و ممکن است به آردوینو آسیب برسد.

analogReference(EXTERNAL);
Serial.begin(9600);

در بخش loop()، هر 200 میلی‌ثانیه خروجی‌های آنالوگ سنسور را می‌خوانیم. توجه داشته باشید که به جای استفاده مستقیم از تابع analogRead()، از تابع سفارشی ReadAxis() استفاده می‌کنیم. این تابع به سادگی ده نمونه از تبدیل ADC می‌گیرد و میانگین آن‌ها را بازمی‌گرداند.

// خواندن مقادیر خام
int xRaw = ReadAxis(xInput);
int yRaw = ReadAxis(yInput);
int zRaw = ReadAxis(zInput);

خروجی کد در حالت های مختلف به شکل زیر خواهد بود:

کد آردوینو خواندن مقادیر شتاب‌سنج ADXL335

تبدیل خروجی ADXL335 به شتاب (g)

قطعه کد زیر مهم‌ترین بخش برنامه است. این کد ولتاژهای خروجی آنالوگ سنسور را به شتاب گرانشی (g) تبدیل می‌کند.

این تبدیل با استفاده از تابع map() داخلی IDE انجام می‌شود. وقتی map(xRaw, RawMin, RawMax, -3000, 3000) فراخوانی می‌شود، مقدار RawMin به -3000، مقدار RawMax به 3000 و مقادیر بین آن‌ها به مقادیر متناظر تبدیل می‌شوند.

اعداد -3000 و 3000 تصادفی نیستند. این اعداد در واقع نشان‌دهنده شتاب گرانشی اندازه‌گیری شده توسط سنسور بر حسب میلی‌جی (milli-g) هستند، یعنی ±3g (-3000 میلی‌جی تا 3000 میلی‌جی).

به عنوان مثال:

  • اگر سنسور روی محور X ولتاژ 0 ولت خروجی دهد (یعنی xRaw = 0)، تابع map() مقدار -3000 را بازمی‌گرداند که معادل -3g است.
  • اگر سنسور روی محور X ولتاژ 1.65 ولت خروجی دهد (یعنی xRaw = 511)، تابع map() مقدار 0 را بازمی‌گرداند که معادل 0g است.
  • اگر سنسور روی محور X ولتاژ 3.3 ولت خروجی دهد (یعنی xRaw = 1023)، تابع map() مقدار 3000 را بازمی‌گرداند که معادل +3g است.

اصطلاح نسبت‌سنج (Ratiometric) اکنون معنی بیشتری پیدا می‌کند، زیرا ولتاژ خروجی به طور خطی با شتاب در محدوده افزایش می‌یابد.

// تبدیل مقادیر خام به 'میلی‌جی'
long xScaled = map(xRaw, RawMin, RawMax, -3000, 3000);
long yScaled = map(yRaw, RawMin, RawMax, -3000, 3000);
long zScaled = map(zRaw, RawMin, RawMax, -3000, 3000);

در نهایت، خروجی سنسور با تقسیم بر 1000 به جی (g) کسری تبدیل می‌شود و روی مانیتور سریال نمایش داده می‌شود.

// تبدیل به جی (G) کسری
float xAccel = xScaled / 1000.0;
float yAccel = yScaled / 1000.0;
float zAccel = zScaled / 1000.0;

Serial.print("X, Y, Z  :: ");
Serial.print(xRaw);
Serial.print(", ");
Serial.print(yRaw);
Serial.print(", ");
Serial.print(zRaw);
Serial.print(" :: ");
Serial.print(xAccel,0);
Serial.print("G, ");
Serial.print(yAccel,0);
Serial.print("G, ");
Serial.print(zAccel,0);
Serial.println("G");

این توضیحات به شما کمک می‌کند تا نحوه کارکرد کد و تبدیل مقادیر خام سنسور به شتاب گرانشی را بهتر درک کنید.

ویژگی تست خودکار ADXL335

شتاب‌سنج ADXL335 دارای یک ویژگی تست خودکار است که به شما امکان می‌دهد عملکرد سنسور را در برنامه نهایی آزمایش کنید. پین ST (Self-Test) روی ماژول این ویژگی را کنترل می‌کند.

مطلب پیشنهادی:  دستور cos، sin و tan در آردوینو (سینوس، کسینوس و تانژانت)

ویژگی تست خودکار ADXL335

هنگامی که پین ST به 3.3 ولت متصل می‌شود، یک نیروی الکترواستاتیک به طور داخلی بر روی تیرک شتاب‌سنج اعمال می‌شود. حرکت حاصل از تیرک به کاربر امکان می‌دهد تشخیص دهد که آیا شتاب‌سنج عملکردی دارد یا خیر.

تغییرات مورد انتظار در خروجی به شرح زیر است:

  • محور X: -1.08g (-325 میلی‌ولت)
  • محور Y: +1.08g (+325 میلی‌ولت)
  • محور Z: +1.83g (+550 میلی‌ولت)

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

هشدار: قرار دادن پین ST در معرض ولتاژهای بالاتر از 3.6 ولت ممکن است به طور دائمی به شتاب‌سنج آسیب برساند.

موارد موجود در فایل : سورس کامل

5 (1 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

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

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

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *