🚨 سیستم امنیتی کامل
کیپد + PIR + بوق + LCD، با رمز ذخیرهشده در EEPROM و سه حالت.
سطح: چالشی ⭐⭐⭐ · مود: آردوینو (سهبعدی + کد)
قطعات لازم
کد کامل پروژه
// سیستم امنیتی: A = مسلح، رمز + # = خاموش، C = رمز جدید (در EEPROM)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <EEPROM.h>
const byte ROWS = 4, COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},{'4','5','6','B'},
{'7','8','9','C'},{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad pad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x27, 16, 2);
char DIGITS[10] = {'0','1','2','3','4','5','6','7','8','9'};
const int PIR = 10, BUZZ = 12, LED = 13;
const int DISARMED = 0, ARMED = 1, ALARM = 2;
int state = DISARMED;
int pin[4] = {1, 2, 3, 4};
int typed[4];
int count = 0;
bool changing = false;
void show() {
lcd.clear();
if (state == DISARMED) lcd.print("Khamoush A=on");
if (state == ARMED) lcd.print("Mosalah");
if (state == ALARM) lcd.print("!!! DOZD !!!");
lcd.setCursor(0, 1);
lcd.print(changing ? "Ramz jadid:" : "Ramz:");
for (int i = 0; i < count; i++) lcd.print("*");
}
void setup() {
pinMode(PIR, INPUT);
pinMode(LED, OUTPUT);
lcd.init(); lcd.backlight();
if (EEPROM.read(10) == 42) { // a PIN was saved before
for (int i = 0; i < 4; i++) pin[i] = EEPROM.read(i);
}
show();
}
void loop() {
if (state == ARMED && digitalRead(PIR) == HIGH) { state = ALARM; show(); }
bool blink = millis() % 500 < 250;
if (state == ALARM) { tone(BUZZ, blink ? 2000 : 1500); digitalWrite(LED, blink); }
else { noTone(BUZZ); digitalWrite(LED, state == ARMED); }
char k = pad.getKey();
if (!k) return;
for (int d = 0; d < 10; d++) {
if (k == DIGITS[d] && count < 4) { typed[count] = d; count++; }
}
if (k == 'A' && state == DISARMED) state = ARMED;
if (k == 'C' && state == DISARMED) { changing = true; count = 0; }
if (k == '*') { count = 0; changing = false; }
if (k == '#' && count == 4) {
bool same = true;
for (int i = 0; i < 4; i++) if (typed[i] != pin[i]) same = false;
if (changing) {
for (int i = 0; i < 4; i++) { pin[i] = typed[i]; EEPROM.update(i, typed[i]); }
EEPROM.update(10, 42);
changing = false;
} else if (same) state = DISARMED;
count = 0;
}
show();
}
چطور اجرایش کنم؟
- شبیهساز تینکرکد فارسی را باز کن و «مود آردوینو» را انتخاب کن.
- از پنل «نمونهها»، «سیستم امنیتی کامل» را بارگذاری کن — مدار و کد با هم میآیند.
- دکمهی اجرا ▶ را بزن و خروجی Serial و رفتار قطعات را تماشا کن.
- حالا کد را تغییر بده — عددها، پینها، ترتیب — و دوباره اجرا کن!