السبت، 16 مايو، 2015

استخدام لوحة أردوينو ليوناردو كالوحة مفاتيح و فأرة (عن طريق البلوتوث)

Arduino Leonardo As a Mouse & keyboard (control By Bluetooth)





تعتبر لوحة الأردوينو ليوناردو Arduino Leonardo احدى اهم و احدث اصدارات شركة أردوينو , اضافة مميزة أضيفت لهذه اللوحة الالكترونية, هذه اللوحة تعمل على المعالج ATmega32u4 المزود بخاصية اتصال USB خاصه تمكنه من الظهور لجهاز الكمبيوتر على انها MOUSE OR KEYBOARD, وهو الامر الذي سوف نكمل عليه مقالنا, اما باقي الخصاصه فهو مشابه للarduino uno من حيث سرعة الcrystal وعدد المداخل والمخارج واختلاف بسيط في بعض الوظائف.







ويجب الاشارة الى ان هذه الخاصيه متاحة ايضا في اللوحين(micro & Due).





في هذه التجربه سنقوم بما يلي : 

1) سنتحكم بمؤشر الفأرة على الكمبيوتر
2)سنتحكم بالأردوينو لتصبح كالوحة مفاتيح و لطباعه كلمات على برنامج تحرير نصوص (مثل notepad ) باستخدام البلوتوث, وقد ذكر في مقال سابق شرح عن استخدام البلوتوث \\الرابط . لجزء الhardware لن تحتاج سوى الى جهاز استقبال Bluetooth وبالطبع Arduino Leonardo وجهاز هاتف ذكي لارسال الاوامر. اما لجزء البرمجه فهو بسيط, فهناك مكتبة اساسية (Build-In) في لغة الاردوينو خاصه بهذه الوظائف, وسأقوم في مقالتي بعرض طريقة التعامل مع المكتبتين ثم سأقوم من خلال تجربة.


سنحتاج في هذه التجربة إلى :

1) لوحة أردوينو ليوناردو - مايكرو Leonardo,Micro
2) قطعه بلوتوث HC05 Or HC06 .
3)هاتف ذكي يعمل بنظام اندرويد .



قبل اكمال هذه المقال يجب عليك الأطلاع على مقالتنا السابقة للتعرف أكثر على كيفية عمل تزامن Pairing بين جهاز الحاسوب و الأندرويد "عليك الذهاب لاعدادات الهاتف , تشغيل البلوتوث و عمل تزامن مع البلوتوث المربوط مع الأردوينو"







هاتين المكتبتين ( Mouse & Keyboard ) اساسيتان في اللغه اي انهما لا تحتاجان الى تضمين في الكود لانهما اصلا مضمنات( اي لا يجب ان نعرفها باستخدام( #include) ولاستخدام احدى المكتبتين نقوم باعطاء امر البداية (Mouse.begin) وهذا الأمر يبدأ تواصل الاردوينو مع الجهاز على انها mouse ونفس الامر ينطبق على keyboard.begin

بعد تعريف الاردوينو على انها جهاز mouse or keyboard , نبدأ بالتحكم بها وبعمل برنامجنا للتحكم بها كما نريد فمن الممكن ان نتحكم بها عن طريق البلوتوث او الjoystick او مثلا IR remote او ما نريد.


للحصول على افضل شرح عن المكتبتين يجدر بك القراءة عن المكتبة من الreference الخاص بالموقع  وانا سأعتمد مبدأ المثال والشرح في المقال .

1) التحكم بالفأرة في جهاز الحاسوب بواسطة البلوتوث

في تجربتي الاولى قمت بالتحكم بالماوس عن طريق البلوتوث من هاتف ذكي, باستخدام تطبيق Arduino Bluetooth controller (لتحميل التطبيق من متجر جوجل بلاي من هنا)







وليس هناك توصيله بحاجه الى توضيح فقط بورد الليوناردو موصول معه البلوتوث (وانا استعملت HC-05 ) فقط قم بوصل مدخل 8 مع RX الخاص بالبلوتوث و 9 مع TX

التوصيل :







ويجب الاشارة الى ملاحظة مهمه, كن حذرا عند التعامل مع هذه الاوامر فعند تفعيل الكود على اللوح, ستحل ال Leonardo محل الmouse -وكذلك الkeyboard- تماما فكن متأكدا من استخدام جمل التحكم( If | switch ) بشكل جيد, ويمكنك استعمال Serial.print لعمل كود مناسب والتاكد من ان جمل التحكم خاصتك تعمل بالشكل المطلوب ثم يمكنك استعمال اوامر الماوس والكيبورد.


الكود
/*
Arduino leonardo contol Mouse through BT
written by : Motaz bany amer
http://www.genotronex.com
*/
#include<SoftwareSerial.h>
SoftwareSerial RC(9, 8);// bluetooth TX,RX
int RCD;//recieved value
int cspd = 10;//curser speed
void setup() {
  // put your setup code here, to run once:
  RC.begin(9600);
  Mouse.begin();
}

void loop() {
  // put your main code here, to run repeatedly:
  if (RC.available() > 0) {
    RCD = RC.read();//recieve value from bluetooth
    /*here we configure our code to recive spacifide val from the
    adapter and act accordingly
    some apps give you abilty to send any char you want and
    others give you pre specifide char
    OR IN BETTER CASES, you can create your own app with android :D*/
    if (RCD == 'F') {//in my code if I recived 'F' the curser should be go up
      Mouse.move(0, -cspd, 0);
      /*this instruction moves the cursor
       in (x_val, y_val , wheel);Noting that Y axes is inverted
       Note that if val= 0 mean no move,and val = number mean move in the direction with the
       given number of point
       **here the curser moves 10 points ber time*/
    }
    if (RCD == 'B') {
      Mouse.move(0, cspd, 0);//move down
    }
    if (RCD == 'R') {
      Mouse.move(cspd, 0, 0);//move right
    }
    if (RCD == 'L') {
      Mouse.move(-cspd, 0, 0);//move left
    }
    // if you want to move Diagonally you should use the commented code
    //but you mus make sure that your app has such option
   /* if (RCD == 'G') {
      Mouse.move(-cspd, -cspd, 0);//move up left
    }
    if (RCD == 'I') {
      Mouse.move(cspd, -cspd, 0);//move up right
    }
    if (RCD == 'H') {
      Mouse.move(-cspd, cspd, 0);//move down left
    }
    if (RCD == 'J') {
      Mouse.move(cspd, cspd, 0);//move down right
    }*/
    if (RCD == 'W' || RCD == 'w') {
      Mouse.click();
      /*this instruction make a mouse click with the left mouse button
       *we can set the mouse button th click-- Mouse.click(button);
       *Button= MOUSE_LEFT(defult) | MOUSE_RIGHT | MOUSE_MIDDLE
       */
    }
    if (RCD == 'U') {
      Mouse.click(MOUSE_RIGHT);//Right click
    }
    if (RCD == 'V') {
      Mouse.press();
      /*this instruction make a mouse press, like you click and still
       * holding down the button. It still holding the button untill
       * Mouse.release instruction follows and like mose click it can be set to any other
       * Mouse buuton
       */
    }
    if (RCD == 'v') {
      Mouse.release();//release a pressed button. It can be set to other buttons
    }
  }
}



ويجب الاشارة انه يمكنك استعمل اي رمز تريده, فقط تاكد من ضبط التطبيق والكود لارسال واستقبال القيم الصحيحه(مثلا قمت بضبط التطبيق لارسال F للحركه لاعلى وقمت بضبط الكود لتحريك الماوس للاعلى عند استقبال F )

2) التحكم بالوحة المفاتيح في جهاز الحاسوب بواسطة البلوتوث :

والان جزء الkeyboard , سنقوم بعمل برنامج بسيط لارسال كلمات من الهاتف وطبعاتها على notepad , البرنامج سوف يستقبل القيمه من البلوتوث ويطبعها على الكمبيوتر ويخزنها في string ويعرض القيم على شاشة السيريال عند تغيير حالة pin4 الى 0 (حيث انه معرف ك input_pull-up)






اولا قم بفتح البرنامج ثم حمل الكود الى الاردوينو .... وللقيام بالتجربه سنستعمل برنامج يرسل القيم من البلوتوث الى الاردوينو وانا استعملت برنامج Bluetooth terminal من متجر جوجل بلاي


البرنامج :

/*
Arduino leonardo contol Mouse through BT
written by : Motaz bany amer
http://www.genotronex.com
*/
#include<SoftwareSerial.h>
SoftwareSerial RC(9, 8);// bluetooth TX,RX
char RCD;
String printed;
void setup() {
  // put your setup code here, to run once:
  RC.begin(9600);
  Serial.begin(9600);
  Keyboard.begin();
  pinMode(4,INPUT_PULLUP);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (RC.available() > 0) {
    RCD = RC.read();//recieve value from bluetooth
    Keyboard.print(RCD);//print char as recieved byte by byte
   printed +=RCD;
  }
  if(digitalRead(4)==0){delay(1000);Serial.println(printed);}
}
/*if you want to record the words that been printed.. you should use string
 */

هنا برنامج البلوتوث على جهاز الأندرويد و اقوم بطباعه الجمل المراد ظهورها على برنامج ال Notepad على الجهاز 


الجمل التي يتم ارسالها عبر البلوتوث من جهاز الأندرويد تظهر على شاشة الحاسوب و يجب فتح برنامج notepad


اتمنى ان يكون الموضوع مفيدا والسلام عليكم .

الكاتب : معتز بني عامر - الأردن 

0 التعليقات :

إرسال تعليق

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.