در سلسله آموزش های تحلیل و بررسی کتابخانه های آردوینو، این قسمت به بررسی کتابخانه APDS9960 می پردازیم. این کتابخانه که برای سنسوری با همین نام توسعه یافته، راه اندازی و کار با آن را بسیار تسریع می بخشد. سنسور ADPS9960 یک سنسور فوق العاده کاربردی است. این سنسور دارای ویژگی های فراوانی نظیر تشخیص مجاورت، رنگ و حرکت است. از طرفی دیگر این سنسور در برد تازه توسعه یافته NANO BLE نیز به کار رفته است. در این آموزش به تحلیل و بررسی کتابخانه این سنسور پرکاربرد می پردازیم. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک، همراه باشید.
نصب کتابخانه ADPS9960
به منظور استفاده از کتابخانه ADPS9960، ابتدا می بایست آن را نصب کنیم. در این قسمت به نصب کتابخانه سنسور شتاب سنج با جستجو در مخازن آردوینو می پردازیم. به همین منظور، ابتدا در نرم افزار آردوینو بر روی گزینه Tools و سپس Manage Libraries را کلیک کنید. پس از کلیک بر روی این گزینه، با تصویر زیر رو به می شوید. این منو کتابخانه های در دسترس را به شما نشان می دهد. شما نیز می توانید با جستجوی نام کتابخانه مورد نظر خود، آن را در مخازن آردوینو یافته و سپس نصب کنید.
مطابق فلش مشخص شده در تصویر فوق، در کادر جستجو عبارت APDS9960 را تایپ کنید. پس از چند لحظه با تصویر زیر رو به رو می شوید. در این مرحله، کتابخانه مشخص شده با کادر قرمز رنگ را با کلیک بر روی گزینه install، نصب کنید.
الزامات و نکات فنی استفاده از کتابخانه APDS9960
همانطور که گفته شد از این سنسور در طراحی برد NANO BLE استفاده شده است. این سنسور دارای ارتباط I2C بوده که به صورت سخت افزاری با بردها و میکروکنترلرها قابلیت راه اندازی دارد. از این رو دقت نظر لازم را در نظر داشته باشید. از طرفی دیگر، با توجه به پشتیبانی کتابخانه از I2C سخت افزاری، انتظار می رود این کتابخانه علاوه بر بردهای آردوینو، روی بردهای ESP نیز قابل استفاده باشد.
توابع کلیدی کتابخانه APDS9960
پس از بررسی نحوه نصب و الزامات فنی، نوبت به تحلیل و بررسی توابع کلیدی می رسد. توابع کلیدی و کاربردی کتابخانه در جدول زیر لیست شده اند.
شرح | ورودی ها | تابع |
این تابع یک شی از کلاس کتابخانه ایجاد کرده و آن را راه اندازی می کند. ورودی نخست اختیاری بوده و در صورت عدم تعیین پورت I2C به طور خودکار شناسایی خواهد شد.
ورودی دوم نیز شماره پایه جهت راه اندازی سنسور را تعیین می کند. از آنجاییکه این سنسور دارای پایه جهت راه اندازی است، پایه متصل از میکروکنترلر به سنسور باید تعیین شود. |
ورودی اول از نوع اشاره گر به پورت سخت افزاری I2C
ورودی دوم از نوع INT جهت تعیین پایه راه انداز سنسور |
APDS9960(TwoWire &wire, int intPin) |
به کمک این تابع سنسور راه اندازی شده و ارتباط بین برد آردوینو و سسنور برقرار می شود. | بدون ورودی | bool begin() |
به کمک این تابع در دسترس بودن واحد تشخیص حرکت تعیین می گردد. در صورتیکه خروجی تابع ۱ شود این واحد در دسترس خواهد بود. | بدون ورودی | int gestureAvailable() |
به کمک این تابع مقدار وضعیت حرکت خوانده شده و در خروجی قرار می گیرد. این تابع دارای مقادیر از پیش تعریف شده به صورت زیر است.
********** GESTURE_UP: سنسور رو به بالاست ********** GESTURE_DOWN: سنسور رو به پایین است. ********** GESTURE_LEFT: سنسور به طرف چپ گرفته شده است. *********** GESTURE_RIGHT: سنسور به طرف راست گرفته شده است.
|
بدون ورودی | int readGesture() |
به کمک این تابع در دسترس بودن واحد تشخیص رنگ تعیین می گردد. در صورتیکه خروجی تابع ۱ شود این واحد در دسترس خواهد بود. | بدون ورودی | int colorAvailable() |
به کمک این تابع رنگ های قرمز، آبی و سبز خوانده شده و مقدار(شدت) آن در ورودی های اول تا سوم قرار می گیرند. در صورتیکه خواندن مقادیر موفقیت آمیز باشند، خروجی تابع true خواهد بود. | ورودی اول از نوع صحیح جهت تعیین رنگ قرمز
ورودی دوم از نوع صحیح جهت تعیین رنگ سبز ورودی سوم از نوع صحیح جهت تعیین رنگ آبی
|
bool readColor(int& r, int& g, int& b) |
به کمک این تابع در دسترس بودن واحد تشخیص مجاورت تعیین می گردد. در صورتیکه خروجی تابع ۱ شود این واحد در دسترس خواهد بود. | بدون ورودی | int proximityAvailable() |
به کمک این تابع میزان مجاورت خوانده شده و در خروجی قرار می گیرد. این تابع دارای سه خروجی است. خروجی ۰ به معنای تشخیص نزدیک بودن شی است. خروجی ۲۵۵ به معنای دور بودن شی نسبت به سنسور و خزوجی ۱- به معنای خطاست. | بدون ورودی | int readProximity() |
به کمک این تابع میزان حساسیت سنسور مجاورت تعیین می گردد. توجه داشته باشید که در حالت عادی حساسیت سنسور ۱۰۰ است. زمانی که شما عددی در ورودی قرار می دهید، این عدد از ۱۰۰ کسر می شود. به عنوان مثال با قرار دادن عدد ۸۰ در ورودی، حساسیت به ۲۰ خواهد رسید. مقادیر بیش از ۱۰۰ نیز ۱۰۰ در نظر گرفته خواهند شد. | ورودی از نوع بدون علامت ۸ بیتی | void setGestureSensitivity(uint8_t sensitivity) |
پس از بررسی توابع کلیدی و کاربردی، نوبت به اجرای یک نمونه برنامه ساده می رسد. این موضوع را در قسمت بعدی مورد بررسی قرار خواهیم داد.
اجرای یک نمونه برنامه
پس از بررسی توابع کلیدی، در این قسمت به اجرای یک نمونه برنامه می پردازیم. در این برنامه رنگ خوانده شده و در خروجی به کاربر نمایش داده می شود.
#include <Arduino_APDS9960.h> //اضافه کردن کتابخانه به برنامه //توجه: می توان شی از کلاس تعریف نکرد و با اسم تعریف شده در کتابخانه، آن را راه اندازی نمود. این اسم APDS است. void setup() { Serial.begin(9600); while (!Serial); if (!APDS.begin()) { Serial.println("Error initializing APDS-9960 sensor."); } } void loop() { while (! APDS.colorAvailable()) { //انتظار برای آماده شدن برای راه اندازی واحد تشخیص رنگ سنسور delay(5); } int r, g, b; //تعریف متغیر برای ذخیره رنگ APDS.readColor(r, g, b); //خواندن رنگ و قرار دادن در ورودی ها // چاپ مقادیر در خروجی Serial.print("r = "); Serial.println(r); Serial.print("g = "); Serial.println(g); Serial.print("b = "); Serial.println(b); Serial.println(); // برای خواندن مجدد یک ثاینه صبر می کنیم. delay(1000); }
لوازم مورد نیاز
جمع بندی
در این آموزش به تحلیل و بررسی کتابخانه APDS9960 پرداختیم. مطابق رویه معمول در تحلیل و بررسی کتابخانه ها، ابتدا به نصب کتابخانه و سپس الزامات فنی آن پرداختیم. سپس در ادامه توابع کلیدی و کاربردی کتابخانه مورد تحلیل و بررسی قرار گرفت. در نهایت با ارائه یک مثال، نحوه استفاده از توابع در یک برنامه عمل را شرح دادیم. سنسور APDS9960 یک سنسور فوق العاده کاربردی بوده که توانایی تشخیص رنگ، حرکت و مجاورت را در خود جای داده است. از این سنسور در برد NANO BLE نیز بهره گرفته شده است.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
سلام من کدی که این بالا بود رو آپلود کردم ولی متاسفانه سنسور کار نکرد و این ارور رو داد: Error initializing APDS-9960 sensor سیم ها صحیح متصل شدن و میکرو و سنسور هم سالمن.راه حل برطرف کردن این ارور چیه به نظرتون؟
با سلام
این ارور بابت عدم ارتباط سنسور با برد است. اتصالات را بررسی کنید. همچنین دیباگ کردن مشکلات راه اندازی بایستی از سمت خودتان صورت بگیرد. چرا که براساس هر سیستم متفاوت است.