🔬 شبیهسازی مدار در ووکوی: دقیقاً چه چیزی شبیهسازی میشود؟ (Circuit Simulation in Wokwi)
مدار را در ووکوی ساختی، دکمهی اجرا را زدی و LED چشمک زد. ولی دقیقاً چه چیزی «شبیهسازی» شد؟ ولتاژ دو سر LED؟ جریان مقاومت؟ یا فقط اینکه پین ۱۳ روشن و خاموش شد؟ شبیهسازی مدار در ووکوی (Circuit Simulation in Wokwi) با شبیهسازی مدار در نرمافزاری مثل LTspice یک معنی ندارد، و دانستن این فرق جلوی خیلی از غافلگیریها را میگیرد: مداری که در شبیهساز بینقص کار کرد ولی روی میز، LED را سوزاند یا آردوینو را ریست کرد. در این مقاله میگوییم ووکوی چه چیزی را خیلی دقیق شبیهسازی میکند، چه چیزی را مدل نمیکند، سیگنالها را چطور با آنالیزور منطقی ببینی، سرعت شبیهسازی چه معنایی دارد و در آخر یک جدول میدهیم که هر مدار را کجا شبیهسازی کنی.
دو جور «شبیهسازی مدار»
وقتی کسی میگوید «مدار سیمولیشن» یا «سیمولیشن مدار آردوینو»، ممکن است منظورش یکی از این دو کار کاملاً متفاوت باشد:
| شبیهسازی میکروکنترلر (MCU Emulation) | شبیهسازی مداری (SPICE / Analog) | |
|---|---|---|
| سؤالی که جواب میدهد | «کد من درست اجرا میشود؟» | «در این شاخه چند ولت و چند آمپر هست؟» |
| چه چیزی را مدل میکند | دستورهای پردازنده، رجیسترها، تایمرها، وقفهها و پینها | مقاومت، خازن، سلف، دیود و ترانزیستور با معادلههای ولتاژ و جریان |
| خروجی | رفتار برنامه، سطح منطقی پینها، دادهی سریال و I2C | ولتاژ و جریان هر گره، شکل موج، توان مصرفی |
| نمونهها | ووکوی (Wokwi)، «اجرای واقعی» تینکرکد فارسی | التیاسپایس (LTspice)، فالستاد (Falstad)، ngspice |
| نقطهی ضعف | جریان و ولتاژ واقعی شاخهها را حساب نمیکند | معمولاً کد میکروکنترلر را اجرا نمیکند |
بعضی نرمافزارها هر دو را با هم دارند؛ معروفترینش پروتئوس (Proteus) است که هم میکروکنترلر را اجرا میکند و هم بخش آنالوگ مدار را با موتور SPICE حل میکند. شبیهساز تینکرکد فارسی هم ترکیبی است که پایینتر توضیحش میدهیم. ووکوی ولی آگاهانه روی طرف اول تمرکز کرده است.
ووکوی چه چیزهایی را خوب شبیهسازی میکند؟
- اجرای کد روی مجموعهدستور واقعی: ووکوی کد تو را با کامپایلر واقعی میسازد و فایل اجرایی حاصل را روی یک پردازندهی شبیهسازیشده اجرا میکند؛ برای اونو و نانو تراشهی ATmega328P با معماری AVR، برای پیکو تراشهی RP2040 و برای ESP32 پردازندهی همان خانواده. یعنی همان دستورهای ماشینی اجرا میشوند که روی برد واقعی. سرریز
int، تقسیم صحیح، پر شدن رم و اشتباه در اشارهگرها همانطور رخ میدهند که روی برد. - زمانبندی:
delay،millis،micros، تایمرهای سختافزاری و وقفهها با زمان شبیهسازیشدهی دقیق کار میکنند. برای همین پروتکلهای حساس به زمان مثل نئوپیکسل یا سنسور DHT22 جواب میدهند. - ورودی و خروجی دیجیتال: HIGH و LOW، مقاومت pull-up داخلی، وقفهی خارجی روی پین و خواندن همزمان چند پین.
- PWM:
analogWrite، پالس سروو و کم و زیاد شدن نور LED بر اساس نسبت روشنی (duty cycle). - ارتباطهای سریال: UART (سریال مانیتور، ماژولهای سریال)، I2C (LCD I2C، OLED، ساعت DS1307، شتابسنج MPU6050) و SPI (کارت microSD، نمایشگر ILI9341، ماتریس MAX7219). کتابخانهی واقعی هر ماژول با مدل نرمافزاری همان ماژول حرف میزند.
- سنسورهای قابل تنظیم: دما و رطوبت DHT22، فاصلهی HC-SR04، حرکت PIR، نور فتوسل و پیچ پتانسیومتر را در حین اجرا عوض میکنی و کد تو مقدار جدید را میخواند.
- وایفای روی ESP32: ESP32 به یک شبکهی مجازی به اسم
Wokwi-GUEST(بدون رمز) وصل میشود و از طریق آن به اینترنت میرسد؛ پس درخواست HTTP، گرفتن داده از API و MQTT را میشود امتحان کرد. برای باز کردن وبسروری که روی خود ESP32 شبیهسازیشده اجرا میشود از مرورگر کامپیوترت، ووکوی راههای جداگانهای دارد که جزئیاتشان را در مستندات خودش ببین. توضیح کامل در وایفای و اینترنت اشیا در شبیهساز و شبیه ساز ESP32.
خلاصه اینکه برای سؤال «کد من درست است؟» ووکوی یکی از دقیقترین جوابها را میدهد؛ دقیقتر از شبیهسازهایی که کد را به زبان دیگری ترجمه میکنند. برای دیدن متغیرها خطبهخط هم دیباگ قدمبهقدم کد آردوینو در شبیهساز را بخوان.
چه چیزهایی را مثل یک ابزار SPICE مدل نمیکند؟
ووکوی در اصل شبیهساز میکروکنترلر است و قطعههای بیرون از تراشه را بیشتر به شکل منطقی یا با مدلهای ساده میبیند. به طور کلی اینها را از آن انتظار نداشته باش:
- جریان واقعی هر شاخه: ووکوی نمیپرسد از LED چند میلیآمپر میگذرد. برای همین LED بدون مقاومت معمولاً همانطور روشن نشان داده میشود و عوض کردن مقاومت از ۲۲۰ اهم به ۱۰ کیلواهم هم تفاوت چشمگیری در نورش نمیدهد.
- افت ولتاژ: ولتاژ دو سر مقاومت، افت ولتاژ روی سیم بلند یا افت باتری ضعیف حساب نمیشود.
- محدودیت تغذیه و پین: هر پین اونو فقط حدود ۲۰ میلیآمپر را راحت میدهد و پورت USB هم سقف جریان دارد. در ووکوی سروو و موتور برد را ریست نمیکنند؛ روی میز ممکن است بکنند.
- سوختن و آسیب: اتصال کوتاه ۵ ولت به GND، LED برعکس روی ولتاژ زیاد یا دو خروجی که به هم وصل شدهاند، معمولاً هیچ اثر دیدنی ندارند.
- رفتار آنالوگ مدارهای بدون میکروکنترلر: شارژ خازن، فیلتر RC، بایاس ترانزیستور، تقویت آپامپ یا نوسانساز ۵۵۵ ساختهشده از قطعههای جدا؛ اینها کار یک حلکنندهی مداری است.
اینها عیب ووکوی نیستند، انتخاب طراحیاند: حل کردن معادلههای آنالوگ همهی مدار در هر لحظه، شبیهسازی را خیلی کند میکرد و برای هدف اصلیاش، یعنی تست کد، لازم نیست. ووکوی ممکن است بهمرور امکانات آنالوگ بیشتری اضافه کند؛ وضعیت روز را در مستندات خود wokwi.com ببین. ولی تا وقتی سؤالت دربارهی ولتاژ و جریان است، به ابزار دیگری نیاز داری.
آنالیزور منطقی (Logic Analyzer): دیدن سیگنالها
در دنیای واقعی برای دیدن اینکه روی یک پین دقیقاً چه میگذرد از اسیلوسکوپ یا آنالیزور منطقی استفاده میکنند. ووکوی یک آنالیزور منطقی مجازی دارد (شناسهی wokwi-logic-analyzer) که مثل بقیهی قطعهها از دکمهی + اضافه میشود. چند کانال دیجیتال (D0، D1، …) و یک پایهی GND دارد. هر کانال را به پینی که میخواهی ببینی وصل کن، شبیهسازی را اجرا کن و بعد متوقفش کن. دادهی ضبطشده به شکل یک فایل VCD در اختیارت قرار میگیرد که با برنامههای رایگانی مثل PulseView یا GTKWave باز میشود.
یک مدار تمرینی سهسیگنالی
این برنامه سه نوع سیگنال رایج میسازد تا خواندنشان را یاد بگیری. سیمکشی: کانال D0 به پین ۳، کانال D1 به پین ۱۰، کانال D2 به پین ۱ (TX) و GND آنالیزور به GND آردوینو. یک سروو هم به پین ۱۰ بزن تا حرکتش را ببینی (اگر ووکوی کتابخانهی Servo را نشناخت، از Library Manager اضافهاش کن).
// Three signals to look at with the logic analyzer
// D0 <- pin 3 (PWM), D1 <- pin 10 (servo), D2 <- pin 1 (TX), GND <- GND
#include <Servo.h>
Servo servo;
void setup() {
Serial.begin(9600);
analogWrite(3, 64); // about 25% duty cycle, roughly 490 Hz on pin 3
servo.attach(10); // servo pulses every 20 ms on pin 10
servo.write(90); // middle position, about 1.5 ms pulse
}
void loop() {
Serial.write('U'); // 0x55: bits alternate, easy to read on TX
delay(20);
}
چرا PWM روی پین ۳ و نه ۹؟ کتابخانهی Servo در اونو از تایمر ۱ استفاده میکند و تا وقتی فعال است، analogWrite روی پینهای ۹ و ۱۰ کار نمیکند. این دقیقاً از آن جزئیاتی است که ووکوی چون تراشه را واقعاً شبیهسازی میکند، درست نشانت میدهد.
سیگنالها را چطور بخوانیم؟
| کانال | چه میبینی | چطور تفسیرش کنی |
|---|---|---|
| D0: PWM | موج مربعی با دورهی حدود ۲ میلیثانیه | نسبت زمان HIGH به کل دوره همان duty cycle است: ۶۴ از ۲۵۵ یعنی حدود ۲۵٪، پس حدود نیم میلیثانیه HIGH |
| D1: سروو | هر ۲۰ میلیثانیه یک پالس کوتاه | پهنای پالس زاویه را میگوید: حدود ۱ میلیثانیه یک سر، ۱٫۵ وسط و ۲ سر دیگر |
| D2: سریال TX | خط در حالت بیکار HIGH، بعد یک دسته بیت | در ۹۶۰۰ باود هر بیت حدود ۱۰۴ میکروثانیه است: یک بیت شروع LOW، هشت بیت داده (کمارزشترین اول) و یک بیت پایان HIGH. حرف U موج مرتب صفر و یک میسازد |
در PulseView میتوانی رمزگشا (decoder) هم بگذاری: رمزگشای UART روی کانال D2 حرف U را مستقیم نشان میدهد و رمزگشای I2C روی خطوط SDA و SCL آدرس دستگاه و بایتها را. وقتی یک LCD I2C جواب نمیدهد، دیدن اینکه آیا اصلاً بایتی روی خط میرود یا نه، نصف عیبیابی است. برای دیدن مقدار متغیرها در طول زمان، ابزار سادهترش نمودار سریال است.
سرعت شبیهسازی
ووکوی کنار شبیهسازی درصدی نشان میدهد که میگوید شبیهسازی نسبت به زمان واقعی با چه سرعتی جلو میرود. ۱۰۰٪ یعنی همپای ساعت دیوار. اگر عدد کمتر شد، شبیهسازی از زمان واقعی عقب است؛ ولی زمان درون برنامه درست میماند. یعنی millis() همچنان زمان شبیهسازیشده را درست میشمارد و آنالیزور منطقی پهنای پالسها را دقیق نشان میدهد؛ فقط چشمک یکثانیهای LED از دید تو کمی کندتر است.
چیزهایی که معمولاً شبیهسازی را کند میکنند و راهحلشان:
- چاپ بیوقفه در سریال:
Serial.printlnبدون هیچdelayی درloop. یک تأخیر کوچک یا چاپ هر چند صد میلیثانیه یک بار کافی است. - نمایشگرهای بزرگ و پر از پیکسل: نمایشگر رنگی ILI9341 یا تعداد زیادی نئوپیکسل. فقط بخشی از صفحه را که عوض شده دوباره بکش.
- بردهای سنگینتر: شبیهسازی ESP32 کار بیشتری از اونو میبرد.
- مرورگر و دستگاه: تبهای دیگر را ببند؛ روی گوشیهای ضعیف شبیهسازی کندتر است.
ووکوی بیرون از مرورگر: VS Code و CLI
ووکوی فقط سایت wokwi.com نیست. یک افزونه برای VS Code دارد که همان شبیهسازی را کنار ویرایشگر خودت اجرا میکند؛ پروژه را با ابزار ساخت خودت (مثل PlatformIO یا ESP-IDF) کامپایل میکنی و افزونه فایل اجرایی را شبیهسازی میکند. یک ابزار خط فرمان (Wokwi CLI) هم دارد که شبیهسازی را بدون صفحهی گرافیکی اجرا میکند؛ مثلاً در یک سیستم CI، برای اینکه بعد از هر تغییر کد بررسی شود که خروجی سریال همان چیزی است که باید. هر دو به یک فایل تنظیمات و حساب ووکوی نیاز دارند و بعضی امکاناتشان به طرحهای پولی ووکوی وابسته است؛ جزئیات بهروز را از مستندات خود ووکوی بخوان و خلاصهی طرحها را در قیمت ووکوی ببین. برای یادگیری و کلاس، همان نسخهی مرورگر کافی است.
شبیهسازی جریان در تینکرکد فارسی
شبیهساز تینکرکد فارسی درست جایی قوی است که ووکوی عمداً واردش نشده: حل کردن جریان و ولتاژ.
- مود ساده (دوبعدی): هر لحظه کل مدار را با تحلیل گرهای حل میکند؛ باتری مقاومت داخلی دارد، LED مثل دیود با افت ولتاژ مخصوص رنگ خودش رفتار میکند و نورش متناسب با جریان است. اگر جریان LED از حدود ۴۰ میلیآمپر بیشتر شود، LED میسوزد و یک هشدار فارسی میبینی. مولتیمتر ولتاژ، جریان و مقاومت را نشان میدهد، و خازن، تایمر ۵۵۵، ترانزیستور، رله و گیتهای منطقی در طول زمان شبیهسازی میشوند. پروژهی هشدار: LED میسوزه! را باز کن و خودت ببین؛ یا با پروژهی افت ولتاژ LED ولتاژ دو سرش را اندازه بگیر.
- مود آردوینو: همان موتور حل مدار، صحنهی آردوینو را هم حساب میکند؛ پس نور LED از جریان و PWM پین به دست میآید و قطعهای که جریان زیادی بکشد میسوزد. کد در حالت معمولی به شکل تقریبی ترجمه و اجرا میشود که برای بیشتر برنامههای آموزشی کافی است.
- اجرای واقعی: برای اونو و نانو، کد با کامپایلر واقعی آردوینو (avr-gcc) ساخته میشود و روی تراشهی شبیهسازیشدهی ATmega328P اجرا میشود؛ یعنی همان دقت دستوربهدستور. «اجرای واقعی» جزو اشتراک Plus تینکرکد فارسی است. توضیح کاملش در کامپایل و اجرای واقعی کد آردوینو.
اسیلوسکوپ مجازی تینکرکد فارسی هم جزو ماژولهای حرفهای اشتراک Plus است؛ کار با آن را در دیدن PWM با اسیلوسکوپ و مولتیمتر ببین. راهنمای کامل انتخاب روش شبیهسازی را هم در راهنمای شبیهسازی مدار نوشتهایم.
پروتئوس، LTspice، فالستاد و تینکرکد: هر کدام برای چه؟
| ابزار | نوع | نقطهی قوت | محدودیت |
|---|---|---|---|
| ووکوی (Wokwi) | شبیهساز میکروکنترلر، آنلاین | اجرای دقیق کد آردوینو، ESP32 و پیکو؛ ماژولهای دیجیتال زیاد؛ وایفای مجازی | جریان و ولتاژ آنالوگ را حل نمیکند |
| پروتئوس (Proteus) | ترکیبی، نرمافزار ویندوزی | میکروکنترلر و SPICE در یک محیط؛ طراحی PCB | نصب سنگین، یادگیری سختتر، نسخهی کامل پولی |
| التیاسپایس (LTspice) | SPICE، نرمافزار رایگان | تحلیل دقیق آنالوگ: منبع تغذیه، فیلتر، تقویتکننده، مبدل سوئیچینگ | میکروکنترلر ندارد؛ محیطش برای مبتدی خشک است |
| فالستاد (Falstad / CircuitJS) | شبیهساز مداری، آنلاین | نمایش متحرک جریان، عالی برای فهمیدن مدار؛ بدون نصب | میکروکنترلر ندارد؛ برای مدارهای بزرگ کند |
| تینکرکد سرکیت (Tinkercad Circuits) | ترکیبی ساده، آنلاین | آردوینو اونو و مدار پایه برای کلاس | بردهای کم؛ بدون ESP32 و پیکو |
| تینکرکد فارسی | ترکیبی، آنلاین و فارسی | حل جریان با سوختن LED، مولتیمتر، مود بدون کد، آردوینو؛ ESP32 و پیکو با Plus | کتابخانهی آنالوگ به اندازهی SPICE حرفهای نیست |
مقایسههای مفصلتر: ووکوی یا پروتئوس؟ و ووکوی یا تینکرکد؟
جدول: کدام مدار را کجا شبیهسازی کنیم؟
این جدول برای ۲۰ مدار رایج میگوید کدام نوع شبیهساز جواب بهتری میدهد و چرا.
| # | اسم فارسی | English name | بهترین جا | چرا |
|---|---|---|---|---|
| ۱ | مدار LED با مقاومت | LED with Resistor | مود سادهی تینکرکد فارسی، فالستاد | سؤال اصلی جریان است و سوختن LED را باید دید |
| ۲ | مدار مقسم ولتاژ | Voltage Divider | مود ساده با مولتیمتر، LTspice | ولتاژ وسط را باید اندازه گرفت، نه منطق را |
| ۳ | مدارهای سری و موازی | Series and Parallel Circuits | مود ساده، فالستاد | تقسیم جریان و ولتاژ بین شاخهها |
| ۴ | مدار شارژ و دشارژ خازن | RC Charge and Discharge | LTspice، فالستاد، مود ساده | رفتار در طول زمان و ثابت زمانی RC |
| ۵ | مدار چشمکزن ۵۵۵ | 555 Astable Blinker | مود ساده، LTspice | نوسان از شارژ خازن میآید، نه از کد |
| ۶ | مدار کلید ترانزیستوری | Transistor Switch | مود ساده، LTspice | جریان بیس و کلکتور و اشباع ترانزیستور |
| ۷ | مدار موتور با دیود هرزگرد | Motor Driver with Flyback Diode | مود ساده، LTspice | جریان موتور و ولتاژ برگشتی سیمپیچ |
| ۸ | مدار تقویتکنندهی آپامپ | Op-amp Amplifier | LTspice، مود ساده | بهره، اشباع و محدودهی تغذیه |
| ۹ | مدار فیلتر پایینگذر RC | RC Low-pass Filter | LTspice | پاسخ فرکانسی فقط با تحلیل AC دیده میشود |
| ۱۰ | مدار یکسوساز پل دیودی | Bridge Rectifier | LTspice، فالستاد | ولتاژ متناوب، افت دیودها و ریپل |
| ۱۱ | مدار مبدل باک (کاهندهی ولتاژ) | Buck Converter | LTspice | سوئیچ زنی سریع و سلف؛ فقط SPICE دقیق جواب میدهد |
| ۱۲ | مدار گیتهای منطقی | Logic Gates (AND, OR, XOR) | مود ساده، فالستاد | جدول درستی را با کلید و LED میبینی |
| ۱۳ | مدار نیمجمعکننده | Half Adder | مود ساده، فالستاد | ترکیب XOR و AND؛ کد لازم ندارد |
| ۱۴ | مدار چشمکزن آردوینو | Arduino Blink | ووکوی، مود آردوینو | همهی رفتار در کد است |
| ۱۵ | مدار چراغ راهنمایی | Traffic Light | ووکوی، مود آردوینو | ترتیب زمانی و منطق برنامه |
| ۱۶ | مدار فاصلهسنج اولتراسونیک | Ultrasonic Distance Meter | ووکوی، مود آردوینو | اندازهگیری زمان پالس با pulseIn |
| ۱۷ | مدار ایستگاه هواشناسی با DHT22 و LCD | DHT22 Weather Station | ووکوی | پروتکل تکسیمهی DHT و I2C نمایشگر |
| ۱۸ | مدار نمایشگر OLED | OLED Display (SSD1306) | ووکوی | کتابخانهی گرافیکی و ارتباط I2C |
| ۱۹ | مدار وبسرور ESP32 | ESP32 Web Server | ووکوی، ESP32 تینکرکد فارسی (Plus) | وایفای و HTTP؛ هیچ ربطی به جریان ندارد |
| ۲۰ | مدار کنترل دمای فن با PID | PID Fan Temperature Control | مود آردوینوی تینکرکد فارسی | هم کد کنترل لازم است و هم جریان موتور و ماسفت |
مدارهای پایهی جدول (ردیفهای ۱ تا ۷) را با کد آردوینو هم میشود ترکیب کرد؛ فهرستشان در مدارهای پایهی الکترونیک با آردوینو آمده است. گیتها و جمعکنندهها (ردیفهای ۱۲ و ۱۳) هم مقالهی جدا دارند: شبیهسازی مدار منطقی.
یک روش ترکیبی برای پروژهی واقعی
برای یک پروژهی جدی، مثلاً یک گلخانهی کوچک با سنسور، فن و نمایشگر، لازم نیست بین ابزارها یکی را انتخاب کنی. هر بخش را جایی شبیهسازی کن که برایش ساخته شده:
- بخش قدرت: تغذیه، درایور فن یا پمپ، ترانزیستور و دیود را در یک شبیهساز مداری (مود سادهی تینکرکد فارسی یا LTspice) بررسی کن تا مطمئن شوی جریانها در حد مجاز است.
- بخش سنسور: اگر سنسور آنالوگ با مقسم ولتاژ داری، بازهی ولتاژ خروجی را در همان شبیهساز مداری ببین تا با ورودی آنالوگ برد جور باشد.
- کد: منطق برنامه، نمایشگر و ارتباطها را در ووکوی بنویس و تست کن. سیمکشی و ساختن مدار در ووکوی را در ساخت مدار در ووکوی قدمبهقدم گفتهایم.
- سیگنالها: اگر ماژولی جواب نمیداد، با آنالیزور منطقی ببین روی خط داده چه میگذرد.
- برد واقعی: حالا با خیال راحت قطعه بخر و ببند. تفاوتهای باقیمانده معمولاً از سیم شل، تغذیهی ضعیف یا نویز است.
همهی مقالههای این مجموعه در مدار و شبیهسازی مدار جمع شدهاند.
سوختن LED را در تینکرکد فارسی ببین 🔬سؤالهای رایج
آیا ووکوی جریان و ولتاژ مدار را شبیهسازی میکند؟
به طور کلی نه. ووکوی کد میکروکنترلر را دقیق اجرا میکند و سطح منطقی پینها را نشان میدهد، ولی جریان هر شاخه، افت ولتاژ و سوختن قطعه را مثل ابزارهای SPICE حساب نمیکند.
چرا LED در ووکوی بدون مقاومت نمیسوزد؟
چون ووکوی جریان LED را حساب نمیکند و فقط میبیند پین روشن است یا خاموش. در مدار واقعی LED بدون مقاومت ممکن است بسوزد. مود سادهی تینکرکد فارسی جریان را حل میکند و بالای حدود ۴۰ میلیآمپر LED را میسوزاند.
برای شبیهسازی مدار آنالوگ مثل فیلتر یا تقویتکننده از چه نرمافزاری استفاده کنم؟
از یک شبیهساز مداری مثل LTspice، فالستاد (Falstad) یا بخش SPICE پروتئوس. برای مدارهای آموزشی ساده، مود سادهی تینکرکد فارسی هم جریان و ولتاژ را حساب میکند و با مولتیمتر نشان میدهد.
خروجی آنالیزور منطقی ووکوی را با چه برنامهای باز کنم؟
خروجی یک فایل VCD است که با برنامههای رایگانی مثل PulseView یا GTKWave باز میشود. در PulseView میتوانی رمزگشای UART، I2C یا SPI را روی کانالها بگذاری تا بایتها را بخوانی.