وصف المشروع
عندما يقترب أحدهم من الباب يقوم حساس الحركة بإرسال إشارة إلى لوحة الأردوينو والتى بدورها تقوم بإرسال إشارة إلى محرك خاص بتحريك الباب جهة الفتح ثم غلقه بعد وقت محدد.
الهدف من المشروع
التعرف على توصيلات شاشة LCD 2×16 مع الأردوينو، والتعرف على عنصر IC L293D motor driver وتوصيله مع الأردوينو والمحرك.
المكونات
العدد | النوع | |
1 | لوحة أردوينو أونو | Arduino Uno board |
1 | شاشة 2 × 16 | LCD 2×16 |
1 | حساس حركة | PIR motion detector |
1 | مقاومة 1 كيلو أوم | Resistor 1 k ohm |
1 | دائرة متكاملة رقم L293D | IC L293D |
1 | محرك DC | DC motor |
1 | لوحة اختبار | Bread board |
مجموعة | أسلاك توصيل | connecting wires |
توصيل الدائرة
شرح المكونات
-
لوحة Arduino Uno
نستخدمها للتحكم في الدائرة، باستقبال وإرسال الإشارات بتوقيت معين وكيفية معينة نختارها طبقاً لعمل الدائرة وبواسطة الكود الذي سيتم شرحه لاحقاً.
يرجى تثبيت البرنامج الخاص بالأردوينو من هنا والذي سنستخدمه في كتابة الكود وعمل compiling ورفعه إلى لوحة الأردوينو عن طريق كابل USB، ولمعرفة كيفية تثبيت البيئة التطويرية المتكاملة لأردوينو (Arduino IDE) من هنا.
لتحميل ورقة البيانات datasheet الخاصة بلوحة الأردوينو أونو Arduino Uno اضغط هنا، ولتحميل نسخة أخرى اضغط هنا، ويوجد هنا في موقع الصناع العرب مواضيع مفصله عن الأردوينو وكيفية تنصيب البرنامج، وللمزيد يمكنك زيارة الموقع الخاص به من هنا
-
شاشة LCD 2×16
ورمزها: HD44780
هي شاشة LCD صغيرة بها مساحة لعرض صفين كل صف به مساحة لعرض 16 حرف/ رقم لهذا تسمى 2×16.
أطراف التوصيل وعددها 16:
1) GND وهذا الطرف يوصل بالأرضي لمصدر التغذية (Ground)
2) Vcc لتشغيل الشاشة وهذا الطرف يوصل بالطرف الموجب لمصدر التغذية (5 volt)
3) Vee الخاص بمستوى إضاءة الشاشة Contrast ويوصل بمقاومة 1 كيلو أوم (Resistor 1 k ohm) ثم إلي الطرف الأرضي GND ويمكنك توصيل مقاومة متغيرة للتحكم بدرجة إضاءة الشاشة حسب رغبتك (طرفها الأول بالجهد الموجب والأخير بالأرضي والأوسط يوصل ب Vee)
4) RS وهو اختصار Reset ويوصل هذا الطرف بالأردوينو (طرف رقم D2)
5) R/W وهو اختصار Read/ write ويوصل هذا الطرف بالأرضي دائما (GND) لأننا سنستعمل خاصية الكتابة فقط وليست القراءة.
6) EN وهو اختصار Enable ويوصل هذا الطرف بالأردوينو (طرف رقم D3)
7-14) DB0:DB7 نستخدم هنا فقط الأربعة أطراف الأخيرة 4 – 5 – 6 – 7 لإرسال البيانات من الأردوينو إلى الشاشة وتوصل بالأردوينو بالترتيب: (D4 وحتى D7)
15) Led+ يستخدم للإضاءة الخلفية للشاشة ويوصل بمقاومة 1 كيلو أوم ثم إلي الجهد الموجب (5 volt) لتقليل شدة إضاءة الشاشة الخلفية.
16) Led- يستخدم للإضاءة الخلفية للشاشة ويوصل بالأرضي (GND)
قم بتوصيل الأطراف كما بالرسم الموضح فى البداية.
لتحميل ورقة البيانات datasheet الخاصة بالشاشة LCD 2×16 اضغط هنا ولتحميل نسخة أخرى اضغط هنا.
-
حساس الحركة PIR sensor
وله أشكال متعددة من الخارج حسب تصنيع كل شركة، أما من الداخل فهو بهذا الشكل:
يوجد له 3 أطراف كما بالصورة السابقة:
- طرف أرضى Ground
- طرف التغذية Vcc ويوصل بمصدر 5 فولت
- طرف الخرج Output والذى يعطى إشارة الخرج عند الإحساس بالحركة
يوجد أيضاً مفتاحين يتم استخدامهما لضبط الحساسية وتوقيت إرسال إشارة الخرج كما بالصورة (مقاومتين متغيرتين).
لتحميل ورقة البيانات datasheet الخاصة بحساس الحركة PIR sensor (منتج إحدى الشركات كمثال) من هنا.
-
الدائرة المتكاملة رقم Motor Driver IC L293D
تستخدم فى قيادة المحركات DC الصغيرة مع دوائر التحكم ولها فائدة مهمة أيضاً فى عزل دائرة التحكم عن دائرة الحمل/أو المحرك DC motor أي أنها مجرد تأخذ إشارة التشغيل/الإيقاف من دائرة التحكم وترسلها إلى المحرك (وسيط).
أطراف العنصر IC L293D:
يحتوي على 16 طرف:
1- طرف إشارة البدء للمحرك الأول
2- طرف (1) إشارة التحكم فى المحرك الأول
3- طرف توصيل (1) المحرك الأول
4- GND
5- GND
6- طرف توصيل (2) المحرك الأول
7- طرف (2) إشارة التحكم فى المحرك الأول
8- مصدر الجهد لتغذية المحركات
9- طرف إشارة البدء للمحرك الثاني
10- طرف (1) إشارة التحكم فى المحرك الثاني
11- طرف توصيل (1) المحرك الثاني
12- GND
13- GND
14- طرف توصيل (2) المحرك الثاني
15- طرف (2) إشارة التحكم فى المحرك الثاني
16- طرف توصيل مصدر الجهد لتغذية العنصر
الصورة للتوضيح فقط
ونحن سنستخدم منهم الأطراف التالية:
1- التغذية (الجهد الموجب 5 volt) ويوصل بالأطراف 1 – 8 – 9 – 16
2- التغذية (الأرضي GND) وتوصل بالأطراف 4 – 5 – 12 – 13
3- أطراف توصل بالموتور 3 – 6
4- أطراف توصل بالأردوينو 2 – 7
عند إرسال قيمة جهد عليا high – 1 من الأردوينو إلى الطرف 2 وإرسال قيمة جهد صفر low – 0 إلى الطرف 7: سيدور المحرك فى اتجاه معين (وليكن فتح الباب).
والعكس بالعكس: عند إرسال قيمة جهد صفر low – 0 إلي الطرف 2 وإرسال قيمة جهد عليا high – 1 إلى الطرف 7: سيدور المحرك في الإتجاه الآخر (ولنسميه غلق الباب).
وعند إرسال قيمة جهد صفر low – 0 إلى كلا الطرفين 2 و 7 سيتوقف المحرك عن العمل.
هذا هو مفتاح عمل الدائرة وهو ما سوف نترجمه إلى الكود البرمجي ونكتبه في برنامج الأردوينو كما سيلي لاحقاً.
الدائرة المتكاملة من الداخل:
للعلم: أقصى تيار يمكن سحبه من هذا العنصر 600 ميللي أمبير، وتستطيع تشغيل محركات تعمل بجهد 36 فولت، ولمعرفة ما إذا كانت هذه الدائرة المتكاملة سوف تعمل مع المحرك الخاص بك وللمزيد من المعلومات راجع ورقة البيانات الخاصة بالعنصر.
لتحميل ورقة البيانات datasheet الخاصة بالدائرة المتكاملة رقم Motor Driver IC L293D (منتج إحدى الشركات كمثال) من هنا.
-
محرك DC motor
محركات صغيرة تعمل بجهد قليل مثل 5 فولت:24 فولت ونجدها فى الكثير من ألعاب الأطفال وهذه عينة منها:
لهذا النوع من المحركات طرفان، عند توصيل أحدهما بالطرف الموجب للبطارية والآخر بالسالب يدور المحرك فى اتجاه معين وعند عكس أطراف التوصيل يدور المحرك فى الاتجاه المعاكس.
يمكن تركيب ترس للمحرك وذلك لنقل حركة الدوران إلى عناصر أخرى مثل عجلات عربة.
-
لوحة اختبار الدوائر Bread board
هذه اللوحة مفيدة جداً في التجارب، يمكنك توصيل عناصر دائرتك عليه للتأكد من عملها بالشكل السليم وعمل التعديلات عليها قبل صناعتها على لوحة نحاسية مطبوعة، أو لمجرد التجربة فقط وذلك لسهولة التوصيلات كما سنرى.
تحتوي معظم اللوحات هذه على صفين على الجوانب أحدهما أحمر والآخر أزرق كما بالصورة بالأسفل (A و D)، وكل النقاط في طول هذا الصف متصلة ببعض.
باقي النقاط في المنتصف يمين ويسار الفراغ المنتصف (B و C) مقسمة طولياً وليس أفقياً كما بالأحمر والأزرق، والصورة التالية توضح لك النقاط المتصلة ببعضها:
ويتم تركيب العناصر بإدخال الأطراف المعدنية في الفراغات، والعناصر المراد توصيلها معاً يتم إدخال الأطراف في نفس العمود (حيث كل 4 نقاط رأسية متصلة ببعض).
ملحوظة: الصفين الموجب يمين ويسار اللوحة غير متصلين ببعض، والصفين الأرضي أيضاً لذا عليك توصيلهم بهذا الشكل:
وهذه الصورة توضح كيفية تغذية اللوحة بمصدر الجهد والأرضي من الأردوينو:
يمكنك تتبع الصورة في بداية الشرح لإتمام توصيل العناصر ببعضها، وللمزيد عن كيفية استخدام لوح التجارب (Breadboard) اضغط هنا.
-
مجموعة أسلاك التوصيل Connecting wires
ينصح بالحصول على مجموعة أسلاك للتوصيل مثل التي بالصورة وتستخدم في توصيل العناصر ببعضها أو التوصيل بأجزاء خارجية مثل لوحة الأردوينو والحساسات وغيرها.
وللمزيد عن استخدام الأسلاك (wires) اضغط هنا.
الكود البرمجي وتجربة وتشغيل الدائرة
#include // تضمين مكتبة الأكواد الخاصة بالشاشة
LiquidCrystal lcd(13, 12, 11, 10, 9, 8); //تعريف أطراف توصيل الشاشة بالأردوينو
#define PIR_sensor 14 //تعريف طرف توصيل حساس الحركة بالأردوينو
#define m0 0 //تعريف أطراف توصيل المحرك
#define m1 1 //تعريف أطراف توصيل المحرك
void setup() //دالة الإعداد وتنفذ مرة واحدة فقط فى بداية البرنامج
{ //كل الأوامر التالية بين القوسين ضمن هذه الدالة
lcd.begin(16, 2);
pinMode(m0, OUTPUT); //تعريف أطراف توصيل المحرك كخرج
pinMode(m1, OUTPUT);
pinMode(PIR_sensor, INPUT); //تعريف طرف توصيل حساس الحركة كخرج
lcd.print(" Automatic "); //أمر طباعة كلمة نص على الشاشة
lcd.setCursor(0,1); //تعيين مكان مؤشر الكتابة على الشاشة (غير مرئي)
lcd.print(" Door Opener ");
delay(3000); //أمر انتظار بدون فعل شئ مدته 3 ثواني
lcd.clear(); //أمر مسح الكلام من على الشاشة
lcd.print(" ARABS MAKERS ");
delay(2000);
}
void loop() //دالة التكرار وتنفذ باستمرار طالما يوجد تغذية كهرباء للأردوينو
{
if(digitalRead(PIR_sensor)) // اختبار ما إذا وصلت إشارة من حساس الحركة = 1
{ //إذا كانت هناك إشارة سيتم تنفيذ الكود بين القوسين التاليين
lcd.setCursor(0,0);
lcd.print(" Move Detected ");
lcd.setCursor(0, 1);
lcd.print("Door is Opening");
digitalWrite(m0, HIGH); //إعطاء إشارة لفتح الباب، إرسال قيمة 1 إلى الخرج الأول
digitalWrite(m1, LOW); // وإرسال قيمة 0 إلى الخرج الثاني فيدور المحرك فى اتجاه الفتح
delay(1000);
digitalWrite(m0, LOW); //إعطاء إشارة لتوقف المحرك عن الحركة، إرسال قيمة 0 إلى الخرج الأول
digitalWrite(m1, LOW); // وإرسال قيمة 0 إلى الخرج الثاني فيتوقف المحرك حتى يدخل الشخص
delay(2000);
lcd.clear();
lcd.print("Door is Closing"); //طباعة رسالة : الباب يغلق
digitalWrite(m0, LOW); //إعطاء إشارة لغلق الباب، إرسال قيمة 0 إلى الخرج الأول
digitalWrite(m1, HIGH); // وإرسال قيمة 1 إلى الخرج الثاني فيدور المحرك فى اتجاه الغلق
delay(1000);
digitalWrite(m0, LOW); //إعطاء إشارة لتوقف المحرك عن الحركة، إرسال قيمة 0 إلى الخرج الأول
digitalWrite(m1, LOW); // وإرسال قيمة 0 إلى الخرج الثاني
delay(1000);
}
else //إذا لم تكن هناك إشارة من حساس الحركة سيتم تنفيذ الكود بين القوسين التاليين
{
lcd.setCursor(0,0);
lcd.print(" No Movement ");
lcd.setCursor(0,1);
lcd.print(" Door Closed "); //طباعة رسالة : الباب مغلق
digitalWrite(m0, LOW); //إعطاء إشارة لتوقف المحرك عن الحركة، إرسال قيمة 0 إلى الخرج الأول
digitalWrite(m1, LOW); // وإرسال قيمة 0 إلى الخرج الثاني
}
}
نفتح برنامج الأردوينو ونُنشئ ملف مشروع جديد بالاسم الذي تريده واكتب الكود السابق فيه واحفظه عندك علي جهازك، ثم قم بتوصيل لوحة الأردوينو بالكمبيوتر لديك وارفع الكود إلى لوحة الأردوينو (upload).
يمكنك تجربة محاكاة الدائرة من هنا، وفى هذا الرابط ستجد الدائرة مرسومة كما هو مُوضح بالأعلى، للتشغيل اضغط على زر Start Simulation لبدء المحاكاة.
يمكنكم تحميل رسم وتصميم الدائرة ببرنامج Fritzing من هنا وملف كود الأردوينو من هنا.
ولتحميل برنامج Fritzing المجاني من خلال الموقع الخاص اضغط هنا.
ويمكنك أيضاً البحث في الموقع عن تصميمات ورسومات لدوائر مختلفة واسعة المجال وتطبيقات متنوعة ورائعة (جربها الآن).
أتمنى أن يكون الدرس مفيداً لكم.
جزاك الله خيرا
جزاكم الله خير على هذه المعلومات
ما شاء الله رائع
جزاكم الله خيرا .هل يمكن استخدام هذه الدائرة مع الغاء حساس الحركة و وضع بديل عنه ماديول البلوتوث لتشغيل موتور رفع بقدرة ٦٠٠ وات و شدة ٢.٥ أمبير
تحياتي لكم
Mohamed Aldesoky حياك الله
لاحظ أن تغذية الموتور ستكون منفصلة على تغذية الأردوينو
والتوصيل بينهما سيكون عن طريق مرحلات Relay لعزلهما وللحماية للأردوينو أيضاً
يمكنك استخدام Relay module ذو القناة واحدة أو القناتين 2 channels
مع ملاحظة أقصى تيار يتحمله المرحل Relay
اللهم بارك
حاجة كويسة جدا
بس ممكن اعرف ايه هو دور الدايو ف البوابه ؟!!