
مقدمة إلى الدوائر الكهربائية وArduino
في هذه الوحدة ننتقل من البرمجة على الكمبيوتر إلى برمجة نظام يتفاعل مع مكونات إلكترونية حقيقية.
بنهاية الوحدة، يُتوقع القدرة على:
setup() وloop().في البرامج التقليدية نتعامل غالبًا مع:
Keyboard → Program → Screen
أما باستخدام Arduino فيمكن للبرنامج التعامل مع العالم الحقيقي:
Sensor → Arduino → Actuator
فيستطيع البرنامج قراءة البيئة ومعالجة البيانات وتنفيذ تأثير فيزيائي.
الحوسبة الفيزيائية تعني استخدام البرمجة والإلكترونيات لبناء أنظمة تتفاعل مع العالم الحقيقي.
النموذج الأساسي:
Input → Processing → Outputيتكون الجهاز التفاعلي عادة من ثلاثة أجزاء:
Arduino ليست اسم اللوحة فقط.
تتكون المنصة من جزأين رئيسيين:
تتميز Arduino بأنها:
لا نحاول بناء المشروع كاملًا من البداية.
الأفضل:
الدائرة الكهربائية هي مسار يسمح بمرور التيار الكهربائي بين مكونات متصلة معًا.
حتى تعمل الدائرة يجب أن يوجد:

يوفر الطاقة اللازمة للدائرة.
توصل أجزاء الدائرة ببعضها.
يحول الطاقة الكهربائية إلى تأثير آخر.
مثل:
LED → ضوء
Motor → حركة
Buzzer → صوت
فرق الجهد بين نقطتين، ويقاس بالفولت V.
معدل تدفق الشحنة الكهربائية، ويقاس بالأمبير A.
تحد من مقدار التيار، وتقاس بالأوم Ω.
يربط قانون أوم بين:
VIRV = I × R
ومنها:
I = V / R
عند ثبات الجهد، تؤدي زيادة المقاومة في المسار إلى تقليل التيار.
GND هو النقطة المرجعية للجهد في الدائرة.
وفي دوائر Arduino البسيطة يعمل أيضًا كمسار عودة للتيار.
نعتبر جهد GND:
0V
المسار مكتمل ويمكن للتيار المرور.
المسار مقطوع ولا يمر التيار.


يحدث القصر عند وجود مسار منخفض المقاومة جدًا يسمح بمرور تيار مرتفع.
مثال خطير:
5V ───────── GND
قد يؤدي ذلك إلى توقف الدائرة أو تلف أحد المكونات.
لا توصل 5V مباشرة مع GND.

LED هو مكوّن إلكتروني يصدر الضوء عند مرور التيار في الاتجاه الصحيح.
له قطبية:
توجد عادة حافة مسطحة على جهة Cathode.

لا يتم توصيل LED مباشرة بمصدر 5V.
نستخدم مقاومة على التوالي لتحديد التيار.
قيم مناسبة للتجارب الأساسية:
220Ω
330Ω
تستخدم Breadboard لبناء الدوائر دون لحام.
في المنطقة الوسطى:
a b c d e | f g h i j
الثقوب ذات الرقم نفسه من a إلى e متصلة معًا، وكذلك من f إلى j، ولا يوجد اتصال عبر الفاصل الأوسط.

توجد غالبًا خطوط جانبية تستخدم لتوزيع الطاقة:
+ → 5V
- → GND
تنبيه:
قد تكون خطوط الطاقة مقطوعة في المنتصف في بعض أنواع Breadboard.

نبني الدائرة التالية:
5V → 220Ω → LED → GND
نلاحظ:

قم ببناء دائرة LED على Breadboard.
ثم:
حدد في كل حالة هل الدائرة:
Open Circuit
أو:
Closed Circuit
Microcontroller هو حاسوب صغير مدمج داخل شريحة إلكترونية.
يحتوي على:
ويقوم بتنفيذ البرنامج المخزن بداخله.

سنستخدم في التدريب:
Arduino UNO R3
المتحكم الرئيسي فيها:
ATmega328P
ومن خصائصها:


5Vخرج تغذية منظم بجهد 5V.
3.3Vخرج تغذية بجهد 3.3V.
GNDالمرجع الكهربائي للدائرة.
Vinيمكن استخدامه لإدخال جهد خارجي مناسب إلى اللوحة.

تحتوي UNO R3 على:
D0 → D13
يمكن تهيئة المنفذ ليعمل كـ:
INPUT
أو:
OUTPUT
وتتعامل الإشارات الرقمية مع مستويين:
HIGH
LOW
تحتوي UNO R3 على:
A0 → A5
تستخدم لقراءة مستويات جهد متغيرة.
يحول Arduino القراءة إلى قيمة رقمية:
0 → 1023
أي 1024 مستوى.
سنستخدم هذه المنافذ عمليًا في وحدة لاحقة.

يتعامل مع مستويات منطقية محددة:
HIGH / LOW
يتعامل مع مقدار متغير ضمن نطاق.
المنافذ الرقمية التي تدعم PWM في UNO R3:
3, 5, 6, 9, 10, 11
وتحمل علامة:
~
PWM لا ينتج جهدًا تناظريًا حقيقيًا.

PWM يعمل بتشغيل وإيقاف الإشارة الرقمية بسرعة مع تغيير نسبة زمن التشغيل:
Duty Cycle منخفض → تأثير أقل
Duty Cycle مرتفع → تأثير أكبر
يستخدم لاحقًا في تطبيقات مثل تغيير سطوع LED والتحكم في بعض تطبيقات المحركات.
D0 / RXاستقبال البيانات التسلسلية.
D1 / TXإرسال البيانات التسلسلية.
SDAبيانات اتصال I2C.
SCLإشارة الساعة لاتصال I2C.

في Arduino UNO R3:
A4 = SDA
A5 = SCL
المنافذ المكتوب عليها SDA وSCL قرب AREF متصلة بالخطوط نفسها.
أي أنها ليست منافذ I2C إضافية مستقلة.
AREFمرجع الجهد للقراءات التناظرية.
IOREFيوضح جهد المنطق الذي تعمل به اللوحة.
في UNO R3:
5V
RESETيعيد تشغيل المتحكم وبدء البرنامج من جديد.

حدد على لوحة UNO R3:
5V3.3VGNDVinD13A0RXTXSDASCL
حدد المنفذ أو المجموعة المناسبة لكل حالة:

يمكن تشغيل UNO R3 باستخدام:
Vin.عند استخدام مصدر خارجي، المجال الموصى به للوحة UNO R3 هو:
7V – 12V
في التجارب الأولى سنستخدم USB.

Arduino IDE هي بيئة التطوير المستخدمة لبرمجة اللوحة.
نستخدمها من أجل:

يسمى البرنامج الذي نكتبه لـ Arduino:
Sketch
تتم كتابة برامج Arduino باستخدام:
C / C++
مع دوال ومكتبات تسهّل التعامل مع العتاد.
لذلك سنستخدم كثيرًا مما تعلمناه في الوحدة الأولى.
دورة التطوير الأساسية:
Write Sketch
↓
Compile
↓
Upload
↓
Run
↓
Observe Result
↓
Edit
↓
Upload Againقبل رفع البرنامج نحدد:
Arduino Uno
المنفذ الذي تتصل به اللوحة.
يمكن الاختيار من Board Selector أو من قوائم Tools حسب إصدار Arduino IDE.

يترجم البرنامج ويتحقق من أخطاء الترجمة دون رفعه إلى اللوحة.
يقوم بترجمة البرنامج ثم رفعه إلى Arduino.
لذلك ليس من الضروري تنفيذ Verify قبل كل Upload.

بشكل مبسط:
Sketch
↓
Compiler
↓
Machine Code
↓
Upload
↓
Microcontroller
↓
تشغيل البرنامجالبنية الأساسية:
void setup()
{
}
تنفذ setup() مرة واحدة عند:
تستخدم عادة لتهيئة النظام.
void loop()
{
}
بعد انتهاء setup() يبدأ تنفيذ loop() بصورة مستمرة:
setup()
↓
loop()
↓
loop()
↓
loop()
↓
...يقرأ Arduino إشارة قادمة من الخارج.
Sensor → Arduino
يتحكم Arduino في إشارة خارجة.
Arduino → LED
سنبدأ في هذه الوحدة بالمخرجات.
في المخرجات الرقمية:
HIGH
يعني المستوى المنطقي المرتفع.
LOW
يعني المستوى المنطقي المنخفض.
في UNO R3 تعمل الإشارات الرقمية بمنطق 5V.
تحدد وظيفة المنفذ.
الصيغة:
pinMode(pin, mode);
مثال:
pinMode(8, OUTPUT);
تعني:
تهيئة المنفذ رقم 8 ليعمل كمخرج.
تستخدم للتحكم في المستوى المنطقي للمنفذ الرقمي.
digitalWrite(pin, value);
مثال:
digitalWrite(8, HIGH);
ومثال:
digitalWrite(8, LOW);توقف تنفيذ التعليمات التالية لمدة محددة بالمللي ثانية.
delay(milliseconds);
مثال:
delay(1000);
يعني:
1000 ms = 1 second
أما التأخير بالميكروثانية فتوجد له دالة أخرى:
delayMicroseconds()void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
pinMode(LED_BUILTIN, OUTPUT);
تهيئة LED المدمجة كمخرج.
digitalWrite(LED_BUILTIN, HIGH);
تشغيل LED.
delay(1000);
الانتظار لمدة ثانية.
digitalWrite(LED_BUILTIN, LOW);
إطفاء LED.
Blink ليس مجرد مثال برمجي.
يمكن استخدامه للتأكد من:
عدل برنامج Blink بحيث:
استخدم:
delay()
لتحديد الزمن المناسب.
اجعل LED تنفذ النمط التالي:
ON 200ms
OFF 200ms
ON 200ms
OFF 1000ms
ثم يتكرر النمط باستمرار.
اكتب برنامجًا ينفذ نمطًا خاصًا بك يحتوي على:
ويجب أن يتكرر النمط باستمرار.
void setup()
{
pinMode(8, OUTPUT);
}
void loop()
{
digitalWrite(8, HIGH);
delay(1000);
digitalWrite(8, LOW);
delay(1000);
}
عدل المثال السابق بحيث:
7 بدلًا من 8.250ms.750ms.يجب تعديل:

بعد Upload يتم تخزين البرنامج في ذاكرة غير متطايرة داخل المتحكم.
لذلك يستطيع Arduino تشغيله بعد:
أما القيم المؤقتة الموجودة في RAM أثناء التشغيل فتفقد عند فصل الطاقة.
إذا فشل رفع البرنامج، تحقق من:
D0/RX وD1/TX.تحقق من:
عند البحث عن الخطأ:
غيّر شيئًا واحدًا في كل مرة.

منافذ Arduino مخصصة للإشارات والتحكم، وليست لتشغيل الأحمال الكبيرة مباشرة.
في UNO R3 نستخدم:
20mA
كتيار تشغيل تصميمي لكل منفذ I/O ضمن الحدود الموصى بها.
لا نوصل مباشرة:
هذه الأحمال تحتاج دائرة قيادة مناسبة.
قبل تشغيل أي دائرة:
5V مع GND مباشرة.قم ببناء دائرة LED خارجية على منفذ تختاره بنفسك.
المطلوب:
أنشئ إشارة ضوئية بالنمط التالي:
تشغيل قصير
إطفاء قصير
تشغيل قصير
إطفاء قصير
تشغيل طويل
إطفاء طويل
حدد قيم delay() بنفسك.
أمامك برنامج لا يعمل كما هو متوقع.
ابحث عن الأخطاء وصححها:
void setup()
{
pinMode(8, OUTPUT)
}
void loop()
{
digitalWrite(7, HIGH);
delay(1000);
digitalWrite(7, LOW);
delay(1000);
}
افترض أن LED موصلة بالمنفذ رقم 8.
راجعنا في هذه الوحدة:
Input → Processing → Output.setup() وloop().pinMode() وdigitalWrite() وdelay().في الوحدة القادمة ننتقل من المخرجات الرقمية إلى المدخلات الرقمية والأزرار.