در این دوره ولتاژ، جریان، مقاومت و طراحی مدار را با ساختن و اندازهگیری یاد میگیرید. مدار را در مرورگر سیمکشی میکنید، اندازه میگیرید و نتیجه را همان لحظه میبینید.
این مدار همین حالا در مرورگر شما اجرا میشود. کد کامل این نمونه
هر فصل یک مفهوم پایه را با اندازهگیری و تمرین عملی جا میاندازد.
ولتاژ، جریان و حلقهٔ بسته را میشناسید، یک LED را بدون حتی یک خط کد روشن میکنید و اولین مدار را خودتان سیمکشی میکنید.
با analogRead و یک تناسب ساده ولتمتر میسازید و آن را با یک نمایشگر LCD به دستگاهی رومیزی تبدیل میکنید.
جریان مدار را با V = I × R حساب میکنید، مقاومت مناسب LED را انتخاب میکنید و خطر اتصال کوتاه و خواندن دیتاشیت را یاد میگیرید.
دو LED را یک بار سری و یک بار موازی سیمکشی میکنید و جریان و ولتاژ هر کدام را حساب میکنید.
راز پتانسیومتر را میفهمید، نور را با LDR به ولتاژ تبدیل میکنید و چراغ خوابی میسازید که با تاریک شدن هوا خودش روشن میشود.
دماسنج NTC میسازید، آن را با کالیبراسیون دونقطهای دقیق میکنید و میفهمید عدد ۵۸ در سنسور فاصله از سرعت صوت میآید.
پایهٔ شناور و مقاومت pull-up بیرونی و داخلی را میشناسید و دکمه، سنسور حرکت PIR و کلید دوحالته را درست میخوانید.
توان را با وات حساب میکنید، PWM را مثل شیر توان به کار میبرید، بودجهٔ جریان پایهها را رعایت میکنید و با ترانزیستور، رله، خازن و دیود آشنا میشوید.
دادهٔ سنسورها را به داشبورد ابری دیناکلاد میفرستید، از راه دور به مدار فرمان میدهید و در پروژهٔ پایانی یک گلخانهٔ هوشمند میسازید.
این پنج نمونه را برای همین صفحه نوشتهایم. هر کدام همین حالا در مرورگر شما اجرا میشود و مدار و کد کاملش کنار آن است.
نور LED آرام زیاد و کم میشود. برنامه با قانون اهم جریان LED را حساب میکند و هر نیم ثانیه جریان و توان میانگین آن را چاپ میکند.
آردوینو Uno، مقاومت، LED
این مهارتها را در فصل ۸ یاد میگیرید: توان، PWM و قطعات قدرت// LED نفسکش: نور آرام کم و زیاد میشود و برنامه جریان و توان آن را حساب میکند
const int LED = 9; // پایهٔ PWM
const float VCC = 5.0; // ولتاژ پایه وقتی روشن است
const float V_LED = 2.0; // افت ولتاژ LED قرمز
const float R = 220.0; // مقاومت سری، اهم
float fullMa; // جریان LED وقتی پایه روشن است، میلیآمپر
int duty = 0; // چرخهٔ کار، از ۰ تا ۲۵۵
int stepSize = 5;
unsigned long lastPrint = 0;
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
// قانون اهم برای ولتاژی که روی مقاومت میافتد: I = (5 - 2) / 220
fullMa = (VCC - V_LED) / R * 1000.0;
Serial.print("Full current: ");
Serial.print(fullMa, 1);
Serial.println(" mA");
}
void loop() {
analogWrite(LED, duty);
if (millis() - lastPrint >= 500) {
lastPrint = millis();
float share = duty / 255.0; // سهم زمانی که پایه روشن است
float ma = fullMa * share; // جریان میانگین
float mw = V_LED * ma; // توان LED: P = V × I
Serial.print("Duty ");
Serial.print(share * 100, 0);
Serial.print("% ");
Serial.print(ma, 1);
Serial.print(" mA ");
Serial.print(mw, 1);
Serial.println(" mW");
}
// چرخهٔ کار بالا و پایین میرود و در دو سر بازه برمیگردد
duty += stepSize;
if (duty <= 0 || duty >= 255) stepSize = -stepSize;
duty = constrain(duty, 0, 255);
delay(20);
}
نور را با لغزنده کم و زیاد کنید.
مقاومت نوری با یک مقاومت ۱۰ کیلواهمی یک مقسم ولتاژ ساخته است. برنامه ولتاژ وسط مقسم را میخواند و از روی آن مقاومت LDR را حساب میکند. هرچه نور بیشتر شود، مقاومت کمتر میشود.
آردوینو Uno، نمایشگر LCD 1602، photoresistor، مقاومت
این مهارتها را در فصل ۵ یاد میگیرید: مقسم ولتاژ: قلب سنسورها#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// اهممتر نوری: مقاومت LDR را از ولتاژ وسط مقسم حساب میکند
LiquidCrystal_I2C lcd(0x27, 16, 2);
const float VCC = 5.0;
const float R_FIXED = 10000.0; // مقاومت پایین مقسم، ۱۰ کیلواهم
void setup() {
lcd.init();
lcd.backlight();
}
void loop() {
int raw = max(analogRead(A0), 1); // صفر نشود تا تقسیم بر صفر پیش نیاید
float vout = raw * VCC / 1023.0;
// مقسم ولتاژ: Vout = VCC * R_FIXED / (R_LDR + R_FIXED)
// پس مقاومت LDR از اینجا به دست میآید:
float rLdr = R_FIXED * (VCC - vout) / vout;
lcd.setCursor(0, 0);
lcd.print("A0: ");
lcd.print(vout, 2);
lcd.print(" V ");
lcd.setCursor(0, 1);
lcd.print("LDR: ");
if (rLdr >= 1000) {
lcd.print(rLdr / 1000.0, 1);
lcd.print(" kOhm ");
} else {
lcd.print(rLdr, 0);
lcd.print(" Ohm ");
}
delay(250);
}
دما یا فاصله را با لغزنده تغییر دهید.
سرعت صوت با دمای هوا عوض میشود. این متر دما را از NTC میخواند، سرعت صوت را حساب میکند و فاصله را از زمان پژواک HC-SR04 به دست میآورد. با لغزندهٔ دما میبینید یک پژواک یکسان در هوای سرد و گرم چه فاصلهای را نشان میدهد.
آردوینو Uno، نمایشگر LCD 1602، سنسور فاصله HC-SR04، ترمیستور NTC، مقاومت
این مهارتها را در فصل ۶ یاد میگیرید: سنسورها از درون#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// متر صوتی: سرعت صوت را از دمای هوا حساب میکند تا فاصله دقیقتر شود
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int TRIG = 9, ECHO = 10;
float readTempC() {
// مدل NTC در شبیهساز: ۰ تا ۵ ولت یعنی منفی ۲۴ تا ۸۰ درجه
return analogRead(A0) / 1023.0 * 104.0 - 24.0;
}
long echoMicros() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH); // پالس ۱۰ میکروثانیهای: یک بستهٔ فراصوت
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
return pulseIn(ECHO, HIGH, 30000); // زمان رفت و برگشت، میکروثانیه
}
void setup() {
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
lcd.init();
lcd.backlight();
}
void loop() {
float t = readTempC();
float speed = 331.3 + 0.606 * t; // سرعت صوت در هوا، متر بر ثانیه
long us = echoMicros();
// صدا رفته و برگشته: فاصله = زمان × سرعت ÷ ۲، به سانتیمتر
float cm = us * speed / 20000.0;
lcd.setCursor(0, 0);
lcd.print(t, 0);
lcd.print("C v=");
lcd.print(speed, 0);
lcd.print(" m/s ");
lcd.setCursor(0, 1);
lcd.print("Dist: ");
lcd.print(cm, 1);
lcd.print(" cm ");
delay(300);
}
دکمهٔ حرکت را بزنید یا کلید را جابهجا کنید.
با هر حرکت چراغ روشن میشود و ۵ ثانیه بعد از آخرین حرکت خاموش میشود. یک کلید دوحالته هم چراغ را همیشه روشن نگه میدارد.
آردوینو Uno، مقاومت، LED، سنسور حرکت PIR، کلید کشویی (SPDT)
این مهارتها را در فصل ۷ یاد میگیرید: ورودی دیجیتال: pull-up و کلیدها// چراغ راهپله: با حرکت روشن میشود و ۵ ثانیه بعد از آخرین حرکت خاموش میشود
const int PIR = 2, MODE_SWITCH = 3, LAMP = 13;
const unsigned long HOLD = 5000; // روشن ماندن بعد از آخرین حرکت، میلیثانیه
bool timing = false; // زمانسنج خاموش شدن در جریان است؟
unsigned long since = 0; // آخرین لحظهای که حرکت دیده شد
bool lampOn = false;
bool lastPir = LOW;
int lastMode = -1;
void setup() {
Serial.begin(9600);
pinMode(PIR, INPUT); // PIR خودش صفر و یک میدهد، pull-up لازم نیست
pinMode(MODE_SWITCH, INPUT); // کلید SPDT در هر دو حالت سطح مشخصی دارد
pinMode(LAMP, OUTPUT);
}
void loop() {
int alwaysOn = digitalRead(MODE_SWITCH); // سمت 5V یعنی همیشه روشن
if (alwaysOn != lastMode) {
Serial.println(alwaysOn ? "Mode: always on" : "Mode: automatic");
lastMode = alwaysOn;
}
bool pir = digitalRead(PIR);
if (pir && !lastPir) Serial.println("Motion");
lastPir = pir;
// هر حرکت زمانسنج را از نو شروع میکند
if (alwaysOn || pir) {
timing = true;
since = millis();
}
bool on = timing && millis() - since < HOLD;
if (!on) timing = false;
if (on != lampOn) {
lampOn = on;
digitalWrite(LAMP, on);
Serial.println(on ? "Lamp ON" : "No motion for 5 s: lamp OFF");
}
}
پتانسیومتر را بچرخانید.
ولتاژ پتانسیومتر روی نوار LED دیده میشود: هر نیم ولت یک خانه. هر خانه حدود ۱۳ میلیآمپر میکشد، پس برنامه هیچوقت بیشتر از ۹ خانه روشن نمیکند تا جریان کل زیر ۱۲۰ میلیآمپر بماند.
آردوینو Uno، نوار LED، پتانسیومتر
این مهارتها را در فصل ۸ یاد میگیرید: توان، PWM و قطعات قدرت// ولتمتر نواری: ولتاژ A0 روی نوار LED، بدون عبور از بودجهٔ جریان
const int FIRST = 2, COUNT = 10; // نوار روی پایههای ۲ تا ۱۱
const int MA_PER_LED = 13; // جریان هر خانه، میلیآمپر
const int BUDGET = 120; // بودجهٔ امن کل تراشه، میلیآمپر
const int MAX_LIT = BUDGET / MA_PER_LED; // بیشترین خانهٔ مجاز: ۹
int lastLit = -1;
void setup() {
Serial.begin(9600);
for (int i = 0; i < COUNT; i++) pinMode(FIRST + i, OUTPUT);
Serial.print("Budget 120 mA: at most ");
Serial.print(MAX_LIT);
Serial.println(" LEDs");
}
void loop() {
float volts = analogRead(A0) * 5.0 / 1023.0;
int wanted = round(volts * 2); // هر نیم ولت یک خانه
int lit = min(wanted, MAX_LIT);
for (int i = 0; i < COUNT; i++) digitalWrite(FIRST + i, i < lit);
if (lit != lastLit) { // فقط وقتی تعداد خانهها عوض شد
Serial.print(volts, 2);
Serial.print(" V -> ");
Serial.print(lit);
Serial.print(" LEDs -> ");
Serial.print(lit * MA_PER_LED);
Serial.print(" mA");
if (wanted > MAX_LIT) Serial.print(" (budget limit)");
Serial.println();
lastLit = lit;
}
delay(100);
}
همهٔ این قطعهها در شبیهساز مرورگر هستند و برای گذراندن دوره چیزی نمیخرید.
در این دوره نقش منبع تغذیهٔ ۵ ولتی و ابزار اندازهگیری میز آزمایشگاه شما را دارد.
جریان را محدود میکند. مقدار مناسبش را با قانون اهم حساب میکنید.
دیودی است که نور میدهد و همیشه یک مقاومت سری لازم دارد.
یک مقسم ولتاژ قابل تنظیم است و هر ولتاژی بین ۰ تا ۵ ولت میدهد.
ولتمتر شما را به یک دستگاه رومیزی تبدیل میکند.
مقاومتش با نور عوض میشود و در یک مقسم ولتاژ نور را به ولتاژ تبدیل میکند.
مقاومتش با گرم شدن کم میشود و دماسنج دوره با آن ساخته میشود.
زمان رفت و برگشت صدا را میدهد و فاصله را از سرعت صوت حساب میکنید.
با مقاومت pull-up بیرونی و داخلی خوانده میشود.
خروجی دیجیتال دارد و مثل یک کلید هوشمند خوانده میشود.
پایهٔ مشترکش بین دو مقصد جابهجا میشود و در هر دو حالت سطح مشخصی میدهد.
ده LED در یک بسته است و با آن بودجهٔ جریان پایهها را حساب میکنید.
داده را بهصورت دیجیتال روی یک سیم میفرستد و در ایستگاه هواشناسی فصل آخر به کار میرود.
هر درس یک توضیح کوتاه و یک کار مشخص دارد. مدار بعضی درسها آماده است و در بعضی دیگر آن را خودتان از قطعهها میچینید.
در شبیهساز قطعه اضافه میکنید و سیم میکشید یا چند خط کد مینویسید. با دکمهٔ اجرا مدار همان لحظه کار میکند.
دکمهٔ بررسی رفتار مدار را میسنجد. اگر جایی گیر کردید، راهنمای همان تمرین قدمبهقدم کمکتان میکند.
شبیهساز همان پردازندهٔ برد Uno را در مرورگر اجرا میکند و مدار را از روی سیمکشی شما میفهمد.
| موضوع | آزمایشگاه شبیهساز | میز آزمایشگاه واقعی |
|---|---|---|
| برای شروع | یک مرورگر کافی است. | منبع تغذیه، مولتیمتر، بردبورد و قطعه لازم است. |
| اتصال کوتاه یا مقاومت اشتباه | چیزی نمیسوزد. مدار را درست میکنید و دوباره اجرا میکنید. | ممکن است LED، پایهٔ برد یا منبع تغذیه آسیب ببیند. |
| اندازهگیری | با ولتمتری که خودتان با آردوینو ساختهاید | با مولتیمتر |
| تغییر شرایط | نور، دما، فاصله و حرکت را با لغزنده و دکمه تغییر میدهید. | باید سنسور را واقعاً گرم یا تاریک کنید یا جلوی آن حرکت کنید. |
| وقتی مدار کار نمیکند | بررسی خودکار و راهنمای هر تمرین | باید سیمبهسیم دنبال ایراد بگردید. |
شبیهساز گرما، دود و فرسودگی قطعه را نشان نمیدهد. دوره اینها را با حساب و دیتاشیت یاد میدهد تا روی میز واقعی هم بدانید هر قطعه چقدر تحمل دارد.
۹ سرفصل، ۳۹ درس، ۲۸ تمرین
درسهای اول رایگان است و برای شروع پرداختی لازم نیست. هر وقت خواستید ادامه دهید، همین دوره را بخرید یا با اشتراک پرو همهٔ دورهها را باز کنید.
۴ درس ابتدایی رایگان است. برای ادامه، اشتراک بگیرید یا دوره را بخرید.
بدون نیاز به پرداخت مبلغی برای شروع
برای درس مدار و آزمایشگاه، پروژهٔ مدرسه و دانشگاه یا مسابقههای رباتیک.
اگر با آردوینو چیزی ساختهاید و میخواهید بدانید چرا مدارتان کار میکند، یا چرا گاهی کار نمیکند.
اگر میخواهید پیش از خرید ابزار و قطعه، طراحی درست یک مدار را یاد بگیرید و بدانید چه چیزی لازم دارید.
پیشنیاز: آشنایی مقدماتی با برنامهنویسی آردوینو، در حد دورهٔ «آموزش آردوینو از صفر». قطعه و برد لازم نیست.
اولین مدارتان را همین امروز در مرورگر سیمکشی کنید. شروع رایگان است و در کمتر از دو دقیقه وارد محیط یادگیری میشوید.