цифровая электроника
вычислительная техника
встраиваемые системы

 

Система доступа по паролю на основе Arduino

Автор: Mike(admin) от 15-09-2020, 23:55

Охранные системы и системы ограничения доступа зачастую содержат модули ввода пароля, которые позволяют пользователю ввести пароль, и если он верен, то ему обеспечивается доступ в защищенную область.


Система доступа по паролю на основе Arduino

Такую систему можно сделать самостоятельно, например, для оборудования домашней автоматизации. В этом проекте мы создадим систему доступа по паролю на основе Arduino с клавиатурой и ЖК-дисплеем.


Данная система работает по следующему принципу:


  1. Если пользователь пытается ввести и ввести меньше требуемых 8 цифр, программа вернет неверный ответ и попросит вас попытаться ввести пароль еще раз.
  2. Если пользователь пытается ввести и ввести больше требуемых 8 цифр, программа ничего не сделает и вместо этого будет ждать, пока пользователь нажмет кнопку CLEAR или ENTER.
  3. Если пользователь хочет очистить то, что он ввел, не проходя через процесс ввода неправильного пароля, чтобы начать с самого начала, он может легко нажать кнопку CLEAR, чтобы быстро начать заново.
  4. После ввода пароля программа либо примет пароль и предоставит доступ, либо отклонит пароль и запретит доступ.

Схема подключения представлена на следующем рисунке.


Система доступа по паролю на основе Arduino

Программа использует три библиотеки: Keypad, Wire и LiquidCrystal_I2C, которые необходимо загрузить и установить перед использованием этой программы. Программа позволяет вам изменять ввод пароля по своему усмотрению и включает в себя несколько дополнительных функций-заполнителей на случай, если вы захотите расширить программу.


Настройка клавиатуры в коде была сконфигурирована для клавиатуры 4X3, у которой есть кнопка «CLEAR» вместо «*» (звездочка) и кнопка «ENTER» вместо «#» (хэштег). Вы можете использовать практически любую клавиатуру, будь то 4x3 или 4x4, но вам нужно будет изменить программно конфигурацию клавиатуры с учетом характеристик, которые может иметь ваша клавиатура.


Когда вы вводите 8-значную строку пароля, момент, когда вы нажимаете эту 8-ю цифру, программа переключается на другую функцию, которая проверяет и сравнивает строку со строкой мастер-пароля. Эта подфункция сравнения принимает только один из двух вариантов нажатия клавиши: CLEAR, чтобы очистить массив строк пароля и запустить программу с начала, или ENTER, которое вводит строку пароля в код сравнения.


Если строка пароля, вводимая пользователем, совпадает с главной строкой, программа возвращает сообщение ACCESS GRANTED (ДОСТУП РАЗРЕШЕН). Если строка пароля, вводимая пользователем, не совпадает с основной строкой, программа возвращает сообщение ACCESS DENIED (ДОСТУП ОТКЛОНЕН). В любой момент вы можете нажать кнопку CLEAR, чтобы запустить функцию, которая очищает все данные массива и запускается заново.


В случае, если пользователь попытается ввести строку пароля, содержащую менее 8 цифр, программа выдаст сообщение INVALID ENTRY (НЕВЕРНЫЙ ВВОД) и запустит программу заново.


Код программы системы ввода пароля на основе Arduino.



#include <Wire.h>   
#include <LiquidCrystal_I2C.h> 
#include <Keypad.h>    

#define Password_Length 9        
char userInput[Password_Length];       
char Master[Password_Length] = "12345678";  
char customKey;          
byte pressCount = 0;  

const byte ROWS = 4;
const byte COLS = 3; 

char twelveKeys[ROWS][COLS] =
{ 
    {'1', '2', '3'}, 
    {'4', '5', '6'},
    {'7', '8', '9'},
    {'C', '0', 'E'} 
};

byte rowPins[ROWS] = {9, 8, 7, 6}; 
byte colPins[COLS] = {5, 4, 3};     

Keypad customKeypad = Keypad(makeKeymap(twelveKeys), rowPins, colPins, ROWS, COLS); 
LiquidCrystal_I2C lcd(0x27, 16, 2);  

void setup() {

  lcd.backlight(); 
  lcd.init();
  lcd.clear();

}

void loop() {

  lcd.setCursor(0,0);
  lcd.print(" Type Password:");       
  customKey = customKeypad.waitForKey();   

  if (customKey != NO_KEY && customKey != 'C' && customKey != 'E')   
  {
  userInput[pressCount] = customKey;     
  lcd.setCursor(pressCount + 4, 1);           
  lcd.print("*");   
  pressCount++;    
  }

  else if (customKey == 'C')  
  {                          
  lcd.clear();
  clearData(); 
  }

  else if (customKey == 'E')  
  {                    
  lcd.clear();  
  lcd.setCursor(0,0);
  lcd.print("INVALID ENTRY");
  delay(800);
  clearData();
  }

   
  if (pressCount == 8)    
  {               
  lcd.clear();
  waitHere();                  
  }

}


void waitHere(){

  lcd.setCursor(0,0);
  lcd.print(" Type Password:"); 
  lcd.setCursor(0,1);
  lcd.print("    ********");     
                                                 
  customKey = customKeypad.waitForKey(); 
  
  if (customKey != NO_KEY && customKey == 'E') 
  {
  lcd.clear();
  lcd.setCursor(0,0);
    if (!strcmp(userInput, Master))    
    {                 
    lcd.setCursor(0,0);
    lcd.print("ACCESS GRANTED.");
    lcd.setCursor(0,1);
    lcd.print("WELCOME!!");
    delay(5000);
    clearData(); 
    }
    else if (strcmp(userInput, Master))      
    {                    
    lcd.setCursor(0,0);
    lcd.print("ACCESS DENIED.");
    delay(2000);
    clearData(); 
    }
  }

  if (customKey != NO_KEY && customKey == 'C') 
  {
  lcd.clear();
  clearData(); 
  }
  
  if (customKey != NO_KEY && customKey == '0')  
  {
  waitHere();
  }

  if (customKey != NO_KEY && customKey == '1')  
  {
  waitHere();
  }

  if (customKey != NO_KEY && customKey == '2')  
  {
  waitHere();
  }

  if (customKey != NO_KEY && customKey == '3')  /
  {
  waitHere();
  }

  if (customKey != NO_KEY && customKey == '4')  
  {
  waitHere();
  }

  if (customKey != NO_KEY && customKey == '5') 
  {
  waitHere();
  }

  if (customKey != NO_KEY && customKey == '6')  
  {
  waitHere();
  }

  if (customKey != NO_KEY && customKey == '7')  
  {
  waitHere();
  }

  if (customKey != NO_KEY && customKey == '8')  
  {
  waitHere();
  }

  if (customKey != NO_KEY && customKey == '9')  
  {
  waitHere();
  }
  
}

//void accessGranted(){
//  
//}
//
//void accessDenied(){
//  
//}

void clearData() {  
  while (pressCount != 0) 
  {
  userInput[pressCount--] = 0;    
  }
  setup();   

Видео работы данной системы:





© digitrode.ru


Теги: Arduino




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий