أردوينو والإلكترونيات
ابدأ مع أردوينو: أول مشروع عملي ومكونات لا غنى عنها
بقلم أحمد قطف · · 4 دقائق قراءة
أردوينو بوابة رائعة إلى عالم الإلكترونيات والبرمجة معاً، لكن كثيراً من المبتدئين يشترون صندوقاً كبيراً من القطع ثم يتوقفون بعد يومين لأنهم لا يعرفون من أين يبدأون. هذا الدليل يختصر الطريق: قائمة شراء صغيرة، ومشروع أول مكتمل تفهم كل سطر فيه.
ما هو أردوينو بالضبط؟
أردوينو منصة مفتوحة المصدر تتكون من جزأين: لوحة إلكترونية فيها متحكم دقيق (Microcontroller)، وبيئة برمجة مجانية على الحاسوب تكتب فيها الكود بلغة مبنية على C++ ثم ترفعه إلى اللوحة عبر كابل USB. المتحكم الدقيق حاسوب صغير جداً على شريحة واحدة: فيه معالج وذاكرة ومنافذ إدخال وإخراج يمكنها قراءة زر أو حساس، وتشغيل ضوء أو محرك. اللوحة الأشهر للمبتدئين هي Arduino Uno المبنية على شريحة ATmega328P، تعمل بتردد 16 ميغاهرتز، وفيها 32 كيلوبايت لتخزين البرنامج و2 كيلوبايت فقط من الذاكرة العشوائية. أرقام صغيرة جداً مقارنة بالهاتف، لكنها أكثر من كافية للتحكم بعشرات المشاريع.
قائمة الشراء الأولى
- لوحة Arduino Uno (الأصلية أو نسخة متوافقة؛ النسخ المتوافقة رخيصة وتعمل جيداً غالباً، لكن بعضها يستخدم شريحة USB من نوع CH340 تحتاج تعريفاً على ويندوز).
- لوح تجارب Breadboard بحجم متوسط: يسمح بتوصيل القطع دون لحام.
- أسلاك توصيل ذكر-ذكر وذكر-أنثى.
- مجموعة مقاومات، أهمها 220 أوم و10 كيلو أوم.
- ليدات بألوان مختلفة، وبضعة أزرار ضغط.
- مقاومة متغيرة (Potentiometer) وطنان (Buzzer).
- جهاز قياس متعدد (Multimeter) بسيط: أهم أداة ستشتريها، وستحتاجها في كل مشروع لاحق.
تجنب في البداية شراء محركات كبيرة أو وحدات تعمل بجهد عالٍ. القطع أعلاه تكفي لعشرات التجارب وتكلفتها منخفضة.
تثبيت بيئة التطوير
نزّل Arduino IDE من الموقع الرسمي arduino.cc وثبّته. صل اللوحة بكابل USB، ثم من قائمة Tools اختر نوع اللوحة Arduino Uno والمنفذ الذي ظهر (COM على ويندوز أو /dev/tty على ماك ولينكس). افتح المثال الجاهز File ← Examples ← Basics ← Blink واضغط زر الرفع. إذا بدأ الليد الصغير المدمج في اللوحة يومض كل ثانية فكل شيء يعمل. إن لم يظهر المنفذ فغالباً تحتاج تعريف CH340 أو الكابل المستخدم كابل شحن فقط بلا أسلاك بيانات، وهي مشكلة شائعة جداً تضيع وقت المبتدئين.
المشروع الأول: إشارة مرور بزر مشاة
سنصنع إشارة مرور بثلاثة ليدات (أحمر، أصفر، أخضر)، وزر يضغطه المشاة فتتحول الإشارة إلى أحمر بعد قليل. يعلّمك هذا المشروع الإخراج الرقمي والإدخال الرقمي والتوقيت ومنطق الحالات.
التوصيل: صل الطرف الطويل (الموجب) لكل ليد بمقاومة 220 أوم ثم بالمنافذ 8 و9 و10 على التوالي، والطرف القصير بالأرضي GND. صل أحد طرفي الزر بالمنفذ 2 والطرف الآخر بالأرضي. لن نضع مقاومة للزر لأننا سنستخدم مقاومة السحب الداخلية في الشريحة.
const int RED = 8, YELLOW = 9, GREEN = 10, BTN = 2;
void setup() {
pinMode(RED, OUTPUT); pinMode(YELLOW, OUTPUT); pinMode(GREEN, OUTPUT);
pinMode(BTN, INPUT_PULLUP); // الزر غير المضغوط يقرأ HIGH
digitalWrite(GREEN, HIGH);
}
void loop() {
if (digitalRead(BTN) == LOW) { // تم الضغط
delay(1500);
digitalWrite(GREEN, LOW); digitalWrite(YELLOW, HIGH); delay(2000);
digitalWrite(YELLOW, LOW); digitalWrite(RED, HIGH); delay(5000);
digitalWrite(RED, LOW); digitalWrite(GREEN, HIGH);
}
}افهم ما كتبت
setup() تعمل مرة واحدة عند التشغيل، وloop() تتكرر إلى ما لا نهاية. pinMode تحدد هل المنفذ مخرج أم مدخل. INPUT_PULLUP تفعّل مقاومة داخلية تجعل قراءة المنفذ HIGH عندما يكون الزر مفتوحاً، فإذا ضُغط الزر اتصل المنفذ بالأرضي وأصبحت القراءة LOW. لهذا نتحقق من LOW وليس HIGH، وهذه نقطة تربك كثيراً من المبتدئين في البداية.
دالة delay توقف البرنامج كله لعدد من الملّي ثانية. هي بسيطة ومناسبة لمشروع أول، لكنها تمنع اللوحة من فعل أي شيء آخر أثناء الانتظار. عندما تتقدم ستتعلم استخدام millis() لقياس الوقت دون إيقاف البرنامج، وهو أساس أي مشروع يقرأ أكثر من حساس في الوقت نفسه.
طوّر المشروع خطوة بخطوة
- أضف طناناً يصدر نغمة متقطعة أثناء الإشارة الحمراء لتنبيه المكفوفين، باستخدام
tone(). - استبدل
delayبـmillis()حتى يستجيب الزر في أي لحظة. - أضف مقاومة متغيرة تتحكم بمدة الإشارة الخضراء، واقرأها بـ
analogRead. - اعرض العد التنازلي على شاشة سبع قطع أو شاشة LCD صغيرة.
كل إضافة تعلمك مفهوماً جديداً دون أن تبدأ من الصفر. وعندما تصل إلى قراءة الحساسات ستحتاج إلى معرفة كيف تتعامل مع التشويش، وهو موضوع مقال قراءة الحساسات بدقة.
أخطاء المبتدئين الشائعة
- ليد بلا مقاومة: يسحب تياراً أكبر من طاقته فيحترق، وقد يضر بمنفذ اللوحة. كل ليد يحتاج مقاومة (220 إلى 330 أوم مع 5 فولت).
- عكس قطبية الليد: الطرف الطويل هو الموجب. إذا لم يضئ اقلبه قبل أن تشك في الكود.
- تشغيل محرك من منفذ اللوحة مباشرة: المنافذ تعطي تياراً صغيراً (في حدود 20 ملّي أمبير بأمان)، والمحركات والريليهات تحتاج دائرة قيادة. شرحنا ذلك في تشغيل الأحمال بأمان.
- نسيان توحيد الأرضي: عند استخدام مصدر طاقة خارجي يجب وصل أرضيه بأرضي اللوحة، وإلا تتصرف الدائرة بشكل غريب.
- أعمدة لوح التجارب: صفوف لوح التجارب متصلة أفقياً في كل نصف، والخط الطويل على الجانبين قد يكون مقطوعاً في المنتصف في بعض الألواح. افحصه بجهاز القياس.
الشاشة التسلسلية: أداتك الأولى لاكتشاف الأخطاء
عندما لا يعمل المشروع كما تتوقع، لا تخمّن. أضف في setup() السطر Serial.begin(9600); ثم اطبع قيم المتغيرات في الأماكن المهمة بـSerial.println()، وافتح نافذة Serial Monitor من بيئة التطوير بنفس السرعة 9600. ستعرف فوراً هل يقرأ البرنامج الزر فعلاً، وما القيمة التي يعطيها الحساس، وهل يصل التنفيذ إلى الجزء الذي تظنه. هذه العادة البسيطة توفر ساعات من البحث، ويستخدمها المحترفون قبل المبتدئين. وتذكّر أن تزيل أو تقلل الطباعة الكثيفة في المشروع النهائي لأنها تبطئ البرنامج قليلاً.
إلى أين بعد ذلك؟
بعد إشارة المرور جرّب مشروعاً يقرأ العالم الخارجي: حساس حرارة ورطوبة DHT22 يعرض القراءة على الشاشة التسلسلية، أو حساس مسافة بالموجات فوق الصوتية HC-SR04 ينبه عند اقتراب شيء. وعندما تحتاج إلى واي فاي أو سرعة أكبر قارن بين اللوحات في مقال ESP32 مقابل أردوينو أونو. وفي رقيم نصمم لهذه المشاريع علباً مقصوصة بالليزر تحولها من تجربة على الطاولة إلى جهاز حقيقي، كما في مقال تصميم العلب.