بسم الله الرحمن الرحيم
يعد هذا المشروع من احد المشاريع المثيرة للإنتباه والتى تعد من المشاريع المميزة فى عالم الأردوينو وهو اننا سنتحكم في (تشغيل - ايقاف - رفع الصوت - خفض الصوت ) الخاص باي فيديو بدون ان نقوم بلمس الجهاز الخاص بنا بل سنقوم بعمل هذا التحكم عن طريق حركة يد امام حساس الموجات الفوق صوتية باستعمال كود اردوينو
وسكربت بايثون
الأدوات :
arduino uno
2x ultrasonic sensor
arduino uno
ثانيا التوصيلات :
يحتوي حساس التراسونيك علي منفذين 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
والتى تحتوى على العديد من المشاريع الرائعه انصحكم بالإطلاع عليها
لتحميل كود الأردوينو وسكربت البايثون من هنا
ملحوظة فى التواصل بين الأردوينو و الكمبيوتر سنستخدم كابل الأردوينو بالطريقه العادية
تصميم : بلال حسان سعدي
لا يوجد تعليقات
أضف تعليق