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

Такую систему можно сделать самостоятельно, например, для оборудования домашней автоматизации. В этом проекте мы создадим систему доступа по паролю на основе Arduino с клавиатурой и ЖК-дисплеем.
Данная система работает по следующему принципу:
- Если пользователь пытается ввести и ввести меньше требуемых 8 цифр, программа вернет неверный ответ и попросит вас попытаться ввести пароль еще раз.
- Если пользователь пытается ввести и ввести больше требуемых 8 цифр, программа ничего не сделает и вместо этого будет ждать, пока пользователь нажмет кнопку CLEAR или ENTER.
- Если пользователь хочет очистить то, что он ввел, не проходя через процесс ввода неправильного пароля, чтобы начать с самого начала, он может легко нажать кнопку CLEAR, чтобы быстро начать заново.
- После ввода пароля программа либо примет пароль и предоставит доступ, либо отклонит пароль и запретит доступ.
Схема подключения представлена на следующем рисунке.

Программа использует три библиотеки: 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