مقدمة
تستطيع أن تستخدم هاتفك الذكي كفأرة تمكنك من التحكم بالحاسوب وذلك باستخدام الأردوينو ووحدة البلوتوث، سنعمل ذلك عبر برمجة الاردوينو وتوصيله بالحاسوب ليتلقى أوامر التحكم من خلال الهاتف الذكي
المواد والأدوات
1× اردوينو اونو
1× موديول بلوتوث من النوع HC-06
1× هاتف بنظام اندرويد
توصيل الدائرة
للمزيد حول وحدة البلوتوث يمكنك الرجوع للدرس التالي نظام التحكم في الإضاءة عبر البلوتوث.
كود اردوينو IDE
قبل رفع الكود البرمجي للوحة الاردوينو عد للدائرة الكهربائية وافصل السلكين المربوطين بالمنافذ A4 و A5.
بعد ذلك ارفع الكود البرمجي للوحة الاردوينو وبعد اكتمال عملية الرفع أعد الأسلاك كما كانت.
int datareceived[5] {0,0,0,0}; // To store byte from phone int in_byte = 0; int array_index = 0; int l_prev=0,r_prev=0; // previous status of mouse left and right click void setup() { Serial.begin (9600); // starts the serial monitor } int height=0,width=0; void loop() { int clicks=0; int sensitivity=20; // you can adjust the sensitivity int xpos=0,ypos=0; if (Serial.available() > 0) { //recieve byte from phone in_byte= Serial.read(); //store in byte into a variable if (in_byte == (255)) { // if the variable is 0 stet the array inxed to 0. array_index = 0; } datareceived[array_index] = in_byte; //store number into array array_index = array_index +1; if(datareceived[1]>=110) xpos=map(datareceived[1],110,172,0,sensitivity); // When moved right if(datareceived[1]<=70) xpos=map(datareceived[1],60,1,0,-sensitivity); // When moved left if(datareceived[2]>=110) ypos=map(datareceived[2],110,255,0,sensitivity); // When moved down if(datareceived[2]<=60) ypos=map(datareceived[2],70,1,0,-sensitivity); // When moved up if(datareceived[3]==1 && l_prev==0) // TO recognise a single button press clicks=1; else if(datareceived[3]==2 && r_prev==0) clicks=2; else if(datareceived[3]==3 || datareceived[3]==4) clicks=datareceived[3]; // scroll l_prev=datareceived[3]; r_prev=datareceived[3]; if(xpos!=0 or ypos!=0 or clicks!=0) // when either of the joystick is moved or the button is pressed or scrolled { height=height+ypos; width=width+xpos; if(height>=799) height=799; if(height<=0) height=0; if(width>=1279) width=1279; if(width<=0) width=0; Serial.print(width); Serial.print(":"); Serial.print(height); Serial.print(":"); Serial.println(clicks); clicks=0; } } }
شرح الكود البرمجي
في المصفوفة datareceived ستخزن البيانات التي ستتم قراءتها من الهاتف الذكي وستكون قيمتها الابتدائية=0.
int datareceived[5] {0,0,0,0}; // To store byte from phone
في المتغيرين l_prev و r_prev=0 سيتم تخزين القيم الابتدائية لحالة الحركة ليمين ويسار الحاسوب =0.
int l_prev=0,r_prev=0; // previous status of mouse left and right click
في دالة ()void loop:
المتغير sensitivity=20 يمثل حساسية الحركة والانتقال من مكان لآخر يمكنك تغيير القيمة.
متغير xpos يشير إلى موقع السهم على محور x في شاشة الكمبيوتر وقيمته الابتدائية = 0.
متغير ypos يشير إلى موقع السهم على محور y في شاشة الكمبيوتر وقيمته الابتدائية = 0.
int sensitivity=20; // you can adjust the sensitivity int xpos=0,ypos=0;
في المصفوفة datareceived سيتم تخزين القيم المقروءة من الهاتف الذكي وتحديثها بشكل مستمر.
datareceived[array_index] = in_byte; //store number into array
بعد قراءة البيانات من الهاتف الذكي سيتم تحديد وجهة الحركة للسهم.
إذا كانت القيم المقروءة >=110 ستكون حركة السهم لليمين.
إذا كانت القيم المقروءة <=70 ستكون حركة السهم لليسار.
إذا كانت القيم المقروءة >=110 ستكون حركة السهم للأسفل.
إذا كانت القيم المقروءة <=60 ستكون حركة السهم للأعلى.
if(datareceived[1]>=110) xpos=map(datareceived[1],110,172,0,sensitivity); // When moved right if(datareceived[1]<=70) xpos=map(datareceived[1],60,1,0,-sensitivity); // When moved left if(datareceived[2]>=110) ypos=map(datareceived[2],110,255,0,sensitivity); // When moved down if(datareceived[2]<=60) ypos=map(datareceived[2],70,1,0,-sensitivity); // When moved up
هنا سيتم تحديد النقر هل هو لزر اليسار أو لزر اليمين.
if(datareceived[3]==1 && l_prev==0) // TO recognise a single button press clicks=1; else if(datareceived[3]==2 && r_prev==0) clicks=2; else if(datareceived[3]==3 || datareceived[3]==4)
هنا سيتم تحديد مكان الانتقال إما لأعلى أو أسفل الصفحة.
clicks=datareceived[3]; // scroll
برنامج MIT App Inventor
حمّل تصميم واجهة المستخدم والكود البرمجي من هنا.
من المتصفح افتح موقع MIT App Inventor.
أنشئ حساب على الموقع ثم انقر علي Create Apps.
من قائمة Project اختر Import projects (.aia) from my computer ثم انقر على الملف الذي حملته مسبقًا ويحتوي على واجهة المستخدم والكود البرمجي.
من قائمة Connect اختر Al companion
سيظهر كود ورمز مكون من 6 حروف.
حمّل تطبيق MIT App Inventor على جهازك الذكي.
يمكنك ادخال الرمز في المستطيل أو النقر على scan QR code ومسح الكود السابق.
ثم انقر على connect with code.
ستظهر هذه الواجهة انقر على Bluetooth Connect.
اختر نوع وحدة البلوتوث من القائمة النوع المستخدم في هذا الدرس HC-06.
ستظهر كلمة Connected في حال اكتمال عملية الاتصال.
شرح لطريقة استعمال الواجهة.
كود البايثون
في البداية عليك تنصب برنامج Python 3 يمكنك الرجوع للدرس التالي لمعرفة كيفية تنصيبه تنصيب Python 3.
انقر بالسهم اليمين على Command Prompt واختر من القائمة Run as administrator.
ادخل على مسار برنامج البايثون.
(هذا السطر قابل للتغيير بناء على موقع برنامج البايثون في جهازك)
cd C:\Program Files (x86)\Python39-32
حدّث Pip من خلال كتابة الأمر التالي.
python -m pip install --upgrade pip
حمّل مكتبة فأرة الحاسوب.
python –m pip install mouse
حمّل مكتبة pyserial.
python -m pip install pyserial
افتح برنامج IDLE (Python 3.9 32-bit) من قائمة File اختر New File التالي.
الصق الكود البرمجي وارفعه للوحة الاردوينو من قائمة Run انقر على Run module.
import mouse, sys import time import serial mouse.FAILSAFE=False ArduinoSerial=serial.Serial('com3',9600) #Specify the correct COM port time.sleep(1) #delay of 1 second while 1: data=str(ArduinoSerial.readline().decode('ascii')) (x,y,z)=data.split(":") # read the x and y axis data (x,y)=(int(x),int(y)) # convert to int mouse.move(x,y) # move the cursor to desired coordinates if '1' in z: mouse.click(button="left") #clicks mouse button elif '2' in z: mouse.click(button="right") elif '3' in z: mouse.wheel(delta=-1) # Scroll down elif '4' in z: mouse.wheel(delta=1) # Scroll up
شرح الكود البرمجي
افتح صفحة جديدة في IDLE Python وقم باستدعاء المكتبات المطلوبة mouse, sys serial python و time.
import mouse, sys import time import serial
حدد المنفذ COM المستخدم في الاتصال مع الاردوينو، لديك وقم بتعديل الأمر في السطر التالي حسب رقم المنفذ.
(يمكنك تعيينه عن طريق برنامج اردوينو IDE من قائمة Port).
ArduinoSerial=serial.Serial('com3',9600) #Specify the correct COM port
هنا تتم قراءة القيم من المنافذ التناظرية A0 و A1 وسيتم تحريك السهم في أماكن مختلفة على الشاشة بناء على هذه القيم.
while 1: data=str(ArduinoSerial.readline().decode('ascii')) (x,y,z)=data.split(":") # read the x and y axis data (x,y)=(int(x),int(y)) # convert to int mouse.move(x,y) # move the cursor to desired coordinates
بناء على القراءات سيتم تحديد حركة السهم إما للأعلى أو للأسفل أو لليمين أو لليسار.
if '1' in z: mouse.click(button="left") #clicks mouse button elif '2' in z: mouse.click(button="right") elif '3' in z: mouse.wheel(delta=-1) # Scroll down elif '4' in z: mouse.wheel(delta=1) # Scroll up
يمكنك التحكم بالحاسوب عن بعد باستخدام الاردوينو وهاتفك الذكي بعد رفع الكود البرمجي.
اختبر صحة خطواتك.
لا تنسَ فصل مصدر الطاقة بعد الانتهاء من استخدام النظام.