🔌 ۱۵ مدار پایهی الکترونیک که هر آردوینوکار باید بلد باشد (با اسم انگلیسی)
هر پروژهی آردوینو، از چراغ خواب تا ربات، از چند تکهی تکراری ساخته شده است: یک مقاومت که دکمه را آرام نگه میدارد، دو مقاومت که ولتاژ را نصف میکنند، یک ترانزیستور که موتور را روشن میکند و یک دیود که از ترانزیستور محافظت میکند. اینها مدارهای پایه الکترونیک هستند و اگر بشناسیشان، هر شماتیکی را مثل جملهای از کلمههای آشنا میخوانی. در این راهنما ۱۵ مدار پایه را با اسم کامل فارسی و انگلیسی آوردهایم؛ برای هر کدام اینکه چه مشکلی را حل میکند، یک نقشهی کوچک، فرمول با یک عدد واقعی و هر جا لازم بوده کد آردوینو. اسم بقیهی مدارها را هم در فهرست اسم مدارها به فارسی و انگلیسی پیدا میکنی.
نگاه کلی: ۱۵ مدار در یک جدول
| # | اسم فارسی | English name | چه مشکلی را حل میکند | فرمول کلیدی |
|---|---|---|---|---|
| ۱ | مقاومت بالاکش و پایینکش | Pull-up / Pull-down Resistor | ورودی شناور و نویزی | I = V ÷ R |
| ۲ | مقاومت محدودکنندهی جریان LED | LED Current-limiting Resistor | سوختن LED و پین | R = (Vs − Vf) ÷ I |
| ۳ | مقسم ولتاژ | Voltage Divider | اندازهگیری ولتاژ بالا، خواندن سنسور مقاومتی | Vout = Vin × R2 ÷ (R1 + R2) |
| ۴ | کلید ترانزیستوری NPN | NPN Transistor Switch | بار پرمصرفتر از ۲۰ میلیآمپر | Rb = (5 − 0.7) ÷ Ib |
| ۵ | کلید ماسفت | MOSFET Switch (N-channel, low-side) | بارهای چندآمپری | P = I² × Rds(on) |
| ۶ | دیود هرزگرد | Flyback Diode | ولتاژ برگشتی سیمپیچ | V = L × di ÷ dt |
| ۷ | مدار راهانداز رله | Relay Driver | قطع و وصل مدار جدا | I = V ÷ Rcoil |
| ۸ | پل H با L293D | H-Bridge | چرخش موتور در دو جهت | جدول IN1 و IN2 |
| ۹ | فیلتر RC و حذف لرزش | RC Filter / Hardware Debounce | لرزش دکمه، نویز | τ = R × C |
| ۱۰ | خازن دکوپلینگ | Decoupling (Bypass) Capacitor | افت لحظهای تغذیه و ریست | ΔV = I × Δt ÷ C |
| ۱۱ | رگولاتور ولتاژ ۷۸۰۵ | 7805 Voltage Regulator | ساختن ۵ ولت ثابت از باتری یا آداپتور | P = (Vin − 5) × I |
| ۱۲ | مبدل سطح منطقی | Logic Level Shifter | گفتوگوی ۵ ولت و ۳٫۳ ولت | Vout = 5 × 2k ÷ 3k |
| ۱۳ | گسترش خروجی با شیفت رجیستر | Shift Register Expansion (74HC595) | کمبود پین | خروجی = ۸ × تعداد آیسی |
| ۱۴ | راهانداز دارلینگتون ULN2003 | Darlington Driver (ULN2003) for Stepper | چند سیمپیچ با جریان زیاد | ۲۰۴۸ گام در هر دور |
| ۱۵ | مدار آستابل ۵۵۵ | 555 Astable Multivibrator | چشمکزن و نوسانساز بدون میکروکنترلر | f = 1.44 ÷ ((R1 + 2R2) × C) |
۱. مقاومت بالاکش و پایینکش (Pull-up / Pull-down Resistor)
مشکل: پین ورودیای که به هیچجا وصل نیست «شناور» است و هر نویزی، حتی نزدیک شدن دست، آن را بین HIGH و LOW میپراند. دکمه فقط وقتی فشرده است مسیر میسازد؛ وقتی آزاد است، پین باید یک مقدار مشخص داشته باشد. مقاومت بالاکش آن را به ۵ ولت و مقاومت پایینکش به GND میکشد.
Pull-up (button to GND) Pull-down (button to +5V)
+5V +5V
| |
[10k] [button]
| |
+-------- D2 +-------- D2
| |
[button] [10k]
| |
GND GND
idle = HIGH, pressed = LOW idle = LOW, pressed = HIGH
فرمول و عدد: وقتی دکمه فشرده است، جریانی که از مقاومت ۱۰ کیلواهم رد میشود I = 5 ÷ 10000 = ۰٫۵ میلیآمپر است؛ آنقدر کم که هدر نمیرود و آنقدر زیاد که نویز را میپوشاند. آردوینو اونو مقاومت بالاکش داخلی ۲۰ تا ۵۰ کیلواهمی دارد که با یک خط روشن میشود و دیگر مقاومت بیرونی نمیخواهی:
// Button with the internal pull-up: no external resistor needed
const int BUTTON = 2; // button between D2 and GND
const int LED = 13; // the on-board LED
void setup() {
pinMode(BUTTON, INPUT_PULLUP); // about 20-50k to 5V, inside the chip
pinMode(LED, OUTPUT);
}
void loop() {
bool pressed = (digitalRead(BUTTON) == LOW); // pull-up logic is inverted
digitalWrite(LED, pressed ? HIGH : LOW);
}
توضیح بیشتر در معنی مقاومت پولآپ.
۲. مقاومت محدودکنندهی جریان LED (LED Current-limiting Resistor)
مشکل: LED مثل لامپ نیست؛ بعد از ولتاژ آستانهاش تقریباً هیچ مقاومتی ندارد و اگر مستقیم به ۵ ولت وصل شود، آنقدر جریان میکشد که خودش و پین آردوینو آسیب میبینند. یک مقاومت سری جریان را محدود میکند.
D9 ----[220R]----|>|---- GND
LED
(long leg = anode, toward the resistor)
فرمول و عدد: R = (Vs − Vf) ÷ I. برای LED قرمز با افت Vf ≈ ۲ ولت و جریان هدف ۱۵ میلیآمپر: R = (5 − 2) ÷ 0.015 = ۲۰۰ اهم. نزدیکترین مقدار استاندارد بزرگتر ۲۲۰ اهم است و جریان واقعی 3 ÷ 220 ≈ ۱۳٫۶ میلیآمپر میشود. توان مقاومت P = I² × R ≈ ۰٫۰۴ وات است و یک مقاومت ۱/۴ وات راحت تحملش میکند. LED آبی و سفید افت حدود ۳ ولت دارند: (5 − 3) ÷ 0.015 ≈ ۱۳۳ اهم، پس ۱۵۰ اهم. عددها را با ماشینحساب مقاومت LED چک کن و اگر میخواهی بدانی LED بدون مقاومت چه میشود، چرا LED مقاومت میخواهد را بخوان.
۳. مقسم ولتاژ (Voltage Divider)
مشکل: ورودی آنالوگ آردوینو حداکثر ۵ ولت را میخواند (ESP32 و پیکو ۳٫۳ ولت). برای اندازهگیری باتری ۹ ولتی باید ولتاژ را به نسبت معلوم کوچک کرد. همین مدار پایهی خواندن همهی سنسورهای مقاومتی است: فتوسل، ترمیستور، سنسور خمش و پتانسیومتر.
Vin (9V) ---[R1 20k]---+---[R2 10k]--- GND
|
+---- A0 (Vout = 3V)
فرمول و عدد: Vout = Vin × R2 ÷ (R1 + R2) = 9 × 10 ÷ 30 = ۳ ولت. آردوینو این ۳ ولت را حدود 3 ÷ 5 × 1023 ≈ ۶۱۴ میخواند. جریان مقسم 9 ÷ 30k = ۰٫۳ میلیآمپر است که باتری را خالی نمیکند. یادت باشد مقسم ولتاژ منبع تغذیه نیست: اگر از خروجیاش جریان بکشی، ولتاژش میافتد.
// Battery monitor: a 9 V battery through a 20k / 10k divider into A0
const float R1 = 20000.0;
const float R2 = 10000.0;
void setup() {
Serial.begin(9600);
}
void loop() {
int raw = analogRead(A0); // 0..1023
float vOut = raw * 5.0 / 1023.0; // the voltage at A0
float vBattery = vOut * (R1 + R2) / R2; // undo the divider
Serial.print("battery: ");
Serial.print(vBattery, 2);
Serial.println(" V");
delay(500);
}
منفی باتری باید به GND آردوینو وصل باشد، وگرنه عدد بیمعنی است. ماشینحساب مقسم ولتاژ مقاومتها را برایت پیدا میکند و درس ولتاژ را تقسیم کن همین مدار را با تمرین درس میدهد.
۴. کلید ترانزیستوری NPN (NPN Transistor Switch)
مشکل: هر پین آردوینو حدود ۲۰ میلیآمپر را راحت میدهد؛ یک موتور کوچک، نوار LED یا رله بیشتر میخواهد. ترانزیستور NPN با یک جریان کوچک در بیس، جریان بزرگی را بین کلکتور و امیتر قطع و وصل میکند.
+6V (separate supply)
|
[LOAD] motor, lamp or LED strip
|
C
D9 --[470R]--B NPN (2N2222, BC337)
E
|
GND (shared with the Arduino GND)
فرمول و عدد: فرض کن بار ۲۰۰ میلیآمپر میکشد و بهرهی ترانزیستور (β) حدود ۱۰۰ است. حداقل جریان بیس 0.2 ÷ 100 = ۲ میلیآمپر است؛ برای اینکه ترانزیستور کامل «اشباع» شود و داغ نکند، پنج برابرش میگیریم: Ib = ۱۰ میلیآمپر. مقاومت بیس Rb = (5 − 0.7) ÷ 0.01 = ۴۳۰ اهم، که ۴۷۰ اهم استاندارد را برمیداریم (Ib ≈ ۹ میلیآمپر). در اشباع ولتاژ کلکتور تا امیتر حدود ۰٫۲ ولت است و گرمای ترانزیستور 0.2 × 0.2 = ۰٫۰۴ وات؛ بدون هیتسینک.
// Motor speed through an NPN transistor (470 ohm base resistor on D9)
const int MOTOR = 9; // a PWM pin
void setup() {
pinMode(MOTOR, OUTPUT);
}
void loop() {
for (int speed = 0; speed <= 255; speed += 5) { // speed up slowly
analogWrite(MOTOR, speed);
delay(40);
}
delay(1000);
analogWrite(MOTOR, 0); // stop
delay(1000);
}
اگر بار موتور یا رله است، دیود هرزگرد (مدار ۶) را فراموش نکن. درس بدون کد ترانزیستور: کلید برقی این مدار را با دکمه و LED نشان میدهد.
۵. کلید ماسفت (MOSFET Switch)
مشکل: برای بار ۲ آمپری، ترانزیستور NPN به ۲۰۰ میلیآمپر جریان بیس نیاز دارد که هیچ پینی نمیدهد. ماسفت با ولتاژ گیت روشن میشود، نه جریان؛ پس پین آردوینو تقریباً هیچ باری حس نمیکند.
D9 ---[220R]---+------ G N-MOSFET (IRLZ44N, logic-level)
|
[10k] D ---- LOAD ---- +12V
|
GND S ---- GND (shared with the Arduino)
فرمول و عدد: گرمای ماسفت P = I² × Rds(on). IRLZ44N با ۵ ولت روی گیت مقاومتی حدود ۰٫۰۲۵ اهم دارد؛ برای ۲ آمپر: 2² × 0.025 = ۰٫۱ وات، یعنی تقریباً سرد. مقاومت ۲۲۰ اهم جریان لحظهای شارژ گیت را به حدود 5 ÷ 220 ≈ ۲۳ میلیآمپر محدود میکند و مقاومت ۱۰ کیلواهم گیت را موقع روشن شدن آردوینو (وقتی پین هنوز ورودی است) خاموش نگه میدارد. حتماً مدل «منطقی» بخر؛ IRFZ44N معمولی با ۵ ولت کامل روشن نمیشود و داغ میکند. کد همان کد ترانزیستور NPN بالاست. مشخصات قطعه در ماسفت N با IRLZ44N.
۶. دیود هرزگرد (Flyback Diode)
مشکل: سیمپیچ موتور و رله انرژی را در میدان مغناطیسی نگه میدارد. وقتی ترانزیستور ناگهان جریان را قطع میکند، سیمپیچ برای ادامه دادن جریان یک ولتاژ برعکس و خیلی بزرگ میسازد که ترانزیستور را میسوزاند یا آردوینو را ریست میکند. دیود هرزگرد به این جریان یک راه امن برای چرخیدن میدهد.
+V ------+--------------+
| |
[COIL] [1N4007] band (cathode) toward +V
motor/relay |
| |
+--------------+
|
C transistor collector (or MOSFET drain)
فرمول و عدد: ولتاژ سیمپیچ V = L × di ÷ dt است. سیمپیچی با اندوکتانس ۱۰ میلیهانری که جریان ۱۰۰ میلیآمپریاش در یک میکروثانیه قطع شود: 0.01 × 0.1 ÷ 0.000001 = ۱۰۰۰ ولت! با دیود، این ولتاژ به حدود ۰٫۷ ولت بالاتر از تغذیه محدود میشود. برای رلهی کوچک 1N4148 کافی است و برای موتور 1N4007 یا دیود شاتکی 1N5819. پروژهی آمادهی دیود محافظ موتور را باز کن و جای دیود را ببین.
۷. مدار راهانداز رله (Relay Driver)
مشکل: رله یک کلید مکانیکی است که با برق باز و بسته میشود و مدار دوم را کاملاً جدا قطع و وصل میکند. ولی سیمپیچ رله برای پین آردوینو پرمصرف است. راهانداز رله ترکیب دو مدار قبلی است: کلید ترانزیستوری و دیود هرزگرد.
+5V ----+-------------+
| |
[RELAY COIL] [1N4148] band toward +5V
| |
+-------------+
|
C
D7 --[1k]--B NPN
E
|
GND
فرمول و عدد: سیمپیچ یک رلهی ۵ ولتی رایج حدود ۷۰ اهم است: I = 5 ÷ 70 ≈ ۷۱ میلیآمپر، خیلی بیشتر از توان یک پین. با مقاومت بیس ۱ کیلواهم، Ib = 4.3 ÷ 1000 ≈ ۴٫۳ میلیآمپر و با بهرهی ۱۰۰ ترانزیستور تا ۴۳۰ میلیآمپر را هدایت میکند؛ یعنی با خیال راحت اشباع است. ماژولهای رلهی آماده همین ترانزیستور و دیود را روی برد دارند و بعضیشان با LOW فعال میشوند.
// Relay driver: D7 -> 1k -> NPN base, coil with a flyback diode
const int RELAY = 7;
void setup() {
pinMode(RELAY, OUTPUT);
}
void loop() {
digitalWrite(RELAY, HIGH); // coil on: COM connects to NO
delay(2000);
digitalWrite(RELAY, LOW); // coil off: COM goes back to NC
delay(2000);
}
فرق NO و NC و نکتههای ایمنی برق شهر در ماژول رله با آردوینو آمده است.
۸. پل H با L293D (H-Bridge)
مشکل: کلید ترانزیستوری موتور را فقط در یک جهت میچرخاند. برای عقب رفتن ربات باید جهت جریان در موتور برعکس شود. پل H چهار کلید است که مثل حرف H دور موتور چیده شدهاند؛ آیسی L293D دو پل H کامل را در خودش دارد.
+V +V
| |
S1 S3
| |
+-----(M)-----+
| |
S2 S4
| |
GND GND
S1 + S4 closed -> forward
S3 + S2 closed -> reverse
S1 + S2 closed -> short circuit! (the L293D never allows it)
| پایهی L293D | نام | وصل به |
|---|---|---|
| ۱ | EN1 (سرعت با PWM) | D9 |
| ۲ و ۷ | IN1 و IN2 (جهت) | D8 و D7 |
| ۳ و ۶ | OUT1 و OUT2 | دو سیم موتور |
| ۱۶ | VCC1 (منطق) | 5V آردوینو |
| ۸ | VCC2 (موتور) | مثبت باتری موتور |
| ۴، ۵، ۱۲، ۱۳ | GND | GND مشترک |
فرمول و عدد: جدول درستی ساده است: IN1 = HIGH و IN2 = LOW یعنی جلو، برعکسش عقب، و هر دو یکسان یعنی ایست. L293D تا ۶۰۰ میلیآمپر برای هر موتور میدهد ولی خودش حدود ۱٫۵ تا ۲٫۵ ولت افت دارد؛ با باتری ۶ ولتی، موتور تقریباً ۴ ولت میبیند.
// One DC motor on an L293D: direction with IN1/IN2, speed with EN1 (PWM)
const int EN1 = 9; // L293D pin 1
const int IN1 = 8; // L293D pin 2
const int IN2 = 7; // L293D pin 7
void drive(int speed) { // -255..255, the sign is the direction
if (speed > 0) {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
} else if (speed < 0) {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
} else {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
}
analogWrite(EN1, abs(speed)); // 0 lets the motor coast to a stop
}
void setup() {
pinMode(EN1, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
}
void loop() {
drive(200);
delay(2000); // forward
drive(0);
delay(1000);
drive(-200);
delay(2000); // reverse
drive(0);
delay(1000);
}
درس موتور جلو و عقب همین مدار را در شبیهساز با L293D قدمبهقدم میسازد.
۹. فیلتر RC و حذف لرزش دکمه (RC Filter / Hardware Debounce)
مشکل: کنتاکت فلزی دکمه هنگام فشرده شدن چند میلیثانیه میلرزد و آردوینو یک فشار را چند فشار میبیند. یک مقاومت و یک خازن، تغییرهای خیلی سریع را صاف میکنند؛ همین مدار در جای دیگر فیلتر پایینگذر برای نویز سنسور است.
+5V
|
[10k]
|
+--------------+------ D2
| |
[button] [1uF]
| |
GND GND
فرمول و عدد: ثابت زمانی τ = R × C = 10000 × 0.000001 = ۰٫۰۱ ثانیه، یعنی ۱۰ میلیثانیه. خازن در یک τ به ۶۳ درصد و در حدود ۵τ (۵۰ میلیثانیه) تقریباً کامل شارژ میشود؛ لرزشهای چندمیلیثانیهای فرصت نمیکنند ولتاژ را از آستانه رد کنند. به زبان فیلتر، فرکانس قطع f = 1 ÷ (2π × R × C) ≈ ۱۶ هرتز است. ماشینحساب ثابت زمانی RC این را برای هر مقداری حساب میکند. راه نرمافزاری هم هست و قطعهی اضافه نمیخواهد:
// Software debounce: accept a change only after it is steady for 30 ms
const int BUTTON = 2; // button between D2 and GND
int stableState = HIGH;
int lastReading = HIGH;
unsigned long lastFlip = 0;
int presses = 0;
void setup() {
pinMode(BUTTON, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int reading = digitalRead(BUTTON);
if (reading != lastReading) {
lastFlip = millis(); // the contact moved: restart the clock
lastReading = reading;
}
if (millis() - lastFlip > 30 && reading != stableState) {
stableState = reading; // steady for 30 ms: a real change
if (stableState == LOW) {
presses++;
Serial.println(presses);
}
}
}
۱۰. خازن دکوپلینگ (Decoupling / Bypass Capacitor)
مشکل: آیسیها جریان را تکهتکه و در لحظههای خیلی کوتاه میکشند و سیمهای تغذیه نمیتوانند آنقدر سریع جواب بدهند. نتیجه، افتهای لحظهای ولتاژ است که خطای عجیب، ریست ناگهانی یا نویز در خواندن آنالوگ میسازد. یک خازن کوچک کنار پایهی تغذیهی هر آیسی، مثل یک مخزن آب کوچک، این جریانهای لحظهای را تأمین میکند.
+5V ----+-------------+------ VCC of the IC
| |
[100nF] [10uF]
(ceramic) (bulk)
| |
GND ----+-------------+------ GND of the IC
place the 100nF as close to the IC pins as you can
فرمول و عدد: افت ولتاژ ΔV = I × Δt ÷ C. اگر آیسی برای ۲۰ نانوثانیه ۵۰ میلیآمپر بکشد، خازن ۱۰۰ نانوفاراد ولتاژ را فقط 0.05 × 0.00000002 ÷ 0.0000001 = ۰٫۰۱ ولت پایین میبرد. برای بارهای بزرگتر خازن بزرگتر لازم است: سروویی که یک میلیثانیه ۵۰۰ میلیآمپر بکشد، از یک خازن ۴۷۰ میکروفارادی حدود 0.5 × 0.001 ÷ 0.00047 ≈ ۱٫۱ ولت افت میگیرد؛ برای همین کنار سروو و موتور خازن الکترولیتی بزرگ میگذارند. انواع خازن را در راهنمای خازن ببین.
۱۱. رگولاتور ولتاژ ۷۸۰۵ (7805 Voltage Regulator)
مشکل: باتری ۹ ولتی یا آداپتور ۱۲ ولتی داری ولی ماژولهایت ۵ ولت ثابت میخواهند. ۷۸۰۵ ولتاژ ورودی بالاتر را به ۵ ولت ثابت تبدیل میکند و اضافهاش را به گرما تبدیل میکند.
+-----------+
9-12V ----| IN OUT |---- +5V
| | GND | |
| +-----+-----+ |
[0.33uF] | [0.1uF]
| | |
GND +-----------+-----------+ GND
فرمول و عدد: گرمای رگولاتور P = (Vin − 5) × I. با آداپتور ۱۲ ولتی و بار ۵۰۰ میلیآمپری: (12 − 5) × 0.5 = ۳٫۵ وات، که بدون هیتسینک آن را آنقدر داغ میکند که خودش را خاموش کند. با ۹ ولت و ۲۰۰ میلیآمپر فقط ۰٫۸ وات است. ۷۸۰۵ دستکم حدود ۲ ولت اختلاف لازم دارد، پس ورودی کمتر از ۷ ولت کافی نیست، و بازدهش با ورودی ۱۲ ولت فقط 5 ÷ 12 ≈ ۴۲ درصد است. برای جریان زیاد، رگولاتور سوئیچینگ مثل LM2596 بهتر است. مشخصات و پایهها در رگولاتور ۷۸۰۵.
۱۲. مبدل سطح منطقی (Logic Level Shifter)
مشکل: آردوینو اونو با ۵ ولت حرف میزند و ESP32، پیکو و بیشتر ماژولهای جدید با ۳٫۳ ولت. سیگنال ۵ ولتی میتواند پایهی ۳٫۳ ولتی را آسیب بزند و سیگنال ۳٫۳ ولتی ممکن است برای ورودی ۵ ولتی کم باشد.
One way, 5V -> 3.3V (a divider is enough):
Arduino TX (5V) ---[1k]---+---[2k]--- GND
|
+--- ESP32 RX (3.3V)
Both ways, e.g. I2C (one N-MOSFET per line, BSS138):
3.3V --[10k]--+ +--[10k]-- 5V
| gate = 3.3V |
SDA (3.3V) ---+--S --[FET]-- D-+--- SDA (5V)
فرمول و عدد: مقسم ۱ و ۲ کیلواهم: 5 × 2 ÷ (1 + 2) ≈ ۳٫۳۳ ولت، دقیقاً سطح امن ESP32. جهت برعکس معمولاً خودش کار میکند: ATmega328P هر ولتاژی بالای 0.6 × 5 = ۳ ولت را HIGH میخواند، پس ۳٫۳ ولت HIGH است، ولی فقط با ۰٫۳ ولت حاشیه. برای خطهای دوطرفه مثل I2C از ماژول مبدل سطح ماسفتی استفاده کن. کدام پایههای ESP32 حساساند در پین اوت ESP32 آمده است.
۱۳. گسترش خروجی با شیفت رجیستر 74HC595 (Shift Register Expansion)
مشکل: آردوینو اونو حدود بیست پین دارد؛ برای یک ماتریس LED یا یک نوار ۱۶تایی کم میآید. آیسی 74HC595 هشت بیت را سریالی از سه سیم میگیرد و روی هشت خروجی میگذارد و چند تا از آن پشت سر هم زنجیر میشوند.
Arduino 74HC595
D11 (data) -----> DS (pin 14)
D12 (clock) -----> SHCP (pin 11)
D8 (latch) -----> STCP (pin 12)
MR (pin 10) -> +5V
OE (pin 13) -> GND
Q0..Q7 -> 8 x [470R] -> LEDs -> GND
Q7' (pin 9) -> DS of the next 595
فرمول و عدد: با n آیسی، 8 × n خروجی داری و همیشه فقط همان سه پین آردوینو را مصرف میکنی؛ چهار آیسی یعنی ۳۲ LED. ولی کل جریان یک 74HC595 حدود ۷۰ میلیآمپر محدود است: با مقاومت ۴۷۰ اهم هر LED قرمز حدود 3 ÷ 470 ≈ ۶٫۴ میلیآمپر و هشت LED روی هم حدود ۵۱ میلیآمپر میکشند که در محدوده است. با ۲۲۰ اهم به حدود ۱۰۹ میلیآمپر میرسی که زیاد است.
// 8 LEDs from 3 pins: a running light through a 74HC595
const int DATA = 11; // DS
const int CLOCK = 12; // SHCP
const int LATCH = 8; // STCP
void show(byte pattern) {
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, MSBFIRST, pattern);
digitalWrite(LATCH, HIGH); // all 8 outputs change at the same moment
}
void setup() {
pinMode(DATA, OUTPUT);
pinMode(CLOCK, OUTPUT);
pinMode(LATCH, OUTPUT);
}
void loop() {
for (int i = 0; i < 8; i++) {
show(1 << i); // one lit LED walks along the row
delay(150);
}
}
درس ۸ LED با ۳ پین همین مدار را در شبیهساز میسازد.
۱۴. راهانداز دارلینگتون ULN2003 برای استپر (Darlington Driver for a Stepper)
مشکل: استپر موتور 28BYJ-48 چهار سیمپیچ دارد که باید به ترتیب روشن شوند و هر کدام بیشتر از توان یک پین جریان میکشد. ULN2003 هفت کلید دارلینگتون (دو ترانزیستور پشت سر هم با بهرهی خیلی زیاد) و دیودهای هرزگرد داخلی دارد؛ یعنی هفت «مدار ۴ و ۶» در یک آیسی.
Arduino ULN2003 28BYJ-48
D8 ----> IN1 OUT1 -----> coil 1
D9 ----> IN2 OUT2 -----> coil 2
D10 ----> IN3 OUT3 -----> coil 3
D11 ----> IN4 OUT4 -----> coil 4
COM ------------ +5V (built-in flyback diodes)
GND ------------ GND (shared)
red common wire of the motor -> +5V
فرمول و عدد: هر سیمپیچ 28BYJ-48 پنجولتی حدود ۵۰ اهم است: I = 5 ÷ 50 = ۱۰۰ میلیآمپر، که برای ULN2003 (تا ۵۰۰ میلیآمپر در هر کانال) راحت است. دارلینگتون حدود ۱ ولت افت دارد، پس سیمپیچ عملاً ۴ ولت میبیند. موتور با گیربکسش ۲۰۴۸ گام در هر دور دارد: ۹۰ درجه یعنی ۵۱۲ گام.
// 28BYJ-48 through a ULN2003 with the built-in Stepper library
#include <Stepper.h>
const int STEPS_PER_REV = 2048;
Stepper motor(STEPS_PER_REV, 8, 10, 9, 11); // order: IN1, IN3, IN2, IN4
void setup() {
motor.setSpeed(10); // rpm; this little motor tops out around 15
}
void loop() {
motor.step(512); // 90 degrees forward
delay(500);
motor.step(-512); // and back
delay(500);
}
چرا ترتیب پایهها ۸، ۱۰، ۹، ۱۱ است و چطور به درجهی دقیق برسی، در استپر موتور 28BYJ-48 با ULN2003 توضیح دادهایم.
۱۵. مدار آستابل ۵۵۵ (555 Astable Multivibrator)
مشکل: همهچیز میکروکنترلر نمیخواهد. برای یک چشمکزن، آژیر یا پالس ساعت ساده، آیسی ۵۵۵ با دو مقاومت و یک خازن یک موج مربعی بیپایان میسازد. در حالت «آستابل» هیچ حالت پایداری ندارد و مدام بین HIGH و LOW میرود.
+9V --+--------------------- pin 8 (VCC)
+--------------------- pin 4 (RESET)
|
[R1 1k]
|
+--------------------- pin 7 (DISCHARGE)
|
[R2 10k]
|
+--------------------- pin 6 (THRESHOLD) + pin 2 (TRIGGER)
|
[C 47uF]
|
GND --+--------------------- pin 1 (GND)
pin 3 (OUTPUT) ---[470R]---|>|--- GND
pin 5 (CONTROL) ---[10nF]--- GND (optional, reduces noise)
فرمول و عدد: فرکانس f = 1.44 ÷ ((R1 + 2R2) × C). با R1 = ۱ کیلواهم، R2 = ۱۰ کیلواهم و C = ۴۷ میکروفاراد: 1.44 ÷ (21000 × 0.000047) ≈ ۱٫۴۶ هرتز، یعنی تقریباً یک و نیم چشمک در ثانیه. زمان روشن 0.693 × (R1 + R2) × C ≈ ۰٫۳۶ ثانیه و زمان خاموش 0.693 × R2 × C ≈ ۰٫۳۳ ثانیه است؛ دیوتی سایکل حدود ۵۲ درصد. برای سریعتر شدن، C را کوچک کن: با ۱ میکروفاراد فرکانس حدود ۶۹ هرتز میشود و با یک بلندگو صدای بم میدهد. درس چشمکزن بدون آردوینو این مدار را در شبیهساز بدون کد میسازد.
این ۱۵ مدار را کجا امتحان کنی؟
بیشتر این مدارها دربارهی ولتاژ و جریان هستند، پس به شبیهسازی نیاز دارند که مدار را واقعاً حل کند. شبیهساز تینکرکد فارسی در حالت بدون کد (دوبعدی) مقاومت، LED، ترانزیستور NPN، ماسفت، دیود، رله، خازن، ۵۵۵، ۷۸۰۵، 74HC595، L293D و ULN2003 را دارد و با مولتیمتر ولتاژ و جریان هر نقطه را نشان میدهد؛ اگر LED بدون مقاومت بگذاری، واقعاً میسوزد. در حالت آردوینو هم همین قطعهها کنار کد اجرا میشوند و مدارهای آردوینو اونو و نانو رایگاناند. این همان شبیه ساز مدار فارسی است که روی اینترنت ملی و گوشی هم کار میکند.
در wokwi.com تمرکز روی میکروکنترلر و ماژولهاست: شیفت رجیستر 74HC595، ماژول رله، استپر و LED و دکمه را دارد و برای مدارهای دیجیتال عالی است. برای دیدن عدد ولتاژ و جریان در مدارهای گسسته مثل مقسم ولتاژ یا کلید ترانزیستوری، شبیهسازی که مدار را الکتریکی حل میکند مناسبتر است. ساختن مدارهای آردوینو در ووکوی را در مدارهای آردوینو در ووکوی و امکانات شبیهساز آنلاین آردوینو را در شبیه ساز آردوینو آنلاین ببین.
جمعبندی: این مدارها کجای پروژه مینشینند؟
- ورودیها: مقاومت بالاکش (۱)، فیلتر RC (۹) و مقسم ولتاژ (۳) هر دکمه و سنسوری را تمیز و قابل خواندن میکنند.
- خروجیها: مقاومت LED (۲) برای نور، کلید ترانزیستوری و ماسفت (۴ و ۵) برای بار سنگین، رله (۷) برای مدار جدا، پل H (۸) برای جهت موتور و ULN2003 (۱۴) برای استپر.
- محافظت: دیود هرزگرد (۶) و خازن دکوپلینگ (۱۰) جلوی سوختن و ریستهای مرموز را میگیرند.
- تغذیه و ارتباط: ۷۸۰۵ (۱۱) ولتاژ ثابت میسازد و مبدل سطح (۱۲) بردهای ۵ و ۳٫۳ ولتی را آشتی میدهد.
- بیشتر با کمتر: 74HC595 (۱۳) پین میسازد و ۵۵۵ (۱۵) بدون هیچ کدی زمان میسازد.
قدم بعدی مدارهای دیجیتال است: گیتها، جمعکننده و شمارنده در مدار منطقی و دیجیتال. فهرست مدارهای سادهی بدون کد هم در مدارهای سادهی الکترونیک آمده و همهی مقالههای این مجموعه در مدار و شبیهسازی مدار هستند.
کلید ترانزیستوری را در تینکرکد فارسی بساز 🔌سؤالهای رایج
مقاومت پول آپ چیست و چرا لازم است؟
مقاومتی که یک ورودی را، وقتی دکمه آزاد است، به ولتاژ مثبت میکشد تا شناور نماند و نویز نخواند. در آردوینو با pinMode(pin, INPUT_PULLUP) مقاومت داخلی حدود ۲۰ تا ۵۰ کیلواهم روشن میشود و دکمه بین پین و GND قرار میگیرد؛ دکمهی فشرده LOW خوانده میشود.
مقاومت بیس ترانزیستور را چطور حساب کنم؟
جریان بار را بر بهرهی ترانزیستور تقسیم کن و حاصل را چند برابر کن تا ترانزیستور کامل اشباع شود. بعد ۰٫۷ ولت را از ۵ ولت کم کن و بر آن جریان تقسیم کن. برای بار ۲۰۰ میلیآمپری با بهرهی ۱۰۰ و ضریب ۵، جریان بیس ۱۰ میلیآمپر و مقاومت حدود ۴۳۰ اهم میشود که ۴۷۰ اهم استاندارد را برمیداریم.
دیود هرزگرد را کجا و چطور بگذارم؟
موازی با سیمپیچ رله یا موتور و برعکس: کاتد، یعنی طرف نوار دیود، به سمت مثبت تغذیه و آند به سمتی که ترانزیستور قطع و وصل میکند. در حالت عادی جریانی از آن رد نمیشود و فقط ولتاژ برگشتی لحظهی قطع را خنثی میکند.
فرق ماسفت با ترانزیستور معمولی در مدار آردوینو چیست؟
ترانزیستور BJT با جریان بیس کار میکند و برای بارهای چندصد میلیآمپری خوب است. ماسفت با ولتاژ گیت کار میکند، تقریباً جریانی از پین نمیکشد و با مقاومت روشن خیلی کم چند آمپر را با گرمای کم قطع و وصل میکند، به شرط اینکه مدل منطقی (Logic-level) مثل IRLZ44N باشد.