تصميم منزل ذكي كامل والتحكم من داخل الشبكة

0

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

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



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

ينقسم المشروع الي عدة الأقسام 
1- انذار الحريق والغازات 
2- التحكم في الأجهزة
3- مصدر الطاقة

القسم الأول انذار الحريق او الغازات:


هذا القسم هو المسئول عن انذار الحرارة حيث يتكون من قسمين
قسم الإستشعار ويجب استخدام احد الحساسين حساس mq او حساس tmp لان يوجد منفذ تماثلي واحد داخل nodemcu

الأدوات :

tmp35 sensor or mq sensor
nodemcu
pizo

tmp35 sensor

حساس الحرارة يقوم بقياس درجة الحرارة واخراجها في صيغة فرق الجهد 

 mq sensor

حساس mq وهو حساس مخصص لإستشعار الغازات و هناك نوع مخصص لكل غازات 
  • MQ-2 - Methane, Butane, LPG, smoke
  • MQ-3 - Alcohol, Ethanol, smoke
  • MQ-4 - Methane, CNG Gas
  • MQ-5 - Natural gas, LPG
  • MQ-6 - LPG, butane gas
  • MQ-7 - Carbon Monoxide
  • MQ-8 - Hydrogen Gas
  • MQ-9 - Carbon Monoxide, flammable gasses
  • MQ131 - Ozone
  • MQ135 - Air Quality (CO, Ammonia, Benzene, Alcohol, smoke)
  • MQ136 - Hydrogen Sulfide gas
  • MQ137 - Ammonia
  • MQ138 - Benzene, Toluene, Alcohol, Acetone, Propane, Formaldehyde gas, Hydrogen
  • MQ214 - Methane, Natural gas
  • MQ216 - Natural gas, Coal gas

pizo

سماعه لإخراج انذار عليها في حالة وجود تسريب للغاز او حريق

القسم الثاني التحكم بالأجهزة :



هذا القسم هو المسئول عن توصيل الأجهزة للريلاي حيث سنحتاج مصدر الطاقة 220 فولت وسنحتاج الي :

relay 4 channel
nodemcu

relay 4 channel

الريلاي يحتوي علي 4 قنوات كل قناة تحتوي علي 3 منافذ 
منفذ no
منفذ nc
منفذ com
يتم توصيل منفذ no الي الجهاز المراد التحكم به وتوصيل com الي منفذ الطاقة 220 فولت 
وتوصيل المنفذ الآخر من الجهاز الي مصدر الجهد 

القسم الثالث مصدر الطاقة :

مصدر الطاقة لإمداد الشريحة بالطاقة وتغذية الريلاي حيث يتم استخدام بطارية 9 ومنظم جهد لتقليل فرق الجهد من 9 الي 5 فولت ومكثف 22 بيكو فاراد لحماية الشريحة 
وفي نهاية استخدام شريحة nodemcu لكي تقوم بعمليات المعالجة كلها



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




وبجمع الثلاث اقسام ينتج لنا هذا التصميم وهو بسيط نسبيا

ثالثا الكود :

لن نقوم بوضع الكود هنا بسبب كبر حجمه 




ولكن ملخص عمل الكود تعريف المكتبة esp8266wifi 
ثم تقوم الشريحه بالإتصال بشبكة الإنترنت التى وضعت فيها اسم الشبكة والباسورد الخاص بها
ثم انشاء سيرفر esp ببروتوكول 80 ثم تصميم اللوحه الأتيه 
باستخدام html فى تصميم هذا الموقع 


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

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


لتحميل الكود اضغط هنا  
تصميم وبرمجة : بلال حسان سعدي 

تصميم منزل ذكي كامل بواسطة blynk

0

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

بعد ان قمنا بنشر العديد من المشاريع المتعلقة حول المنزل الذكي smart home سنقوم اليوم بتجميع هذه المشاريع في مشروع واحد لكي نحصل علي المنزل الذكي الكامل 
سنقوم اليوم بتصميم مشروع المنزل الذكي يحتوي علي:
التحكم 4 اجهزة تشغيل واطفاء من اي مكان في العالم
انظمة انذار للحريق وانذار لتسرب الغاز 


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

ينقسم المشروع الي عدة الأقسام 
1- انذار الحريق والغازات 
2- التحكم في الأجهزة
3- مصدر الطاقة

القسم الأول انذار الحريق او الغازات:


هذا القسم هو المسئول عن انذار الحرارة حيث يتكون من قسمين
قسم الإستشعار ويجب استخدام احد الحساسين حساس mq او حساس tmp لان يوجد منفذ تماثلي واحد داخل nodemcu

الأدوات :

tmp35 sensor or mq sensor
nodemcu
pizo

tmp35 sensor

حساس الحرارة يقوم بقياس درجة الحرارة واخراجها في صيغة فرق الجهد 

 mq sensor

حساس mq وهو حساس مخصص لإستشعار الغازات و هناك نوع مخصص لكل غازات 
  • MQ-2 - Methane, Butane, LPG, smoke
  • MQ-3 - Alcohol, Ethanol, smoke
  • MQ-4 - Methane, CNG Gas
  • MQ-5 - Natural gas, LPG
  • MQ-6 - LPG, butane gas
  • MQ-7 - Carbon Monoxide
  • MQ-8 - Hydrogen Gas
  • MQ-9 - Carbon Monoxide, flammable gasses
  • MQ131 - Ozone
  • MQ135 - Air Quality (CO, Ammonia, Benzene, Alcohol, smoke)
  • MQ136 - Hydrogen Sulfide gas
  • MQ137 - Ammonia
  • MQ138 - Benzene, Toluene, Alcohol, Acetone, Propane, Formaldehyde gas, Hydrogen
  • MQ214 - Methane, Natural gas
  • MQ216 - Natural gas, Coal gas

pizo

سماعه لإخراج انذار عليها في حالة وجود تسريب للغاز او حريق

القسم الثاني التحكم بالأجهزة :



هذا القسم هو المسئول عن توصيل الأجهزة للريلاي حيث سنحتاج مصدر الطاقة 220 فولت وسنحتاج الي :

relay 4 channel
nodemcu
relay 4 channel
الريلاي يحتوي علي 4 قنوات كل قناة تحتوي علي 3 منافذ 
منفذ no
منفذ nc
منفذ com
يتم توصيل منفذ no الي الجهاز المراد التحكم به وتوصيل com الي منفذ الطاقة 220 فولت 
وتوصيل المنفذ الآخر من الجهاز الي مصدر الجهد 

القسم الثالث مصدر الطاقة :

مصدر الطاقة لإمداد الشريحة بالطاقة وتغذية الريلاي حيث يتم استخدام بطارية 9 ومنظم جهد لتقليل فرق الجهد من 9 الي 5 فولت ومكثف 22 بيكو فاراد لحماية الشريحة 
وفي نهاية استخدام شريحة nodemcu لكي تقوم بعمليات المعالجة كلها



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




وبجمع الثلاث اقسام ينتج لنا هذا التصميم وهو بسيط نسبيا

ثالثا تطبيق الموبايل :

تطبيق blynk ليس بالتطبيق المجاني لكنه يتيح لك بعض الإستخدامات التى ستفي بالغرض 
رابط تحميل التطبيق من على متجر جوجل بلاي من هنا 


بعد التسجيل فى الرابط يمكنك انشاء حساب علي هذا التطبيق ثم بدء استكشاف هذا التطبيق
بعد ان تنشئ حساب تقوم بانشاء مشروع جديد ثم الذهاب الى خانة اضافة اداة وسحب 4 ازرار ثم الدخول الى اعدادات كل زر وتعيين المنفذ على هذا التوالى 
الزر الأول يتحكم في الجهاز الأول d5
الزر الثاني يتحكم في الجهاز الثاني d6
الزر الثالث يتحكم في الجهاز الثالث d7
الزر الرابع يتحكم في الجهاز الرابع d8
واضافة خانة لعرض قيمة الحساس عليها
لكي نحصل فى النهاية علي هذه الواجهه 



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




رابعا الكود : 

في البداية يجب تنزيل مكتبة blynk من خلال هذا الرابط 



#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

char auth[] = "YourAuthToken";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";

void setup()
{
  // Debug console
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
}

void loop()
{
  Blynk.run();
}

شرح الكود :

في البداية اضافة المكتبات الأساسية التى سنستعملها والتعريفات الأخري 
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

من ثم تعريف المتغيرات المهمه حيث سناخذ المفتاح الذي اخذناه سابقا ووضعه فى هذا المتغير 
char auth[] = "YourAuthToken";
من ثم وضع اسم الشبكة الخاصه بك وكلمة المرور الخاصه بشبكتك 
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";

وفي النهاية تقوم بتعريف المفتاح واسم شبكة الواي فاي وكلمة المرور داخل المكتبة من خلال  
  Blynk.begin(auth, ssid, pass);
من ثم تشغيل المكتبة فى النهاية من خلال
blynk.run();

من عيوب هذا المشروع انك يجب استخدام شبكة واي فاي اخري غير شبكة الموجوده عليها node mcu لكي يعمل تطبيق blynk

وفي النهاية نضغط على علامة بدء في تطبيق  blynk والإستمتاع بالمشروع


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

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

سلسلة تصميم smart home #2

0

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

بعد ان قمنا بتصميم جزء من السمارت هوم يمكنكم الإطلاع عليه من هنا 

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


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

 power switch

arduino uno

rib sensor

 power switch

سويتش الغرض منه التحكم في تشغيل المنظومة او اطفائها حيث لا يتم تشغيل المنظومة الا في وقت محدد بواسطة المستخدم 

arduino uno

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


rib sensor

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

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





في البداية يحتوي حساس rib علي ثلاث منافذ منفذ + الي 5 فولت ومنفذ السالب الي السالب ومنفذ الإشارة الرقمية الي منفذ 5
وتوصيل السويتش الي طرف السالب والطرف الأخر الي 6
وتوصيل السماعه السالب الي السالب وتوصيل الموجب الي منفذ رقم 4 بالأردوينو

ثالثا الكود : 

int sw = 6;
int sen = 5;
int sp = 4;
void setup(){
  pinMode(sw,INPUT_PULLUP);
  pinMode(sp,OUTPUT);
  pinMode(sen,INPUT);}
void loop(){
 int val = digitalRead(sen);
 int val2 = digitalRead(sw);
 if(val2 == 0){
   if(val == 1){
    tone(sp,250); 
   }
   else{
    noTone(sp); 
   } }
 else{
   noTone(sp); }}
في البداية يجب تعريف المنافذ 
منفذ السماعه كخرج ومنفذ السويتش كدخل علي مقاومة رفع ومنفذ الحساس كدخل 
وتعريف متغير لوضع فيه الإشارة القادمه من السويتش ومن الحساس 
ثم القيام بمقارنات 
لو تم تشغيل السويتش قم بالقراءة من الحساس هل توجد حركة 
اذا وجدت شغل السماعه اذا اختفت الحركة اوقف السماعه 
اذا اغلق السويتش اوقف السماعه 

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

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



سلسلة تصميم smart home #1

2

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

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

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

Arduino uno
ultrasonic sensor
servo motor

Arduino uno

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


ultrasonic sensor

حساس التراسونيك او حساس الموجات الفوق صوتيه وهذا الحساس له القدرة علي معرفة اذا كان هناك جسم علي مدي 50 سم منه

servo motor

الموتور الذي سيؤدي وظيفة فتح او غلق الباب او فتح او غلق  سلة المهملات 

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


يحتوي حساس الموجات الفوق صوتيه علي 4 منافذ 
يتم توصيل الموجب الي 5 فولت والسالب الي السالب 
ومنفذ trig الي 8 و منفذ echo الي 7
ويحتوي الموتور السيرفو علي3 منافذ
منفذ الموجب الي 5 فولت ومنفذ السالب الي السالب 
ومنفذ الإشارة الي 6 

ثالثا الكود : 

#include <Servo.h>
int trig = 8;
int echo = 7;
long duration =0;
int distance=0;
Servo servo;
void setup(){
 servo.attach(6);
 pinMode(trig,OUTPUT);
 pinMode(echo,INPUT);
}
void loop(){
  int dis = 0;
  dis = calculateDistance();
  if(dis<30){
    servo.write(180);
  }
  else{
servo.write(0);}}

int calculateDistance(){ 
  digitalWrite(trig, LOW); 
  delayMicroseconds(2);
  digitalWrite(trig, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  duration = pulseIn(echo, HIGH); 
  distance= duration*0.034/2;
  return distance;
}

في البداية يجب اضافة مكتبة servo لكي يتم التعامل مع موتور السيرفو 
#include <Servo.h>
ومن ثم تعريف بعض المتغيرات متغير بمنفذ trig و منفذ echo الخاصين بحساس الموجات الفوق الصوتية و من ثم  تعريف متغيرات لكي يتم  حساب المسافة داخل هذين المتغيرات 
int trig = 8;
int echo = 7;
long duration =0;
int distance=0;
من ثم انشاء كائن باسم servo داخل مكتبة motor servo
Servo servo;
من ثم تعريف منفذ 6 علي انه منفذ الإشارة الخاص بالموتور 
 servo.attach(6);
ومن ثم تعريف منفذ echo علي انه دخل ومنفذ output علي انه خرج
 pinMode(trig,OUTPUT);
 pinMode(echo,INPUT);
من ثم القيام باستدعاء دالة تقوم بحساب المسافة باعتماد علي قانون السرعة وهو السرعة = المسافة علي الزمن 
وفي نهاية نقوم بعمل بعض المقارنات لو ان المسافة اقل من 30 قم باخراج اشارة للموتور واذا كان اكبر من 30 قم بإيقاف هذه الإِشارة

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

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

ماسح حرارة covid-19 مع شاشة oled

0

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

بعد ان قمنا في احد المشاريع السابقة بتصميم مثل هذه المشاريع للإطلاع عليه اضغط هنا
لكن سنقوم اليوم بتصميم هذا المشروع بإستبدال شاشة lcd بشاشة oled


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

Arduino nano
mlx sensor
oled screen

Arduino nano

المتحكم الذي سنستخدمه للقيام بعمليات العرض و قياس درجة الحرارة 

mlx sensor

حساس الحرارة الذي يميزه عن الحساس التقليدي انه يمكنه قياس درجة الحرارة بدون لمسه 

oled screen

شاشة oled التي تتميز عن lcd بحيث انه يمكنها عرض صور اكثر دقة عن شاشة lcd وانها تتميز بصغر حجمها


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



تعتمد حساس mlx و شاشة oled في اتصالهم علي بروتوكول i2c
الذي يتعامل مع sda , sck
ويتم توصيل منافذ الطاقة الي الأردوينو 
الموجب الي منفذ الطاقة 5 فولت ومنفذ السالب الي سالب اردوينو

ثالثا الكود :

في البداية يجب ان تقوم بتحميل المكتبات الأساسية
Adafruit_MLX90614
Adafruit_GFX
Adafruit_SSD1306
يمكن اضافة كل هذه المكتبات من manage library في محرر كود arduino ide

ونتجه الأن الي الكود 


#include <Adafruit_MLX90614.h>  //for infrared thermometer
#include <Adafruit_GFX.h>       // Include core graphics library for the display
#include <Adafruit_SSD1306.h>   // Include Adafruit_SSD1306 library to drive the display
#include <Fonts/FreeMonoBold18pt7b.h>  // Add a custom font

Adafruit_SSD1306 display(128, 64);            //Create display
Adafruit_MLX90614 mlx = Adafruit_MLX90614();  //for infrared thermometer
int temp;  // Create a variable to have something dynamic to show on the display

void setup()
{                
  delay(100);  // This delay is needed to let the display to initialize
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // Initialize display with the I2C address of 0x3C
  display.clearDisplay();  // Clear the buffer
  display.setTextColor(WHITE);  // Set color of the text
  mlx.begin();  //start infrared thermometer
}

void loop()
{
  temp++;  // Increase value for testing
  if(temp > 43)  // If temp is greater than 150
  {
    temp = 0;  // Set temp to 0
  }

  temp = mlx.readObjectTempC(); //comment this line if you want to test

  display.clearDisplay();  // Clear the display so we can refresh

  // Print text:
  display.setFont();
  display.setCursor(45,10);  // (x,y)
  display.println("TEMPERATURE");  // Text or value to print

  // Print temperature
  char string[10];  // Create a character array of 10 characters
  // Convert float to a string:
  dtostrf(temp, 3, 0, string);  // (<variable>,<amount of digits we are going to use>,<amount of decimal digits>,<string name>)
  
  display.setFont(&FreeMonoBold18pt7b);  // Set a custom font
  display.setCursor(20,50);  // (x,y)
  display.println(string);  // Text or value to print
  display.setCursor(90,50);  // (x,y)
  display.println("C");  // Text or value to print
  display.setCursor(77,32);  // (x,y)
  display.println(".");  // Text or value to print
  
  // Draw a filled circle:
  display.fillCircle(18, 55, 7, WHITE);  // Draw filled circle (x,y,radius,color). X and Y are the coordinates for the center point

  // Draw rounded rectangle:
  display.drawRoundRect(16, 3, 5, 49, 2, WHITE);  // Draw rounded rectangle (x,y,width,height,radius,color)
                                                  // It draws from the location to down-right
    // Draw ruler step
  for (int i = 6; i<=45; i=i+3){
    display.drawLine(21, i, 22, i, WHITE);  // Draw line (x0,y0,x1,y1,color)
  }
  
  //Draw temperature
  temp = temp*0.43; //ratio for show
  display.drawLine(18, 46, 18, 46-temp, WHITE);  // Draw line (x0,y0,x1,y1,color)

  display.display();  // Print everything we set previously

}


يحتوي الكود علي تفصيل له بجانب كل امر ولن نتطرق الي شرحه 

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

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

روبوت ذراع باستخدام الأردوينو #2

0

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

بعد ان قمنا سابقا بتصميم مثل هذا الروبوت ولكن كانت الية التحكم باستخدام المقاومات المتغيرة سنقوم اليوم باستخدام البلوتوث بالتحكم بهذا الروبوت 
 للإطلاع علي المشروع السابق من هنا

 اولا الأدوات  

4x servo motor
arduino uno 
hc-05 bluetooth module

موتور سيرفو  

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

arduino uno

المتحكم الذي سنستخدمه في اخراج الإشارات الي المواتير واستلام الإشارات من شريحة البلوتوث


 
 

 hc-05 bluetooth module 

شريحة البلوتوث التي سنتعامل معها ونرسل لها البيانات من التطبيق الي الأردوينو فهي الوسيط 
 



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

 يحتوي الموتور السيرفو علي 3 منافذ منفذ الطاقة يتم توصيله الي 5 فولت
 ومنفذ السالب يتم توصيله الي سالب الأردوينو 
ومنفذ الإشارة يتم توصيله الي منفذ من منافذ الرقمية 
وهكذا مع باقي المواتير السيرفو 
وتحتوي شريحة البلوتوث علي 4 منافذ
منفذ الطاقة يتم توصيله الي 5 فولت 
ومنفذ السالب يتم توصيله الي السالب
ومنفذ tx يتم توصيله الى 4
ومنفذ rx يتم توصيله الي 3

ثالثا الكود :

 #include<Servo.h>
#include<SoftwareSerial.h>
Servo serv1;
Servo serv2;
Servo serv3;
Servo serv4;
SoftwareSerial bt(4,3);

char da1 ;
char da2 ;
char da3 ;
char da4 ;

char data ;
void setup() {
serv1.attach(3);
serv2.attach(5);
serv3.attach(6);
serv4.attach(10);
bt.begin(9600);
}

void loop() {
while(bt.available()<0){}
data = bt.read();
if(data == 'f'){
  da1= bt.read();
  da1 = map(da1,0,180,0,255);
  da1 = constrain(da1,0,180);
  serv1.write(da1);
}
if(data == 's'){
  da2= bt.read();
  da2 = map(da2,0,180,0,255);
  da2 = constrain(da2,0,180);
  serv2.write(da2);
}
if(data == 't'){
  da3= bt.read();
  da3 = map(da3,0,180,0,255);
  da3 = constrain(da3,0,180);
  serv3.write(da3);
}
if(data == 'b'){
  da4= bt.read();
  da4 = map(da4,0,180,0,255);
  da4 = constrain(da4,0,180);
  serv4.write(da4);
}
data = 0;
  }


في البداية يجب تعريف بعض المكتبات الأساسية للتعامل مكتبتي 
servo و SoftwareSerial
 #include<Servo.h>
#include<SoftwareSerial.h>
 وبعد ذلك تعريف المواتير داخل المكتبة عن طريق
Servo serv1;
Servo serv2;
Servo serv3;
Servo serv4;
من ثم تعريف منافذ البلوتوث 
SoftwareSerial bt(4,3);
من ثم تعريف بعض المتغيرات من نوع char لكي نستقبل بها بيانات التطبيق
 char da1 ;
char da2 ;
char da3 ;
char da4 ;
char data ;
من ثم تعريف منافذ المواتير 
serv1.attach(3);
serv2.attach(5);
serv3.attach(6);
serv4.attach(10);
ومن ثم تحديد سرعة شريحة البلوتوث في استلام البيانات 
bt.begin(9600);
من ثم التاكد من حالة عمل شريحة البلوتوث 
while(bt.available()<0){}
ونقوم بوضع المتغير data لكي يحتوي علي البيانات المرسلة 
data = bt.read();
من ثم القيام ببعض الشروط اذا كانت data تساوي f
قم بقراءة زاوية التي قمت بتعيينها في التطبيق واخرجها علي الموتور السيرفو 
وهكذا مع باقي الكود حتي النهاية 
if(data == 'f'){
  da1= bt.read();
  da1 = map(da1,0,180,0,255);
  da1 = constrain(da1,0,180);
  serv1.write(da1);
}


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

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

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


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

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

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