🌆 درس 60: پروژه‌ی پایانی: شهر هوشمند

همه‌چیز کنار هم — چراغ، دزدگیر، پارکینگ و نمایشگر مرکزی.

سطح: پیشرفته · زمان: حدود 25 دقیقه · مفاهیم: پروژه، ماشین حالت، همه‌چیز

قدم‌های این درس

  1. ماموریت نهایی
  2. قدم ۱ — قانون طلایی پروژه‌های بزرگ
  3. قدم ۲ — ساختار: هر کار، یک تابع
  4. فارغ‌التحصیل شدی!

نمونه‌ای از کد این درس

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

const int ldr = A0, lamp = 13;
const int red = 12, green = 11, walkBtn = 2;
const int trig = 9, echo = 10, buzzer = 8;

unsigned long tLight = 0, tTraffic = 0, tScreen = 0;
int trafficState = 0;
bool walkRequested = false;
long lastDistance = 400;

// ── ۱) چراغ خیابان ────────────────────────────────
void streetLamp() {
  if (millis() - tLight < 500) return;
  tLight = millis();
  digitalWrite(lamp, analogRead(ldr) < 350);
}

// ── ۲) چراغ راهنمایی ──────────────────────────────
void trafficLight() {
  if (digitalRead(walkBtn) == LOW) walkRequested = true;

  unsigned long wait = (trafficState == 0) ? 6000 : 4000;
  if (millis() - tTraffic < wait) return;

  if (trafficState == 0 && !walkRequested) return;

  tTraffic = millis();
  trafficState = 1 - trafficState;
  if (trafficState == 0) walkRequested = false;

  digitalWrite(green, trafficState == 0);
  digitalWrite(red,   trafficState == 1);
}

// ── ۳) پارکینگ ────────────────────────────────────
void parking() {
  digitalWrite(trig, LOW);  delayMicroseconds(2);
  digitalWrite(trig, HIGH); delayMicroseconds(10);
  digitalWrite(trig, LOW);
  long d = pulseIn(echo, HIGH, 30000);
  lastDistance = (d == 0) ? 400 : d / 58;

  if (lastDistance < 10) tone(buzzer, 2000, 60);
}

// ── ۴) نمایشگر مرکزی ──────────────────────────────
void dashboard() {
  if (millis() - tScreen < 700) return;
  tScreen = millis();

  lcd.setCursor(0, 0);
  lcd.print(trafficState == 0 ? "Cheragh: SABZ " : "Cheragh: GHERM");

  lcd.setCursor(0, 1);
  lcd.print("Park: ");
  lcd.print(lastDistance);
  lcd.print(" cm   ");
}

void setup() {
  lcd.init();
  lcd.backlight();
  pinMode(lamp, OUTPUT);
  pinMode(red, OUTPUT);
  pinMode(green, OUTPUT);
  pinMode(walkBtn, INPUT_PULLUP);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(buzzer, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  streetLamp();
  trafficLight();
  parking();
  dashboard();
}

چرا این درس؟

دوره‌ی تینکرکد فارسی تعاملی است: هر قدم را خودت داخل شبیه‌ساز انجام می‌دهی — مدار واقعی می‌چینی، کد واقعی اجرا می‌کنی و نتیجه را همان لحظه می‌بینی. این درس روی درس‌های قبلی ساخته شده، پس اگر تازه شروع کرده‌ای از درس ۱ بیا!

این درس را رایگان در شبیه‌ساز شروع کن 🎓

درس‌های دیگر دوره

🎹

درس 59: پیانوی دکمه‌ای

🧮

درس 61: توابعی که جواب برمی‌گردانند