]h
أساسيات األردوينو
مقدمة آالف الطالب والهواه يتعلمون األردوينو سنويا وقد انتشر في العالم كله لدى جميع فئات المجتمع. نقاط مهمة عن هذا الكتاب: •
الهدف من الكتاب إيصال المعلومة بسرعة للمبتدئ في األردوينو بحيث يتمكن من الحصول على األساسيات بدون الحشو الزائد ليتمكن بعدها من االنطالق بنفسه.
•
يجب على المتعلم البحث والتعلم الذاتي باإلضافة إلى هذا الكتاب.
تم تبسيط العديد من المعلومات ليسهل على المتعلم الدخول في مجال األردوينو.
ii
أساسيات األردوينو ماذا ستستفيد من هذا الكتاب؟ ✓ أساسيات بسيطة في الكهرباء. ✓ ماهو األردوينو ✓ منافذ األردوينو أنواعها والتحكم بها. ✓ فهم أهم أوامر األردوينو مع التطبيق: ✓ )(digitalWrite, digitalRead, analogWrite, analogRead ✓ فهم أهم أوامر البرمجة الرئيسية: ✓ )(For, while, if else ✓ التطبيق العملي مع التوصيل والكود مع شرح كل أمر في الكود. ✓ التطبيق على بعض الحساسات وعمل بعض المشاريع البسيطة.
iii
أساسيات األردوينو
حقوق الطبع جميع الحقوق محفوظة ,الكتاب متاح للجميع لالستعمال الغير تجاري وال يسمح ببيعه وال طباعته ألغراض تجارية إال بإذن خطي من الكاتب.
للتواصل مع الكاتب:
[email protected]
iv
أساسيات األردوينو
v
Contents أساسيات ف الكهرباء
1
المتحكمات واألردوينو
10
برنامج ARDUINO IDE
19
التحكم باألجهزة باستخدام األردوينو
26
قراءة اإلشارة من المنافذ
46
اوامر برمجية مهمة
62
المحركات
79
بروتوكوالت االتصاالت بي األجهزة
94
درايفر سيكت
102
تطبيقات عملية عىل أشهر الحساسات
114
أساسيات األردوينو
أساسيات في الكهرباء الفولت – التيار – المقاومة
1
أساسيات األردوينو دائما ما نشبه الكهرباء بالماء ،ولكن لماذا؟ الماء: •
ينتقل من مناطق الضغط المرتفع إلى المنخفض ومن المناطق المرتفعة إلى المنخفضة.
•
إذا لم يوجد فرق في االرتفاع أو الضغط ،يبقى الماء ساكنا.
الكهرباء: •
تنتقل من مناطق الجهد المرتفع إلى المنخفض.
•
إذا لم يوجد فرق في الجهد بين نقطتين فإن الكهرباء ال تنتقل.
لكن ما هو فرق الجهد؟
2
أساسيات األردوينو
فرق الجهد (الفولت): البطارية في الصورة األولى 1.5فولت ،يعني أن طرفها الموجب جهده أعلى من السالب ب ،1.5والبطارية في الصورة الثانية 9فولت ،يعني أن طرفها الموجب جهده أعلى من السالب ب9 فرق الجهد يقاس بالفولت ،وهو الفرق في الجهد بين طرفين.
عندما نضع هذه البطاريات في دائرة كهربائية سينتقل التيار الكهربائي بسبب وجود فرق في الجهد بين الطرفين (فولت).
3
أساسيات األردوينو نستطيع أن نتخيل أن الطرف الموجب طاقته أعلى من الطرف السالب بمقدار 1.5وهذا هو الفولت .الشحنات الكهربائية تنتقل من الطاقة األعلى إلى األقل .إذا وصلنا لمبة ببطارية فإن اللمبة ستعمل ،لماذا؟
ألن الشحنات وجدت طريقا لها لتنتقل إلى الطاقة األقل مرورا باللمبة.
∞∞∞
4
أساسيات األردوينو
التيار الكهربائي. عند توصيل طرفي بطارية 9فولت مع بعضهما ماذا سيحدث؟
سينتقل تيار كبير من الجهد األعلى إلى األقل ،وسترتفع درجة حرارة البطارية وقد تسيح أو تشتعل.
5
أساسيات األردوينو نالحظ أيضا لو أننا قمنا بتوصيل لمبة LEDمباشرة مع بطارية 9فولت ستحترق بسبب ارتفاع شدة التيار.
ولكن لماذا انتقل تيار كبير جدا؟ بسبب عدم وجود مقاومة تحد من مرور التيار.
6
أساسيات األردوينو المقاومة •
المقاومة تحد من مرور التيار الكهربائي.
•
كلما زادت المقاومة قل التيار المنتقل.
•
لكل مادة مقاومة كهربائية معينة وتقاس باألوم .Ω
•
المواد الموصلة مقاومتها قليلة جدا مثل النحاس والفضة واأللمنيوم.
•
المواد العازلة مقاومتها عالية جدا مثل الخشب والبالستيك والمطاط.
صورة 1مقاومة كهربائية
∞∞∞
7
أساسيات األردوينو قانون أومOhm’s Law
المقاومة = التيار xفرق الجهد
هو أهم قانون في الكهرباء كلها ،مثال: لمبة LEDتحتاج تيار قيمته 0.020أمبير لتعمل ،لو أردنا تشغيلها باستخدام بطارية 9فولت كم المقاومة التي يمكن استخدامها؟
بما أن الفولت = 9والتيار المطلوب = 0.020 المقاومة = الفولت ÷ التيار. المقاومة المطلوبة = 450 = 0.020 ÷ 9أوم. نستطيع استخدام مقاومة 450أوم أو أكبر (تم تجاهل فولت اللمبة للتبسيط). ومن نفس القانون نستطيع أن نحسب التيار والمقاومة.
∞∞∞
8
أساسيات األردوينو
ملخص الدرس: الفولت هو فرق الجهد بين نقطتين. التيار ينتقل من الجهد األعلى إلى األقل. المقاومة تحدد كمية التيار الكهربائي المار. اتصال نقطتين بينهما فرق جهد بدون مقاومة أو بمقاومة قليلة جدا يسمى .Short Circuit (قانون أوم( الفولت = التيار xالمقاومة
∞∞∞ تمارين .1إذا زادت المقاومة والفولت ثابت ،كيف يتأثر التيار الكهربائي؟ .2لنسمح بمرور 2أمبير (التيار) في مقاومة قيمتها 10أوم ،كم فولت نحتاج؟ .3ما هو الفولت؟ .4ما هو التيار؟ وما هي وحدة قياسه؟ .5كيف ينتقل التيار الكهربائي؟
9
أساسيات األردوينو
المتحكمات واألردوينو تحكم بال حدود
10
أساسيات األردوينو المتحكمات هي عقل الدوائر اإللكترونية نستطيع برمجتها لتنفذ ما نريد. مشكلة: المتحكمات برمجتها تحتاج إلى قطعة برمجة خارجية ،وإال قطع إلكترونية أخرى عديدة وكان التعامل معها حكرا على المختصين .فكر فريق من إيطاليا كيف يسهلوا تعلم واستخدام هذه المتحكمات ،فطوروا اآلتي: •
ألواح الكترونية تحتوي على متحكم ) (Micro-Controllerوجميع ما يحتاجه من قطع الكترونية.
•
مجموعة مكتبات برمجية يمكن استخدامها لتسهل علينا برمجة المتحكمات.
•
برنامج Arduino IDEيمكن من خالله برمجة أي لوحة متوافقة.
•
كل برامجهم وألواحهم اإللكترونية مفتوحة المصدر ،بمعنى أنها متاحة للجميع ،فيمكن للجميع المشاركة في تطويرها!
وكانت النتيجة تسهيل التعامل مع المتحكمات بدرجة كبيرة جدا ،حتى انتشرت برامجهم ولوحاتهم في العالم وأصبحت تستخدم من الصغير والكبير.
11
أساسيات األردوينو
ما هو الأردوينو؟ منصة الهدف منها تسهيل برمجة المتحكمات وتوصيلها بالدوائر اإللكترونية. توجد ألواح كثيرة تدعم األردوينو أكثرها انتشارا هو األونو “ ”Unoوهي ما سندرسه ونطبق عليه في هذا الكتاب. األونو يحتوي على متحكم اسمه Atmega328Pأهم مواصفاته: ❖ سرعة المتحكم 16 :ميجا هرتز (.)MHz16 ❖ ذاكرة الفالش 32 :كيلو بايت .(32KB)Flash Memory ❖ ذاكرة تخزين التعريفات 2 :كيلو بايت ).SRam(2KB ❖ ذاكرة تخزين دائمة للمستخدم 1 :كيلو بايت .(1KB)EEPROOM ❖ عدد منافذ الديجيتال 14 :منفذ. ❖ عدد منافذ األنالوج 6 :منافذ. ❖ الكهرباء المطلوبة :يعمل على 5فولت تيار ثابت (.)DC ❖ منافذ السيريال :واحد.
∞∞∞
12
أساسيات األردوينو
منافذ الديجيتال: عددها 14في األردوينو أونو ،تستخدم في: .1تشغيل األجهزة المختلفة واطفاءها. .2قراءة اإلشارة الواصلة للمنفذ ،هل هنالك إشارة واصلة أم ال؟ وال يمكننا معرفة قوتها. .3بعضها تدعم خاصية ال PWMوسندرسها بمشيئة هللا تعالى. .4تدعم بعض منافذها بروتوكوالت اإلتصال Serialو .SPI
∞∞∞
13
أساسيات األردوينو
منافذ الأنالوج لوحة األردوينو أونو تحتوي على 6منافذ أنالوج ،تستخدم في: .1قراءة قيمة اإلشارة الواصلة لها بدقة. .2كمنافذ ديجيتال. .3بعض منافذها تدعم بروتوكول االتصال .I2C
∞∞∞
14
أساسيات األردوينو
منافذ الطاقة الموجودة في الأونو: منفذ ( :)GNDيسمى األرضي ،وهو يعتبر 0فولت. منفذ ( :)V5منفذ 5فولت. منفذ ( :)V3.3منفذ 3.3فولت. منفذ ( :)Vinلتشغيل األردوينو من مصدر طاقة خارجي كبطارية مثال (بين 7فولت إلى 12فولت).
15
أساسيات األردوينو لوحة األونو تعمل على 5فولت ،يمكن تغذيتها ب 5فولت مباشرة باستخدام سلك ال USBعن طريق: ✓ الكمبيوتر. ✓ شاحن جوال متنقل أو ثابت. ✓ يمكننا أيضا توصيل 5فولت مباشرة عن طريق منفذ .V5
16
أساسيات األردوينو ويمكن استخدام مصدر كهرباء خارجي مثل البطاريات أو أفياش الكهرباء من 7فولت إلى 12فولت (المنظم المحدد في الصورة سيقلل الفولت إلى 5فولت ليستخدمه المتحكم).
∞∞∞
17
أساسيات األردوينو
تمارين .1ماهي أشهر لوحة أردوينو؟ .2كيف سهل األردوينو استخدام األلواح اإللكترونية؟ .3ماهو الفرق بين منافذ الديجيتال واألنالوج؟ .4كيف نستطيع تشغيل األردوينو بمصدر طاقة 12فولت؟
18
أساسيات األردوينو
برنامج Arduino IDE
19
أساسيات األردوينو
تثبيت برنامج الأردوينو Arduino IDE برنامج يمكن من خالله برمجة أي جهاز متوافق مع األردوينو بسهولة .يمكن تحميله من الرابط: https://www.arduino.cc/en/Main/Software نختار البرنامج الذي يوافق نظام التشغيل (في حالة ويندوز نختار .)Windows Installer ثم نثبت البرنامج على جهازنا.
20
أساسيات األردوينو
برنامج الأردوينو عند فتح برنامج األردوينو بعد تثبيته سنجد الصفحة التالية:
هنا نكتب البرنامج الذي نريد رفعه للوحة األردوينو.
21
أساسيات األردوينو
22
أساسيات في برمجة الأردوينو دالة الإعدادات: •
يجب كتابة هذه الدالة في كل برامج األردوينو.
}
•
ما بداخل األقواس {
•
نضع اإلعدادات التي ال نحتاج تغييرها داخل هذه األقواس.
ينفذ مرة واحدة فقط.
)(void setup { }
∞∞∞ الدالة الرئيسية: •
يجب كتابة هذه الدالة في كل برامج األردوينو.
•
كحلقة سباق السيارات ،سينفذ األردوينو مابين األقواس من أول سطر إلى آخر سطر ثم يرجع من جديد وهكذا.
•
هنا نضع برنامجنا الرئيسي.
)(void loop { }
أساسيات األردوينو
مالحظة :أي شيء مكتوب بعد الشرطتين المائلتين //
23
ال يدخل في البرنامج وهي مجرد مالحظات يكتبها المبرمج
للشرح والتوضيح.
//
أساسيات في البرمجة: ✓ كل قوس يجب أن يغلق.
)(void setup { }
✓ االهتمام بالحروف الكبيرة والصغيرة ( timerال تساوي .)Timer
صحيحة ;)digitalWrite(9, HIGH خاطئة ;)digitalwrite(9, high
✓ أوامر البرمجة العادية تنتهي بــ
; ;)pinMode(9, OUTPUT ;)digitalWrite(9, HIGH
أساسيات األردوينو ✓ الدوال “ ”Functionsتنتهي بقوسين فارغة أو داخلها أمر
24
() ( )void setup { } ( )void loop { }
خطوات رفع برنامج من الكمبيوتر إلى المتحكم: ✓ نتأكد من توصيل األردوينو بالكمبيوتر عن طريق سلك ال.USB ✓ عند توصيل األردوينو بالكمبيوتر عن طريق سلك ال USBيجب علينا أن نختار المنفذ المتصل باللوحة عن طريق برنامج األردوينو من الكمبيوتر كالتالي: o
نذهب إلى أدوات ← منفذ ← المنفذ الخاص باألردوينو. Tools - > Port → choose
(إذا لم يوجد المنفذ الخاص باألردوينو تأكد من توصيل األردوينو أو تثبيت البرنامج بشكل صحيح، في حاالت كثيرة تكون المشكلة عدم تثبيت ال driverالخاص باألردوينو). o
نختار نوع اللوحة الموجودة لدينا عن طريق: أدوات ← اللوحة ← نختار اسم اللوحة الموجودة لدينا (.)Arduino Uno/Genuino
✓ نضغط .Upload ✓ سيظهر لك في األسفل معلومات التحميل ،وإن كان هناك خطأ سيكتب لك سببه غالبا. ✓ في حال كان كل شيء على ما يرام ،ستظهر لك عبارة.Done Uploading
أساسيات األردوينو
اختيار نوع اللوحة المستخدمة
25
أساسيات األردوينو
التحكم باألجهزة باستخدام األردوينو
26
أساسيات األردوينو
الأمر pinMode قبل استخدام أي منفذ من منافذ األردوينو الديجيتال يجب علينا تحديد حالة المنفذ .هناك حالتين للمنافذ: •
مخرج :عندما نريد تشغيل وإطفاء جهاز أو إرسال إشارة ،نحدد المنفذ كمخرج كالتالي:
;) , OUTPUTرقم المنفذ (pinMode •
مدخل :عندما نريد قراءة إشارة أو حساس ،نحدد المنفذ كمدخل.
;) , INPUTرقم المنفذ (pinMode
تحديد المنفذ عادة يكون مرة واحدة داخل دالة اإلعدادات ،setupيمكن أن نغير حالة المنفذ في أي وقت إن احتجنا لذلك.
∞∞∞
27
أساسيات األردوينو
الأمر digitalWrite نستطيع التحكم بمنافذ الديجيتال لترسل إشارة 5فولت أو 0فولت ( HIGHو :)LOW لتشغيل األجهزة أو إرسال إشارة 5فولت من أي منفذ نستخدم األمر:
;) , HIGHرقم المنفذ (digitalWrite إلرسال إشارة 0فولت من اي منفذ ديجيتال نستخدم األمر:
;) , LOWرقم المنفذ (digitalWrite
ما معنى ديجيتال؟ •
إما تكون تعمل 5( ONفولت).
•
وإما تكون ال تعمل 0( OFFفولت).
•
ال يمكننا الحصول على 2.5فولت مثال أو 3فولت ،إما تعمل أو ال تعمل
∞∞∞
28
أساسيات األردوينو
29
تشغيل ال LEDالداخلي في لوحة الأردوينو هناك إضاءة LEDداخل لوحة األردوينو موصولة بالمنفذ 13سنبرمجها لتعمل وتنطفئ كل ثانية. نفتح برنامج األردوينو ونكتب أو ننسخ هذا البرنامج:
)(void setup { ;)Serial.begin(9600 } )(int main { ;)" Serial.println("I love Arduino ;)delay(1000 } بعد كتابة البرنامج في برنامج األردوينو IDEسنرفعه إلى لوحة األردوينو كما وضحنا مسبقا.
ماذا يفعل البرنامج؟ .1يجعل المنفذ رقم 13مخرج. .2يجعل المنفذ رقم ( HIGH 13بمعنى آخر )ONفيعمل ال LEDبسبب مرور التيار من المنفذ 13إلى المنفذ األرضي مرورا بال.LED .3يوقف البرنامج لمدة ثانية. .4يجعل المنفذ رقم ( LOW 13بمعنى آخر )offفينطفئ ال LEDألن المنفذ اآلن أصبح 0فولت واألرضي 0 فولت فال يوجد فرق في الجهد بينهما ،فال ينتقل التيار. .5يوقف البرنامج لمدة ثانية.
أساسيات األردوينو
30
شرح األوامر
تحديد المنفذ رقم 9كمخرج.
;)pinMode(9, OUTPUT
التحكم بالمنفذ رقم 9ليصبح 5فولت(HIGH).
;)digitalWrite(9, HIGH
ايقاف البرنامج لمدة 1000ملي ثانية ( 1ثانية).
;)delay(1000 ;)digitalWrite(9, LOW
التحكم بالمنفذ رقم 9ليصبح 0فولت(LOW).
األمر :delay •
يوقف البرنامج حسب المدة المعطاة بين األقواس وهي بالملي ثانية.
•
لن ينفذ األمر الذي بعده حتى تنتهي المدة.
•
ال ينصح باستخدام هذا األمر وهناك طرق بديلة سندرسها الحقا.
∞∞∞
أساسيات األردوينو تشغيل لمبة LEDخارجية القطع المطلوبة: إضاءة ليد. مقاومة (أي قيمة بين 200إلى 1000أوم مناسبة). لوحة تجارب (بريد بورد). سلكين ذكر-ذكر.
31
أساسيات األردوينو خطوات التوصيل: نوصل سلك من المنفذ رقم 9إلى رجل اإلضاءة الطويلة. نوصل اي طرف من المقاومة برجل اإلضاءة القصيرة. نوصل الطرف اآلخر من المقاومة باألرضي .GND
يجب أال نضع رجلي الليد أو المقاومة على نفس الخط األفقي.
البرنامج: نستخدم نفس البرنامج في المثال السابق مع تغيير رقم المنفذ من 13إلى .9
32
أساسيات األردوينو تدريب :اصنع إشارة مرور ستحتاج إلى اآلتي: ثالثة مقاومات مناسبة (اي قيمة بين 200و 1000أوم) ثالثة لمبات ( LEDأحمر ،أصفر ،أخضر). لوحة تجارب. أسالك ذكر-ذكر للتوصيل.
∞∞∞
33
أساسيات األردوينو
34
Serial أحد بروتوكوالت اإلتصاالت ،نستطيع من خالله أن نرسل أي معلومة من األردوينو إلى الكمبيوتر والعكس .لنوصل األردوينو أونو بالكمبيوتر عن طريق السيريال نحتاج أن نوصل سلك ال USBبين الطرفين فقط. لنبدأ باستخدام السيريال يجب علينا فقط تحديد سرعة تبادل المعلومات باستخدام األمر:
;)Serial.begin(9600 بعدها نستطيع ارسال المعلومات إلى الكمبيوتر باستخدام األمر:
;)(Serial.println إلرسال جملة I Love Arduinoمن األردوينو إلى الكمبيوتر مرة واحدة كل ثانية نستطيع أن نستخدم البرنامج التالي:
)(void setup { ;)Serial.begin(9600 } )(int main { ;)"Serial.println("I love Arduino ;)delay(1000 }
أساسيات األردوينو اآلن لنرى الرسالة نضغط على العدسة أعلى يمين برنامج األردوينو بعد تحميل البرنامج إلى اللوحة.
•
يجب أن نتأكد من اختيار المنفذ (.)Port
•
يجب أن تكون السرعة أسفل يمين الشاشة بعد الضغط على العدسة 9600مساوية للبرنامج الذي تم تحميله للوحة.
∞∞∞
35
أساسيات األردوينو
مشروع إشارة مرور ماذا يعمل المشروع؟ سنبرمج األردوينو ليقوم بتشغيل ثالث لمبات LEDكالتالي: ✓ سيشغل اللون األخضر لمدة ثالث ثواني ثم يطفيه. ✓ سيشغل اللون األصفر لمدة ثانية ويطفيه. ✓ سيشغل اللون األحمر لمدة ثالث ثواني ثم يطفيه ويعود من البداية. ✓ وفي كل مرة سيظهر لنا على شاشة السيريال اللون الحالي.
القطع المطلوبة: ✓ أردوينو. ✓ كيبل للبرمجة. ✓ ثالث مقاومات قيمتها 220أوم. ✓ ثالث لمبات :LEDلون أخضر ،لون أحمر ،لون أصفر. ✓ لوحة تجارب (بريد بورد). ✓ أسالك للتوصيل ذكر-ذكر.
36
أساسيات األردوينو التوصيل (دياجرام):
37
38
أساسيات األردوينو الكود
int red = 11; int yellow = 10; int green = 9; void setup() { pinMode(green, OUTPUT); pinMode(yellow, OUTPUT); pinMode(red, OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(green, HIGH); Serial.println("Green"); delay(3000); digitalWrite(green, LOW); digitalWrite(yellow, HIGH); Serial.println("Yellow"); delay(1000); digitalWrite(yellow, LOW); digitalWrite(red, HIGH); Serial.println("Red"); delay(3000); digitalWrite(red, LOW); }
أساسيات األردوينو
39
شرح الكود
;int red
ينشيء متغير اسمه ( redيمكننا تسميته أي اسم).
;red = 11
يمكن أن نحفظ فيه األعداد الصحيحة
;) pinMode( ,
نعطي المتغير redقيمة 11 اآلن كلما استخدمنا كلمة redسيراها األردوينو 11
;)pinMode(red, OUTPUT
هذا األمر يحدد لألردوينو كيف سنستخدم المنفذ إما
;)digitalWrite(red, HIGH
كمخرج أو مدخل.
;)delay(1000
الفراغ األول بين األقواس هو لرقم المنفذ.
;)Serial.begin(9600
الفراغ الثاني لنحدد استخدام المنفذ كمخرج OUTPUTأو مدخلINPUT.
;)”Serial.println(“Green
يجب أن تكون بحروف كبيرة.
بعد توصيل الدائرة ورفع البرنامج ،سنضغط على العدسة أعلى اليمين لفتح السيريال في الكمبيوتر ورؤية ما يرسله لنا األردوينو. يجب أن تكون سرعة نقل البيانات مساوية لما برمجناها في األردوينو أسفل الصفحة على اليمين.
∞∞∞
أساسيات األردوينو
الأمر analogWrite في األمثلة السابقة ،تحكمنا في ال LEDفإما يعمل أو ال يعمل ،ولكن كيف يمكننا التحكم في شدة إضاءته؟ للتحكم بشدة اإلضاءة علينا تغيير الفولت الخارج من المنافذ ،لكن ال يستطيع األردوينو اخراج أي فولت سوى 5 فولت أو 0فولت وال يستطيع إخراج 3أو 2.5فولت من المنافذ. فلكي نتحكم بشدة اإلضاءة ،سنستخدم طريقة تسمى .Pulse Width Modulation
طريقة عمل ال:PWM .1يرسل األردوينو 500إشارة في الثانية. .2أقصى طول لكل إشارة 2ملي ثانية. .3نقوم بالتحكم في طول بقاء اإلشارة .كلما طالت مدة بقاء اإلشارة ،زادت الطاقة الناتجة من المنفذ (الصورة باألسفل). .4باستخدام األمر analogWriteسنحدد رقم المنفذ ،ورقم (من 0إلى )255كلما زاد الرقم زادت شدة اإلشارة. .5المنافذ التي تدعم ال PWMبجانبها عالمة ~ على لوحة األردوينو.
40
أساسيات األردوينو طريقة استخدام األمر analogWrite .1نحدد المنفذ كمخرج. .2نحدد قوة اإلشارة من المنفذ (نستخدم رقم من 0إلى .)255 255 .aأعلى قيمة. 0 .bأقل قيمة.
سنقوم بالتحكم بشدة إضاءة لمبة LEDباستخدام ال.PWM القطع المطلوبة: ✓ أردوينو وكيبل للبرمجة ✓ مقاومة 220أوم او حولها ✓ LED ✓ أسالك للتوصيل ✓ لوحة تجارب "”Breadboard
41
أساسيات األردوينو
42
:التوصيل
:الكود
void setup() { pinMode(9, OUTPUT); } void loop() { for (int i = 0; i < 255; i++) //for loop { analogWrite(9, i); delay(25); } }
أساسيات األردوينو
43
شرح الكود:
الكود سيقوم بانشاء عدد صحيح اسمه iقيمته 0
)for(int i =0;i<255,i++
مادامت iأقل من 255سيضيف البرنامج رقم واحد ل i وسينفذ الكود الذي في األقواس ثم يعود ويكرر ننفس العملية إلى أن تصل قيمة iإلى .255 يحدد المنفذ رقم 9كمخرج من غير هذا األمر لن نستطيع تشغيل أي جهاز من المنفذ
;)analogWrite(9, i ;)delay(25
أساسيات األردوينو
ملخص الباب: ✓ قبل استخدام منافذ الديجيتال علينا تحديدها هل هي مدخل أم مخرج.
;)pinMode(4, OUTPUT ;)pinMode(5, INPUT
✓ األمر digitalWriteيتحكم في المنفذ بتشغيله وإيقافه (.)HIGH, LOW
;)digitalWrite(9, HIGH
✓ األمر () delayيوقف البرنامج حسب المدة المحددة بين األقواس.
;)delay(25 •
قبل استخدام السيريال البد أن نفعله ونحدد سرعته.
;)Serial.begin(9600
44
أساسيات األردوينو
تمارين: .1متى نستخدم المنفذ كمخرج؟ ومتى نستخدمه كمدخل؟ .2كيف نحدد المنفذ كمخرج؟ اكتب األمر. .3ما األمر الذي نحتاجه لنجعل المنفذ HIGHلنشغل مثال LEDمتصل به؟ .4ماذا يفعل األمر delay؟ .5كيف نرسل هذه الجملة إلى الكمبيوتر من األردوينو عن طريق السيريال " “ Hello World؟ اكتب البرنامج. .6ما الفرق بين digitalWriteو analogWrite؟ .7ماهي أعلى قيمة في األمر analogWrite؟ .8ماهو أعلى تيار تستطيع المنافذ تحمله؟
45
أساسيات األردوينو
قراءة اإلشارة من المنافذ
46
أساسيات األردوينو عندما يمر جسم أمام حساس الحركة ،يعطي الحساس إشارة ( 5-3فولت) ،وعندما ال يكتشف وجود تغير في الحركة ستكون اإلشارة 0فولت .كيف يمكن أن نقرأ إشارة الحساس باستخدام األردوينو؟
قراءة إشارة عن طريق منافذ الديجيتال ✓ نحدد المنفذ كمدخل.
;)pinMode(3, INPUT ✓ نقرأ اإلشارة باستخدام األمر:
;(digitalRead )3
إذا كانت هناك إشارة عند المنفذ سيعطينا قيمة ( ،.)1إذا لم يكن هناك إشارة عند المنفذ سيعطينا قيمة (.)0 علينا أن نحفظ القيمة في متغير إن أردنا استخدام القيمة الحقا.
47
أساسيات األردوينو
48
:الكود
void setup() { Serial.begin(9600); pinMode(3, INPUT); } int main() { int x; x = digitalRead(3); if (x == 1) { Serial.println("Pin received HIGH Signal"); } else if (x == 0) { Serial.println("Pin received LOW Signal"); } }
أساسيات األردوينو
حساس الحركة األجسام الحية تنبعث منها أشعة تحت حمراء نظرا لحرارتها .الحساس يقوم بقياس التغير في هذه األشعة الواصلة له. الحساس يحتوي على ثالثة أرجل أو منافذ: .1منفذ للفولت .2منفذ لألرضي .3منفذ نقرأ منها حالة الحساس.
طريقة عمل المشروع: .1عندما يمر جسم حي أمام حساس الحركة سيعطينا الحساس اشارة. .2األردوينو سيقرأها عن طريق أحد منافذ الديجيتال. .3في حال وجود إشارة سيقوم األردوينو بتشغيل إضاءة لعدة ثوان.
49
أساسيات األردوينو القطع المطلوبة: .1أردوينو أونو +كيبل للبرمجة. .2حساس الحركة. .3إضاءة .LED .4مقاومة 200أوم أو أعلى. .5لوحة تجارب .Breadboard
50
أساسيات األردوينو التوصيل:
51
أساسيات األردوينو
52
:الكود
void setup() { Serial.begin(9600); pinMode(10, INPUT); pinMode(9, OUTPUT); } void loop() { int active = digitalRead(10); if (active == 1) { digitalWrite(9, HIGH); Serial.println("Motion Detected"); delay(500); } else { digitalWrite(9 , LOW); Serial.println("No Motion Detected"); } }
أساسيات األردوينو
53
شرح الكود:
تحديد المنفذ رقم 10كمدخل تحديد المنفذ رقم 9كمخرج انشاء متغير يقبل اعداد صحيحة اسمه active
;)pinMode(10, INPUT ;)pinMode(9, OUTPUT ;)int active = digitalRead(10
activeنعطيه قيمة القراءة من المنفذ رقم 10 اآلن قيمة القراءة محفوظة في المتغير نستطيع استرجاعها واستخدامها متى ما أردنا جملة شرطية...اذا كانت قيمة activeتساوي 1سينفذ ما بداخل األقواس.
)if (active == 1 } {
نالحظ انه كتب == وليس= إن لم يتحقق الشرط في الجملة الشرطية... يوقف البرنامج لمدة نصف ثانية ( 1 = 1000ثانية).
else ;)delay(500
أساسيات األردوينو
لماذا استخدمنا إشارتين يساوي == وليس واحدة في الجملة الشرطية في األعلى؟ األمر active = 1معناه أننا نعطي المتغير activeقيمة 1 األمر active ==1معناه أننا نسأل األردوينو هل قيمة المتغير activeتساوي واحد أم ال؟
األردوينو قادر على أن يقرأ اإلشارات التي قوتها من 0إلى 5فولت لكن عندما نقرأها من منفذ ديجيتال فإن األردوينو سيظهر لنا هل اإلشارة موجودة أم ال ،ولن نعرف مدى قوتها .لمعرفة قيمة اإلشارة سنستخدم منافذ األنالوج.
∞∞∞
54
أساسيات األردوينو
القراءة من منفذ أنالوج: ❖ حساس درجة الحرارة يعطينا إشارة تزيد قوتها (الفولت) كلما زادت درجة الحرارة. ❖ القراءة من منافذ الديجيتال لن تفيدنا ألنها فقط تخبرنا هل هناك إشارة أم ال. ❖ يجب استخدام منافذ األنالوج ألنها تقيس اإلشارة بدقة عالية. لن نحتاج لتحديد المنفذ كمدخل " ”Inputعند القراءة من منفذ أنالوج فقط نستخدم األمر التالي:
;)analogRead(A0 يمكن أن ننشيء متغير ونحفظ فيه قيمة القراءة: ;)int reading = analogRead(A0
55
أساسيات األردوينو
مشروع قراءة فرق الجهد من مقاومة متغيرة: المقاومة المتغيرة ()Potentiometer
•
مقاومة لها قيمة معينة ( 1000أوم مثال).
•
لها 3أرجل ،عند حساب المقاومة من طرفيها سنجدها ( 1000أوم).
•
عند حساب المقاومة من أي طرف مع الرجل الوسطى ،سنجدها تتغير مع تحريك المقاومة من 0إلى 1000أوم.
•
بتغيير المقاومة يتغير فرق الجهد على الرجل الوسطى وهذا ما سنقيسه باستخدام منفذ األنالوج.
56
أساسيات األردوينو التوصيل:
57
أساسيات األردوينو
58
طريقة التوصيل: •
الرجل الوسطى نوصلها بمنفذ أنالوج.
•
نوصل أحد أطراف المقاومة ب 5فولت.
•
الطرف األخر نوصله باألرضي .GND
الكود:
)(void setup { ;)Serial.begin(9600 } )(void loop { ;float reading ;)reading = analogRead(0 ;)Serial.println(reading ;)Serial.println(reading * 5 / 1023 ;)delay(100 }
أساسيات األردوينو
59
شرح الكود:
يحدد سرعة التخاطب عن طريق السيريال. انشاء متغير اسمه reading
;)Serial.print(9600 ;float reading
يحفظ أرقام كسرية (مثل 1.0أو 0.74أو .)102.9 أمر لقراءة اإلشارة من المنفذ رقم ( A0أنالوج). يأخذ قراءة من المنفذ رقم A0ويحفظها في
;)analogRead(0 ;)reading = analogRead(0
المتغير .reading ارسال قيمة readingعن طريق السيريال.
;)Serial.println(reading
يمكننا قراءتها على شاشة الكمبيوتر. القراءة تأتينا رقم من 0إلى 1024 1024يعني أن اإلشارة قيمتها 5فولت. 0يعني أن اإلشارة قيمتها 0فولت. نحول القراءة إلى فولت كالتالي: نضربها في 5ونقسمها على 1024 في هذا األمر حولنا القراءة إلى فولت وأرسلناها إلى الكمبيوتر عن طريق السيريال.
;)Serial.println(reading*5/1024
أساسيات األردوينو ماذا يعمل الكود؟ •
ينشيء متغير اسمه reading
•
يقرأ من منفذ األنالوج ويخزنه في المتغير reading
•
يرسل القراءة عن طريق السيريال لنتمكن من قراءتها من الكمبيوتر
•
يحول القراءة إلى فولت بضربها في 5وقسمتها على 1024
•
يرسل القراءة عن طريق السيريال لنتمكن من قراءتها من الكمبيوتر
•
يوقف البرنامج لمدة عشر ثانية
.1عندما تصل إشارة 5فولت إلى منفذ األنالوج ،سيعطينا قراءة .1024 .2عندما تصل إشارة 2.5فولت ،سيعطينا قراءة .512 .3دقة القراءة هي 5قسمة 0.004882813 = 1024فولت. .4لتحويل القراءة إلى فولت ،نضربها في 5ونقسمها على .1024
∞∞∞
60
أساسيات األردوينو
تمارين: .1ما الفرق بين قراءة المنفذ الديجيتال وبين األنالوج؟ .2كيف نحدد المنفذ كمدخل؟ .3هل يجب علينا تحديد المنفذ كمدخل عند قراءة إشارة أنالوج؟ .4اكتب برنامجا يقرأ قيمة أنالوج ،ويحولها لفرق جهد.
61
أساسيات األردوينو
اوامر برمجية مهمة
62
أساسيات األردوينو هناك أوامر ال نستغني عنها في كل لغات البرمجة ،وهي مهمة لنا في األردوينو.
الجملة الشرطية ()If Statement من أهم األوامر التي نحتاجها في البرمجة ،وهي بسيطة وسهلة ،مثال لها:
;int i = 5 )if (i == 3 { ;)"Serial.println("Hello } )else if (i == 4 { ;)"Serial.println("Good Morning } )else if (i == 5 { ;)"Serial.println ("Good Night }
.1عرفنا عدد صحيح اسمه iوأعطيناه القيمة . 5 .2كونا جملة شرطية تقول ( إذا iتساوي ) 3نفذ ما بين األقواس. .3وإال إذا كانت iتساوي 4نفذ ما بين األقواس. .4وإال إذا كانت iتساوي 5نفذ ما بين األقواس. بما أن iتساوي 5سيتجاوز األردوينو الشرط األول والثاني ،وسينفذ ما بين األقواس في الشرط الثالث وسيطبع لنا على الشاشة.Good Night :
63
أساسيات األردوينو مثال: القطع المطلوبة: ✓ أردوينو أونو. ✓ كيبل للبرمجة. ✓ مقاومة متغيرة أي قيمة ".”Potentiometer
التوصيل:
64
أساسيات األردوينو
65
:الكود
int reading; float voltage; void setup() { Serial.begin(9600); } void loop() { reading = analogRead(0); voltage = reading * 5 / 1024; if (voltage >= 4) { Serial.println("voltage is above than four"); } else if (voltage >= 3 && voltage < 4) { Serial.println("voltage is between three and four"); } else if (voltage >= 2 && voltage < 3) { Serial.println("voltage is between two and three"); } else { Serial.println("Voltage is less than two"); } delay(50); Serial.println("The voltage is : " ); Serial.println(voltage); }
أساسيات األردوينو
66
شرح الكود:
تعريف متغير يقبل األعداد الصحيحة اسمه .reading
;int reading
تعريف متغير يقبل االعداد الكسرية اسمه .voltage
;float voltage
بداية التحدث باستخدام السيريال بسرعة 9600بت في الثانية.
;)Serial.begin(9600
نقرأ من المنفذ رقم A0ونعطي المتغير readingقيمة القراءة.
;)reading = analogRead(0
نضرب القراءة في 5ونقسمها على 1024لنحولها إلى فولت.
;voltage = reading * 5 / 1024
إذا كان قيمة المتغير voltageأكبر من أو يساوي 4سينفذ ما بين األقواس.
معناها (و) يجب أن يتحقق الشرطين معا كما في األمر
)if (voltage >= 4 { Serial.println("voltage is above ;)"than four } &&
أسفل. إن لم يتحقق الشرط السابق وإذا كانت قيمة voltage (أكبر من أو تساوي )3و (أقل من )4نفذ األمر بين األقواس.
إذا لم يتحقق أي شرط من الشروط السابقة نفذ ما بين األقواس.
نوقف البرنامج 0.005ثانية لتقليل سرعة ارسال المعلومات وتسهيل قراءتها.
else if (voltage >= 3 && voltage )< 4 { Serial.println("voltage is ;)"between three and four } else { Serial.println("Voltage is less ;)"than two } ;)delay(50
أساسيات األردوينو البرنامج يقوم باآلتي: .1يعرف عدد صحيح اسمه .reading .2يعرف متغير اسمه ( voltageسميناه floatألنها تستطيع احواء األعداد الكسرية ألن الفولت قد يكون 3.45أو 4.21وليس دائما عدد صحيح. .3يفتح السيريال بسرعة 9600بت في الثانية.
∞∞∞
67
أساسيات األردوينو
حلقة ما دام while loop مثال:
;int i = 5 )while (i == 5 { ;)"Serial.println("the code is inside the loop } ;)"Serial.println("End loop
.1عرفنا متغير اسمه iوأعطيناه القيمة .5 .2حلقة مادام ( )while loopطالما iتساوي 5نفذ ما بين األقواس. .3سيظل البرنامج يرسل لنا " ”the code is inside the loopلألبد .4مادامت iتساوي 5لن يغادر البرنامج الحلقة while loop
∞∞∞
68
أساسيات األردوينو
loop For من أكثر األوامر استخداما .نستخدمها عندما نريد تكرار الشيء مرات معدودة 5مرات أو 100مرة مثال.
)for (int i = 0; i < 5 ; i++ { ;)Serial.println(i }
.1البرنامج في األعلى سيطبع لنا األرقام من 0إلى .4 .2أنشأنا متغير وأسميناه iوأعطيناه القيمة .0 .3ما دامت iاصغر من 5سينفذ البرنامج مابين األقواس { }. .4سيضيف في كل مرة ينفذ فيها البرنامج داخل الحلقة رقم 1إلى .i i .5في البداية تساوي ،0سينفذ البرنامج ،ثم يقارنها هل هي أصغر من 5؟ نعم… إذا سيضيف لها الرقم واحد وينفذ ما بين األقواس مرة أخرى وهكذا حتى تصبح قيمتها .5
69
أساسيات األردوينو
70
:تطبيق عملي :القطع المطلوبة . أردوينو أونو.1 . كيبل للبرمجة.2 :الكود
void setup() { Serial.begin(9600); } void loop() { for (int i = 0; i < 100 ; i ++) { Serial.println(i); delay(50); } Serial.println(" Loop Ended " ); }
أساسيات األردوينو
71
شرح الكود:
بداية التحدث باستخدام السيريال بسرعة 9600بت في الثانية. Functionمهمة ومستخدمة بكثرة في البرمجة واألردوينو.
;)Serial.begin(9600 )for (int i=0; i<100; i++ ;int i = 0
ننشيء عدد صحيح اسمه iونعطيه القيمة 0 يمكن تسميته أي اسم.
i < 100
طالما iاصغر من 100نفذ األمر التالي.
i++
تعني i = i + 1 (أضف رقم 1إلى )i ارسال قيمة iعن طريق السيريال إلى الكمبيوتر. لتقليل سرعة ارسال المعلومات حتى نستطيع قراءتها.
;)Serial.println(i ;)delay(50
البرنامج يقوم باآلتي: ✓ يفتح السيريال بسرعة 9600بت في الثانية. ✓ ينشيء متغير iقيمته . 0 ✓ طالما iأقل من ،100سننفذ األمر بين األقواس وسيضيف واحد إلى iحتى تصل إلى مئة.
∞∞∞
أساسيات األردوينو
72
التعريفات التعريفات مهمة جدا في كل لغات البرمجة. لتعريف عدد صحيح (ال يقبل الكسور) نستخدم األمر التالي:
;int num = 5
✓ intاختصار لكلمة integerومعناها عدد صحيح. ✓ سمينا العدد الصحيح ،abcdنستطيع تسميته أي اسم نريد. ✓ أعطينا المتغير قيمة ،5نستطيع تعريفه من غير أن نعطيه قيمة. نستطيع استخدام المتغير كالتالي:
9قيمة المتغير اآلن
;int x = 10 ;x = x – 1
18قيمة المتغير اآلن
;x = 2 * x
يفضل تعريف المتغيرات خارج الدوال في بداية البرنامج.
أساسيات األردوينو
73
أساسيات األردوينو
74
أهم التعريفات:
نعرف متغير يقبل األعداد الصحيحة وال يقبل الكسور،
int
مثل . 4 ،3 ،2 ،1 أكبر عدد له هو 32،768وال يستطيع تخزين عدد أكبر منه. متغير يقبل األعداد الكسرية ،يستطيع تخزين أرقام
float
كبيرة جدا. أكثر دقة من ،floatيستطيع تخزين أرقام أقل من
double
.float متغير يقبل الحروف (قد يكون رقم أيضا ،لكن لن
char
يعامل معاملة األرقام) يجب أن يكون بين هذه العالمتين ‘ ‘ مثل: ‘’a ‘’b ‘’1 ‘’4
string
نعرف متغير يخزن مجموعة من الحروف.
∞∞∞
أساسيات األردوينو
)(millis لو أردنا تشغيل إضاءة لمدة 20ثانية واطفاءها عن طريق منفذ ديجيتال بدون ايقاف البرنامج طول هذه المدة يمكننا استخدام millisكالتالي:
;()float timer = millis طريقة استخدامها: •
نقرأ قيمة millisعند تشغيل اإلضاءة ونحفظ قيمتها في متغير.
•
نتفقد قيمة () millisالحالية باستمرار ونقارنها بالمتغير فإذا أصبحت أكبر من قيمة المتغير ب 20ثانية نطفيء الجهاز.
•
وبهذا استطعنا توقيت اإلضاءة بدون استخدام أمر ال delayالذي يمنعنا من تنفيذ أوامر أخرى أثناء عمله.
;)(float timer = millis ;)digitalWrite(3, HIGH ) )if (millis() > (20000 + timer { ;)digitalWrite(3, LOW ;timer = 0 }
75
أساسيات األردوينو
76
delay بدونLED التحكم بلمبة :القطع المطلوبة ✓ أردوينو أونو ✓ كيبل للبرمجة ✓ لمبة ليد ✓ مقاومة :الكود
float timePassed; void setup() { Serial.begin(9600); pinMode(13, OUTPUT); } void loop() { if (timePassed > millis() + 1000) { digitalWrite(13, !digitalRead(13)); timePassed = millis(); } }
أساسيات األردوينو
77
ماذا يفعل البرنامج؟ .1يعرف متغير floatاسمه .timePassed .2يبدأ السيريال ويحدد سرعته ب.9600 .3دالة ifالشرطية ،إذا كان المتغير timePassedأكبر من ( millisالحالي )1000 +سينفذ ما بين األقواس وإال سيتجاوز الدالة الشرطية. .4إذا تحقق الشرط في الدالة سيشغل ال LEDإذا كان ال يعمل ،وسيطفئه إذا كان يعمل. .5سيحفظ قيمة )(millisاآلن في المتغير timePassedليحفظ الوقت الذي تم فيه تغيير حالة ال.LED شرح الكود انشاء متغير floatيقبل الكسور واألرقام اسميناه
;float timePassed
timePassed هذه الدالة تخبرنا كم مر على تشغيل األردوينو بالمللي
;)(millis
ثانية إذا كان الوقت الحالي أكبر من timePassedب 1000مللي
)if (timePassed > millis() + 1000
ثانية ( 1ثانية) نفذ ما بين األقواس إذا كان المنفذ ledيعمل سيقوم بإطفائه ،إذا كان ال يعمل
;))digitalWrite(led,!digitalRead(led
سيقوم بتشغيله. نخزن قيمة millisفي المتغير timePassed لن يتحدث الوقت في timePassedإال إذا خزنا الوقت مرة أخرى.
)(timePassed = millis
أساسيات األردوينو
تمارين .1عرف متغير يقبل األعداد الصحيحة اسمه .numberثم اجعل قيمته تساوي . 10 .2عرف متغير floatوسميه number2وأعطيه القيمة . 5.5 .3لماذا يفضل تعريف المتغير خارج الدوال؟ .4ما الفرق بين intو float؟ .5باستخدام حلقة ،forاكتب برنامجا يطبع األرقام الزوجية من 0إلى .1000 .6مالحظة. .a
i++تضيف رقم 1إلى .i
i+2 .bتضيف رقم 2إلى قيمة .i .7اكتب مثاال على حلقة .while .8اكتب مثاال على دالة .if else
78
أساسيات األردوينو
المحركات
79
أساسيات األردوينو
التحكم بسيرفو موتور ما هو السيرفو موتور؟ محرك يتحرك 180درجة فقط (تقريبا) يمكننا التحكم به للذهاب إلى الزاوية التي نريد بدقة. يستخدم في أيادي الروبوت وفي الطائرات الصغيرة وفي مشاريع األردوينو األخرى. عادة يحتوي على ثالثة أسالك ،سلكين للكهرباء ( 5فولت ،أرضي ،GNDوسلك لإلشارة للتحكم).
ماذا يعمل المشروع: التحكم بسيرفو موتور عن طريق مقاومة متغيرة. القطع المطلوبة: ✓ أردوينو. ✓ كيبل للبرمجة. ✓ سيرفو موتور. ✓ لوحة تجارب .Breadboard ✓ أسالك للتوصيل. ✓ مقاومة متغيرة.
80
أساسيات األردوينو التوصيل (دياجرام):
81
أساسيات األردوينو
82
:الكود
#include <Servo.h> Servo myservo; int pos = 0; void setup() { myservo.attach(9); } void loop() { int reading = analogRead(0); pos = map(reading, 0, 1023, 0, 160); myservo.write(pos); delay(150); }
أساسيات األردوينو
83
شرح الكود
اضافة مكتبة السيرفو للبرنامج لنستطيع التحكم به
>#include <Servo.h
باستخدام اوامر بسيطة فقط
;Servo myservo
تعريف سيرفو جديد اسمهmyservo
;)myservo.attach(9
تحديد المنفذ رقم 9للسيرفو الجديد
;)int reading = analogRead(0
قراءة اإلشارة على المقاومة المتغيرة تحويل قيمة readingمن ( 0حتى )1023لتصبح من (0
;)pos=map(reading,0,1023,0,160
حتى )160وتخزين القيمة الجديدة في المتغير pos إذا كانت قيمة القراءة 1023سيحولها إلى160 إذا كانت قيمة القراءة 512سيحولها إلى 80 وهكذا
;)myservo.write(pos
تحريك السيرفو إلى الزاوية pos
∞∞∞
أساسيات األردوينو
DC Motor ما هو ال DC Motor؟ محرك يعمل على الكهرباء الثابتة دي سي. عند عكس أسالك الكهرباء سيتحرك في الجهة المعاكسة. طريقة عمل المشروع: •
المحرك يحتاج إلى تيار عالي.
•
أعلى تيار تستطيع منافذ األردوينو وغيرها من المتحكمات توفيره هو 40ملي أمبير فقط( 0.04أمبير).
•
سنستخدم درايفر ليقوم بتوفير التيار الالزم للمحرك بما أن األردوينو ال يستطيع ذلك.
•
سيتم التحكم بالدرايفر عن طريق األردوينو بحيث نرسل فقط إشارات إلى الدرايفر ،وسيتم توفير وتشغيل الموتور عن طريقه.
القطع المطلوبة: ✓ أردوينو أونو +كيبل للبرمجة. ✓ موتور 5فولت دي سي. ✓ درايفر .L293D ✓ لوحة تجارب .Breadboard ✓ أسالك ذكر-ذكر.
84
أساسيات األردوينو قطعة الدرايفرL293D كل قطعة إلكترونية توفر الشركة المصنعة لها ملف يحتوي كافة معلوماتها ويسمى الملف .Datasheet لهذا الدرايفر 16منفذ ،نستطيع من خالل ال Datasheetمعرفه كل منفذ وطريقة توصيله. المنافذ مرقمة من 1إلى .16 المنفذ يسار نصف الدائرة الرمادية هو رقم ،1ويمين نصف الدائرة الرمادي هو منفذ رقم .16 فائدة وخواص هذا الدرايفر: •
يستطيع التحكم بمحركين اثنين في نفس الوقت.
•
يمكن تشغيل المحركين من مصدر طاقة خارجي.
•
يستقبل إشارة فقط ويتحكم بالمحركات.
•
يستطيع التحكم بالمحركات ( )DC motorلتتحرك مع عقارب الساعة أو عكسها.
85
أساسيات األردوينو طريقة التوصيل:
رقم المنفذ فيL293D
التوصيل
1
نوصله ب 5فولت (يفعل التحكم بالموتور األول)
2
نوصله مع منفذ ديجيتال للتحكم بالمحرك األول واتجاهه
7
نوصله مع منفذ ديجيتال للتحكم بالمحرك األول واتجاهه
5،4
GNDأرضي ،يمكن توصيل أحدهم فقط
8
5فولت ،فائدة المنفذ توفير الطاقة للمحرك ،يمكن استخدام 5فولت من األردوينو ،أو مصدر طاقة خارجي مناسب للمحرك المستخدم (يمكن استخدام فولت من 4.5إلى 36فولت)
3
نوصله بطرف المحرك األول
6
نوصله بطرف المحرك األول
16
نوصله ب 5فولت
86
أساسيات األردوينو التوصيل:
87
أساسيات األردوينو
88
:الكود
void setup() { pinMode(11, OUTPUT); pinMode(8, OUTPUT); } void loop() { digitalWrite(11, HIGH); digitalWrite(8, LOW); delay(3000); digitalWrite(11, LOW); digitalWrite(8, HIGH); delay(3000); }
:شرح الكود
pinMode(11, OUTPUT); pinMode(8,OUTPUT);
كمخرج8 و11 تحديد المنفذ رقم
digitalWrite(11, HIGH); digitalWrite(8, LOW);
سيتحرك المحرك
digitalWrite(11, LOW); digitalWrite(8, HIGH);
سيتحرك المحرك بعكس اإلتجاه
delay(3000);
يوقف البرنامج لمدة ثالثة ثواني
∞∞∞
أساسيات األردوينو
Stepper Motor ما هو ال Stepper Motor؟ •
محرك يتحرك بدقة كبيرة جدا.
•
يتحرك على خطوات.
•
عزمه عالي عندما يتحرك ببطئ.
•
كلما زادت سرعته قل عزمه.
•
يستخدم في أيادي الروبوت ،وفي أجهزة ال CNCو D3وغيرها.
طريقة عمله: •
للستيبر موتور عدة أقطاب عادة إما 4أو .8
•
يتم التحكم بها بترتيب معين ليتحرك الموتور خطوة وحدة.
•
يتم التحكم باألقطاب باستخدام األردوينو ،لنحصل على دقة عالية في عدد الخطوات والسرعة.
•
سنستخدم المكتبة stepper.hللتحكم بالموتور عن طريق األردوينو.
89
أساسيات األردوينو القطع المطلوبة: ✓ أردوينو أونو +كيبل للبرمجة ✓ ستيبر موتور ✓ ستيبر موتور درايفر
التوصيل:
90
أساسيات األردوينو
91
:الكود
#include <Stepper.h> const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution // for your motor // initialize the stepper library on pins 8 through 11: Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); void setup() { // set the speed at 60 rpm: myStepper.setSpeed(60); // initialize the serial port: Serial.begin(9600); } void loop() { // step one revolution in one direction: Serial.println("clockwise"); myStepper.step(stepsPerRevolution); delay(500); // step one revolution in the other direction: Serial.println("counterclockwise"); myStepper.step(-stepsPerRevolution); delay(500); }
أساسيات األردوينو
92
شرح الكود:
>#include <Stepper.h
نضيف مكتبة لمحرك الستيبر لتسهيل برمجته
Stepper myStepper(stepsPerRevolution, ;)(8, 9, 10, 11
انشاء محرك جديد للمكتبة اسمه myStepper حددنا له عدد الخطوات التي يحتاجها ليكمل دورة كاملة والمنافذ التي ستكون موصلة بالدرايفر (،9 ،8 )11 ،10
نستطيع تسميته أي اسم ،ونستطيع اختيار المنافذ التي نريد. نستخدم هذا األمر من المكتبة لتحديد سرعة المحرك
;)myStepper.setSpeed(60
في الدقيقة.
;)myStepper.step(stepsPerRevolution
أمر للمحرك ليتحرك خطوات تساوي العدد بين األقواس
∞∞∞
أساسيات األردوينو
تمارين .1ما الفرق بين محرك السيرفو ،محرك الدي سي ومحرك الستيبر؟ .2لماذا نستخدم مكتبة للتحكم بمحرك السيرفو والستيبر؟ .3كيف نجعل محرك الدي سي يمشي بعكس اإلتجاه؟ .4لماذا نستخدم درايفر مع المحركات؟
93
أساسيات األردوينو
بروتوكوالت االتصاالت بين األجهزة
94
أساسيات األردوينو كيف يتحدث األردوينو مع جهاز الكمبيوتر والحساسات األخرى المختلفة؟ هناك أكثر من طريقة وبروتوكول تشترك فيها كل المتحكمات وليس فقط األردوينو أونو.
منافذ الــSerial من خاللها يستطيع األردوينو التحدث مع األجهزة األخرى مثل الكمبيوتر ،قطعة البلوتوث ،وغيرها من األجهزة التي تدعم السيريال ،وتسمى هذه المنافذ أيضا ب .UARTاألجهزة التي تدعم السيريال تحتوي على منفذ مرسل ( )TXومنفذ مستقبل ( )RXنالحظهم في المنفذ الديجيتال رقم 0و 1في األردوينو أونو. يكون التوصيل عادة كالتالي:
RX → TX TX → RX VCC → VCC GND → GND ( VCCترمز إلى الفولت المستخدم " 5فولت في حالة األونو”) األردوينو أونو يدعم بروتوكول سيريال واحد. األردوينو ميجا لديه 3( 3منافذ TXو 3منافذ .)RX تستخدم في: ✓ إرسال واستقبال معلومات من أردوينو آخر. ✓ إرسال واستقبال معلومات عن طريق قطعة البلوتوث. ✓ إرسال واستقبال معلومات عن طريق الكمبيوتر. ✓ استقبال وارسال معلومات من الحساسات مثل . GSM،GPS
95
أساسيات األردوينو ✓ رفع برنامج على األردوينو من خاللها.
∞∞∞ SoftwareSerial عند عدم وجود منفذ سيريال متاح يمكن استخدام .Software Serial أألردوينو أونو يدعم سيريال واحد فقط ،فال يمكن االتصال بجهازين عن طريق السيريال في نفس الوقت. لكن يمكن استخدام أي منفذين ديجيتال وتحديدهم كمنافذ سيريال. تطبيق عملي: التحكم بجهاز عن طريق البلوتوث (الجوال). ماذا يعمل المشروع: سوف نقوم بالتحكم بلمبة LEDعن طريق الجوال. الخطوات: .1نرفع البرنامج على لوحة األردوينو .2نحمل برنامج مناسب للتحكم باألردوينو عن طريق البلوتوث عن طريق الGoogle app store .3نوصل الدائرة كما هو موضح
96
أساسيات األردوينو القطع المطلوبة: ✓ أردوينو. ✓ كيبل للبرمجة. ✓ قطعة بلوتوث HC-05أو .HC-06 ✓ لوحة تجارب .Breadboard ✓ لمبة .LED ✓ مقاومة 220أوم تقريب.
97
أساسيات األردوينو التوصيل (دياجرام):
98
أساسيات األردوينو
99
:الكود
char reading; SoftwareSerial SoftSerial1(6, 7); void setup() { Serial.begin(9600); SoftSerial1.begin(9600); pinMode(10, OUTPUT); } void loop() { if (SoftSerial.available() > 0) { if (SoftSerial.read() ) == 'a') digitalWrite(10, HIGH); } else if (SoftSerial.read() ) == 'b') { digitalWrite(10, LOW); } }
أساسيات األردوينو
100
شرح الكود:
;char reading
يعرف متغير يقبل الحروف ويسميه reading ينشيء سيريال اضافي على المنفذ رقم 6للمستقبل RX ورقم 7للمرسل .TX
SoftwareSerial SoftSerial1(6, ;)7
أنشأنا سيريال إضافي ألن السيريال العادي مستخدم من قبل الكمبيوتر.
;)Serial.begin(9600
يحدد سرعة التخاطب عن طريق السيريال. يحدد سرعة ارسال واستقبال البيانات عن طريق السيريال
;)SoftSerial1.begin(9600
اإلضافي.
;)pinMode(10, OUTPUT
يحدد المنفذ 10كمخرج وجدت بيانات في السيريال نفذ ما بين األقواس
)if(SoftSerial.available()>0 { }
القراءة من السيريال اإلضافي
;)(SoftSerial1.read
القراءة من السيريال اإلضافي
)'if (SoftSerial.read()) == 'a
إذا استقبل حرف aنفذ ما بين األقواس
)'else if (SoftSerial.read()) == 'b
وإال إذا استقبل حرف bنفذ ما بين األقواس
∞∞∞
أساسيات األردوينو
I2C يمكن ارسال واستقبال المعلومات من أكثر من 60حساس في نفس الوقت عن طريق سلكين فقط. لكل حساس أو جهاز متصل عنوان خاص به (.)Address سرعة نقل البيانات متوسطة. في األردوينو هناك مكتبة تستخدم لتسهيل التواصل عن طريق هذا البروتوكول اسمها .wire library
∞∞∞ SPI يمكن ارسال واستقبال المعلومات من أجهزة كثيرة لكن تحتاج إلى أسالك متعددة أكثر من ال.I2C سرعة نقل البيانات عالية وهي أسرع من ال I2Cبكثير.
101
أساسيات األردوينو
درايفر سيركت
102
أساسيات األردوينو أقصى تيار تستطيع منافذ األردوينو اخراجه هو (.)mA40 فلكي نتحكم بأي دائرة تحتاج تيار أكبر أو فولت أعلى سنحتاج إلى .Driver circuit نستطيع استخدام التالي: •
ريالي.
•
موسفت ).FET Transistor (Mosfet
•
ترانسيستور .BJT Transistor
103
أساسيات األردوينو
التحكم بموسفت عن طريق الأردوينو الموسفت هو أحد أفضل أنواع الترانسيستورز اآلن ومن أكثرها شيوعا ،له ثالثة أرجل .Drain, Gate, Source عند وجود إشارة على رجل ال ,Gateسيقوم بتوصيل الطرفين األخرى ببعضهما وستعمل الدائرة. األردوينو سيرسل إشارة بسيطة ليفتح الموسفت وبالتالي سيقوم الموسفت بإيصال التيار للجهاز المراد تشغيله.
القطع المطلوبة: ✓ أردوينو أونو. ✓ كيبل للبرمجة. ✓ لوحة تجارب (بريد بورد). ✓ لوجيك موسفت. ✓ مقاومة 100أوم إلى 1000أوم ال يهم. ✓ لمبة .LED
104
أساسيات األردوينو التوصيل:
105
أساسيات األردوينو
106
:الكود
void setup() { pinMode(9, OUTPUT); } void loop() { digitalWrite(9, HIGH); delay(500); digitalWrite(9, LOW); delay(200); }
∞∞∞
أساسيات األردوينو
التحكم بدائرة عن طريق ترانسيستور وأردوينو عندما تكون هناك إشارة لل ,Baseسيتوصل ال Collectorوال ,Emitterعندها سيمر التيار. عندما ال توجد إشارة على ال ,Baseسيكون ال Collectorوال Emitterغير متصلين.
القطع المطلوبة: ✓ مقاومة 200أوم تقريبا. ✓ لمبة .LED ✓ لوحة تجارب .BreadBoard ✓ أردوينو أونو +كيبل للبرمجة. ✓ أسالك ذكر-ذكر للتوصيل. ✓ NPN Transistorمثل: o
n22222
o
BC547
o
BC548
107
أساسيات األردوينو التوصيل:
108
أساسيات األردوينو
109
الكود:
)(void setup { ;)pinMode(9, OUTPUT } )(void loop { ;)digitalWrite(9, HIGH ;)delay(500 ;)digitalWrite(9, LOW ;)delay(200 }
∞∞∞ الريلاي القطع المطلوبة: ✓ أردوينو. ✓ كيبل للبرمجة. ✓ موتور دي سي. ✓ 4-3بطاريات .AA ✓ ريالي 5فولت.
أساسيات األردوينو التوصيل:
110
أساسيات األردوينو
111
:الكود
int relay = 9; void setup() { pinMode(relay, OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(relay, HIGH); Serial.println("Relay On"); delay(1000); digitalWrite(relay, LOW); Serial.println("Relay OFF"); delay(1000); }
أساسيات األردوينو
112
شرح الكود:
انشاء متغير يقبل األعداد الصحيحة ونسميه relay
;int relay = 9
ونعطيه القيمته .9 تحديد المنفذ رقم 9كمخرج لنتمكن من تشغيله
;)pinMode(relay, OUTPUT
وايقافه تحديد سرعة التحدث بالسيريال لنتمكن من ارسال
;)Serial.begin(9600
معلومات من األردوينو إلى الكمبيوتر( هذه الخطوة تكون داخل ال)setup تشغيل المنفذ رقم 9ليعطينا 5فولت ليعمل الريالي
;)digitalWrite(relay,HIGH
ايقاف المنفذ رقم 9لنوقف الريالي
;)digitalWrite(relay,LOW
ارسال ما بداخل القوسين عن طريق السيريال لنقرأه من الكمبيوتر (لنرسل جملة أو كلمة يجب وضعها داخل هذه العالمتين “
“)
;)(Serial.println
أساسيات األردوينو
تمار ين: .1ما الفرق بين الترانسيستور والموسفت؟ .2لماذا نستخدم دائرة درايفر؟ .3ماهي مميزات وعيوب كل من: .aالترانسيستور. .bالموسفت. .cالريالي.
113
أساسيات األردوينو
تطبيقات عملية على أشهر الحساسات
114
أساسيات األردوينو
حساس درجة الحرارة LM35 ماذا يعمل المشروع: يظهر درجة الحرارة على الكمبيوتر عن طريق قراءة الحساس وتحويل القيمة إلى درجة مئوية. يوجد طريقتين لتوصيل الحساس ،سنوصله بأسهل طريقة لكن أقل قراءة ممكنة ستكون من 2درجة مئوية إلى 150درجة مئوية فقط.
القطع المطلوبة: ✓ أردوينو أونو. ✓ كيبل للبرمجة. ✓ لوحة تجارب (بريد بورد). ✓ حساس LM35
115
أساسيات األردوينو التوصيل:
116
أساسيات األردوينو
117
الكود:
)(void setup { ;)Serial.begin(9600 } )(void loop { ;)float reading = analogRead(A0 ;float voltage = (reading / 1024) * 5 ;)float temp = (voltage / 0.01 ;)" Serial.print(" The temperature is : ;)Serial.println(temp }
طريقة عمل المشروع: .1نقرأ اإلشارة من الحساس عن طريق منفذ أنالوج (سنحصل على رقم بين 0إلى .)1023 .2نحول القراءة إلى فولت (نقسمها على 1023ونضربها في .)5 .3لكل 0.010فولت درجة مئوية واحدة ،لنحصل على درجة الحرارة نقسم الفولت على 0.010
أساسيات األردوينو
118
شرح الكود:
تحديد سرعة التخاطب عن طريق السيريال وبدأها إنشاء متغير يقبل األعداد الكسرية ونسميه reading
;)Serial.begin(9600 ;)float reading = analogRead(A0
نحفظ فيه قيمة القراءة من المنفذA0.
;float voltage = (reading/1024)*5
إنشاء متغير floatيقبل أعداد كسرية ونسميه voltage قيمته تساوي القراءة بالفولت .نحول القراءة إلى فولت عن طريق العملية الحسابية التالية: (القراءة ÷ 5 × )1024
;)float temp = (voltage / 0.01
كل 0.01فولت تساوي درجة حرارة واحدة(.من ال datasheetالخاص بالحساس) نقسم الفولت على 0.01لنحصل على درجة الحرارة الحالية.
;)" Serial.print(" The temperature is :
ارسال الجملة عن طريق السيريال لنقرأها من الكمبيوتر.
;)Serial.println(temp
ارسال درجة الحرارة عن طريق السيريال.
∞∞∞
أساسيات األردوينو
حساس المطر الحساس عبارة عن لوحة بها مجموعتين من الخطوط المعدنية منفصلة عن بعضها. عند وجود ماء على اللوحة سيقوم الماء بتوصيل الخطوط ببعضها مما يجعل اإلشارة تنتقل من المجموعة األولى إلى الثانية. كلما زاد الماء زادت قوة اإلشارة.
ماذا يعمل المشروع: يقيس األردوينو الفولت على المجموعة األخرى ،وكلما زاد الفولت علمنا أن هناك ماء على الحساس.
القطع المطلوبة: ✓ أردوينو أونو +كيبل للبرمجة. ✓ حساس مطر أو حساس ماء. ✓ مقاومة متغيرة. ✓ لوحة تجارب .Breadboard ✓ أسالك ذكر-ذكر. ✓ قليل من الماء.
119
أساسيات األردوينو التوصيل:
120
أساسيات األردوينو
121
:الكود
float readSensor; float voltage; void setup() { Serial.begin(9600); } void loop() { readSensor = analogRead(0); Serial.print(" Rain Sensor Reading is: "); Serial.println(readSensor); Serial.println(); delay(300); }
:شرح الكود
float reading;
يقبل األعداد الكسرية والصحيحةfloat تعريف متغير readSensor.ونسميه
Serial.begin(9600);
بدأ اإلرسال واإلستقبال عن طريق السيريال بسرعة . بت في الثانية9600
readSensor = analogRead(0);
وحفظ القراءة في0 القراءة من منفذ األنالوج رقم readSensor.المتغير
Serial.println(readSensor);
عن طريق السيريال نستطيعreadSensor ارسال قيمة .قراءتها عن طريق الكمبيوتر أو غيره
أساسيات األردوينو
∞∞∞ حساس رطوبة التربة طريقة عمل المشروع: الحساس له طرفين غير متصلين كهربيا. ندخل الطرفين في التربة. عند وجود ماء في التربة سيوصل الماء التيار بين الطرفين كلما زاد الماء زادت قوة اإلشارة. عند قلة الماء أو عدم وجوده سيكون الطرفين بينهما مقاومة عالية واإلشارة ضعيفة. األردوينو سيقيس فرق الجهد بين الطرفين كما في حساس المطر.
القطع المطلوبة: .1أردوينو أونو +كيبل للبرمجة. .2حساس التربة. .3مقاومة متغيرة أو قطعة الحساس المساعدة. .4لوحة تجارب .Breadboard .5أسالك ذكر-ذكر. .6أرض زراعية أو مركن زراعي.
122
أساسيات األردوينو التوصيل:
123
أساسيات األردوينو
124
:الكود
float reading; void setup() { Serial.begin(9600); } void loop() { readSensor(0); delay(300); } void readSensor(int pin) { reading = analogRead(pin); Serial.print(" Soil Sensor Reading is: "); Serial.println(reading); }
أساسيات األردوينو
125
شرح الكود:
نعرف متغير floatيقبل األعداد الكسرية ونسميهreading. بدأ اإلرسال واإلستقبال عن طريق السيريال بسرعة 9600بت في الثانية. هذا األمر سيقوم بنداء الدالة functionالتالية:
;)void readSensor(int pin سيعطي قيمة pinالرقم 0 ثم سينفذ البرنامج داخلها.
∞∞∞
;float reading ;)Serial.begin(9600 ;)readSensor(0
أساسيات األردوينو
قراءة مقاومة ضوئية ماهي المقاومة الضوئية؟ هي مقاومة قيمتها عالية جدا عند عدم وجود ضوء ،وفي حال وجود ضوء عليها تنخفض مقاومتها إلى بضع مئات فقط (حسب شدة الضوء).
القطع المطلوبة: .1أردوينو أونو +كيبل للبرمجة. .2مقاومة ضوئية. .3مقاومة 10،000أوم. .4لوحة تجارب .Breadboard .5أسالك ذكر-ذكر.
126
أساسيات األردوينو التوصيل:
127
أساسيات األردوينو
128
:الكود
void setup() { Serial.begin(9600); } void loop() { float reading; reading = analogRead(A0); Serial.println("Reading is : "); Serial.println(reading); if (reading > 700) { Serial.println("Light is High"); } else if (reading < 700 && reading > 300) { Serial.println("Light is Medium"); } else Serial.println("Light is Low"); }
أساسيات األردوينو
129
شرح الكود:
إذا كانت قيمة readingأكبر من 700نفذ ما بين األقواس. وإال إذا كانت readingأصغر من 700و أكبر من 300 نفذ ما بين األقواس. وإال إذا لم تتحقق جميع الشروط السابقة نفذ األمر التالي أو ما بين األقواس.
∞∞∞
)if (reading > 700 } {
> else if (reading < 700 && reading )300 { } else
أساسيات األردوينو
شاشة LCD ماذا يعمل المشروع: يظهر قيمة أو جملة على شاشة .LCD
طريقة عمل المشروع: لنتحكم بالشاشة بسهولة سنستخدم مكتبة (المكاتب هي ملفات فيها برمجة مسبقة تسهل لنا برمجة األجهزة فبدال من أن نكتب أوامر كثيرة ،سنكتب سطرين أو ثالثة فقط لوجود المكتبة). نستطيع تحميلها من اإلنترنت وهي متوفرة لحساسات عديدة. الشاشة لها 16منفذ موضحة كما في الصورة أدناه:
130
أساسيات األردوينو القطع المطلوبة: ✓ أردوينو أونو +كيبل للبرمجة. ✓ شاشة .1602 ✓ مقاومة متغيرة .Potentiometer – 10k ✓ مقاومة 220أوم. ✓ لوحة تجارب .Breadboard ✓ أسالك ذكر-ذكر.
131
أساسيات األردوينو استخدام المكتبة لتسهيل برمجة الشاشة: سنستخدم مكتبة معدة مسبقا للشاشة يمكن تحميلها من هنا:
http://playground.arduino.cc/uploads/Main/LiquidCrystal_1.zip ثم نضيفها إلى برنامج األردوينو كالتالي:
Sketch → Include library → Add .zip library ونختار الملف الذي حملناه بعدها يجب أن نضيف المكتبة في بداية البرنامج الذي نريد استخدامها فيه عن طريق كتابة التالي: <اسم المكتبة>#include
>#include
132
أساسيات األردوينو التوصيل:
133
أساسيات األردوينو
134
أساسيات األردوينو طريقة التوصيل:
منفذ الشاشة 1
GND
2
مقاومة 220أوم موصلة بال 5فولت
3
منفذ 2من األردوينو
4
منفذ 3من األردوينو
5
منفذ 4من األردوينو
6
منفذ 5من األردوينو
10 ,9 , 8 ,7
فارغ
11
منفذ 11من األردوينو
12
GND
13
منفذ 12من األردوينو
14
سلك من رجل المقاومة المتغيرة الوسطى
15
5volt
16
GND
بعد رفع البرنامج على األردوينو والتوصيل سنحرك المقاومة المتغيرة حتى تظهر لنا الحروف بشكل واضح.
135
أساسيات األردوينو
136
:الكود
#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); lcd.print("hello, world!"); } void loop() { }
أساسيات األردوينو
137
شرح الكود:
>#include
نضيف المكتبة سنقوم بتعريف شاشة اسمها lcdونحدد المنافذ
;)LiquidCrystal lcd(12, 11, 5, 4, 3, 2
الخاصة بها .يجب أن تكون بالترتيب. نحدد عدد الصفوف واألعمدة في شاشتنا بما أن
;)lcd.begin(16, 2
شاشتنا x2 16فسنكتب 2 ,16
)"!lcd.print("hello, world
طباعة هذه الجملة على الشاشة. يجب أن تكون بين هذه العالمتين "
“
ان اردنا اظهار قيمة متغير ،ال نستخدم هذه العالمة
∞∞∞
أساسيات األردوينو
جهاز انذار باستخدام الليزر ماذا يعمل المشروع: •
الليزر هو ضوء موجه.
•
المقاومة المتغيرة بالضوء تقل مقاومتها اذا تسلط عليها ضوء.
•
نقوم بتوجيه الليزر إلى مقاومة متغيرة بالضوء " ”LDRعن بعد.
•
نقراء قيمة المقاومة عن طريق األردوينو.
•
عند مرور شخص من أمام الليزر ،سينقطع الليزر من المقاومة الضوئية وستزيد مقاومتها.
•
نقوم بتشغيل جهاز إنذار ولمبة تحذيرية.
138
أساسيات األردوينو التوصيل:
139
أساسيات األردوينو القطع المطلوبة: ✓ أردوينو وكيبل للبرمجة. ✓ ليزر. ✓ مقاومة متغيرة بالضوء ".”LDR ✓ طنان " ”Buzzerيفضل من نوع .Active ✓ مقاومة 220أوم أو حولها. ✓ .LED ✓ أسالك للتوصيل. ✓ لوحة تجارب ".”Breadboard
140
أساسيات األردوينو
141
:الكود
int int int int
sensorValue = 0; laser = 12; buzzer = 8; led = 9;
void setup() { pinMode(laser, OUTPUT); pinMode(buzzer, OUTPUT); pinMode(led, OUTPUT); Serial.begin(9600); } void loop() { sensorValue = analogRead(0); Serial.println(sensorValue); if (sensorValue < 700) { digitalWrite(led, HIGH); digitalWrite(buzzer, HIGH); } else { digitalWrite(led, LOW); digitalWrite(buzzer, LOW); } delay(500); }
∞∞∞
أساسيات األردوينو
حساس الرطوبة والحرارة ماذا يعمل الحساس؟ الحساس يقيس حرارة الجو بالمقياس المئوي ويقيس رطوبة الجو. الحساس يرسل إشارات ديجيتال 0و 1لكن القراءة منه معقدة. لهذا سنستخدم مكتبة جاهزة لهذا الحساس.
فائدة المكتبات ()Library المكتبة عبارة عن برنامج يسهل لنا استخدام الحساسات وغيرها يحتوي على دوال " ”Functionsوتعريفات وأوامر، باستخدامها نختصر كتابة البرنامج من عدة صفحات أحيانا إلى سطرين أو ثالث فقط!
142
أساسيات األردوينو القطع المطلوبة: أردوينو أونو +كيبل للبرمجة حساس الرطوبة والحرارة DH11أو DH22أو DH21 لوحة تجارب Breadboard أسالك ذكر-أنثى قد تحتاج مقاومة k10أوم.
143
أساسيات األردوينو
خطوات تحميل المكتبة: .1نفتح برنامج األردوينو .2نضغط أعلى البرنامج على: Sketch → Include Library → Manage Libraries
.3نبحث عن المكتبة باسم DH11 .4نختار أحدث إصدار ونحملها Install
اآلن عندما نريد استخدام المكتبة نكتب أعلى البرنامج األمر التالي: >#include
نحدد رقم المنفذ الديجيتال الذي سنقرأ منه ونوع الحساس الذي نستخدمه (اخترت D7يمكنك اختيار ما تريد)
;)DHT dht(7, DHT11
ثم نبدأ التخاطب مع الحساس باستخدام األمر
;)(dht.begin
144
أساسيات األردوينو التوصيل:
التوصيل كالتالي:
منفذ الحساس األيمن
يوصل مع ال 5فولت.
منفذ الحساس األوسط
يوصل مع أي منفذ ديجيتال في األردوينو (يجب تحديده في البرنامج)
منفذ الحساس األيسر
يوصل في أي منفذ أرضي GND
145
أساسيات األردوينو
146
:الكود
#include "DHT.h" DHT dht(7, DHT11); void setup() { Serial.begin(9600); dht.begin(); } void loop() { Serial.println(); delay(2000); float h; float t; h = dht.readHumidity(); t = dht.readTemperature(); Serial.print("Humidity: "); Serial.println(h); Serial.print("Temperature: "); Serial.println(t); }
أساسيات األردوينو
147
شرح الكود:
إضافة مكتبة حساس الرطوبة لنستطيع استخدامها
"#include "DHT.h
في البرنامج. انشاء حساس جديد في البرنامج أسميناه ( dhtيمكن
;)DHT dht(7, DHT11
اعطاءه اي اسم) حددنا له المنفذ رقم ( 7يمكن تحديد أي منفذ ديجيتال) ونوعه .DHT11 بدأ قراءة الحساس. عرفنا متغير نوعه floatيقبل األعداد الكسرية
;)(dht.begin ;float h
والصحيحة وسميناه hليمثل الرطوبة. عرفنا متغير نوعه floatيقبل األعداد الكسرية
;float t
والصحيحة وسميناه tليمثل الحرارة. قراءة الرطوبة من الحساس ،وحفظها في المتغير
;)(h = dht.readHumidity
h قراءة درجة الحرارة من الحساس واعطاءها للمتغير t
;)(t = dht.readTemperature
ارسال قيمة hعن طريق السيريال.
;)Serial.println(h
ارسال قيمة tعن طريق السيريال.
;)Serial.println(t
أساسيات األردوينو
تمارين .1اصنع دائرة باستخدام األردوينو تقيس درجة الحرارة والرطوبة وتظهرها على الشاشة. .2اصنع دائرة باستخدام األردوينو تتحكم بريالي يغلق عندما تكون رطوبة التربة قليلة. .3اصنع جهاز انذار مبتكر باستخدام الليزر واألردوينو.
148
أساسيات األردوينو
149
:مراجع 1. https://www.arduino.cc/en/Tutorial/PWM 2. https://stackoverflow.com/questions/2386772/what-is-the-difference-between-float-and-double 3. https://learn.adafruit.com/all-about-stepper-motors/what-is-a-stepper-motor 4. http://www.circuitbasics.com/how-to-set-up-the-dht11-humidity-sensor-on-an-arduino/ 5. http://www.circuitbasics.com/wp-content/uploads/2015/11/DHT11-Datasheet.pdf 6. https://www.arduino.cc/reference/en/language/functions/com 7. munication/serial/ 8.
http://bit.do/Avishkar
9. https://www.arduino.cc/en/Tutorial/SoftwareSerialExample 10. https://stackoverflow.com/questions/6160963/how-can-i-digitalread-a-pin-that-is-in-pinmode-output 11. http://donalmorrissey.blogspot.com/2010/04/sleeping-arduino-part-5-wake-up-via.html 12. http://fritzing.org/projects/soil-moisture-sensor-and-serial/ 13. https://oscarliang.com/arduino-gps-tutorial/ 14. http://omnigatherum.ca/wp/?p=338