404

الصفحه التي تبحث عنها غير موجوده

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

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 
والتى تحتوى على العديد من المشاريع الرائعه انصحكم بالإطلاع عليها


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

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

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

تصميم نموذج لروبوت cozmo #1

0

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

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

الموضوع الأول الشاشة 
يتميز cozmo بشاشته التى تتميز بان لها العديد من الأشكال فسنقوم بتصميم مثل هذه الشاشة فى هذا المقال 


مثل الصورة التى فى الأعلى سنقوم ببرمجة الشاشة على عرض هذه الأشكال التى فى الأعلى 

اولا الأدوات 

Arduino uno 
oled 128x64

Arduino uno 

المتحكم الذي سنستخدمه فى عرض الحركات السابقه على الشاشة 

oled 128x64

الشاشة التى سنستخدمها فى عرض الحركات عليها 

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


تعتمد شاشة  oled على التوصيل على بروتوكول i2c
حيث يتم توصيل منفذ sck على منفذ a5 
وتوصيل منفذ sda على منفذ a4

ثالثا الكود :

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

#include <Wire.h>
void setup() {
  Wire.begin();
  Serial.begin(9600);
  while (!Serial);
  Serial.println("\nI2C Scanner");
}
void loop() {
  byte error, address;
  int nDevices;
  Serial.println("Scanning...");
  nDevices = 0;
  for (address = 1; address < 127; address++ ) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      if (address < 16)
        Serial.print("0");
      Serial.print(address, HEX);
      Serial.println("  !");
      nDevices++;
    }
    else if (error == 4) {
      Serial.print("Unknown error at address 0x");
      if (address < 16)
        Serial.print("0");
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
  delay(5000);
}

فهذا الكود فى الأعلى يقوم الأردوينو بقراءة كل العناوين المتاحة للوصول الى العنوان الموجود عليه الشاشة

كل ما عليك الذهاب الى serial monitor لتجد عنوان الشاشة التى تعمل عليها 

ثم ننتقل الى كود المشروع 

#include <Adafruit_SSD1306.h>

#define OLED_ADDR   0xZZ

Adafruit_SSD1306 display(-1);

void setup() {

  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);

  display.clearDisplay();

  display.display();

  delay(10000);

}

void loop() {

  happy(); delay (random (500, 1000));

  cierra();delay (150);

  enfado();delay (random (1000, 3000));

  cierra();delay (150);

  entorna();delay (random (1000, 3000));

  cierra();delay (150);

  enfado1(); delay (random (1000, 3000));

  cierra();delay (150);

  triste();delay (random (1000, 3000));

  cierra();delay (150);

  abre();delay (random (500, 3000));

  cierra(); delay (150);

  happy();delay (random (500, 1000));

}

void abre() {

  display.clearDisplay();

  display.fillCircle (50, 15, 12, WHITE); //ojo izquierdo grande

  display.fillCircle (82, 20, 7, WHITE); //ojo derecho pequeño

  display.display();

}

void cierra() {

  display.clearDisplay();

  display.drawFastHLine(40, 15, 20, WHITE);

  display.drawFastHLine(72, 20, 15, WHITE);

  display.display();

}

void entorna() {

  display.clearDisplay();

  display.fillCircle (42, 10, 20, WHITE); //ojo izquierdo grande

  display.fillCircle (82, 10, 15, WHITE); //ojo derecho pequeño

  display.fillRect (0, 0, 128, 15, BLACK); //ceja superior

  display.fillRect (0, 40, 128, 15, BLACK); //ceja inferior

  display.display();

}

void triste() {

  display.clearDisplay();

  display.fillCircle (42, 10, 17, WHITE); //ojo izquierdo grande

  display.fillCircle (82, 10, 17, WHITE); //ojo derecho pequeño

  display.fillTriangle (0, 0, 0, 35, 78, 0, BLACK); //ceja superior

  display.fillTriangle (50, 0, 128, 35, 128, 0, BLACK); //ceja superior

  display.display();

}

void happy() {

  display.clearDisplay();

  display.fillCircle (42, 25, 15, WHITE); //ojo izquierdo grande

  display.fillCircle (82, 25, 15, WHITE); //ojo derecho pequeño

  display.fillCircle (42, 33, 20, BLACK); //ojo izquierdo grande

  display.fillCircle (82, 33, 20, BLACK); //ojo derecho pequeño

  display.display();

}

void enfado() {

  display.clearDisplay();

  display.fillCircle (42, 10, 18, WHITE); //ojo izquierdo grande

  display.fillCircle (82, 10, 12, WHITE); //ojo derecho pequeño

  display.fillTriangle (0, 0, 54, 26, 118, 0, BLACK); //ceja superior

  display.display();

}

void enfado1() {

  display.clearDisplay();

  display.fillCircle (42, 10, 18, WHITE); //ojo izquierdo grande

  display.fillCircle (82, 10, 12, WHITE); //ojo derecho pequeño

  display.fillTriangle (0, 0, 65, 15, 120, 0, BLACK); //ceja superior

  display.display();

}

في البداية يجب تعريف المكتبة الأساسية للتعامل مع شاشة oled 

#include <Adafruit_SSD1306.h>

ثم تعريف الشاشة وعنوانها 
#define OLED_ADDR   0xZZ
Adafruit_SSD1306 display(-1);

يتم استبدال zz بالعنوان الذي حصلنا عليه من الكود السابق 

ثم نقوم بتيئة الشاشة للعمل والبدء فى العرض 

  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);

  display.clearDisplay();

  display.display();

ثم نقوم بتعريف دالة لكل شكل من الأشكال التى يرسمها روبوت كوزمو على شاشته وعمل استدعاء لكل هذه الدالات 

في نهاية المشروع يعد هذا بداية ليس ترقبونا 


لتحميل الأكود اضغط هنا 

تصميم وبرمجة : بلال حسان سعدي 

تصميم جهاز midi #1

0

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

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

اولا الأدوات :

keypad 32 keys
arduino micro - lenardo - yun 


keypad 32 keys

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


arduino

يجب للتعامل مع هذا التطبيق استخدام نوع اردوينو مخصص مثل 
micro او lenaordo او due بحيث يمكن توصيلها الى الهاتف باستخدام كابل usb وهذا ضروري لعمل المشروع 
في هذا التطبيق استخدمت اردوينو ليناردو 

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


يخرج من مصفوفة الأزرار 12 سلكا يتم تقسيمهم كالأتي 
اول 4 اسلاك من يسار الشريحه عبارة عن صفوف 
و باقى الأسلاك عبارة عن اعمده فهي نفس مبدا عمل keypad 
وان لم تفهم فعليك بمراجعه الدروس التى قمنا بكتابتها 
يتم توصيل 4 منافذ الخاصه بالصفوف الى 2 و 3 و 4 و5
فى المنافذ الرقمية 
ثم توصيل باقى المنافذ من 6 الى 13 
فيجب اتباع هذه التوصيله للوصول الى النهاية المرجوة 

ثالثا الكود : 

لكي التعامل مع هذا المشروع فسنحتاج مكتبتين مكتبة keypad وهي تحميلها من موقع arduino الرسمي من هنا 

ومكتبه midiusb التى سنحتاجها للتواصل مع التطبيق على الهاتف لإخراج الصوت 
وسنقوم بتحميلها بهذه الطريقه 

ثم نتجه الى الكود 


فى البداية يتم اضافة المكتبات المستخدمه 

#include <MIDIUSB.h>
#include <Keypad.h>
من ثم تعريف ال 32 زر بحروف وارقام مختلفة 
char keys[4][8]={
  {'1','2','3','4','5','6','7','8'},
  {'9','A','B','C','D','E','F','G'},
  {'H','I','J','K','L','M','N','O'},
  {'P','Q','a','b','c','d','e','f'}
};
من ثم تعريف المنافذ الخاصه بالصفوف والأعمده عن طريق
 byte ROWS[]={2,3,4,5};
 byte COLS[]={6,7,8,9,10,11,12,13};
من ثم تعريف اللوحه داخل المكتب عن طريق كتابة اسم المكتبه وعمل خريطه للمكتبه واضافه منافذ الصفوف والأعمده وعدد الصفوف وعدد الأعمده
Keypad key(makeKeymap(keys),ROWS,COLS,4,8);
من ثم انشاء داله اسمها noteOn تاخذ ثلاث متغيرات 
velo , pitch , channel
وهذه أساسية لكي يتم استقبال الداتا من قبل برنامج الموسيقى ولكي يستطيع البرنامج فهم البيانات المرسله
وايضا ان شاء داله باسم noteOf وتاخذ نفس المتغيرات 
ولكنها تقوم بايقاف النغمة 
من ثم تحديد سرعه التواصل وهى 115200 وهى القيمة التى تتعامل بها اجهزة الميدي
من ثم الدخول الى void loop
فى البداية انشاء متغير من نوع char لكى يتم تخزين فيه بيانات الزر الذي تم ضغطه فى اللوحه 
ثم عمل شروط هل قيمة المتغير تساوي قيمة من قيم الأزرار التى قمنا بسبق تعيينها قم بتاكد من ان القناة الخاصه بالميدي متاحه ثم قم بارسال النغمة اذا تغيرت قيمة المتغير او تم رفع الأصبع عن الزر قم باطفاء النغمة 

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




لتحميل الكود اضغط هنا

النتيجة النهايئة  : من  تصميم الأستاذ عبد الفتاح كما هيه موضحه فى الفيديو التالى 



تصميم وبرمجة : بلال حسان سعدي
تجربة : عبد الفتاح 

تصميم لعبة بسيطة بإستخدام الأردوينو لعبة الديناصور

0
بسم الله الرحمن الرحيم
سنقوم اليوم بتصميم احد المشاريع الممتعه 
هل رأيتم يوما لعبة الديناصور الخاصه بمحرك جوجل 
هل تخيلتم يوما انكم يمكنكم تصميمها عن طريق الأردوينو 

 اولًا الأدوات المستخدمه
1x Arduino uno
1x lcd
1x risistor 330 ohm
1x switch
اردوينو اونو
هذه الشريحة هى المسئولة عن معالجة البيانات وعرض البيانات على الشاشة وعرض محتويات اللعبة على الشاشة

 شاشه الكريستال
هذا النوع من الشاشات يتميز بإمكانية عمله مع الأردوينو ببساطه شديده
وسنستخدم هذه الشاشة لعرض عليها اللعبه

زر 
استخدام هذا الزر لعمل عملية القفز فى اللعبة 

ثانيا التوصيلات : 
حيث هذه التوصيلات التى استخدمتها فى هذا المشروع 
تم توصيل شاشة lcd
gnd : gnd
vcc : 5v
rs : 11
e : 9
db4 : 6
db5 : 5
db6 : 4
db7 : 5
ledA : 5v through ressistor 330 ohm
ledC : gnd
وتم توصيل السويتش الى المنفذ رقم 2

رابعاً الكود : 
لن نقوم بشرح الأكواد فى هذا القسم 
لأن هذه مشاريع ليس لها فائدة الغرض منها المتعه
لتحميل الكود اضغط هنا

تصميم وبرمجة : بلال حسان سعدى