أساسيات برمجة Arduino: دليل المبتدئين الشامل لكتابة أول برنامج (Sketch)

يحتوي هذا المقال على روابط تسويق بالعمولة مُعلَّمة بعلامة *. بصفتي شريكًا في برنامج Amazon Associates، أربح من عمليات الشراء المؤهلة، دون أي تكلفة إضافية عليك. يساعد ذلك على إبقاء الشروحات مجانية.

يُحمَّل الفيديو من YouTube (Google)، وقد يضع ملفات تعريف الارتباط (Cookies). سياسة الخصوصية

ملخص سريع

يغطي هذا الدليل أساسيات برمجة 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 لنظام التشغيل لديك من صفحة التنزيل.

Arduino IDE download page on arduino.cc with download options for Windows, macOS and Linux

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

Arduino IDE installer file in the Windows Downloads folder

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

Arduino IDE 2.3.2 setup wizard: License Agreement with the I Agree button and Choose Install Location with the Install button

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

Arduino IDE setup wizard: installation progress bar and the completion screen with Run Arduino IDE checked and the Finish button

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

Arduino IDE 2 main window with a new empty sketch containing setup() and 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)ترسم الأيقونة اليسرى الأرقام الواردة كرسم بياني مباشر؛ وتفتح أيقونة العدسة المكبرة الشاشة التسلسلية التي تعرض البيانات المتبادلة بين اللوحة وحاسوبك
Arduino IDE 2.3.2 with the Blink example, numbered 1 to 5: menu bar, toolbar, code editor, output console and status bar
Arduino IDE toolbar and sidebar numbered 6 to 12: Verify, Upload, Board & Port Selector set to Arduino Mega or Mega 2560, Sketchbook, Boards Manager, Library Manager, Serial Plotter and 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 والساق الطويلة.

Fritzing diagram of an Arduino Uno with a red LED plugged into the GND and pin 13 header sockets

كود 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؟

تُكتب برامج Arduino بلغة C++. ويوفّر إطار عمل Arduino دوال جاهزة مثل digitalWrite() و analogRead() و Serial.println()، لذا يمكنك البدء بجزء صغير من اللغة.

هل يمكنني استخدام Arduino دون حاسوب؟

نعم. بعد رفع البرنامج، تعمل اللوحة بمفردها. غذِّها بجهد من 7 إلى 12 V عبر مقبس الطاقة (المقبس الأسطواني الدائري) أو عبر الطرف VIN (طرف إدخال الجهد). ويعمل أيضًا مزود طاقة USB بجهد 5 V مثل شاحن الهاتف أو بنك الطاقة (Power Bank). لا تحتاج إلى الحاسوب إلا لكتابة البرامج الجديدة ورفعها. ويمكنك أيضًا فعل ذلك في المتصفح باستخدام Arduino Cloud.

ماذا تتعلم بعد ذلك

عند عملي على الذراع الروبوتية OmArm Zero، تكون الشاشة التسلسلية أول أداة أستخدمها. فقبل تركيب أول برغي، أرسل الأمر HOME بمعدل باود 115200، فتتحرك محركات السيرفو الستة كلها (خمسة مفاصل والقابض) إلى وضع البداية عند 0 درجة.

الدروس التالية، بترتيب مقترح:

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

أضف تعليق