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

در اینجا قصد داریم با یک ماژول ساده و یک برد آردوینو وسیله ای بسازیم که تنها با حرکت دایره ای انگشتان دست صدای کامپیوتر رو زیاد و کم کنید .

 

برای ساخت این مدار به قطعات و ماژول های زیر نیاز دارد :

 

آردوینو مدل 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 صدا افزایش و با چرخش پاد ساعت گرد حجم صدا کاهش می یابد .

 

 

Tags:
About Author: USER_4