30. Embedded Systems (الأنظمة المدمجة) بين الأساسيات الكلاسيكية وأدوات الذكاء الاصطناعي الحديثة (مسار تدريب عملي)

مدة القراءة 19 دقائق

 أولاً: الأساسيات التي لا يمكن الاستغناء عنها (حتى مع أقوى ذكاء اصطناعي)

– إتقان لغة C وليس مجرد تعلمها:

– فهم عميق للمؤشرات (pointer arithmetic, pointers to functions, double pointers).

– فهم الـ `struct`، `union`، `enum`، `bitfields` (ضروري لتوفير الذاكرة).

– إدارة الذاكرة اليدوية (malloc/free ممنوع في معظم الأنظمة المضمنة، ستستخدم static allocation فقط).

– الـ `volatile` keyword (لمنع المحسن من حذف قراءات المتغيرات المرتبطة بالأجهزة).

– الـ `interrupt service routines (ISRs)` وكيفية كتابتها بلغة C.

– الـ `inline assembly` (لمناسبات نادرة لكنها مهمة).

– فهم الإلكترونيات الأساسية (على مستوى الممارس):

– المقاومات: قانون أوم، مقسم الجهد، مقاومة السحب لأعلى/أسفل (pull-up/pull-down).

– المكثفات: الترشيح (decoupling capacitors)، التوقيت (RC circuits).

– الترانزستورات (BJT/MOSFET): كمفاتيح إلكترونية (لتشغيل محرك أو LED عالي الطاقة).

– الـ Op-Amps: كمقارن (comparator)، ومضخم بسيط (لمعالجة إشارات الحساسات).

– الـ ADC: فهم الدقة (8-bit vs 12-bit)، معدل العينات (sampling rate)، والجهد المرجعي (Vref).

– الـ DAC: لتوليد إشارات صوتية أو تحكم في تناظري.

– الـ Pull-up و Pull-down الداخلية في المتحكمات.

– التعامل مع متحكم دقيق حقيقي (اختر واحداً واتقنه):

– ARM Cortex-M (الخيار الأفضل للصناعة):

– ابدأ بـ STM32F103 “Blue Pill” (رخيص جداً، مجتمع كبير).

– أو STM32F411 “Black Pill” (أقوى، يدعم Arduino IDE أيضاً).

– فهم نواة Cortex-M: وضعي الـ Thread و Handler، الـ NVIC (مقاطعات متداخلة)، الـ SysTick timer.

– AVR (للبدء البسيط فقط):

– Arduino Uno (للمبتدئين فقط، لا تبقى عليه طويلاً).

– ESP32 (للمشاريع المتصلة):

– ESP32-C3 (يدعم Wi-Fi و Bluetooth، و RISC-V).

– ESP32-S3 (يدعم تسريع AI خفيف عبر شيفرة عصبية).

 

– إتقان بروتوكولات التواصل الأساسية (وكيف تنفذها يدوياً):

– GPIO:

– قراءة أزرار مع debouncing (بالأجهزة والبرمجيات).

– توليد PWM (لتعتيم LED أو تحكم بمحرك).

– محاكاة بروتوكولات بسيطة (مثل OneWire) عبر GPIO.

– UART (الأسهل والأقدم):

– إرسال واستقبال بيانات، التعامل مع الـ FIFO buffer.

– تنفيذ بروتوكول بسيط فوق UART (مثل بداية/نهاية الإطار).

– SPI (للشاشات، الحساسات السريعة):

– فهم الـ 4 أسلاك (MOSI, MISO, SCLK, CS).

– التعامل مع أجهزة متعددة على نفس الناقل.

– تنفيذ DMA مع SPI لنقل البيانات بسرعة.

– I2C (للحساسات، ذاكرة EEPROM):

– فهم الـ addressing، الـ ACK/NACK.

– التعامل مع أجهزة ذات عناوين متعددة.

– كيفية التعامل مع الـ clock stretching.

– بروتوكولات متقدمة (لاحقاً):

– CAN (في السيارات).

– USB (للأجهزة التي تتصل بالكمبيوتر).

– Ethernet (للأنظمة الصناعية).

ثانياً: ما أضافه عصر الذكاء الاصطناعي للمجال (بالتفصيل)

– TinyML = تشغيل AI على متحكم بذاكرة أقل من 256KB:

– لماذا TinyML؟

– سرعة فائقة (بدون تأخير الشبكة).

– خصوصية (البيانات لا تغادر الجهاز).

– استهلاك طاقة قليل (مللي أمبيرات فقط).

– تكلفة منخفضة (لا حاجة لسيرفرات سحابية).

– أين يُستخدم TinyML اليوم؟

– كشف الصوت (كلمة “Hey Google” على ميكروفون صغير).

– التعرف على الأنمطة من الحساسات (كشف اهتزاز غير طبيعي في محرك).

– تصنيع حركات (تمييز بين المشي والجري والسقوط من بيانات عجلة التسارع).

– رؤية حاسوبية خفيفة (تصنيف صور منخفضة الدقة على متحكم).

– نماذج AI المناسبة للمتحكمات:

– DNN (شبكة كثيفة بسيطة) – الأسهل.

– CNN صغيرة (للمنظفات البصرية أو الصوتية).

– Decision Trees و Random Forests (سهلة التنفيذ يدوياً).

– K-Means (للتجميع والكشف عن الشذوذ).

– كيف تبدأ عملياً؟

– اذهب إلى Edge Impulse، اختر “Classify motion” من القوالب الجاهزة.

– اربط ESP32 أو هاتفك (عبر التطبيق) لجمع بيانات الحركة.

– درّب نموذج (سيولد لك كود C جاهز).

– انزل الكود إلى المتحكم، وشغّل النموذج بدون إنترنت.

– استخدام الذكاء الاصطناعي كمساعد شخصي لك (وليس داخل الجهاز):

– GitHub Copilot (في VS Code أو CLion):

– اكتب تعليقاً مثل `// Initialize UART2 with baud 115200, 8N1` وستظهر لك الدالة كاملة.

– يكتب دوال معالجة الـ interrupts تلقائياً.

– ينشئ دوال قراءة حساس (مثل `read_mpu6050_gyro()`).

– Cursor (محرر قائم على VS Code مع AI مدمج):

– نفس Copilot ولكن مع قدرة على تعديل ملفات كاملة بناءً على طلبك.

– ChatGPT Plus / Claude:

– لفهم الـ datasheets: خذ ملف PDF لأي حساس (مثل BME280)، وقل للـ AI “شرح كيفية إعداد هذا الحساس عبر I2C، مع كود مثال بلغة C”.

– لتوليد كود معالجة أخطاء: قل “أعطني كود معالجة خطأ لـ SPI على STM32 يعيد المحاولة 3 مرات”.

– لتصحيح أخطاء مستعصية: انسخ كود الـ ISR الذي لا يعمل، وقل “هذا الكود يسبب تجمد النظام بعد المقاطعة الثانية، لماذا؟”.

– لتحسين الأداء: انسخ كود حلقة حسابية، وقل “حسّن هذا الكود لـ ARM Cortex-M4 مع تفعيل FPU”.

– Perplexity.ai:

– للبحث عن أخطاء نادرة: “Why does STM32F103 I2C hang on ACK after reset?”.

– للحصول على مراجع محدثة: “Latest TinyML frameworks for ARM Cortex-M0 in 2025”.

– الأدوات الحديثة التي يجب أن تعرفها:

– TensorFlow Lite Micro:

– من Google، يسمح بتشغيل نماذج TensorFlow على متحكمات 32-bit.

– حجم صغير جداً (أقل من 20KB للـ runtime).

– يدعم ARM Cortex-M، RISC-V، وESP32.

– Edge Impulse:

– منصة سحابية كاملة لجمع البيانات، التدريب، والتصدير.

– مجانية للمشاريع الصغيرة والتعلم.

– تصدر كود C جاهز للمتحكم (مع تحسينات ذاكرة تلقائية).

– CMSIS-NN:

– من ARM، مكتبة دوال Neural Network محسّنة لمعالجات Cortex-M.

– أسرع 4-5 مرات من التنفيذ العادي.

– تحتاج إلى نموذج مدرب مسبقاً (TensorFlow أو PyTorch).

– Neuton:

– أداة فريدة تحول أي نموذج AI إلى كود C خالص بدون مكتبات خارجية.

– مثالي للأنظمة محدودة الذاكرة جداً (مثل Cortex-M0 مع 32KB RAM).

 ثالثاً: مشاريع عملية مقترحة (من البسيط إلى المتقدم)

– المشروع 1: قارئ حرارة ورطوبة مع شاشة LCD (كلاسيكي، بدون AI):

– الأجزاء: STM32 أو Arduino + حساس DHT22 + شاشة 16×2 LCD (بروتوكول I2C).

– المهارات: قراءة حساس، إرسال نص إلى LCD، إدارة وقت الـ timing.

– لماذا هذا المشروع؟ لتعلم الأساسيات بدون تعقيد.

– المشروع 2: نظام إنذار مع كشف الحركة (مع منطق بسيط):

– الأجزاء: ESP32 + حساس PIR + جرس (buzzer) + مؤشر LED.

– المهارات: مقاطعات (interrupts) من الحساس، مؤقتات (timers) لإلغاء التنبيه بعد زمن.

– التحسين بـ AI: بدلاً من PIR البسيط، استخدم TinyML لتصنيف صوت الكسر أو فتح الباب.

– المشروع 3: كشف الصوت أو الحركة باستخدام TinyML على ESP32 (أول مشروع AI):

– الأجزاء: ESP32 + microphone (INMP441 عبر I2S) أو MPU6050.

– الخطوات:

  1. سجل 10 ثوانٍ من الصوت (كلمة “أهلاً” vs ضوضاء خلفية).
  2. ارفع البيانات إلى Edge Impulse.
  3. درّب نموذج تصنيف صوتي بسيط (شبكة CNN صغيرة).
  4. انزل النموذج إلى ESP32.
  5. شغّل النموذج على الهواء مباشرة (بدون إنترنت).

– النتيجة: جهاز يضيء LED عندما يسمع كلمة محددة.

– المشروع 4: جهاز تنبؤ بأعطال محرك (صناعي، قيم عالية):

– الأجزاء: STM32F4 + حساس اهتزاز (SW-420 أو ADXL345) + شاشة OLED.

– الفكرة: درّب نموذج على بيانات اهتزاز:

– حالة طبيعية (اهتزاز منتظم).

– حالة محمل تالف (اهتزاز عشوائي عالٍ).

– حالة عمود غير متوازن (اهتزاز دوري عالٍ).

– التنفيذ: نموذج Decision Tree (أسهل) أو DNN صغير.

– النتيجة: الجهاز يصنف الحالة في أقل من 100ms ويظهرها على الشاشة.

– المشروع 5: نظام تحكم في ري النباتات بالتنبؤ (إنترنت الأشياء + AI):

– الأجزاء: ESP32-C3 (يوفر Wi-Fi) + حساس رطوبة التربة + حساس حرارة + مضخة مياه صغيرة.

– المهارات:

– قراءة حساسات (ADC).

– تشغيل مضخة عبر MOSFET.

– إرسال بيانات إلى MQTT broker (مثل Adafruit IO).

– إضافة TinyML:

– درّب نموذجاً يتنبأ بموعد جفاف التربة بناءً على ساعات التشغيل السابقة ودرجة الحرارة.

– بدلاً من ري كل 6 ساعات، الـ AI يقرر متى تروي بالضبط.

– النتيجة: توفير 30-50% في استهلاك المياه.

– المشروع 6: كشف السقوط لكبار السن (تطبيق طبي):

– الأجزاء: Seeed XIAO BLE Sense (صغير، مع حساسات متعددة) + بطارية صغيرة.

– الفكرة: درّب نموذج على بيانات عجلة التسارع والجيروسكوب:

– حركة طبيعية (مشي، جلوس، وقوف).

– حركة سقوط (تغير مفاجئ في الاتجاه يليه سكون).

– المهارات: معالجة الإشارات الحقيقية (real-time)، إرسال تنبيه عبر BLE إلى هاتف قريب.

– النتيجة: جهاز صغير على الحزام يرسل تنبيه في حالة السقوط.

رابعاً: نصائح مهمة جداً في عصر الذكاء الاصطناعي

– لا تعتمد كلياً على AI في كتابة الكود:

– الكود المُولَّد غالباً:

– لا يراعي قيود الذاكرة (يستخدم malloc بكثرة).

– لا يفهم الـ real-time constraints (قد يضع حلقات انتظار طويلة).

– يفترض وجود نظام تشغيل كامل (Linux) بينما أنت على bare metal.

– يستخدم دوال غير موجودة في بيئة المتحكم.

– القاعدة الذهبية: استخدم AI لتوليد 70% من الكود، ثم راجعه وعدّله يدوياً للنصف ساعة.

– تعلم قراءة Datasheet و Reference Manual بنفسك:

– الـ AI لا يستطيع فهم الرسوم البيانية (timing diagrams) المعقدة في الـ datasheet.

– مثال عملي: في datasheet حساس I2C، هناك شكل يبين متى يجب إرسال START و STOP و ACK. AI غالباً يخطئ في هذا.

– كيف تتعلم؟ خذ أي حساس بسيط (مثل DS18B20)، واقرأ الـ datasheet كاملاً، وحاول برمجته يدوياً بدون AI أولاً.

– ركز على تحسين الأداء (بأنواعه الأربعة):

– تحسين حجم الكود (code size): استخدم `-Os` في المترجم، وتجنب المكتبات الضخمة.

– تحسين سرعة التنفيذ (speed): استخدم الـ DMA، قلل الـ interrupt nesting، استخدم `-O3` إذا كان لديك ذاكرة كافية.

– تحسين استهلاك الطاقة (power): استخدم أوضاع السكون (sleep modes)، أوقف الساعات غير المستخدمة، قلل سرعة المعالج عند الخمول.

– تحسين زمن الاستجابة (latency): قلل طول الـ ISRs، استخدم الـ tail-chaining في Cortex-M.

– الذكاء الاصطناعي لا يقوم بهذا التحسين تلقائياً. أنت المسؤول.

– استخدم المحاكيات (simulators) قبل شراء الأجهزة:

– Wokwi (مجاني، في المتصفح):

– يحاكي Arduino، ESP32، STM32، Raspberry Pi Pico.

– يمكنك كتابة كود وتشغيله ومشاهدة Serial Monitor و LEDs.

– مثالي لتجربة الأفكار بسرعة قبل الطلب من AliExpress.

– QEMU (متقدم):

– يحاكي أنظمة كاملة (Linux على ARM، أو bare metal).

– أبطأ من Wokwi ولكنه أكثر دقة.

– proteus (مدفوع، لكنه قوي):

– يحاكي المتحكمات مع الدوائر الإلكترونية المحيطة (مقاومات، مكثفات، حتى حساسات).

– اختر لوحة تطوير عملية ومنخفضة التكلفة:

– للمبتدئ المطلق: ESP32-C3 (5-7 دولارات، يدعم Arduino IDE وWi-Fi).

– لتعلم الاحتراف: STM32 Black Pill (8-10 دولارات، مع دعم STM32CubeIDE و bare metal).

– لـ TinyML: Seeed XIAO ESP32-S3 (12 دولاراً، مع مسرّع AI خفيف وكاميرا اختيارية).

– للتعلم العميق: Raspberry Pi Pico (4 دولارات، مع دعم MicroPython و C، لكنه أقل قوة).

– تعلم نظام إدارة الإصدارات (Git):

– الذكاء الاصطناعي يولد كوداً، لكنه لا يديره.

– استخدم GitHub لنسخ احتياطي لمشاريعك.

– تعلم `git commit`، `git diff` (لمقارنة الكود قبل وبعد تعديل AI)، `git bisect` (للبحث عن الخطأ الذي أدخله AI).

– انضم إلى مجتمعات متخصصة:

– Reddit: r/embedded، r/embeddedlinux، r/TinyML.

– Discord: “Embedded Engineering” (سيرفر نشط جداً)، “Edge Impulse community”.

– Stack Overflow: اطرح أسئلة محددة مع كودك وبيانات متحكمك.

– GitHub Issues: تابع مشاريع مفتوحة المصدر (مثل Zephyr RTOS، FreeRTOS) لتتعلم من أخطاء الآخرين.

خامساً: أدوات وموارد محدثة للعصر الحالي

– منصات TinyML:

– Edge Impulse (edgeimpulse.com): مجاني للتعلم حتى 20 ساعة من البيانات. يصدّر كود C و Arduino و TensorFlow Lite.

– Neuton (neuton.ai): مجاني للنماذج الصغيرة. يحول النموذج إلى كود C خالص بدون أي مكتبات خارجية.

– SensiML (sensiml.com): متخصص في الأجهزة الصناعية، لكن له نسخة مجانية محدودة.

– محاكيات:

– Wokwi (wokwi.com): يحاكي أكثر من 10 متحكمات مختلفة. يمكنك مشاركة مشروعك برابط واحد.

– Falstad Circuit Simulator (falstad.com/circuit): لمحاكاة الدوائر التناظرية (مقاومات، مكثفات، ترانزستورات) قبل توصيلها بالمتحكم.

– مساعدات AI للمهندس المضمن:

– ChatGPT Plus ($20/شهر): موديل GPT-4 أفضل بكثير من المجاني في فهم الـ datasheets وتوليد كود C المعقد.

– GitHub Copilot ($10/شهر أو مجاني للطلاب): ضروري لتسريع الكتابة اليومية.

– Claude 3.5 Sonnet (مجاني بحدود): ممتاز في تحليل الأكواد الطويلة (حتى 100 سطر دفعة واحدة).

– لوحات تطوير ذكية (موصى بها للـ TinyML):

– Arduino Nano 33 BLE Sense (40 دولاراً): فيها 9 حساسات مدمجة (ميكروفون، تسارع، جيروسكوب، مغناطيسي، ضغط، رطوبة، درجة حرارة، قرب، لون). مثالية لتعلم TinyML بدون شراء حساسات إضافية.

– Seeed XIAO BLE Sense (15 دولاراً): نفس الحساسات تقريباً ولكن بحجم عملة معدنية وبسعر أقل.

– ESP32-S3-EYE (25 دولاراً): متحكم ESP32-S3 مع كاميرا صغيرة وشاشة. مثالي للتعرف على الوجوه أو الأشياء البسيطة.

– كتب ومراجع مجانية على الإنترنت:

– “Making Embedded Systems” by Elecia White: كتاب كلاسيكي، لا يركز على AI لكنه يبني العقلية الصحيحة.

– “TinyML” by Pete Warden and Daniel Situnayake (متاح مجاناً على موقع O’Reilly): المرجع الأساسي لـ TinyML.

– “Embedded Systems with ARM Cortex-M” by Joseph Yiu: عميق جداً، لمن يريد فهم المعالج نفسه.

سادساً: خلاصة المسار العملي (مرتبة زمنياً في نقاط)

– المرحلة الأولى (شهران) – الأساسيات بدون AI:

– ادرس لغة C من كتاب “The C Programming Language” (K&R) مع تمارين.

– اقرأ مقدمة في الإلكترونيات (مقاومات، مكثفات، ترانزستورات).

– اشتري لوحة ESP32-C3 وجرب:

– إضاءة LED.

– قراءة زر مع debouncing.

– إرسال “Hello World” عبر UART إلى Serial Monitor.

– قراءة حساس DHT11 وعرض القيمة على شاشة صغيرة.

– المرحلة الثانية (شهر) – استخدام AI كمساعد:

– ثبت GitHub Copilot في VS Code.

– حاول كتابة نفس المشاريع السابقة ولكن:

– اكتب تعليقاً بالعربية أو الإنجليزية يصف ما تريد.

– شاهد الكود الذي يولده AI.

– قارنه مع الكود الذي كتبته يدوياً في المرحلة الأولى.

– استخدم ChatGPT لشرح أي جزء في الـ datasheet لا تفهمه.

– المرحلة الثالثة (شهرين) – دخول عالم TinyML:

– أكمل دورة “Introduction to TinyML” المجانية على موقع Edge Impulse (ساعتان فيديو).

– نفّذ مشروع “كشف الحركة” (الذي ذكرته في المشروع 3) باستخدام Edge Impulse وESP32.

– جرّب نفس المشروع ولكن على Arduino Nano 33 BLE Sense إذا استطعت.

– اقرأ أول 3 فصول من كتاب “TinyML” (Pete Warden).

– المرحلة الرابعة (شهران) – مشروع متكامل من الصفر:

– اختر مشروعاً واحداً من القائمة أعلاه (مثلاً “جهاز تنبؤ بأعطال محرك”).

– اجمع بياناتك بنفسك (سجل اهتزازات طبيعية وتالفة).

– درّب نموذجين (DNN و Decision Tree) وقارن بينهما على المتحكم.

– أضف إرسال النتائج عبر Bluetooth أو Wi-Fi إلى هاتف أو كمبيوتر.

– وثّق كل شيء على GitHub (الكود، البيانات، النتائج).

– المرحلة الخامسة (مستمرة) – التعلم العميق والتخصص:

– تعلم FreeRTOS (نظام تشغيل للأجهزة المحدودة): جداولة المهام، semaphores، queues.

– تعلم RISC-V (معمارية مفتوحة المصدر ستنتشر قريباً): ابدأ بلوحة Longan Nano.

– تعلم Zephyr RTOS (بديل حديث لـ FreeRTOD، يدعم AI ومئات المتحكمات).

– تعلم Rust for embedded (لغة حديثة أكثر أماناً من C، مدعومة من ARM وRISC-V).

  • الأساسيات (لغة C، الإلكترونيات، المتحكمات الدقيقة، بروتوكولات التواصل)

> المصدر: هذا المقال هو دليل/مسار تدريبي تقني، يستند إلى المعرفة الهندسية الأساسية في مجال الأنظمة المدمجة (مصادر مرجعية: STMicroelectronics، ARM، Arduino، ESP32).

  • TinyML (تشغيل AI على متحكمات محدودة الذاكرة – Edge Impulse, TensorFlow Lite Micro, CMSIS-NN)

> المصدر: Edge Impulse (منصة سحابية لـ TinyML)

> Google (TensorFlow Lite Micro)

> ARM (CMSIS-NN – Neural Network)

> Neuton.ai

  • أدوات الذكاء الاصطناعي المساعدة (GitHub Copilot, Cursor, ChatGPT Plus, Claude, Perplexity.ai)

> المصدر: GitHub (Copilot – 10)

> Cursor (محرر قائم على VS Code)

> OpenAI (ChatGPT Plus)

> Anthropic (Claude 3.5 Sonnet)

> Perplexity.ai

  • المحاكيات (Wokwi, QEMU, Proteus)

> المصدر: Wokwi (wokwi.com)

> QEMU (محاكاة أنظمة مفتوحة المصدر)

> Proteus

اللوحات الموصى بها (ESP32-C3, STM32 Black Pill, Seeed XIAO ESP32-S3, Raspberry Pi Pico, Arduino Nano 33 BLE Sense, Seeed XIAO BLE Sense, ESP32-S3-EYE)

> المصدر: الأسعار والمعلومات من الشركات المصنعة: Espressif (ESP32)، STMicroelectronics (STM32)، Seeed Studio، Raspberry Pi Foundation، Arduino

المراجع والكتب (Making Embedded Systems – Elecia White, TinyML – Pete Warden, Embedded Systems with ARM Cortex-M – Joseph Yiu)

> المصدر: O’Reilly Media (كتب ومقالات تقنية)