التحكم بالحاسوب باستخدام الاردوينو والهاتف الذكي

متوسط

image_pdf

مقدمة

تستطيع أن تستخدم هاتفك الذكي كفأرة تمكنك من التحكم بالحاسوب وذلك باستخدام الأردوينو ووحدة البلوتوث، سنعمل ذلك عبر برمجة الاردوينو وتوصيله بالحاسوب ليتلقى أوامر التحكم من خلال الهاتف الذكي

المواد والأدوات

smartphone-controlled-mouse

1× اردوينو اونو

smartphone-controlled-mouse

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.smartphone-controlled-mouse

اختر نوع وحدة البلوتوث من القائمة النوع المستخدم في هذا الدرس 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 التالي.

smartphone-controlled-mouse

الصق الكود البرمجي وارفعه للوحة الاردوينو من قائمة 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

يمكنك التحكم بالحاسوب عن بعد باستخدام الاردوينو وهاتفك الذكي بعد رفع الكود البرمجي.

اختبر صحة خطواتك.

 لا تنسَ فصل مصدر الطاقة بعد الانتهاء من استخدام النظام.

X
تم إضافة المنتج إلى السلة بنجاح