در این دوره حسگرهای نور، دما، رطوبت و حرکت را میخوانید و دادهها را به داشبورد ابری دیناکلاد میفرستید. بعد از همان داشبورد چراغ، سروو و بازر را از راه دور کنترل میکنید، همه در مرورگر و بدون سختافزار.
این مدار همین حالا در مرورگر شما اجرا میشود. دما و رطوبت را با لغزندهها تغییر دهید. کد کامل این نمونه
هر فصل یک لایه به دستگاه شما اضافه میکند: حسگر، ابر، داشبورد، فرمان و قانون خودکار.
نور را با LDR و حرکت را با PIR میخوانید و اولین قانون خودکار را در یک شبچراغ پیاده میکنید.
دستگاه را به دیناکلاد وصل میکنید، چند مقدار را همزمان روی کارتهای زنده میفرستید و نرخ ارسال را با millis تعیین میکنید. پشت صحنهٔ وایفای، بروکر و MQTT را هم میخوانید.
نمودار زندهٔ نور میکشید، عدد خام را به درصد و درجه تبدیل میکنید، دما و رطوبت را با DHT22 میخوانید و فقط وقتی مقدار عوض شد پیام میفرستید.
با کلید و لغزندهٔ داشبورد چراغ، دیمر، پردهٔ سروودار و LED رنگی را کنترل میکنید و وضعیت دستگاه و داشبورد را همگام نگه میدارید.
هشدار دما، هیسترزیس، خنکسازی هشدار، آستانهٔ قابل تنظیم از داشبورد و حالت خودکار و دستی را پیاده میکنید.
تصمیم میگیرید هر قانون روی دستگاه اجرا شود یا در ابر، چند کار را بدون delay همزمان پیش میبرید، تلهمتری خراب را عیبیابی میکنید و یک گرهٔ IoT را خودتان سیمکشی میکنید.
زنگ در هوشمند، شبچراغ هوشمند، دزدگیر با اعلان ابری، پنکهٔ ترموستاتی و ایستگاه هواشناسی را میسازید.
پارکینگ هوشمند و باغبان گیاه را میسازید، اصول امنیت IoT را یاد میگیرید، با ESP32 آشنا میشوید و در پایان خانهٔ هوشمند خودتان را طراحی میکنید.
این پنج نمونه را برای همین صفحه نوشتهایم و هر کدام همین حالا در مرورگر شما اجرا میشود. هر نمونه تصمیمش را روی خود دستگاه میگیرد و نتیجه را روی Serial، نمایشگر یا قطعهها نشان میدهد. در دوره همین دادهها به داشبورد دیناکلاد هم میرود.
دما و رطوبت را با لغزندهها تغییر دهید.
DHT22 دما و رطوبت را میدهد و برنامه از این دو، دمای احساسی را حساب میکند. هر سه عدد روی LCD میآید و هر ۲ ثانیه یک سطر گزارش روی Serial چاپ میشود.
آردوینو Uno، نمایشگر LCD 1602، حسگر دما و رطوبت DHT22
این مهارتها را در فصل ۷ یاد میگیرید: پروژههای خانهی هوشمند#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// ایستگاه هواشناسی رومیزی: دما، رطوبت و دمای احساسی
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(2, DHT22);
unsigned long lastRead = 0;
bool first = true;
void setup() {
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
lcd.print("Weather station");
}
void loop() {
// DHT22 هر ۲ ثانیه یک بار عدد تازه دارد
if (!first && millis() - lastRead < 2000) return;
first = false;
lastRead = millis();
float t = dht.readTemperature();
float h = dht.readHumidity();
if (isnan(t) || isnan(h)) {
Serial.println("DHT22 read failed");
return;
}
float feels = dht.computeHeatIndex(t, h, false); // دمای احساسی، سانتیگراد
lcd.setCursor(0, 0);
lcd.print(t, 1);
lcd.print("C ");
lcd.print(h, 0);
lcd.print("% RH ");
lcd.setCursor(0, 1);
lcd.print("Feels ");
lcd.print(feels, 1);
lcd.print("C ");
Serial.print("temp=");
Serial.print(t, 1);
Serial.print(" hum=");
Serial.print(h, 0);
Serial.print(" feels=");
Serial.println(feels, 1);
}
نور را با لغزنده تغییر دهید یا دکمه را فشار دهید.
در حالت خودکار، شبچراغ زیر ۳۰ درصد نور روشن و بالای ۴۰ درصد خاموش میشود. با هر فشار دکمه حالت بعدی انتخاب میشود: خودکار، همیشه روشن، همیشه خاموش.
آردوینو Uno، resistor، LED، photoresistor، دکمه
این مهارتها را در فصل ۵ یاد میگیرید: قوانین خودکارسازی// شبچراغ با سه حالت: خودکار، همیشه روشن، همیشه خاموش
enum Mode { AUTO_MODE, ALWAYS_ON, ALWAYS_OFF };
const char* NAMES[3] = { "auto", "always on", "always off" };
const int LAMP = 13, BUTTON = 3;
Mode mode = AUTO_MODE;
bool lampOn = false;
bool lastButton = HIGH;
void setLamp(bool on, int light) {
if (on == lampOn) return; // فقط تغییرها گزارش میشوند
lampOn = on;
digitalWrite(LAMP, on);
Serial.print(on ? "lamp ON (light " : "lamp OFF (light ");
Serial.print(light);
Serial.println("%)");
}
void setup() {
Serial.begin(9600);
pinMode(LAMP, OUTPUT);
pinMode(BUTTON, INPUT_PULLUP);
Serial.println("mode: auto");
}
void loop() {
// هر فشار دکمه حالت بعدی را انتخاب میکند
bool button = digitalRead(BUTTON);
if (button == LOW && lastButton == HIGH) {
mode = (Mode)((mode + 1) % 3);
Serial.print("mode: ");
Serial.println(NAMES[mode]);
delay(30); // صبر تا لرزش دکمه تمام شود
}
lastButton = button;
int light = map(analogRead(A0), 0, 1023, 0, 100); // روشنایی به درصد
if (mode == ALWAYS_ON) setLamp(true, light);
else if (mode == ALWAYS_OFF) setLamp(false, light);
else if (light < 30) setLamp(true, light); // هوا تاریک شد
else if (light > 40) setLamp(false, light); // هوا روشن شد؛ بین این دو چیزی عوض نمیشود
}
دکمهٔ حرکت را چند بار پشت سر هم بزنید.
با دیدن حرکت، آژیر و چراغ چشمکزن ۳ ثانیه روشن میشوند و یک هشدار ثبت میشود. حرکتهای بعدی تا ۱۰ ثانیه هشدار تازه نمیسازند تا صاحبخانه با پیامهای تکراری کلافه نشود.
آردوینو Uno، resistor، LED، حسگر حرکت PIR، بازر
این مهارتها را در فصل ۵ یاد میگیرید: قوانین خودکارسازی// دزدگیر: حرکت آژیر را روشن میکند، اما هر ۱۰ ثانیه حداکثر یک هشدار ثبت میشود
const int PIR = 2, BUZZER = 8, LED = 13;
const unsigned long COOLDOWN = 10000; // فاصلهٔ کمینهٔ دو هشدار
const unsigned long SIREN = 3000; // مدت آژیر
unsigned long lastAlert = 0, sirenStart = 0;
bool alerted = false, sirenOn = false, lastPir = LOW;
int alerts = 0, lastPhase = -1;
void setup() {
Serial.begin(9600);
pinMode(PIR, INPUT);
pinMode(BUZZER, OUTPUT);
pinMode(LED, OUTPUT);
Serial.println("Armed");
}
void loop() {
bool motion = digitalRead(PIR);
if (motion && !lastPir) { // شروع یک حرکت تازه
if (!alerted || millis() - lastAlert >= COOLDOWN) {
alerted = true;
lastAlert = sirenStart = millis();
sirenOn = true;
Serial.print("ALERT ");
Serial.println(++alerts);
} else {
Serial.print("Motion again, no new alert for ");
Serial.print((COOLDOWN - (millis() - lastAlert)) / 1000 + 1);
Serial.println(" s");
}
}
lastPir = motion;
if (sirenOn) {
unsigned long t = millis() - sirenStart;
int phase = (t / 250) % 2; // هر ربع ثانیه صدا و چراغ عوض میشوند
if (phase != lastPhase) {
tone(BUZZER, phase ? 1200 : 1800);
digitalWrite(LED, !phase);
lastPhase = phase;
}
if (t >= SIREN) {
sirenOn = false;
lastPhase = -1;
noTone(BUZZER);
digitalWrite(LED, LOW);
}
}
}
یک گرهٔ IoT سه کار را با سه ضرباهنگ پیش میبرد: چراغ «زندهام» هر نیم ثانیه چشمک میزند، نور هر ثانیه و دما و رطوبت هر ۳ ثانیه خوانده میشود. هیچکدام منتظر دیگری نمیماند.
آردوینو Uno، resistor، LED، photoresistor، حسگر دما و رطوبت DHT22
این مهارتها را در فصل ۶ یاد میگیرید: مهندسی IoT در عمل#include <DHT.h>
// سه کار با سه ضرباهنگ، بدون delay
DHT dht(2, DHT22);
unsigned long lastBlink = 0, lastLight = 0, lastClimate = 0;
bool led = false;
void stamp() { // زمان را جلوی هر گزارش چاپ میکند
Serial.print("[");
Serial.print(millis() / 1000.0, 1);
Serial.print(" s] ");
}
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
dht.begin();
}
void loop() {
unsigned long now = millis();
// کار ۱: چراغ «زندهام»، هر نیم ثانیه
if (now - lastBlink >= 500) {
lastBlink = now;
led = !led;
digitalWrite(13, led);
}
// کار ۲: نور، هر ثانیه
if (now - lastLight >= 1000) {
lastLight = now;
stamp();
Serial.print("light ");
Serial.print(map(analogRead(A0), 0, 1023, 0, 100));
Serial.println("%");
}
// کار ۳: دما و رطوبت، هر ۳ ثانیه
if (now - lastClimate >= 3000) {
lastClimate = now;
float t = dht.readTemperature();
float h = dht.readHumidity();
stamp();
Serial.print("temp ");
Serial.print(t, 1);
Serial.print(" C, humidity ");
Serial.print(h, 0);
Serial.println("%");
}
}
نور را با لغزنده کم و زیاد کنید.
هرچه هوا روشنتر باشد، پرده بازتر میشود. نور به یکی از پنج پله، از ۰ تا ۱۰۰ درصد، گرد میشود و سروو آرام به زاویهٔ همان پله میرود. هر بار که پله عوض شود، یک سطر روی Serial چاپ میشود.
آردوینو Uno، photoresistor، سروو موتور
این مهارتها را در فصل ۴ یاد میگیرید: کنترل از راه دور#include <Servo.h>
// پردهٔ خودکار: هرچه هوا روشنتر، پرده بازتر
Servo curtain;
int angle = 0; // زاویهٔ فعلی سروو
int lastOpen = -1; // آخرین پلهای که گزارش شد
void setup() {
Serial.begin(9600);
curtain.attach(9);
curtain.write(angle); // شروع: پرده بسته
}
void loop() {
int light = map(analogRead(A0), 0, 1023, 0, 100);
int open = round(light / 25.0) * 25; // پنج پله: ۰، ۲۵، ۵۰، ۷۵ و ۱۰۰ درصد
if (open != lastOpen) { // فقط وقتی پله عوض شد گزارش بده
Serial.print("light ");
Serial.print(light);
Serial.print("% -> curtain ");
Serial.print(open);
Serial.println("% open");
lastOpen = open;
}
// سروو هر بار یک درجه به هدف نزدیکتر میشود تا پرده آرام حرکت کند
int target = map(open, 0, 100, 0, 180);
if (angle < target) angle++;
else if (angle > target) angle--;
curtain.write(angle);
delay(15);
}
همهٔ قطعهها در شبیهساز هستند و برای گذراندن دوره چیزی نمیخرید. در مدارهای ابری، یک ماژول وایفای هم از راه Serial به برد وصل است و پیامها را به دیناکلاد میرساند.
همهٔ پروژههای دوره روی آن ساخته میشوند.
رایجترین تراشهٔ پروژههای واقعی IoT است و وایفای را در خودش دارد. شبیهساز آن را اجرا نمیکند. در فصل آخر میخوانید برنامههای دوره روی آن چطور نوشته میشوند.
نور محیط را به ولتاژ تبدیل میکند. شبچراغ و نمودار زندهٔ نور با آن ساخته میشوند.
فقط بله یا نه میگوید: جلوی آن حرکتی هست یا نه.
دما را به یک ولتاژ آنالوگ تبدیل میکند.
دما و رطوبت را بهصورت دیجیتال روی یک سیم میدهد.
سادهترین عملگر است و با کلید داشبورد روشن و خاموش میشود.
سه لغزندهٔ داشبورد رنگ آن را میسازند.
موتور پردهٔ هوشمند، شیر آب گیاه و قفل در است.
صدای زنگ در و آژیر دزدگیر است.
زنگ در و کلید روی دیوار است.
سرعت پنکهٔ هوشمند را نشان میدهد.
نمایشگر محلی ایستگاه هواشناسی است.
جای خالی پارکینگ هوشمند را تشخیص میدهد.
در پروژهٔ باغبان گیاه جای حسگر رطوبت خاک را میگیرد.
هر درس یک توضیح کوتاه، یک مدار آماده و یک کار مشخص دارد.
برد شبیهسازیشده کد شما را در مرورگر اجرا میکند و پیامهایش در زبانهٔ دیناکلاد، کنار مانیتور سریال، روی کارتها و نمودارها میآید.
دکمهٔ بررسی رفتار دستگاه و پیامهایی را که به ابر میفرستد میسنجد. اگر گیر کردید، راهنمای همان تمرین قدمبهقدم کمکتان میکند.
| موضوع | شبیهساز و دیناکلاد | برد و سرویس ابری واقعی |
|---|---|---|
| برای شروع | یک مرورگر کافی است. | برد، حسگر، ماژول وایفای و یک سرویس ابری لازم است. |
| اتصال به ابر | ماژول وایفای و داشبورد آمادهاند و تنظیمی نمیخواهند. | شبکه، بروکر MQTT و داشبورد را باید خودتان راه بیندازید. |
| آزمودن هر وضعیت | دما، نور و حرکت را با لغزنده و دکمه تغییر میدهید. | باید واقعاً حسگر را گرم یا تاریک کنید یا جلوی آن راه بروید. |
| وقتی گیر میکنید | بررسی خودکار و راهنمای هر تمرین | باید خودتان ایراد را پیدا کنید. |
شبیهساز تأخیر و قطعی شبکهٔ واقعی را ندارد. دوره اینها را در درس «تصمیم در لبه یا در ابر؟» و مقالهٔ امنیت IoT توضیح میدهد.
۸ سرفصل، ۳۸ درس، ۳۳ تمرین
درسهای اول رایگان است و برای شروع پرداختی لازم نیست. هر وقت خواستید ادامه دهید، همین دوره را بخرید یا با اشتراک پرو همهٔ دورهها را باز کنید.
۴ درس ابتدایی رایگان است. برای ادامه، اشتراک بگیرید یا دوره را بخرید.
بدون نیاز به پرداخت مبلغی برای شروع
برای پروژهٔ کلاسی، مسابقه یا پروژهٔ پایانی که دستگاهش باید داده بفرستد یا از راه دور فرمان بگیرد.
اگر با آردوینو کار کردهاید و میخواهید دستگاهتان به اینترنت وصل شود.
اگر میخواهید بدانید چراغ، پرده و دزدگیر هوشمند چطور کار میکنند و یکی را خودتان بسازید.
پیشنیاز: آشنایی با برنامهنویسی آردوینو، در حد دورهٔ «آموزش آردوینو از صفر». دورهٔ الکترونیک لازم نیست، اما فهم حسگرها را آسانتر میکند.
اولین دستگاه متصل خودتان را همین امروز در مرورگر بسازید. شروع رایگان است و در کمتر از دو دقیقه وارد محیط یادگیری میشوید.