Professional Documents
Culture Documents
استخدام الاردوينو في تشغيل واطفاء المصابيح 2
استخدام الاردوينو في تشغيل واطفاء المصابيح 2
المصابيح
:أسماء الطالب
عبداللـــــه احمد جــاسم
حسيـــــن سالم خلـــــف
زين العابدين علي هاشم
:المشرف
األستاذ خزعل هاتو
الجامعه التقنية الجنوبية \ المعهد التقنيـ ميسان \ قسم
تقنياتـ الكهرباءـ
اإلهداء
إلى من أُفضِّ لها على نفسي ،ولِ َم ال؛ فلقد ضحَّت من أجلي
ولم ت َّدخر جُه ًدا في سبيل إسعادي على ال َّدوام
).أُ ِّمي الحببية(
نسير في دروب الحياة ،ويبقىـ من يُسيطرـ على أذهاننا
في كل مسلك نسلكه
.صاحب الوجه الطيب ،واألفعال الحسنة
ي طيلة حياته
فلم يبخل عل َّ
).والدي العزيز(
إلى أصدقائي ،وجميع من وقفوا بجواري وساعدوني بكل
ما يملكون ،وفي أصعدة كثيرة
.أُق ِّدم لكم هذا البحث ،وأتمنَّىـ أن يحوز على رضاكم
شكر وتقدير
المصادر :
موقع ويكيبيديا
https://ar.wikipedia.org
موقع اليكترونيك بوب https://www.electronicbub.c
om
موقع انا مهندس
https://www.anaengineer.com
:مقدمه
اآلردوينو) هو لوح تطوير إلكتروني يتكون من دارة إلكترونية
مفتوحة المصدر مع متحكم دقيق يُبرمج عن طريق الحاسوب ،وهو
مصمم لتسهيل استخدام اإللكترونيات التفاعلية في المشاريع متعددة
التخصصات .يُستخدم اآلردوينو بصورة أساسية في تصميم
المشاريع اإللكترونية التفاعلية أو المشاريع التي تستهدف بناء
حساسات بيئية مختلفة كدرجات الحرارة ،الرياح ،الضوء والضغط
وغيرها ...يّمكن توصيل اآلردوينو ببرامج مختلفة على الحاسب
الشخصي ،ويعتمد في برمجته على لغة البرمجة مفتوحة المصدر
بروسيسنج ،وتتميز األكواد البرمجية الخاصة بلغة اآلردوينو أنها
تشبهه لغة السي وتعتبر من أسهل لغات البرمجة المستخدمة في
كتابة برامج المتحكمات الدقيقة .أثبتت بعض الدراسات أن شرائح
اآلردوينو تعتبر مدخل مهم يسهل من خالله معرفة مبادئ عن علوم
الحاسب ،هندسة الكهرباء والميكانيكا وكذلك الحرف والفنون،
مجتمعة في بيئة واحده
:تاريخة
ظهرت فكرة جهاز اآلردوينو عام 2005م في مدينة إيفريا
اإليطالية ،حيث أطلق ماسيمو بانزى بالتعاون مع دايفيد كوارتيليس
" (Arduin ofوجاينلوكا مارتينو بإطالق مشروع "أردوين إيفريا
و ُس ّم ّي المشروع باسم أشهر شخصية تاريخية في المدينةIvrea) .
وكان الهدف األساسي للمشروع هو عمل بيئة تطوير للمتحكمات
.دقيقه بصوره مفتوحه المصدر 100في المئة
:بعض مميزات االردوينوـ
البساطة :قطعة اآلردوينو مصممة لتناسب احتياجات الجميع،
.محترفين ،أساتذة ،طالب وهواة اإللكترونيات التفاعلية
أقل ثمنا ً مقارنةً مع األلواح األخرى من نفس النوع فثمن أغلى
$.الثمـــن :لوح اآلردوينو ال يتجاوز 50
التركيب الذاتي :يمكنك تحميل ورقة البيانات الخاصة مجانا ً من
الموقع الرسمي و شراء القطع وتركيبه بنفسك
متعدد المنصات :برنامج اآلردوينو له القدرة على االشتغال على
الماك والليننكس والويندوز وأغلب المتحكمات اإللكترونية األخرى
..تشتغل فقط على الويندوز
()void setup{
pinMode(led1,OUTPUT);
}
()void loop {
digitalWrite(led1,HIGH);
delay (1000);
digitalWrite(led1,LOW);
delay(1000);
}
برمجة األردوينوـ بطرق مختلفة للتحكم في LED
باستخدام :Switch
-1إضاءة LEDبمجرد الضغط على الزر/المفتاح وإيقافه
:
في هذا المشروع نحتاج إلى مجموعة مكونات وهي:
Arduino UNO
Breadboard
push Button switch × 1
Red LED × 1
220Ω Resistor × 1
10kΩ Resistor × 1
طريقة الربط بين المكونات كاالتي :
شرح توصيالت المشروعـ :
في الرسم كما موضح لقد قمت بتوصيل طرف الليد الموجب
( )+مع المقاومة 220اوم ثم وصلته بالـ Pinرقم 13بلوح
األردوينو .والطرف السالب لليد قمت بتوصيله مباشرة بالـ
Pinال GNDالموجودة باالردوينو.
لقد قمت بتوصيل طرف من أطراف Switchبالـ Pinالـ 5V
باالردوينو .الطرف الثاني قمت بتوصيله بالـ pinرقم 2للوح
االردوينو .وقمت بتوصيل الطرف الثاني للـ switchايضا ً
بالمقاومة 10kأوم على التوالي مع pinال GNDلإلردوينو.
الهدف ..من توصيل الـ switchاو المفتاح بهذا الشكل هو أنه
عندما يكون في حالته األساسية (أي :غير مضغوط) يكون
الجهد على الـ pinرقم 2لإلردوينو هو جهد GNDأي
يساوي 0Vويطلق على هذه الحالة .LOWوعندما يكون في
حالته الثانية (أي :مضغوط) يصبح الجهد على pinرقم 2
لإلردوينو هو جهد 5Vويطلق على هذه الحالة .HIGHوهذه
هي اإلشارات الرقمية التي سوف نقوم بإستخدامها مع
األردوينو ،والتي بناءاً عليها سوف يقوم بتنفيذ أوامر معينة..،
مثل إضاءة الليد أو إطفائه.
خطوات البرمجة :Programming
سوف نقوم بتوصيل االردوينو بالكمبيوتر من خالل الكابل
.USB type A/Bونقوم بفتح برنامج Arduinoثم نقوم
بظبط اإلعداد ،وهي الخاصة بتعريف نوع االردوينو :اتبع
الخطوات التالية..
UNO | 1من نافذة البرنامج :اضغط في الشريط من فوق
على Tools > Board > Arduino Genuino UNO
| 2األمر الثاني اسم Portالمستخدمة لتوصيل االردوينو
بالكمبيوتر .و تتأكد من انك مستخدم COMالصحيح :اضغط
على Tools > Port
| 3بعد ذلك افتح مشروع جديد ،من خالل الضغط في اعلى
البرنامج على .File > New project
void loop(){
ButtonState = digitalRead(BUTTON);
if(ButtonState == HIGH){
digitalWrite(LED,HIGH);
}
else{
digitalWrite(LED,LOW);
}
}
شرح أوامر البرنامج (الكود) :
في الجزء األول من الكود قمت بكتابة السطور التالية:
;const int LED = 13
;const int BUTTON = 2
;int ButtonState = 0
وهذا الجزء الذي يكتب فيه الثوابت و المتغيرات .فمثالً لما كتبنا
;const int LED = 13هنا نجعل للمتحكم أو لإلردوينو أن LED
هي ثابت ويساوي 13وال يتغير..
تعتبر هذه الخطوه انك بُعيد تسمية رقم 13بـ ( LEDوهو رقم
المخرج pinالذي قمنا بتوصيل عليه الليد) .والهدف منها هو
استخدام LEDأثناء كتابه البرنامج ،وتسهيل عملية الكتابة ومراجعة
الكود البرمجي .وإذا قمنا باالستغناء عن هذا األمر وكتبت رقم 13
في البرنامج ،فسوف يعمل بدون اي مشاكل.
والسطر الثاني ايضا ً هو نفس الفكرة هو ثابت BUTTONوأنه
يساوي .2
اما في السطر الثالث فإنه يختلف عن السطرين األولين .ألنه متغير
وليس ثابت ،بمعنى أنه سوف تتغير قيمته بقيم أخرى.
في الجزء الثاني من الكود هو الجزء الذي تقوم من خالله بتعريف
المداخل والمخارج ويبدأ بـ :)(Void setup
{)(void setup
;)pinMode(LED,OUTPUT
;)pinMode(BUTTON,INPUT
}
في كتابة الكود البرمجي من المهم جداً ان تقوم بتحديد أي األطراف
اللي هتكون دخل Inputواي األطراف اللي هتكون خروج
.Outputوهذا من خالل األمر:
);pinMode(pin number , state
مكان pin numberبنضع رقم الـ ،pinمثلما فعلت عند كتابتي
للكود ،حيث قمت بكتابة LEDوهذا النها تعبر عن Pinرقم .13
ومكان stateبنضع حالة pinهل هي دخل Inputمثل الـ
.Switch / Buttonوال هي خرج Outputمثل الـ .LEDوانا
حددت أن الـ Switch / Buttonسيكون ،Inputالن المفتاح
وظيفته انه يدخل اشارة رقمية يا اما قيمتها 5Vاما .0Vلذلك
سيكون .Inputأما في حالة LEDفأنا حددت انه سيكون Output
النه سوف يتم اخراج عليه جهد اما 5Vليضئ اما 0Vليطفئ .لذلك
سيكون .Outputوالننسى أن pinModeبيتكتب داخل الدالة:
}void setup( ){here
وفي هذا المشروع الهدف أن االردوينو يقوم بتشغيل الليد عند
الضغط على Button / Switchويغلقه بمجرد إزالة اصبعي عنه.
ابدأ اصيغ هذه الجملة في هيئة اكواد يفهمها األردوينو .وسوف اقوم
بكتابتها داخل الدالة الرئيسية
} {)(void loop
واألوامر ستكون كالتالي:
;)ButtonState = digitalRead(BUTTON
{)if(ButtonState == HIGH
;)digitalWrite(LED,HIGH
}
{else
;)digitalWrite(LED,LOW
}
في أول أمر ،قمت بكتابة = ButtonState
) ;digitalRead(BUTTONوسابقا أعاله كنت قد عرفت ثابت
BUTTONبأنه يعبر عن الـ pinرقم ،2هنا انا استخدمت
BUTTONبدالً من ذكر رقم .2ومن خالل األمر
) digitalRead(BUTTONفانا اجعلة يقوم بقراءة القيمة التي على
الـ pinرقم .2القيمة هذه في حالتنا ستكون اما HIGHوهذا في
حالة الـ Switchمضغوط اما LOWفي حالة انه غير مضغوط.
ولكن ماذا عن الجزء الثاني من األمر؟ ..ثم اجعلة يقوم بتخزين قيمة
هذه القراءة في متغير اسمه .ButtonState
ثم بعد ذلك..
لو كانت قراءتك للمدخل رقم 2تساوي HIGHخرج على المخرج
)LED( 13قيمة ..، HIGHوإن لم يكن ..اجعل قيمته .LOWهذا
الذي انا وضحته له من خالل الجملة الشرطية if ..else
{)if(ButtonState == HIGH
;)digitalWrite(LED,HIGH
}
{else
;)digitalWrite(LED,LOW
}
واألمر digitalWriteهو المسئول عن تطبيق الخرج اذا كان
خرج HIGHاو خرج .LOWحيث نقوم بكتابة داخله رقم المخرج
وهو 13وتعبر عنه بـ LEDوالخرج المراد تطبيقه عليه وهو يا اما
HIGHاو .LOWملحوظة HIGH :تعني 5Vو LOWتعني . .0V
void setup(){
pinMode(LED,OUTPUT);
pinMode(BUTTON,INPUT);
}
void loop(){
ButtonState = digitalRead(BUTTON);
if(ButtonState == HIGH){
digitalWrite(LED,HIGH);
delay(100);
digitalWrite(LED,LOW);
delay(100);
}
else{
digitalWrite(LED,LOW);
}
}
التعديالت التي قمت بها للكود في ثالث سطور :األول هو
) ، ;delay(100وهذا األمر وظيفته كما ذكرنا سابقا انه يأخر حالة
الليد لفترة معينة بالملي ثانية هنا كتبت 100اي 100ملي ثانية .ثم
بعد ذلك كتبت األمر الثاني وهو );digitalWrite(LED,LOW
يعني خرج 0Vعلى الليد يعني اقفله ثم انتظر 100ملي ثانية.
تفسير :األردوينو سوف يبدأ بقراءة قيمة pinرقم 2لو وجدها
( HIGHالمفتاح مضغوط) سينفذ األوامر التي داخل الجملة
الشرطية if؛ و األوامر هي انه يشغل الليد لمدة 100ملي ثانية
ويطفئه لمدة 100ملي ثانية.
ثم ينتقل الى األمر elseيجد أن شرط elseلم يحقق؛ ألنه يشترط
ان قراءة المدخل رقم 2تكون ( LOWالمفتاح غير مضغوط) لكي
يقوم بإطفاء الليد .ويرجع يكرر االردوينو نفس األوامر فتظهر لك
النتيجة النهائية هي ان الليد يعمل ويطفئ بشكل متكرر طالما انك
ضاغط على المفتاح ،ولما ترفع اصبعك عنه سوف يطفئ تماما ً.
void loop(){
if(digitalRead(BUTTONon) == HIGH){
digitalWrite(LED,HIGH);
}
else if(digitalRead(BUTTONoff) == HIGH){
digitalWrite(LED,LOW);
}
}
:وفي الكود اعالة قمنا ببعض التعديالت
وهذا للتمييزBUTTONon الىBUTTON غيرت ثابت وهو-1
. الثاني الذي قمنا بإضافتهSwitchبينه وبين ال
رقمpin ويعبر عنBUTTONoff قمنا بإضافة ثابت جديد وهو-2
.Input على أنهvoid setup وحددته ايضا ً في،3
؛ وهذ امر بيسمح لي ان اضيفelse if اضفنا أمر جديد وهو-3
.if شرط تاني مع الشرط األول
تفسير الكود :
االردوينو سوف يقوم في أول أمر الـ ifبالتأكد إذا كان الشرط
الموجود به متحقق او ال .وذلك من خالل قراءة الـ pinرقم 2لو
وجدها ( HIGHالمفتاح مضغوط) ينفذ األمر الذي بداخل الجملة
الشرطية وهو إخراج اشارة HIGHعلى الـ pinرقم ( 13إضاءة
الليد).
ثم ينتقل الى األمر الثاني وهو else ifوالتاكد اذا كان الشرط
الموجود به متحقق او ال .وذلك من خالل قراءة الـ pinرقم 2لو
وجدها ( HIGHالمفتاح مضغوط) ينفذ األمر اللي بداخلها وهو
إخراج اشارة LOWعلى الـ pinرقم ( 13إطفاء الليد).
النهاية