🏡 ماموریت ۴۸: خانهی هوشمند
چند زیرسیستم با هم: چراغ خودکار، زنگ و هشدار. هیچکدوم نباید با delay بقیه رو قفل کنه.
سطح: چالشی ⭐⭐⭐ · مود: آردوینو — با کد
هدفها
- ☐ یه آردوینو روی صحنه باشه
- ☐ حداقل دو LED
- ☐ یه بازر
- ☐ یه سنسور
- ☐ کد از millis استفاده کنه
- ☐ حداقل 10 سیم وصل شده باشه
- ☐ شبیهسازی در حال اجرا
قطعههای لازم
- Arduino Uno
- LCD 16×2 I2C
- حسگر نور (LDR)
- مقاومت 10kΩ
- کلید فشاری
- حسگر فاصله (HC-SR04)
- بازر زنگی
- مقاومت 220Ω × ۳
- LED زرد
- LED قرمز
- LED سبز
💡 گیر کردی؟ داخل شبیهساز راهنما را ببین، و اگر باز هم نشد دکمهی «برام حلش کن» مدار را برایت میچیند تا ببینی چطور کار میکند.
جواب کامل
اول خودت امتحان کن! بعد جواب را ببین 👀
سیمکشی
- Arduino Uno (VCC5) ⟷ LCD 16×2 I2C (VCC)
- Arduino Uno (GND1) ⟷ LCD 16×2 I2C (GND)
- Arduino Uno (A4) ⟷ LCD 16×2 I2C (SDA)
- Arduino Uno (A5) ⟷ LCD 16×2 I2C (SCL)
- Arduino Uno (VCC5) ⟷ Photoresistor (LDR) (A)
- Photoresistor (LDR) (B) ⟷ Arduino Uno (A0)
- Photoresistor (LDR) (B) ⟷ Resistor (10kΩ) (PIN1)
- Resistor (10kΩ) (PIN2) ⟷ Arduino Uno (GND2)
- Arduino Uno (D2) ⟷ Push Button (PIN_A1)
- Push Button (PIN_B1) ⟷ Arduino Uno (GND2)
- Arduino Uno (VCC5) ⟷ Ultrasonic (HC-SR04) (VCC)
- Arduino Uno (D9) ⟷ Ultrasonic (HC-SR04) (TRIG)
- Ultrasonic (HC-SR04) (ECHO) ⟷ Arduino Uno (D10)
- Ultrasonic (HC-SR04) (GND) ⟷ Arduino Uno (GND2)
- Arduino Uno (D8) ⟷ بازر زنگی (POS)
- بازر زنگی (NEG) ⟷ Arduino Uno (GND2)
- Arduino Uno (D13) ⟷ Resistor (220Ω) (PIN1)
- Resistor (220Ω) (PIN2) ⟷ LED زرد (ANODE)
- LED زرد (CATHODE) ⟷ Arduino Uno (GND2)
- Arduino Uno (D12) ⟷ Resistor (220Ω) (PIN1)
- Resistor (220Ω) (PIN2) ⟷ LED (Red) (ANODE)
- LED (Red) (CATHODE) ⟷ Arduino Uno (GND2)
- Arduino Uno (D11) ⟷ Resistor (220Ω) (PIN1)
- Resistor (220Ω) (PIN2) ⟷ LED (Green) (ANODE)
- 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();
}
ماموریتهای مشابه
📚 برای یاد گرفتن پایهها سری به دورهی آموزش آردوینو بزن · 🎯 همهی ماموریتها