🏡 ماموریت ۴۸: خانه‌ی هوشمند

چند زیرسیستم با هم: چراغ خودکار، زنگ و هشدار. هیچ‌کدوم نباید با delay بقیه رو قفل کنه.

سطح: چالشی ⭐⭐⭐ · مود: آردوینو — با کد

هدف‌ها

قطعه‌های لازم

▶ همین ماموریت را در شبیه‌ساز امتحان کن
💡 گیر کردی؟ داخل شبیه‌ساز راهنما را ببین، و اگر باز هم نشد دکمه‌ی «برام حلش کن» مدار را برایت می‌چیند تا ببینی چطور کار می‌کند.

جواب کامل

اول خودت امتحان کن! بعد جواب را ببین 👀

سیم‌کشی

  1. Arduino Uno (VCC5) ⟷ LCD 16×2 I2C (VCC)
  2. Arduino Uno (GND1) ⟷ LCD 16×2 I2C (GND)
  3. Arduino Uno (A4) ⟷ LCD 16×2 I2C (SDA)
  4. Arduino Uno (A5) ⟷ LCD 16×2 I2C (SCL)
  5. Arduino Uno (VCC5) ⟷ Photoresistor (LDR) (A)
  6. Photoresistor (LDR) (B) ⟷ Arduino Uno (A0)
  7. Photoresistor (LDR) (B) ⟷ Resistor (10kΩ) (PIN1)
  8. Resistor (10kΩ) (PIN2) ⟷ Arduino Uno (GND2)
  9. Arduino Uno (D2) ⟷ Push Button (PIN_A1)
  10. Push Button (PIN_B1) ⟷ Arduino Uno (GND2)
  11. Arduino Uno (VCC5) ⟷ Ultrasonic (HC-SR04) (VCC)
  12. Arduino Uno (D9) ⟷ Ultrasonic (HC-SR04) (TRIG)
  13. Ultrasonic (HC-SR04) (ECHO) ⟷ Arduino Uno (D10)
  14. Ultrasonic (HC-SR04) (GND) ⟷ Arduino Uno (GND2)
  15. Arduino Uno (D8) ⟷ بازر زنگی (POS)
  16. بازر زنگی (NEG) ⟷ Arduino Uno (GND2)
  17. Arduino Uno (D13) ⟷ Resistor (220Ω) (PIN1)
  18. Resistor (220Ω) (PIN2) ⟷ LED زرد (ANODE)
  19. LED زرد (CATHODE) ⟷ Arduino Uno (GND2)
  20. Arduino Uno (D12) ⟷ Resistor (220Ω) (PIN1)
  21. Resistor (220Ω) (PIN2) ⟷ LED (Red) (ANODE)
  22. LED (Red) (CATHODE) ⟷ Arduino Uno (GND2)
  23. Arduino Uno (D11) ⟷ Resistor (220Ω) (PIN1)
  24. Resistor (220Ω) (PIN2) ⟷ LED (Green) (ANODE)
  25. LED (Green) (CATHODE) ⟷ Arduino Uno (GND2)

کد

#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();
}

ماموریت‌های مشابه

🎲

ماموریت ۴۷: بازی سایمون

🏆

ماموریت ۴۹: پروژه‌ی آزاد

⏲️

ماموریت ۴۶: بازی سرعت واکنش

📈

ماموریت ۴۵: ثبت داده

📚 برای یاد گرفتن پایه‌ها سری به دوره‌ی آموزش آردوینو بزن · 🎯 همه‌ی ماموریت‌ها