Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Arduino-сигнализация с паролем: пошаговый урок

Научимся делать Arduino-сигнализацию. Видео или текст ниже.

Обзор

Активация через 10 сек после кнопки A. Ультразвуковой датчик (HC-SR04) следит за дистанцией. При обнаружении объекта — пищит зуммер. Остановка — 4-значный пароль (по умолчанию 1234). Смена пароля: кнопка B → ввод текущего → новый 4-значный. Неправильный пароль — «Wrong! Try Again».

Arduino-сигнализация с паролем: пошаговый урок

Компоненты

Arduino, HC-SR04, LCD 16×2, зуммер (PWM пин), 4×4 клавиатура, макетка, перемычки.

Arduino-сигнализация с паролем: пошаговый урок

Схема подключения


Arduino-сигнализация с паролем: пошаговый урок

Зуммер — PWM пин. Клавиатура 4×4: 4 строки, 4 столбца. Кнопка = замыкание строки и столбца. Сканирование: строка LOW, столбцы HIGH → нажатие тянет столбец в LOW. Ультразвук и LCD — отдельные уроки.

Arduino-сигнализация с паролем: пошаговый урок

Исходный код


Библиотеки: LiquidCrystal (стандарт), Keypad (установить отдельно). Пины: buzzer(8), trig(9), echo(10). Клавиатура: строки 14-17, столбцы 18-21. LCD: пины 1,2,4,5,6,7. Переменные: пароль "1234", флаги состояния.

#include <LiquidCrystal.h> #include <Keypad.h>
#define buzzer 8 #define trigPin 9 #define echoPin 10
long duration; int distance, initialDistance, currentDistance, i;
int screenOffMsg =0; String password="1234"; String tempPassword;
boolean activated=false, isActivated, activateAlarm=false, alarmActivated=false;
boolean enteredPassword, passChangeMode=false, passChanged=false;
const byte ROWS=4, COLS=4;
char keyMap[ROWS][COLS] = {{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'*','0','#','D'}};
byte rowPins[ROWS] = {14,15,16,17}; byte colPins[COLS] = {18,19,20,21};
Keypad myKeypad = Keypad(makeKeymap(keyMap), rowPins, colPins, ROWS, COLS);
LiquidCrystal lcd(1,2,4,5,6,7);
void setup(){ lcd.begin(16,2); pinMode(buzzer,OUTPUT); pinMode(trigPin,OUTPUT); pinMode(echoPin,INPUT); }

Loop(): если не активировано — домашний экран «A - Activate / B - Change Pass». Нажатие A → звук, activateAlarm=true. Тогда countdown 9 сек (пик каждую сек), «Alarm Activated!», замер initialDistance. activateAlarm=false, alarmActivated=true.

if(!alarmActivated){
  if(screenOffMsg==0){ lcd.clear(); lcd.print("A - Activate"); lcd.setCursor(0,1); lcd.print("B - Change Pass"); screenOffMsg=1; }
  keypressed = myKeypad.getKey();
  if(keypressed=='A'){ tone(buzzer,1000,200); activateAlarm=true; }
}
if(activateAlarm){
  lcd.clear(); lcd.print("Alarm will be"); lcd.setCursor(0,1); lcd.print("activated in");
  int countdown=9;
  while(countdown!=0){ lcd.setCursor(13,1); lcd.print(countdown); countdown--; tone(buzzer,700,100); delay(1000); }
  lcd.clear(); lcd.print("Alarm Activated!"); initialDistance=getDistance(); activateAlarm=false; alarmActivated=true;
}

Если alarmActivated: текущая дистанция +10см < initialDistance → tone(1000), enterPassword().

if(alarmActivated){
  currentDistance = getDistance() + 10;
  if(currentDistance < initialDistance){ tone(buzzer,1000); lcd.clear(); enterPassword(); }
}

enterPassword(): «*** ALARM *** / Pass>», ввод цифр в tempPassword (звёздочки на LCD). >4 цифр или # — сброс. * — проверка: если tempPassword==password → деактивация, noTone, возврат в меню. Иначе «Wrong! Try Again» 2 сек.

void enterPassword(){
  int k=5; tempPassword=""; activated=true;
  lcd.clear(); lcd.print(" *** ALARM *** "); lcd.setCursor(0,1); lcd.print("Pass>");
  while(activated){
    keypressed = myKeypad.getKey();
    if(keypressed!=NO_KEY){
      if(keypressed>='0' && keypressed<='9'){ tempPassword+=keypressed; lcd.setCursor(k,1); lcd.print("*"); k++; }
    }
    if(k>9 || keypressed=='#'){ tempPassword=""; k=5; lcd.clear(); lcd.print(" *** ALARM *** "); lcd.setCursor(0,1); lcd.print("Pass>"); }
    if(keypressed=='*'){
      if(tempPassword==password){ activated=false; alarmActivated=false; noTone(buzzer); screenOffMsg=0; }
      else{ lcd.setCursor(0,1); lcd.print("Wrong! Try Again"); delay(2000); lcd.clear(); lcd.print(" *** ALARM *** "); lcd.setCursor(0,1); lcd.print("Pass>"); }
    }
  }
}

Смена пароля (B): «Current Password >», ввод, * → проверка. Если верно → «Set New Password >», ввод нового, * → password=tempPassword, выход.

else if(keypressed=='B'){
  lcd.clear(); int i=1; tone(buzzer,2000,100); tempPassword="";
  lcd.print("Current Password"); lcd.setCursor(0,1); lcd.print(">"); passChangeMode=true; passChanged=true;
  while(passChanged){
    keypressed=myKeypad.getKey();
    if(keypressed!=NO_KEY){
      if(keypressed>='0' && keypressed<='9'){ tempPassword+=keypressed; lcd.setCursor(i,1); lcd.print("*"); i++; tone(buzzer,2000,100); }
    }
    if(i>5 || keypressed=='#'){ tempPassword=""; i=1; lcd.clear(); lcd.print("Current Password"); lcd.setCursor(0,1); lcd.print(">"); }
    if(keypressed=='*'){
      i=1; tone(buzzer,2000,100);
      if(password==tempPassword){
        tempPassword=""; lcd.clear(); lcd.print("Set New Password"); lcd.setCursor(0,1); lcd.print(">");
        while(passChangeMode){
          keypressed=myKeypad.getKey();
          if(keypressed!=NO_KEY){
            if(keypressed>='0' && keypressed<='9'){ tempPassword+=keypressed; lcd.setCursor(i,1); lcd.print("*"); i++; tone(buzzer,2000,100); }
          }
          if(i>5 || keypressed=='#'){ tempPassword=""; i=1; tone(buzzer,2000,100); lcd.clear(); lcd.print("Set New Password"); lcd.setCursor(0,1); lcd.print(">"); }
          if(keypressed=='*'){ i=1; tone(buzzer,2000,100); password=tempPassword; passChangeMode=false; passChanged=false; screenOffMsg=0; }
        }
      }
    }
  }
}

Функция getDistance() — стандартный HC-SR04 (триггер 10 мкс, pulseIn, формула duration*0.034/2). Полный код в конце.

long getDistance(){
  digitalWrite(trigPin,LOW); delayMicroseconds(2);
  digitalWrite(trigPin,HIGH); delayMicroseconds(10); digitalWrite(trigPin,LOW);
  duration=pulseIn(echoPin,HIGH); distance=duration*0.034/2; return distance;
}

Финальные штрихи


Корпус — пластиковый электроящик, все компоненты внутри.

Arduino-сигнализация с паролем: пошаговый урок

Проект готов. Вопросы в комментариях!

Производственный процесс

  1. Надежная система учета рабочего времени на Arduino с RFID и Python
  2. Создание анимации и игр на LCD 16×2 с Arduino UNO
  3. SERENA: Пользовательская система сигнализации на Arduino Mega 2560 с TFT Touchscreen
  4. Оценка безопасности сигнализации с Arduino и RF-модулями 433 МГц
  5. Детектор аудиочастот на Arduino: измеряем пик громкости с высокочувствительным модулем
  6. Умный дом и система безопасности на базе 1Sheeld
  7. Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом
  8. Сборка вольтметра на Arduino с дисплеем Nokia 5110 — Пошаговое руководство
  9. Сборка надежного таймера обратного отсчета на Arduino с 7-сегментным дисплеем SparkFun
  10. Умная вентиляция подвала на Arduino: контроль влажности