امروزه با پیشرفت علوم و در نتیجه پیشرفت تجهیزات ، فرایند کنترل لوازم ساده تر از قبل شده اند . در این میان راحت شدن کنترل لوازم و گجت های کاربردی و روزمره از اهمیت بالایی برخوردارند . تصور کنید برای خاموش کردن برق اتاق خوابتان نیازی به بیرون اومدن از تخت خواب نباشد و تنها با یک اشاره لامپ اتاقتان خاموش شود !
در اینجا قصد داریم با یک ماژول ساده و یک برد آردوینو وسیله ای بسازیم که تنها با حرکت دایره ای انگشتان دست صدای کامپیوتر رو زیاد و کم کنید .
برای ساخت این مدار به قطعات و ماژول های زیر نیاز دارد :
آردوینو مدل Leonardo یا Pro micro
ماژول APDS9960
برد بورد
سیم برد برد جهت اتصال ماژول و آردوینو
نکته : این پروژه تنها برای مدل های Leonardo و Pro Micro می باشد .
اما عملکرد این پروژه به چه صورتی است ؟
در این پروژه ما از یک آردوینو Leonardo یا Pro micro استفاده میکنیم . در این دو مدل آردوینو از میکرو کنترلر ATmega32u4 استفاده شده است که دارای واحد USB می باشند . به همین دلیل این دو مدل آردوینو با کتابخانه های موس و کیبورد سازگار اند . کتابخانه های موس و کیبورد کتابخانه هایی هستند که می توان از آن ها برای ساخت موس و کیبور استفاده کرد . در این حالت با اتصال آردوینو به کامپیوتر می توان هر مقداری را تایپ کرد و یا پوینتر موس را به هر نقطه ای از نمایشگر منتقل نمود .
ماژولی که در این پروژه می خواهیم از آن استفاده کنیم ، ماژول CJMCU9960 است . این ماژول بر پایه چیپ APDS9960 می باشد . این چیپ شامل یک دیود فرستنده IR و یک آرایه از گیرنده های IR است . APDS9960 توانایی تشخیص رنگ ، تشخیص فاصله و همچنی توانای تشخیص حرکت دست را دارد . از این سنسور در تلفن های همراه جهت تشخیص رفتار کاربر استفاده می شود ( کنترل نمایشگر بر اساس نور محیط ، حرکت دست و … ) .
APDS9960 دارای رابط ارتباطی I2C می باشد . برای راه اندازی این ماژول می توان طبق آدرس ها و مقادیر رجیستری ، ماژول را تنظیم و پارامتر های اندازه گیری شده را خواند . اما راه کار ساده تر استفاده از کتابخانه Arduino_APDS9960 است . در این کتابخانه تابع هایی برای راه اندازی و خواندن مقادیر اندازه گیری شده APDS9960 وجود دارد . این کابخانه را می توانید از لینک زیر دانلود کنید :
https://github.com/arduino-libraries/Arduino_APDS9960/archive/master.zip
سنسور APDS9960 تنها توانایی تشخیص حرکت به سمت جهت های بالا ، پایین ، چپ و راست را دارد . با چرخاندن انگشت دست ، در صورتی سنسور پایین تر از مرکز چرخش انگشت باشد ، سنسور چرحش ساعت گرد انگشت را به صورت حرکت به سمت بالا و چرخش پاد ساعت گرد را به صورت حرکت به سمت پایین تشخیص می دهد . از این قابلیت جهت تشخیص جهت حرکت انگشتان دست استفاده میکنیم .
ماژول APDS9960 دارای ولتاژ تغذیه 3.3 ولت است (برد این ماژول فاقد رگولاتور است ) لذا در راه اندازی آن به تغذیه ماژول توجه گردد .
شماتیک مدار :
پین های ماژول را به صورت زیر به آردوینو متصل کنید :
پین های SDA و SCL ماژول را به ترتیب به پین های SCL و SDA آردوینو متصل کنید .
در اتصال تغذیه ماژول حتما دفت شود که از پین 3.3 آردوینو استفاده کنید .
کد های پروژه :
ابتدا کتابخانه APDS9960 و KeyBoard را باید وارد کرد :
#include <Arduino_APDS9960.h> #include <Keyboard.h>
بعد از وارد کدن کتابخانه ، نوبت به راه اندازی خروجی کیبورد و APDS9960 است که در تابع setup این کار صورت میگیرد . همچنین از یک شرط برای تشخیص اتصال صحیص APDS9960 به آردوینو استفاده میکنیم . این شرط به این صورت است که اگر مشکلی در ارتباط با APDS9960 وجود داشت ، LED متصل به پین 13 به صورت چشمک زن دربیاد .
void setup() { Serial.begin(9600); // سریال آردوینو فعال می گردد تا در پیغام های مرتبط با حرکت دست به ترمینال ارسال شوند pinMode(13,OUTPUT);//پین 13 خروجی تعریف می شود Keyboard.begin();//کیبورد فعال می شود if(!APDS.begin)//ارتباط با سنسور شروع می شود و پس از آن صحت ارتباط بررسی می گردد { digitalWrite(13,HIGH);//در صورت عدم اتصال صحیص سنسور و آردوینو ، پین 13 به صورت چشمک زن در می آید delay(500) digitalWrite(13,HIGH); delay(500); } }
حال نوبت به قالب اصلی برنامه است که در تابع loop نوشته می شود . الگوی این قسمت بسیار ساده است . به این صورت که از دو شرط استفاده میکنیم که اگر سنسور حرکت به سمت بالا را تشخیص داد ، کلید افزایش صدا یا کلید بالا و در صورت تشخیص حرکت به سمت پایین کلید کاهش صدا یا کلید پایین را به کامپیوتر ارسال کند (ارسال مقدار هر کلید توسط کتابخانه KeyBoard ، همانند فشردن آن کلید بر روی کیلورد کامپیوتر است .
void loop() { if (APDS.gestureAvailable()) { //شرط تشخیص حرکت int gesture = APDS.readGesture();//مقدار حرکت تشخیص داده شده توسط سنسور در یک متعیر ریخته می شود switch (gesture) { // برای هر کدام از حالت های خرکت یک شرط گزاشته می شود case GESTURE_UP: //در صورت تشخیص حرکت به سمت بالا دستورات زیر اجرا می شوند Serial.println("Detected UP gesture"); Keyboard.write(KEY_RIGHT_ARROW);//ارسال کد کلید بالا جهت افزایش صدا Keyboard.releaseAll();// این دستور کاری مشابه برداشتن انگشت از روی کلید کیبورد انجام می دهد break; case GESTURE_DOWN: // در صورت تشخیص حرکت به سمت پایین کد های زیر اجرا می گردد که همانند دستورات بالا است Serial.println("Detected DOWN gesture");// این بار مقدار کلید پایین جهت کاهش صدا ارسال می شود Keyboard.write(KEY_LEFT_ARROW); Keyboard.releaseAll(); break; case GESTURE_LEFT: Serial.println("Detected LEFT gesture"); break; case GESTURE_RIGHT: Serial.println("Detected RIGHT gesture"); break; } } }
کد های کامل پروژه :
#include <Keyboard.h> #include <Arduino_APDS9960.h> void setup() { Serial.begin(9600); pinMode(13,OUTPUT); Keyboard.begin(); digitalWrite pinMode(13,OUTPUT); if (!APDS.begin()) { digitalWrite(13,HIGH); delay(500); digitalWrite(13,LOW); delay(500); } } void loop() { if (APDS.gestureAvailable()) { int gesture = APDS.readGesture(); switch (gesture) { case GESTURE_UP: Serial.println("Detected UP gesture"); Keyboard.write(KEY_RIGHT_ARROW); Keyboard.releaseAll(); break; case GESTURE_DOWN: Serial.println("Detected DOWN gesture"); Keyboard.write(KEY_LEFT_ARROW); Keyboard.releaseAll(); break; case GESTURE_LEFT: Serial.println("Detected LEFT gesture"); break; case GESTURE_RIGHT: Serial.println("Detected RIGHT gesture"); break; } } }
کد های فوق را بر روی برد آردوینو آپلود و سپس یک فابل صوتی را بر روی کامپیوتر خود اجرا کنید . در این حالت ابزار Speaker (تغییر حجم صدا ویندوز ) را باز کنید .
حال با چرخش انگشت خود به صورت ساعت گرد در مقابل ماژول APDS9960 صدا افزایش و با چرخش پاد ساعت گرد حجم صدا کاهش می یابد .