معمل الإلكترونيات والميكاترونكس
دواير حقيقية بتتحل رياضيًا جوّه متصفحك: مصادر ومقاومات وLEDs ودايودات وملتيميتر. القطع بتسخن وبتتحرق لو غلطت، والفيوز بيضرب — بالظبط زي الواقع، من غير ما تخسر حاجة.
اللوحة الحرة
ابني أي دايرة بنفسك: مصادر ومقاومات وLEDs ودايودات ومفاتيح، وقيس بالملتيميتر — من غير مهام ولا تصحيح.
لوحة Arduino الحرة
بوردة متوافقة مع Arduino Uno وقطع متوصلة بيها: اكتب أي كود، ارفعه، واتفرج عليه بيشتغل على الدايرة.
أساسيات الكهرباء
قانون أوم: قيس الجهد والتيار
مصدر 9 فولت ومقاومة 1 كيلو أوم. قيس الجهد على المقاومة، وبعدين التيار اللي ماشي فيها، وشوف إزاي التيار بيتغير لما المقاومة تتغير: I = V / R.
نوّر LED من غير ما تحرقه
LED أحمر محتاج تيار بين 5 و20 مللي أمبير. من غير مقاومة مناسبة التيار هيعدّي الحد والـ LED هيتحرق. احسب المقاومة واختارها.
قيس من غير ما تضرب الفيوز
الملتيميتر بيقيس صح بس لو استخدمته صح. الفولت بالتوازي، والأمبير على التوالي — لو حطيت الأميتر على البطارية مباشرة الفيوز اللي جواه هيضرب.
التوالي: نفس التيار، والجهد بيتقسم
تلات مقاومات على التوالي مع مصدر 12 فولت. التيار واحد في كلهم، والجهد بيتوزع عليهم حسب قيمة كل واحدة.
التوازي: نفس الجهد، والتيار بيتجمع
مقاومتين على التوازي مع مصدر 6 فولت، وتالتة مستنياك على اللوحة. كل فرع بياخد تيار لوحده، والمصدر بيدي مجموعهم.
صمّم مقسّم جهد لحساس 3.3 فولت
حساس شغال على 3.3 فولت، والمصدر 5 فولت. اختار R1 وR2 بحيث الخرج يبقى 3.3 فولت تقريبًا، ومن غير ما تهدر تيار كتير.
قانون كيرشوف للجهد (KVL)
في أي حلقة مقفولة، مجموع الجهود على القطع = جهد المصدر. قيس الجهد على كل قطعة واجمعهم بنفسك.
قانون كيرشوف للتيار (KCL)
التيار الداخل لأي نقطة = التيار الخارج منها. R1 بتغذّي فرعين R2 وR3 — قيس تيار كل فرع والتيار الكلي.
المقاومة الداخلية للبطارية
البطارية مش مصدر مثالي: جواها مقاومة صغيرة، فجهدها بيقل لما تسحب منها تيار. اكتشف ده بالقياس.
الفيوز: الحماية من القصر
لمبة 47 أوم على 12 فولت بتسحب حوالي ربع أمبير. اختار فيوز يستحمل التشغيل العادي، ويضرب لو حصل قصر (short).
البوتنشوميتر: مقسّم جهد بتلفّه بإيدك
البوتنشوميتر مقاومة بطرف تالت بيتحرك عليها. بين الطرفين 5 فولت، والطرف الأوسط بيدي أي جهد من 0 لـ 5 حسب مكانه.
ثيفينن وأقصى نقل للقدرة
أي دايرة خطية من ناحية طرفين = مصدر جهد Vth ومعاه مقاومة Rth. قيس Vth، احسب Rth، واختار الحمل اللي ياخد أكبر قدرة.
اختبار الاستمرارية والمفاتيح
وضع الاستمرارية (Continuity) بيصفّر لما يكون فيه توصيل شبه كامل بين الطرفين. استخدمه تتأكد إن المفتاح شغال — والدايرة مطفية.
التيار المتردد والإشارات
شحن المكثف: ثابت الزمن RC
المكثف بيتشحن من خلال المقاومة بالتدريج مش مرة واحدة. بعد زمن τ = R × C بيوصل لـ 63% من جهد المصدر، وبعد 5τ يعتبر اتشحن. شوف ده بعينك على الأوسيلوسكوب.
مولّد الإشارات والأوسيلوسكوب
مولّد الإشارات بيطلّع موجة بالتردد والسعة اللي تختارهم، والأوسيلوسكوب بيرسم الجهد مع الزمن. اتعلم تقرا التردد والسعة من الشاشة.
فلتر تمرير منخفض RC
المكثف بيعدّي الترددات العالية للأرضي، فالخرج عليه بيقل كل ما التردد يعلى. تردد القطع fc = 1 / (2π R C): عنده الخرج بيبقى 0.707 من الدخل. الدخل على R1:1 والخرج على C1:1.
التوحيد والتنعيم: من AC لـ DC
المولّد هنا زي ملف المحوّل الثانوي: 50 هرتز، ±10 فولت. الدايود بيعدّي النص الموجب بس (توحيد نصف موجة)، والمكثف بيملا الفراغات (تنعيم). القطع كلها على اللوحة — المكثف لسه مش متوصّل.
الإلكترونيات التناظرية
الدايود: اتجاه واحد بس
الدايود بيعدّي التيار من الأنود (A) للكاثود (K) بس. في الدايرة دي حد ركّبه بالعكس، فالـ LED طافي. قيس، افهم، وصلّح.
منظّم جهد بالزينر
دايود زينر 5.1 فولت بيثبّت الجهد على الحمل حتى لو جهد الدخل اتغير. اختار مقاومة التغذية R1 بحيث الحمل ياخد جهده، والزينر ما يسخنش.
الـ Op-amp: مكبّر عاكس
المكبّر العاكس كسبه = −Rf / Rin: الإشارة بتكبر وبتتقلب. التغذية ±9 فولت (مصدرين ونقطة أرضي في النص)، والدخل من مولّد الإشارات على Rin. اختار Rf بحيث الكسب يبقى 10.
Comparator: لمبة بتنوّر لوحدها بالليل
من غير مقاومة رجوع، الـ Op-amp بيقارن: لو IN+ أعلى من IN− الخرج بيروح لأقصى قيمة، ولو أقل بيروح للصفر. هنا IN+ جاي من مقسّم فيه حساس ضوء، وIN− من بوتنشوميتر (مستوى المقارنة).
الـ 555: LED بيرمش من غير متحكم
في وضع Astable المكثف بيتشحن من R1 وR2 لحد 2/3 الجهد، وبيتفرّغ من R2 لحد 1/3، والخرج بيقلب كل مرة. التردد ≈ 1.44 / ((R1 + 2·R2) · C). اختار C1 بحيث الـ LED يرمش مرة كل ثانية تقريبًا.
الإلكترونيات الرقمية
البوابة المنطقية AND وجدول الحقيقة
مفتاحين A وB بيدّوا 1 (5 فولت) أو 0. البوابة AND خرجها 1 بس لو الاتنين 1. جرّب الأربع حالات واتفرج على الـ LED — ده جدول الحقيقة.
نصف جامع (Half Adder)
جمع رقمين من بت واحد: المجموع (Sum) = A XOR B، والمحمول (Carry) = A AND B. البوابتين على اللوحة — وصّل الدخلين لكل بوابة.
ذاكرة بت واحد: SR Latch من بوابتين NAND
بوابتين NAND كل واحدة خرجها راجع على دخل التانية بتعمل ذاكرة: زرار Set بيخلي Q = 1 وبيفضل كده بعد ما تسيبه، وزرار Reset بيرجّعه 0. الزرارين «Active low»: الضغط بيدّي 0.
D Flip-Flop: قسمة التردد على 2 وعلى 4
الـ D Flip-Flop بيحفظ قيمة D لحظة ما الساعة (CLK) تطلع من 0 لـ 1. لو وصّلت Q̅ على D، كل نبضة ساعة بتقلب Q — فـ Q بيطلع نص تردد الساعة. الساعة هنا مولّد إشارات مربعة 100 هرتز.
عدّاد ثنائي 4 بت (Ripple counter)
أربع D Flip-Flops، كل واحدة Q̅ بتاعها راجع على D فبتقلب مع كل نبضة. لو ساعة كل واحدة هي Q̅ اللي قبلها، الأربعة بيعدّوا بالثنائي من 0 لـ 15. الساعة زرار BT، وزرار BR بيصفّر الكل (Reset)، والـ LEDs بتعرض الرقم (D1 أصغر خانة).
DAC بسلّم مقاومات R-2R
4 أطراف رقمية + سلّم مقاومات (10 كيلو و20 كيلو) = محوّل رقمي لتناظري: الخرج = 5 × N / 16 فولت. الأطراف 4 لـ 7 هي النص العالي من PORTD، فـ PORTD = N << 4 بتكتبهم مرة واحدة.
تصميم الدوائر واختبارها
دوّر على العطل بالقياس
تلات LEDs المفروض ينوّروا، واحد منهم طافي. القطع شكلها سليمة — لازم تقيس علشان تلاقي البايظة. افتكر: الأوم بيتقاس والدايرة مطفية.
التفاوت (Tolerance): المقاومة مش بالظبط زي المكتوب
محتاجين 2.5 فولت ± 1% (من 2.475 لـ 2.525) كجهد مرجعي من مقسّم 10 كيلو / 10 كيلو على 5 فولت. على الورق مظبوط — بس مقاومة 5% ممكن تبقى أي حاجة من 9.5 لـ 10.5 كيلو. اتأكد بالقياس، واختار القطع اللي تضمن المواصفة.
المتحكمات الدقيقة
أول LED بيرمش: مقاومة صح + كود صح
بوردة متوافقة مع Arduino Uno، وLED على الطرف 13. اختار مقاومة تحمي الـ LED والطرف، واكتب كود يخلّيه يرمش مرة كل ثانية، واضغط «ارفع الكود».
وصّل LED بنفسك على الطرف 8
المرة دي القطع على اللوحة من غير أسلاك. وصّل الطرف 8 ← المقاومة ← الـ LED ← GND، واكتب كود يخلّيه يرمش مرتين في الثانية.
Serial: البوردة بتتكلم
Serial هي الطريقة اللي البوردة بتكلّمك بيها: كل اللي بتطبعه بيظهر في Serial Monitor تحت اللوحة. اطبع اسم، وعدّ، واحسب.
زرار بيشغّل LED
الزرار متوصّل بين الطرف 2 والأرضي. استخدم المقاومة الداخلية (INPUT_PULLUP): الطرف بيقرا HIGH والزرار سايب، وLOW وهو مضغوط. خلّي LED الطرف 13 ينوّر طول ما الزرار مضغوط.
عدّاد ضغطات: مشكلة الارتداد (Bounce)
الزرار الحقيقي لما بيتضغط معدنه بيخبط ويرتد كذا مرة في أول كام مللي ثانية — والبوردة سريعة كفاية تشوف كل خبطة كأنها ضغطة. اعمل عدّاد يطبع عدد الضغطات الصح.
PWM: تحكم في الإضاءة
البوردة مش بتطلع جهد بين 0 و5 — بتطلع نبضات سريعة (490 مرة في الثانية) والـ LED بيبان أخفت أو أقوى حسب نسبة الوقت اللي النبضة فيها HIGH (Duty cycle). analogWrite(pin, 0..255) بيحدد النسبة.
اقرا البوتنشوميتر بـ analogRead
الـ ADC بيحوّل الجهد من 0 لـ 5 فولت لرقم من 0 لـ 1023. البوتنشوميتر متوصّل كمقسّم جهد على A0. اطبع القراءة، وبعدين حوّلها لفولت.
لمبة ليلية بحساس ضوء
حساس الضوء (LDR) مقاومته بتقل كل ما النور يزيد. مع مقاومة 10 كيلو بيعمل مقسّم جهد على A0: في الضلمة الجهد عالي، وفي النور واطي. خلّي LED الطرف 13 ينوّر لوحده لما الدنيا تضلّم.
إشارة مرور
تلات LEDs: أخضر على 8، أصفر على 9، أحمر على 10. الترتيب: أخضر ثانيتين، أصفر نص ثانية، أحمر ثانيتين، وتتكرر — ومينفعش لونين ينوّروا مع بعض.
Interrupt: ما تفوّتش ولا ضغطة
attachInterrupt بيخلّي البوردة تسيب اللي في إيدها وتنفّذ دالة أول ما الطرف 2 يتغير — حتى لو الـ loop مشغول بـ delay. (الزرار ده عليه مكثف بيمنع الارتداد.)
من جوّه الـ AVR: Blink بالـ registers
pinMode وdigitalWrite بيكتبوا في registers. الطرف 13 هو البت 5 في PORTB، واتجاهه في DDRB. اعمل Blink من غير ولا دالة Arduino للأطراف.
Timer1: Blink من غير delay
Timer1 عدّاد 16 بت جوّه الشريحة. اظبطه في وضع CTC بحيث يعمل Interrupt كل 250 مللي ثانية، وفي الـ ISR اقلب الطرف 13 — والـ loop يفضل فاضي.
البازر: نغمتين بـ tone()
tone(pin, frequency) بيطلّع موجة مربعة بالتردد اللي تختاره. البازر على الطرف 8. شغّل نوتة لا (440 هرتز) ثانية، وبعدين لا الأعلى (880 هرتز) ثانية، وكرّر.
ما تحرقش طرف البوردة
كل طرف في البوردة يستحمل 40 مللي أمبير بالكتير. الـ LED هنا متوصّل على الطرف 7 من غير مقاومة — لو شغّلته الطرف هيطلّع أكتر من 100 مللي والـ LED والطرف هيتحرقوا. صلّح التوصيل الأول.
ديمر: البوتنشوميتر بيتحكم في الإضاءة
اجمع اللي فات: اقرا البوتنشوميتر (0..1023) وحوّل القراءة لـ PWM (0..255) بـ map، وطلّعها على LED الطرف 9.
من PWM لجهد ثابت: فلتر RC
PWM نبضات، بس لو عدّيتها على فلتر RC (مقاومة 10 كيلو ومكثف 10 ميكرو) بتطلع جهد شبه ثابت = نسبة الـ Duty × 5 فولت. ده أبسط DAC ممكن تعمله.
عدّاد على شاشة 7 Segment
الشاشة فيها 7 LEDs على شكل 8 (a لحد g). الأطراف من 2 لـ 8 متوصلة بـ a لحد g عن طريق مقاومات 220 أوم، والطرف المشترك على GND. نوّر الأجزاء الصح علشان تكتب أرقام.
8 LEDs بـ 3 أطراف بس: Shift register 74HC595
الـ 74HC595 بياخد البتات واحدة ورا التانية على DS (كل نبضة على SHCP بتزق بت)، ونبضة على STCP بتنقل الـ 8 بتات للمخارج مرة واحدة. ده اللي بتعمله shiftOut. الأطراف: DS ← 11، SHCP ← 12، STCP ← 8.
شاشة LCD 16×2: اكتب نص وقراءة حساس
شاشة حروف بـ controller من نوع HD44780، متوصلة بـ 6 أطراف (RS ← 12، E ← 11، D4..D7 ← 5، 4، 3، 2). مكتبة LiquidCrystal بتبعت كل حرف على مرتين (4 بت). اكتب ترحيب، واعرض قراءة البوتنشوميتر — وخد بالك من بواقي الأرقام القديمة.
الميكاترونكس والتحكم
الترانزستور كمفتاح: لمبة 12 فولت من طرف 5 فولت
طرف البوردة يدّي 20 مللي بالكتير، واللمبة محتاجة 120 مللي على 12 فولت. الترانزستور NPN بيخلي تيار صغير في القاعدة (B) يتحكم في تيار كبير من المجمّع (C) للباعث (E). اختار مقاومة القاعدة RB بحيث الترانزستور يفتح على الآخر (تشبّع).
موتور DC بموسفت — ودايود الحماية
الموتور بيسحب نص أمبير، فلازم مفتاح زي الموسفت بين الموتور والأرضي. بس الموتور ملف: لما تقطع التيار فجأة بيطلّع جهد عالي جدًا ممكن يحرق الموسفت. الدايود (Flyback) بيدّي للتيار سكة يكمّل فيها.
التحكم في سرعة الموتور بـ PWM
نفس الموتور، بس بدل ما تشغّله وتطفّيه، اديله PWM: كل ما الـ Duty يزيد، متوسط الجهد يزيد والسرعة تزيد. المروحة على العمود بتحمّله فالسرعة بتتبع الجهد.
السيرفو: حرّك الدراع لزاوية بالظبط
السيرفو موتور جواه حساس زاوية ومتحكم: بتبعتله نبضة كل 20 مللي، وعرضها (من حوالي 0.5 لـ 2.4 مللي) بيحدد الزاوية من 0 لـ 180. مكتبة Servo بتعمل النبضات دي.
موتور الخطوة (Stepper): لف بزاوية مضبوطة
موتور الخطوة بيلف خطوة خطوة: 200 خطوة في اللفة (1.8 درجة للخطوة). بتحركه بإنك تنوّر الملفات الأربعة بالترتيب: 1100 ← 0110 ← 0011 ← 1001. عكس الترتيب يعكس الاتجاه، ولو استعجلت أوي بيفوّت خطوات.
Encoder: قيس سرعة الموتور بنفسك
الـ Encoder على عمود الموتور بيطلّع 12 نبضة في كل لفة على الطرف 2. عدّ النبضات بـ Interrupt لمدة 100 مللي، وحوّلها لفات في الدقيقة (rpm) واطبعها.
تحكم PID: سرعة ثابتة حتى لو الحِمل اتغيّر
عايزين الموتور يلف 4000 لفة في الدقيقة بالظبط. الـ PWM الثابت مش كفاية: لو حد زوّد الحِمل السرعة بتقع. اقرا السرعة من الـ Encoder كل 50 مللي، واحسب الـ PWM بمتحكم PI: out = Kp·e + Ki·∫e.
روبوت بعجلتين: اتجاه وسرعة بـ L298N
كل عجلة ليها موتور ودرايفر: IN1/IN2 بيحددوا الاتجاه (10 لقدّام، 01 لورا، 11 أو 00 فرامل)، وPWM على EN بيحدد السرعة. أقصى سرعة 32 سم في الثانية. افتح «الحلبة» فوق المخطط وشوف الروبوت.
Line follower: لفّة كاملة على الخط
3 حساسات قدّام الروبوت بتقول الخط فين: لو الشمال شايفه يبقى الخط راح شمال — لِف شمال (هدّي العجلة الشمال). المسار بيضاوي: خطين مستقيمين ومنحنيين. خلّي الروبوت يكمّل لفّة من غير ما يخرج.
بناء نظام تشغيل
من غير أي مكتبة: main() بتاعك
هنا مفيش Arduino: البرنامج بيبدأ من main() بتاعك بعد كود البداية (crt0) اللي بيجهّز الـ stack والذاكرة. اعمل Blink بالـ registers وبلوب انتظار — من غير Timers.
Driver للـ UART وأول Shell
من غير Serial: اكتب driver للـ USART من الـ registers (UBRR0 وUCSR0A/B/C وUDR0)، واعمل shell صغير بيطبع «basma-os> » وبيفهم أمرين: led on وled off. اكتب في الـ Serial Monitor تحت.
ساعة النظام: Timer tick كل مللي ثانية
كل نظام تشغيل محتاج «نبض»: interrupt من Timer كل 1 مللي بيزوّد عدّاد. بيه تقدر تعمل حاجتين في نفس الوقت من غير delay: LED على 13 بيرمش مرة في الثانية، وLED على 12 أربع مرات.
Scheduler تعاوني: جدول مهام
بدل ما تكتب كل حاجة في loop واحدة، اعمل جدول مهام: لكل مهمة دالة وفترة. الـ scheduler بيلف على الجدول ويشغّل اللي جه دورها. كل مهمة لازم ترجع بسرعة (تعاونية) — ده اللي بتعمله أنظمة كتير صغيرة.
Scheduler بالمقاطعة (Preemptive): Context switch حقيقي
تلات مهام، كل واحدة loop لا نهائي بيستنى بالانتظار المشغول — ومحدش فيهم بيسيب المعالج بإرادته. الـ Timer كل 1 مللي بيقاطع، والـ ISR بيحفظ كل الـ registers على stack المهمة الحالية ويرجّع stack المهمة اللي بعدها. كمّل الدالتين الناقصين.
Mutex: مهمتين وجهاز واحد
مهمتين بيكتبوا سطور على نفس الـ UART. الـ scheduler ممكن يقاطع واحدة في نص سطرها، فالحروف بتتلخبط: «A:1B:7\r\n2…». احمي السطر بقفل (mutex): اللي ماسك القفل بس يكتب، والتاني يستنى.
المحاكي مكتوب من الصفر وبيحل الدايرة بتحليل العُقد (MNA) زي برامج SPICE. النماذج مبسّطة للتعليم: الحرارة والتلف بقواعد تقريبية. بوردات «متوافقة مع Arduino» القادمة غير تابعة لـ Arduino ولا معتمدة منها، والأسماء علامات تجارية لأصحابها.

