يحتوي هذا المقال على روابط تسويق بالعمولة مُعلَّمة بعلامة *. بصفتي شريكًا في برنامج Amazon Associates، أربح من عمليات الشراء المؤهلة، دون أي تكلفة إضافية عليك. يساعد ذلك على إبقاء الشروحات مجانية.
ملخص سريع
يغطي هذا الدليل أساسيات برمجة Arduino. يبدأ بتثبيت Arduino IDE وبنية برنامج Arduino (Sketch)، ثم يشرح عناصر C++ الأساسية (المتغيرات، وأنواع البيانات، والدوال، وif/else)، والإدخال والإخراج الرقمي والتناظري، وتصحيح الأخطاء (Debugging، أي العثور على الأخطاء) باستخدام الشاشة التسلسلية (Serial Monitor). وتطبّق ثلاثة مشاريع هذه العناصر: يجعل مشروع Blink مصباح LED المدمج يومض، ويشغّل مشروع Button LED مصباح LED ويطفئه بزر ضغط، ويطبع مشروع Analog Reader قيمة مقاومة متغيرة على الشاشة التسلسلية.
ما الذي تحتاجه
- لوحة Arduino Uno R3 (أو لوحة متوافقة؛ تظهر في IDE باسم Arduino Uno) وكابل USB يدعم نقل البيانات.
- لوحة التجارب Breadboard (لوحة بلاستيكية ذات ثقوب متصلة لبناء الدوائر دون لحام) وأسلاك التوصيل Jumper (أسلاك قصيرة بأطراف دبوسية تُغرس في لوحة التجارب وفي اللوحة).
- 1 × LED و 1 × مقاومة 220 Ω.
- 1 × زر ضغط.
- 1 × مقاومة متغيرة Potentiometer (مقاومة بمقبض دوّار، مثلًا 10 kΩ).
- حاسوب يعمل بنظام Windows أو macOS أو Linux.
ما هو برنامج Arduino (Sketch)؟
‘Sketch’ هو الاسم الذي تطلقه Arduino على البرنامج. يأتي المصطلح من Processing، وهي بيئة البرمجة التي بُنيت عليها النسخة الأصلية من Arduino IDE. يُحفظ كل برنامج (Sketch) في ملف بامتداد .ino، وهو ملف نصي عادي يحتوي على الكود الخاص بك.
عندما تنقر على زر الرفع (Upload)، يقوم Arduino IDE بترجمة (Compile) الكود الخاص بك إلى تعليمات الآلة ويرسلها إلى المتحكم الدقيق، وهو الشريحة القابلة للبرمجة الموجودة على لوحة Arduino (شريحة ATmega328P في Arduino Uno R3). بعد ذلك تنفّذ اللوحة هذه التعليمات وتتحكم في مصابيح LED والمستشعرات والمحركات الموصولة بأطرافها (Pins)، وهي نقاط التوصيل المرقّمة على حواف اللوحة.
يجب أن يحتوي كل برنامج Arduino على دالتين: setup() و loop().
setup(): تعمل مرة واحدة
تعمل الدالة setup() مرة واحدة عند تشغيل اللوحة أو إعادة ضبطها (Reset). استخدمها لضبط أوضاع الأطراف (أيعمل الطرف مدخلًا أم مخرجًا)، ولبدء الاتصال التسلسلي مع الحاسوب، وتحديد القيم الابتدائية، وتهيئة كائنات المكتبات. المكتبة هي كود جاهز لمستشعر أو شاشة أو أي قطعة أخرى؛ وتضيفها باستخدام #include في أعلى البرنامج. اعتبر setup() خطوة التحضير قبل أن يبدأ برنامجك الرئيسي.
loop(): تتكرر بلا توقف
بعد انتهاء setup()، تعمل loop() باستمرار. يُنفَّذ الكود داخل loop() من الأعلى إلى الأسفل ثم يبدأ من جديد، ما دامت اللوحة موصولة بالطاقة. هنا تضع منطق برنامجك الرئيسي: قراءة المستشعرات، والتحكم في المخارج، واتخاذ القرارات، والتواصل مع الأجهزة الأخرى.
تبدو البنية الدنيا لكل برنامج Arduino على النحو التالي.
void setup() {
// Initialization code runs once
}
void loop() {
// Main code runs repeatedly
}
إعداد Arduino IDE
بيئة التطوير المتكاملة لـ Arduino (IDE) هي البرنامج المجاني المفتوح المصدر (الكود المصدري الخاص به متاح للعامة) الذي تستخدمه لكتابة الكود وترجمته (Compile) ورفعه إلى لوحة Arduino. يعمل على Windows و macOS و Linux، وهو متاح على arduino.cc/en/software. توضّح الخطوات التالية التثبيت على Windows. على macOS، افتح ملف .dmg واسحب التطبيق إلى مجلد Applications؛ وعلى Linux، استخدم ملف AppImage أو ملف ZIP.
الخطوة 1: التنزيل. نزّل أحدث إصدار من Arduino IDE لنظام التشغيل لديك من صفحة التنزيل.

الخطوة 2: تشغيل برنامج التثبيت. افتح مجلد التنزيلات (Downloads) وانقر نقرًا مزدوجًا على ملف التثبيت (مثلًا arduino-ide_x.x.x_Windows_64bit.exe).

الخطوة 3: اتّباع معالج التثبيت. انقر على I Agree لقبول اتفاقية الترخيص، واترك مجلد الوجهة الافتراضي (C:\Program Files\Arduino IDE) كما هو، ثم انقر على Install. إذا سألك Windows عن تثبيت برنامج التعريف (Driver) الخاص باللوحة، فوافق على ذلك. برنامج التعريف هو البرنامج الذي يتيح للحاسوب التواصل مع اللوحة عبر USB. التقطتُ لقطات الشاشة هذه باستخدام Arduino IDE 2.3.2 على Windows 11.

الخطوة 4: إنهاء التثبيت. انتظر حتى يمتلئ شريط التقدم. في شاشة الإكمال، اترك خيار Run Arduino IDE محددًا وانقر على Finish. بعد ذلك يبدأ IDE تلقائيًا.

عند فتح IDE، سترى برنامجًا جديدًا فارغًا تظهر فيه الدالتان setup() و loop() مسبقًا.

نظرة عامة على واجهة Arduino IDE
يشرح الجدول كل عنصر مرقّم في لقطتي الشاشة المشروحتين.
| # | العنصر | وظيفته |
|---|---|---|
| ① | شريط القوائم | عمليات الملفات، والتفضيلات، وإعدادات اللوحة، والمساعدة |
| ② | شريط الأدوات | يضم أزرار الإجراءات الأكثر استخدامًا: من ⑥ إلى ⑧ على اليسار، و ⑫ على اليمين |
| ③ | محرر الكود | المنطقة الوسطى التي تكتب فيها برنامجك وتعدّله، مع تلوين الصيغة البرمجية (Syntax Highlighting) الذي يعرض أجزاء الكود المختلفة بألوان مختلفة |
| ④ | وحدة التحكم / نافذة الإخراج | تعرض رسائل الترجمة (Compile) والأخطاء وتقدّم عملية الرفع في أسفل IDE |
| ⑤ | شريط الحالة | يعرض السطر والعمود الحاليين، واسم اللوحة، والمنفذ الموصول |
| ⑥ | زر التحقق / الترجمة Verify / Compile (أيقونة علامة الصح) | يفحص الكود بحثًا عن الأخطاء ويترجمه |
| ⑦ | زر الرفع Upload (أيقونة سهم يشير إلى اليمين) | يرسل البرنامج المترجَم إلى اللوحة الموصولة |
| ⑧ | محدد اللوحة والمنفذ (Board & Port Selector) | اختر نوع اللوحة (مثلًا Arduino Uno) والمنفذ، وهو الاتصال التسلسلي عبر USB الذي يخصصه الحاسوب للوحة |
| ⑨ | دفتر البرامج (Sketchbook) | يعرض قائمة بكل برامجك المحفوظة |
| ⑩ | مدير اللوحات (Boards Manager) | يثبّت دعم عائلات لوحات أخرى، مثل ESP32 |
| ⑪ | مدير المكتبات (Library Manager) | ابحث عن مكتبات الكود وثبّتها للمستشعرات والشاشات والقطع الأخرى |
| ⑫ | الراسم التسلسلي (Serial Plotter) والشاشة التسلسلية (Serial Monitor) | ترسم الأيقونة اليسرى الأرقام الواردة كرسم بياني مباشر؛ وتفتح أيقونة العدسة المكبرة الشاشة التسلسلية التي تعرض البيانات المتبادلة بين اللوحة وحاسوبك |


قبل رفع أي برنامج، تأكّد من اختيار اللوحة والمنفذ الصحيحين في محدد اللوحة والمنفذ Board وPort Selector (⑧). على Windows يُسمّى المنفذ COMx (مثلًا COM3)؛ وعلى macOS يظهر بالشكل /dev/cu.usbmodem… أو /dev/cu.usbserial…، وعلى Linux بالشكل /dev/ttyACM0 أو /dev/ttyUSB0. اختيار لوحة أو منفذ خاطئ هو السبب الأكثر شيوعًا لأخطاء الرفع. تُظهر لقطات الشاشة العامة إدخال اللوحة Arduino Mega or Mega 2560 على المنفذ COM7. أما في مشروع Blink في الفيديو فأوصل لوحة Arduino Uno، وقبل الرفع أتحقق من أن المحدد يعرض Arduino Uno والمنفذ COM5.
المفاهيم البرمجية الأساسية
تظهر هذه العناصر في كل برنامج تقريبًا.
المتغيرات وأنواع البيانات
المتغير وعاء يحمل اسمًا ويخزّن قيمة. عندما تنشئ متغيرًا (تصرّح عنه)، تحدد أيضًا نوع بياناته، الذي يخبر المترجم (Compiler) بنوع القيمة التي يحملها ومقدار الذاكرة الذي يجب حجزه. أكثر الأنواع شيوعًا:
| نوع البيانات | الوصف | مثال |
|---|---|---|
| int | الأعداد الصحيحة (من −32,768 إلى 32,767 على Uno R3؛ ونطاق أكبر على لوحات 32 بت مثل ESP32) | int speed = 150; |
| long | الأعداد الصحيحة الكبيرة (من −2,147,483,648 إلى 2,147,483,647) | long distance = 100000; |
| float | الأعداد العشرية | float temperature = 23.5; |
| bool | صواب أو خطأ | bool ledOn = true; |
| char | حرف واحد | char grade = ‘A’; |
| String | نص، مثل اسم أو رسالة | String name = “Arduino”; |
الثوابت
استخدم الكلمة المفتاحية const لقيمة لا تتغير أبدًا أثناء تشغيل البرنامج. تجعل الثوابت الكود أسهل قراءةً وتحمي القيم من التغيير غير المقصود. يستخدم المثال الاسم PI_VALUE لأن Arduino تعرّف مسبقًا ثابتًا باسم PI.
const int LED_PIN = 13; const float PI_VALUE = 3.14159;
تعرّف Arduino أيضًا ثوابت مدمجة مثل HIGH و LOW و INPUT و OUTPUT و INPUT_PULLUP.
التعليقات
التعليقات ملاحظات داخل الكود يتجاهلها المترجم (Compiler). تساعدك وتساعد غيرك على فهم ما يفعله الكود. استخدم // للتعليق المكوّن من سطر واحد، و /* */ للتعليق متعدد الأسطر.
// This is a single-line comment /* This is a multi-line comment */
الدوال
الدالة كتلة من الكود قابلة لإعادة الاستخدام تؤدي مهمة واحدة. أنت تعرف بالفعل setup() و loop(). ويمكنك أيضًا كتابة دوالك الخاصة لتحافظ على تنظيم الكود.
void blinkLED(int pin, int delayTime) {
digitalWrite(pin, HIGH);
delay(delayTime);
digitalWrite(pin, LOW);
delay(delayTime);
}
تعني الكلمة المفتاحية void أن الدالة لا تُرجع أي قيمة. والاسمان pin و delayTime هما معاملان (Parameters): قيم تمرّرها إلى الدالة عند استدعائها، مثل blinkLED(13, 500).
اتخاذ القرارات باستخدام if و else
تنفّذ عبارة if كتلة من الكود فقط عندما يكون شرطها صحيحًا؛ وفي غير ذلك تُنفَّذ كتلة else الاختيارية. تستخدم الشروط عوامل المقارنة: == (يساوي)، و != (لا يساوي)، و < (أصغر من)، و > (أكبر من). علامة = المفردة تُسند قيمة؛ أما == المزدوجة فتقارن بين قيمتين. يستخدم المشروع 2 كلًّا من if و else لتشغيل مصباح LED وإطفائه.
الإخراج الرقمي باستخدام digitalWrite()
يضبط الإخراج الرقمي الطرف على HIGH (5 V على Uno، و 3.3 V على لوحات 3.3 V مثل ESP32) أو LOW (0 V). اضبط الطرف كمخرج في setup()، ثم تحكّم فيه داخل loop().
pinMode(13, OUTPUT); // In setup() digitalWrite(13, HIGH); // Turn pin 13 ON digitalWrite(13, LOW); // Turn pin 13 OFF
الإدخال الرقمي باستخدام digitalRead()
يقرأ الإدخال الرقمي ما إذا كان الطرف في حالة HIGH أو LOW، وهذا ما تحتاجه للأزرار والمفاتيح.
pinMode(2, INPUT_PULLUP); // In setup() int state = digitalRead(2); // Read pin 2
يفعّل الوضع INPUT_PULLUP مقاومة داخل الشريحة تصل الطرف بـ 5 V (مقاومة سحب للأعلى Pull-up). لذلك يقرأ الطرف HIGH ما دام الزر مفتوحًا، و LOW عندما يصله الزر المضغوط بالأرضي GND (الأرضي هو مرجع 0 V في اللوحة). يُسمّى هذا المنطق المعكوس active-low (فعّال عند المستوى المنخفض).
الإدخال التناظري باستخدام analogRead()
تقرأ لوحة Arduino Uno الجهود التناظرية على الأطراف من A0 إلى A5. ويحوّل محوّلها التناظري الرقمي (ADC) بدقة 10 بت الجهد من 0 إلى 5 V إلى رقم بين 0 و 1023، أي نحو 4.9 mV لكل خطوة. ومن المصادر المعتادة المقاومات المتغيرة ومستشعرات الضوء ومستشعرات الحرارة.
int sensorValue = analogRead(A0); // Read analog pin A0
الاتصال التسلسلي والشاشة التسلسلية (Serial Monitor)
الشاشة التسلسلية (Serial Monitor) نافذة في IDE تعرض النص الذي ترسله اللوحة عبر USB؛ ويمكنها أيضًا إرسال نص إلى اللوحة. طباعة القيم هي أسهل طريقة لمعرفة ما يفعله برنامجك. الرقم داخل Serial.begin() هو معدل الباود (Baud Rate)، أي سرعة النقل بالبت في الثانية؛ والقيمة 9600 قيمة افتراضية شائعة. ابدأ الاتصال في setup() واطبع القيم في loop().
void setup() {
Serial.begin(9600); // Start serial at 9600 baud
}
void loop() {
Serial.println("Hello!"); // Print text to Serial Monitor
delay(1000);
}
لفتح الشاشة التسلسلية، انقر على أيقونة العدسة المكبرة في أعلى يمين Arduino IDE أو اضغط Ctrl+Shift+M (أو Cmd+Shift+M على macOS). يجب أن يطابق معدل الباود المحدد في أسفل الشاشة التسلسلية القيمة الموجودة في Serial.begin().
المشروع 1: جعل مصباح LED المدمج يومض
مشروع Blink هو الاختبار الأول المعتاد لأي لوحة جديدة. لا يحتاج إلى أي قطع إضافية: ففي Arduino Uno مصباح LED مدمج يحمل العلامة L وموصول بالطرف 13. إذا ومض، فهذا يعني أن اللوحة و IDE واتصال USB تعمل كلها.
التوصيلات (مصباح LED خارجي اختياري)
يمكنك تشغيل Blink باستخدام مصباح LED المدمج وحده. ولاستخدام مصباح LED خارجي على لوحة التجارب، وصّله على النحو التالي:
- وصّل الساق الطويلة لمصباح LED (المصعد Anode، +) بالطرف 13 في Arduino عبر مقاومة 220 Ω.
- وصّل الساق القصيرة لمصباح LED (المهبط Cathode، −) بالأرضي GND.
تحدّ المقاومة من التيار ليصبح نحو 14 mA في حالة مصباح LED أحمر؛ ومن دونها قد يتلف مصباح LED والطرف. يوضّح المخطط أدناه مكان توصيل الساقين فقط ولا يتضمن المقاومة؛ لذا أضفها بين الطرف 13 والساق الطويلة.

كود Blink
/**
* Author: Omar Draidrya
* Date: 2024/04/11
* This code blinks an LED connected to a specified pin on and off with a one-second interval.
*/
// Define the LED pin
const int LED_PIN = 13;
// The setup function runs once when you power up or reset the board
void setup() {
// Set the LED_PIN as an output
pinMode(LED_PIN, OUTPUT);
}
// The loop function runs over and over again forever
void loop() {
digitalWrite(LED_PIN, HIGH); // Turn on the LED
delay(1000); // Wait for a second
digitalWrite(LED_PIN, LOW); // Turn off the LED
delay(1000); // Wait for a second
}
شرح سطرًا بسطر
const int LED_PIN = 13;يصرّح عن ثابت صحيح (Integer) لرقم طرف مصباح LED. واستخدام ثابت مُسمّى بهذه الطريقة يسهّل تحديث الكود لاحقًا.pinMode(LED_PIN, OUTPUT);يُنفَّذ مرة واحدة في setup() ويضبط الطرف 13 كمخرج رقمي، ليتمكن من إرسال الجهد إلى مصباح LED.digitalWrite(LED_PIN, HIGH);يضبط الطرف 13 على 5 V، فيضيء مصباح LED.delay(1000);يوقف البرنامج مؤقتًا لمدة 1000 ميلي ثانية (ثانية واحدة).digitalWrite(LED_PIN, LOW);يضبط الطرف 13 على 0 V، فينطفئ مصباح LED.delay(1000);يوقف البرنامج مجددًا لمدة ثانية واحدة قبل أن تتكرر loop().
الرفع والاختبار
وصّل اللوحة بحاسوبك باستخدام كابل USB، واختر اللوحة والمنفذ في IDE، ثم انقر على Upload. عند انتهاء الرفع، يومض مصباح LED: ثانية واحدة مضاءً وثانية واحدة مطفأً. بعد ذلك أغيّر في الفيديو قيمة delay() الأولى، أي التي تلي HIGH، إلى 500: فيبقى مصباح LED مضاءً نصف ثانية ومطفأً ثانية كاملة. وعندما تكون قيمتا التأخير كلتاهما 500، يومض بسرعة مضاعفة.
أخطاء شائعة في Blink
- نسيان pinMode(): إذا لم تضبط الطرف على OUTPUT، فإن digitalWrite(LED_PIN, HIGH) يفعّل مقاومة السحب للأعلى الداخلية فقط، فيبقى مصباح LED الخارجي مطفأً أو يضيء بشكل خافت.
- رقم طرف خاطئ: يجب أن يطابق الطرف في الكود الطرفَ الموصول به مصباح LED.
- غياب delay(): من دون delay()، يتبدّل مصباح LED بين التشغيل والإطفاء بسرعة كبيرة لا تسمح لك برؤية الوميض.
- تركيب مصباح LED بالاتجاه المعكوس: يجب توصيل الساق الطويلة (المصعد) بالجانب الموجب.
المشروع 2: قراءة زر ضغط والتحكم في مصباح LED
يقرأ مشروع Button LED زر ضغط موصولًا بالطرف 2، ويضيء مصباح LED ما دام الزر مضغوطًا.
التوصيلات
الأزرار اللمسية القياسية ذات 4 أرجل تكون أرجلها متصلة في أزواج. استخدم رجلين متقابلتين قطريًا:
- وصّل إحدى أرجل زر الضغط بالطرف 2.
- وصّل الرجل المقابلة لها قطريًا بالأرضي GND.
- وصّل مصباح LED بالطرف 13 عبر مقاومة 220 Ω، أو استخدم مصباح LED المدمج.
تغني مقاومة السحب للأعلى الداخلية (انظر قسم الإدخال الرقمي) عن استخدام مقاومة خارجية للزر.
كود Button LED
const int BUTTON_PIN = 2;
const int LED_PIN = 13;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP); // Button with internal pull-up
pinMode(LED_PIN, OUTPUT);
}
void loop() {
int buttonState = digitalRead(BUTTON_PIN);
if (buttonState == LOW) { // Button pressed (LOW because of pull-up)
digitalWrite(LED_PIN, HIGH); // Turn LED on
} else {
digitalWrite(LED_PIN, LOW); // Turn LED off
}
}
آلية العمل
بسبب مقاومة السحب للأعلى، يقرأ الطرف LOW ما دام الزر مضغوطًا (انظر قسم الإدخال الرقمي). تفحص عبارة if حالة الزر في كل دورة من دورات loop() وتشغّل مصباح LED أو تطفئه بناءً على ذلك.
كخطوة تالية، عدّل الكود بحيث تبدّل كل ضغطة حالة مصباح LED بدلًا من إبقائه مضاءً أثناء الضغط فقط. لتحقيق ذلك، خزّن حالة الزر السابقة ولا تستجب إلا عندما تتغير من HIGH إلى LOW (اكتشاف الحافة Edge Detection). كما أن ملامسات الزر ترتد (Bounce) لبضع ميلي ثوانٍ، لذا تجاهل أي تغييرات إضافية لمدة 50 ms تقريبًا بعد كل ضغطة (إزالة الارتداد Debouncing).
المشروع 3: قراءة مقاومة متغيرة والطباعة على الشاشة التسلسلية (Serial Monitor)
يقرأ مشروع Analog Reader الجهد القادم من مقاومة متغيرة على الطرف A0 ويطبع القيمة على الشاشة التسلسلية.
التوصيلات
- وصّل الطرف الأوسط للمقاومة المتغيرة بالطرف A0 في Arduino.
- وصّل أحد الطرفين الخارجيين للمقاومة المتغيرة بـ 5 V.
- وصّل الطرف الخارجي الآخر بالأرضي GND.
كود Analog Reader
const int SENSOR_PIN = A0;
void setup() {
Serial.begin(9600); // Start serial communication at 9600 baud
}
void loop() {
int sensorValue = analogRead(SENSOR_PIN); // Read analog value (0-1023)
Serial.print("Sensor Value: ");
Serial.println(sensorValue); // Print value to Serial Monitor
delay(250); // Short delay to keep output readable
}
آلية العمل
المقاومة المتغيرة مقاومة ذات ملامس منزلق (الماسحة Wiper، وهي الطرف الأوسط). عندما يكون الطرفان الخارجيان موصولين بـ 5 V وبالأرضي GND، تُخرج الماسحة جهدًا بينهما يعتمد على موضع المقبض. يُسمّى هذا الترتيب مقسم الجهد. وعندما تدير المقبض، يتغير الجهد على الطرف A0 بين 0 V و 5 V. تحوّل analogRead() هذا الجهد إلى رقم من 0 إلى 1023، ويطبع البرنامج قيمة جديدة كل 250 ms.
يعمل استدعاء analogRead() نفسه مع المستشعرات التي تُخرج جهدًا بين 0 و 5 V، مثل المقاومة الضوئية (LDR) ضمن مقسم جهد، ومستشعرات الحرارة التناظرية، ومستشعرات رطوبة التربة. أما مستشعرات المسافة بالموجات فوق الصوتية مثل HC-SR04 فتعمل بطريقة مختلفة: إذ تعطي المسافة على شكل طول نبضة رقمية. ويوضّح كلٌّ من شرح HC-SR04 و رادار Arduino المصنوع يدويًا طريقة قراءته.
استكشاف الأخطاء الشائعة وإصلاحها
أخطاء الاتصال والرفع
| المشكلة | السبب | الحل |
|---|---|---|
| اختيار لوحة خاطئة | بيئة IDE مضبوطة على لوحة غير اللوحة الموصولة | افتح محدد اللوحة والمنفذ (Board وPort Selector) واختر اللوحة الموصولة (مثلًا Arduino Uno) |
| منفذ خاطئ | يشير IDE إلى منفذ تسلسلي مختلف | اختر المنفذ الصحيح في محدد اللوحة والمنفذ (Board وPort Selector)؛ وافصل كابل USB ثم أعد توصيله لتتعرف على المنفذ الصحيح |
| كابل USB غير مناسب | بعض كابلات USB مخصصة للشحن فقط ولا تنقل البيانات | استخدم كابلًا يدعم نقل البيانات؛ وجرّب كابلًا آخر إذا لم تُكتشف اللوحة |
| فشل الرفع | اللوحة لا تستجيب، أو المنفذ مشغول ببرنامج آخر، أو توجد وحدة مثل HC-05 على الطرفين 0 و 1 اللذين يستخدمهما اتصال USB أيضًا | أغلق الشاشة التسلسلية، وافصل الوحدات عن الطرفين 0 و 1، واضغط زر إعادة الضبط (Reset) على اللوحة، ثم ارفع البرنامج مرة أخرى |
| اللوحة غير مكتشفة | برنامج تعريف USB مفقود أو توصيل معيب. غالبًا ما تستخدم اللوحات المستنسخة (نسخ منخفضة التكلفة من Uno) شريحة تحويل من USB إلى تسلسلي من نوع CH340 أو CP2102، وتحتاج هذه الشريحة إلى برنامج تعريف خاص بها | ثبّت برنامج تعريف CH340 أو CP2102، أو جرّب منفذ USB آخر، أو أعد تثبيت Arduino IDE مع برامج التعريف الخاصة به |
أخطاء الكود والإخراج
| المشكلة | السبب | الحل |
|---|---|---|
| أخطاء الترجمة (Compile) | أخطاء في صياغة الكود (فواصل منقوطة أو أقواس ناقصة، أخطاء كتابية) | اقرأ رسالة الخطأ البرتقالية في وحدة التحكم؛ فهي تعرض رقم السطر ونوع الخطأ |
| الشاشة التسلسلية تعرض رموزًا غير مقروءة | عدم تطابق معدل الباود بين الكود والشاشة التسلسلية | يجب أن يطابق معدل الباود في Serial.begin() القيمة المختارة في القائمة المنسدلة أسفل الشاشة التسلسلية |
| الشاشة التسلسلية فارغة | لم يبدأ الاتصال التسلسلي (Serial) أو اختير منفذ خاطئ | تأكد من وجود Serial.begin() داخل setup() ومن اختيار اللوحة والمنفذ الصحيحين |
| مصباح LED لا يضيء | مصباح LED مركّب بالاتجاه المعكوس أو المقاومة غير موجودة | تحقق من قطبية مصباح LED (الساق الطويلة إلى الموجب) وضع مقاومة 220 Ω في الدائرة |
| خطأ “avrdude” عند الرفع | avrdude هو برنامج الرفع الذي يشغّله IDE في الخلفية للوحات التي تحتوي على شريحة AVR (عائلة الشرائح التي تنتمي إليها ATmega328P)، مثل Uno؛ ويعني هذا الخطأ أنه لم يتمكن من التواصل مع اللوحة | تحقق من اتصال USB، واختر اللوحة والمنفذ الصحيحين، واضغط زر إعادة الضبط (Reset) قبل الرفع |
إذا لم يساعدك أي شيء في الجداول، فافحص التوصيلات مرة أخرى، وأعد تشغيل Arduino IDE، وجرّب منفذ USB آخر.
الأسئلة الشائعة
تُكتب برامج Arduino بلغة C++. ويوفّر إطار عمل Arduino دوال جاهزة مثل digitalWrite() و analogRead() و Serial.println()، لذا يمكنك البدء بجزء صغير من اللغة.
نعم. بعد رفع البرنامج، تعمل اللوحة بمفردها. غذِّها بجهد من 7 إلى 12 V عبر مقبس الطاقة (المقبس الأسطواني الدائري) أو عبر الطرف VIN (طرف إدخال الجهد). ويعمل أيضًا مزود طاقة USB بجهد 5 V مثل شاحن الهاتف أو بنك الطاقة (Power Bank). لا تحتاج إلى الحاسوب إلا لكتابة البرامج الجديدة ورفعها. ويمكنك أيضًا فعل ذلك في المتصفح باستخدام Arduino Cloud.
ماذا تتعلم بعد ذلك
عند عملي على الذراع الروبوتية OmArm Zero، تكون الشاشة التسلسلية أول أداة أستخدمها. فقبل تركيب أول برغي، أرسل الأمر HOME بمعدل باود 115200، فتتحرك محركات السيرفو الستة كلها (خمسة مفاصل والقابض) إلى وضع البداية عند 0 درجة.
الدروس التالية، بترتيب مقترح:
- شرح أنواع برمجة المتحكمات الدقيقة: الأساليب الرئيسية لبرمجة المتحكمات الدقيقة، من الأدوات الرسومية و C++ إلى Python وبيئات IDE الاحترافية.
- دليل التحكم بالسيرفو مع Arduino: SG90 وPWM وPCA9685: تحكّم في محركات السيرفو للأذرع الروبوتية وأنظمة الإمالة والتدوير (Pan-Tilt).
- قياس المسافة بمستشعر الموجات فوق الصوتية: قِس المسافة دون تلامس باستخدام المستشعر HC-SR04.
- التحكم في محركات التيار المستمر باستخدام L298N ودرع المحركات (Motor Shield): شغّل محركات التيار المستمر لسيارات الروبوت والمنصات المتحركة.
- شرح وحدة بلوتوث Arduino (HC-05/HC-06): أضف التحكم اللاسلكي عبر بلوتوث إلى مشاريعك.
- بناء روبوت تتبع الخط للمبتدئين: اجمع المستشعرات والمحركات لبناء أول روبوت ذاتي التشغيل لك.
- ذراع روبوتية بست درجات حرية (6-DOF) اصنعها بنفسك مع تحكم عبر البلوتوث: ذراع روبوتية بست درجات حرية (6-DOF) تجمع بين التحكم في السيرفو والبلوتوث والأساسيات الواردة في هذا الدليل.

رأيان حول “Arduino Programming Basics: Complete Beginner Guide to Your First Sketch”