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

0

بسم الله الرحمن الرحيم 

يعد هذا المشروع من احد المشاريع المثيرة للإنتباه والتى تعد من المشاريع المميزة فى عالم الأردوينو وهو اننا سنتحكم في (تشغيل - ايقاف - رفع الصوت - خفض الصوت ) الخاص باي فيديو بدون ان نقوم بلمس الجهاز الخاص بنا بل سنقوم بعمل هذا التحكم عن طريق حركة يد امام حساس الموجات الفوق صوتية باستعمال كود اردوينو
وسكربت بايثون 



الأدوات :

arduino uno
2x ultrasonic sensor

arduino uno

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

ultrasonic sensor

حساس الموجات الفوق صوتية الذي استخدمته فى حساب المسافه التي يقطعها الجسم او اليد ولقد تم شرحه فى دروس عديدة سابقه 


ثانيا التوصيلات :




 يحتوي حساس التراسونيك علي منفذين echo و trig 
حيث يعد منفذ trig هو المنفذ الذي يستلم منه الحساس البلصه او الإشارة الذي سيخرجها 
ومنفذ echo هو المنفذ الذي سيرسل عليه الحساس زمن ذهاب ورجوع هذه الإشارة وبالقيام ببعض العمليات الحسابية يمكننا ايجاد المسافة 

كود الأردوينو :

const int trigger1 = 2; //Trigger pin of 1st Sesnor
const int echo1 = 3; //Echo pin of 1st Sesnor
const int trigger2 = 4; //Trigger pin of 2nd Sesnor
const int echo2 = 5;//Echo pin of 2nd Sesnor

long time_taken;
int dist,distL,distR;

void setup() {
Serial.begin(9600);   
pinMode(trigger1, OUTPUT); 
pinMode(echo1, INPUT); 
pinMode(trigger2, OUTPUT); 
pinMode(echo2, INPUT); 
}
/*###Function to calculate distance###*/
void calculate_distance(int trigger, int echo)
{
digitalWrite(trigger, LOW);
delayMicroseconds(2);
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
digitalWrite(trigger, LOW);
time_taken = pulseIn(echo, HIGH);
dist= time_taken*0.034/2;
if (dist>50)
dist = 50;
}
void loop() { //infinite loopy
calculate_distance(trigger1,echo1);
distL =dist; //get distance of left sensor

calculate_distance(trigger2,echo2);
distR =dist; //get distance of right sensor
//Pause Modes -Hold
if ((distL >40 && distR>40) && (distL <50 && distR<50)) //Detect both hands
{Serial.println("Play/Pause"); delay (500);}

calculate_distance(trigger1,echo1);
distL =dist;

calculate_distance(trigger2,echo2);
distR =dist;

//Control Modes
//Lock Left - Control Mode
if (distL>=13 && distL<=17)
{
  delay(100); //Hand Hold Time
  calculate_distance(trigger1,echo1);
  distL =dist;
  if (distL>=13 && distL<=17)
  {
    Serial.println("Left Locked");
    while(distL<=40)
    {
      calculate_distance(trigger1,echo1);
      distL =dist;
      if (distL<10) //Hand pushed in 
      {Serial.println ("Vup"); delay (300);}
      if (distL>20) //Hand pulled out
      {Serial.println ("Vdown"); delay (300);}
    }
  }
}

//Lock Right - Control Mode
if (distR>=13 && distR<=17)
{
  delay(100); //Hand Hold Time
  calculate_distance(trigger2,echo2);
  distR =dist;
  if (distR>=13 && distR<=17)
  {
    Serial.println("Right Locked");
    while(distR<=40)
    {
      calculate_distance(trigger2,echo2);
      distR =dist;
      if (distR<10) //Right hand pushed in
      {Serial.println ("Rewind"); delay (300);}
      if (distR>20) //Right hand pulled out
      {Serial.println ("Forward"); delay (300);}
  }
}
}

delay(200);
}
لا يحتاج كود الأردوينو الي اي مكتبات اطلاقا ولكن يجب تعريف 4 متغيرات خاصه بمنافذ الحساس وتعريف 3 متغيرات خاصين بالمسافة ومتغير خاص بالزمن ومتغير اخر 
ثم القيام بتعريف منافذ الحساس حيث يكون trig خرج
ومنفذ echo دخل 
ثم القيام بانشاء دالة تقوم بحساب المسافة التي التى علي هذه الحسابات سنتخذ قرار ثم القيام ببعض الشروط على البيانات التى حصلنا عليها وعلي حسب هذه الشروط سيتم ارسال امر معين الي سكربت البايثون 

كود البايثون :

import serial #Serial imported for Serial communication
import time #Required to use delay functions
import pyautogui

ArduinoSerial = serial.Serial('your arduino port',9600) #Create Serial port object called arduinoSerialData
time.sleep(2) #wait for 2 seconds for the communication to get established

while 1:
    incoming = str (ArduinoSerial.readline()) #read the serial data and print it as line
    print incoming
    
    if 'Play/Pause' in incoming:
        pyautogui.typewrite(['space'], 0.2)

    if 'Rewind' in incoming:
        pyautogui.hotkey('ctrl', 'left')  

    if 'Forward' in incoming:
        pyautogui.hotkey('ctrl', 'right') 

    if 'Vup' in incoming:
        pyautogui.hotkey('ctrl', 'down')
        

    if 'Vdown' in incoming:
        pyautogui.hotkey('ctrl', 'up')

    incoming = "";
   في البداية من اجل ان يعمل كود البايثون بشكل صحيح يجب اضافة بعض المكتبات الأساسية كما هو موضح فى الأعلي 

import serial #Serial imported for Serial communication
import time #Required to use delay functions
import pyautogui

ثم القيام بتعريف المنفذ الذي متصله عليه الأردوينو لكي يتم قراءة البيانات المرسله ويتم الحصول علي رقم المنفذ من tools - port
ثم وضعه فى كلمة your arduino port 
ArduinoSerial = serial.Serial('your arduino port',9600) #Create Serial port object called arduinoSerialData
ثم يقوم الكود بقراءة البيانات المرسلة من الأردوينو وعلي حسب هذه البيانات يتم اتخاذ قرار في الفيديو 

التجربة النهائية : 

التجربة النهائية من قناة Supriyo Sarkar 
والتى تحتوى على العديد من المشاريع الرائعه انصحكم بالإطلاع عليها


لتحميل كود الأردوينو وسكربت البايثون من هنا

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

تصميم : بلال حسان سعدي

لا يوجد تعليقات

أضف تعليق