Система блокировки дверей без ключа Arduino с клавиатурой и ЖК-дисплеем
Компоненты и расходные материалы
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
Приложения и онлайн-сервисы
![]() |
|
Об этом проекте
Система замков дверей без ключа Arduino с клавиатурой и ЖК-дисплеем0
0
Али Хамза
В этом проекте мы собираемся создать систему дверных замков без ключа, которая использует клавиатуру 4X4 для ввода ключей и замок постоянного тока для открытия или закрытия двери. Для отображения будет использоваться ЖК-дисплей 16x2.
Обязательные компоненты
Компоненты, необходимые для этого проекта, следующие
- Ардуино
- Клавиатура 4X4
- ЖК-дисплей
- Блокировка постоянного тока
- Реле
- Батарея 9 В
- потенциометр 10 кОм
- резистор 220 Ом.
Как это работает?
Каждый раз, когда нажимаются клавиши, они сопоставляются с уже сохраненными клавишами. Если нажатые клавиши соответствуют начальному паролю, хранящемуся в EEPROM, который равен «1234», то замок откроется. Если пароль не совпадает, на ЖК-дисплее будет выведено сообщение «Доступ запрещен».
Если будет нажата клавиша «#», вам будет предложено ввести текущий пароль, и, если он совпадает, вам будет предложено ввести новый пароль, и пароль будет изменен.
Принципиальная схема
Сначала подключите клавиатуру 4X4 к Arduino; соедините первые шесть контактов на клавиатуре 4X4 с контактами A0 и A5 на Arduino. Затем подключите два последних контакта модуля клавиатуры 4X4 к цифровым контактам 3 и 2 на Arduino.
После этого подключите ЖК-дисплей к Arduino. Подключения для подключения ЖК-дисплея к Arduino следующие
- Подключите контакт 1 на ЖК-дисплее, который является контактом VSS, к GND на Arduino.
- Подключите контакт 2, который является контактом VDD, к контакту 5V на Arduino.
- Подключите контакт 3, который является V0, к середине потенциометра 10k, а два других контакта потенциометра подключите к 5V и GND на Arduino. Этот штифт предназначен для настройки контрастности ЖК-дисплея.
- Подключите контакт 4, который является контактом RS, к контакту 7 на Arduino.
- Подключите контакт 5, который является контактом R / W, к контакту GND на Arduino.
- Подключите контакт 6, который является контактом включения, к контакту 6 на Arduino.
- Подключите контакты 11, 12, 13 и 14, которые являются контактами данных, к контактам 5, 4, 3 и 2 на Arduino.
- Подключите контакт 15, который является контактом подсветки ЖК-дисплея, к 5 В на Arduino через резистор 220 Ом.
- Подключите контакт 16 Arduino, который является отрицательным контактом подсветки, к GND на Arduino.
Наконец, мы подключим блокировку постоянного тока к Arduino. Замок работает от напряжения от 7 до 12 В, поэтому мы не можем напрямую подключить его к Arduino. Чтобы подключить его к Arduino, нам потребуются реле и аккумулятор.
Подключите сигнальный контакт реле к контакту 10 на Arduino, а VCC и GND замка к 5V и GND на Arduino. Затем на другом конце реле подключите отрицательный полюс батареи к общему проводу реле, а нормально разомкнутый контакт реле - к одной стороне замка. Затем подключите другую сторону замка к положительной клемме аккумулятора.

Код блокировки клавиатуры Arduino
Первоначальный пароль - 1234.
#include #include #include LiquidCrystal liquid_crystal_display (9,8,7,6,5,4,); char пароль [4]; char initial_password [4], new_password [4]; int i =0; int relay_pin =10; char key_pressed =0; const byte rows =4; константные байтовые столбцы =4; char hexaKeys [строки] [столбцы] ={{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7' , '8', '9', 'C'}, {'*', '0', '#', 'D'}}; байтовые контакты row_pins [строки] ={A0, A1, A2, A3}; байты column_pins [columns] ={A4, A5,3,2}; Keypad keypad_key =Клавиатура (makeKeymap (hexaKeys), row_pins, column_pins, rows, columns); void setup () {pinMode (relay_pin, OUTPUT); liquid_crystal_display.begin (16,2); liquid_crystal_display.print ("DIYhacking.com"); liquid_crystal_display.setCursor (0,1); liquid_crystal_display.print («Электронный замок»); задержка (2000); liquid_crystal_display.clear (); liquid_crystal_display.print («Введите пароль»); liquid_crystal_display.setCursor (0,1); initialpassword ();} недействительный цикл () {digitalWrite (relay_pin, HIGH); key_pressed =keypad_key.getKey (); если (key_pressed =='#') change (); если (key_pressed) {пароль [i ++] =key_pressed; liquid_crystal_display.print (нажата клавиша); } Если (я ==4) {задержка (200); для (int j =0; j <4; j ++) начальный_пароль [j] =EEPROM.read (j); если (! (strncmp (пароль, начальный_пароль, 4))) {liquid_crystal_display.clear (); liquid_crystal_display.print («Пропуск принят»); digitalWrite (relay_pin, LOW); задержка (2000); liquid_crystal_display.setCursor (0,1); liquid_crystal_display.print ("Pres # изменить"); задержка (2000); liquid_crystal_display.clear (); liquid_crystal_display.print («Введите пароль:»); liquid_crystal_display.setCursor (0,1); я =0; } Else {digitalWrite (реле_контакт, ВЫСОКИЙ); liquid_crystal_display.clear (); liquid_crystal_display.print («Неверный пароль»); liquid_crystal_display.setCursor (0,1); liquid_crystal_display.print ("Pres # to Change"); задержка (2000); liquid_crystal_display.clear (); liquid_crystal_display.print («Введите пароль»); liquid_crystal_display.setCursor (0,1); я =0; }}} Void change () {int j =0; liquid_crystal_display.clear (); liquid_crystal_display.print («Текущий пароль»); liquid_crystal_display.setCursor (0,1); в то время как (j <4) {char key =keypad_key.getKey (); если (ключ) {новый_пароль [j ++] =ключ; liquid_crystal_display.print (ключ); } Ключ =0; } Задержка (500); если ((strncmp (новый_пароль, начальный_пароль, 4))) {liquid_crystal_display.clear (); liquid_crystal_display.print («Неверный пароль»); liquid_crystal_display.setCursor (0,1); liquid_crystal_display.print («Попробовать еще раз»); задержка (1000); } Иначе {j =0; liquid_crystal_display.clear (); liquid_crystal_display.print («Новый пароль:»); liquid_crystal_display.setCursor (0,1); в то время как (j <4) {char key =keypad_key.getKey (); если (ключ) {начальный_пароль [j] =ключ; liquid_crystal_display.print (ключ); EEPROM.write (j, ключ); j ++; }} Liquid_crystal_display.print («Пропуск изменен»); задержка (1000); } Liquid_crystal_display.clear (); liquid_crystal_display.print («Введите пароль»); liquid_crystal_display.setCursor (0,1); key_pressed =0;} void initialpassword () {для (int j =0; j <4; j ++) EEPROM.write (j, j + 49); for (int j =0; j <4; j ++) initial_password [j] =EEPROM.read (j);}
Пояснение к коду
Прежде всего, мы включим библиотеки для клавиатуры 4X4, LCD и библиотеку для хранения пароля. Библиотека EEPROM используется для хранения пароля. По умолчанию в нем хранится пароль «1234».
#include #include #include
В функции цикла нажатая клавиша будет сохранена в ‘ key_pressed ’, И она будет сравниваться с другими ключами. Если нажата клавиша «#», то будет вызвана функция изменения, которая запросит новый пароль.
key_pressed =keypad_key.getKey (); if (key_pressed =='#') change ();
Нажатые клавиши сохраняются в « пароле . ’, И они отображаются на ЖК-дисплее при нажатии клавиш. Затем эти ключи будут сопоставлены с исходным паролем, хранящимся в EEPROM. Если нажатые клавиши совпадают с исходным паролем, то замок откроется, и на ЖК-дисплее будет напечатано «Пропуск принят». Если пароль не совпадает, он попросит ввести пароль еще раз.
if (key_pressed) {пароль [i ++] =key_pressed; liquid_crystal_display.print (нажата клавиша); } если (я ==4) {задержка (200); для (int j =0; j <4; j ++) начальный_пароль [j] =EEPROM.read (j); если (! (strncmp (пароль, начальный_пароль, 4))) {liquid_crystal_display.clear (); liquid_crystal_display.print («Пропуск принят»); digitalWrite (relay_pin, LOW); задержка (2000);
Если нажата клавиша «#», будет вызвана функция « change () . 'Функция. В функции изменения он попросит вас ввести текущий пароль. Если текущий пароль правильный, вам будет предложено ввести новый пароль. После ввода нового пароля пароль будет изменен.
void change () {int j =0; liquid_crystal_display.clear (); liquid_crystal_display.print («Текущий пароль»); liquid_crystal_display.setCursor (0,1); в то время как (j <4) {char key =keypad_key.getKey (); если (ключ) {новый_пароль [j ++] =ключ; liquid_crystal_display.print (ключ); } Ключ =0; } Задержка (500);
Теги:клавиатура 4x4, Arduino, DC Lock, Keylock, Keypad, lcd, Lock
Рекомендуемые сообщения
Будильник Arduino с использованием часов реального времени и ЖК-экрана

Как собрать самобалансирующегося робота на Arduino

Используйте Arduino и соленоид, чтобы заставить тостер танцевать

Сделайте самодельную систему автоматического полива с помощью Arduino

Код
- Фрагмент кода №1
- Фрагмент кода №2
- Фрагмент кода №3
- Фрагмент кода 4
- Фрагмент кода № 5
Фрагмент кода №1 Обычный текст
#include#include #include LiquidCrystal liquid_crystal_display (9,8,7,6,5,4,); char пароль [4]; char initial_password [ 4], новый_пароль [4]; int i =0; int relay_pin =10; char key_pressed =0; const byte rows =4; константные байтовые столбцы =4; char hexaKeys [строки] [столбцы] ={{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7' , '8', '9', 'C'}, {'*', '0', '#', 'D'}}; байтовые контакты row_pins [строки] ={A0, A1, A2, A3}; байты column_pins [columns] ={A4, A5,3,2}; Keypad keypad_key =Клавиатура (makeKeymap (hexaKeys), row_pins, column_pins, rows, columns); void setup () {pinMode (relay_pin, OUTPUT); liquid_crystal_display.begin (16,2); liquid_crystal_display.print ("DIYhacking.com"); liquid_crystal_display.setCursor (0,1); liquid_crystal_display.print («Электронный замок»); задержка (2000); liquid_crystal_display.clear (); liquid_crystal_display.print («Введите пароль»); liquid_crystal_display.setCursor (0,1); initialpassword ();} недействительный цикл () {digitalWrite (relay_pin, HIGH); key_pressed =keypad_key.getKey (); если (key_pressed =='#') change (); если (key_pressed) {пароль [i ++] =key_pressed; liquid_crystal_display.print (нажата клавиша); } Если (я ==4) {задержка (200); для (int j =0; j <4; j ++) начальный_пароль [j] =EEPROM.read (j); если (! (strncmp (пароль, начальный_пароль, 4))) {liquid_crystal_display.clear (); liquid_crystal_display.print («Пропуск принят»); digitalWrite (relay_pin, LOW); задержка (2000); liquid_crystal_display.setCursor (0,1); liquid_crystal_display.print ("Pres # изменить"); задержка (2000); liquid_crystal_display.clear (); liquid_crystal_display.print («Введите пароль:»); liquid_crystal_display.setCursor (0,1); я =0; } Else {digitalWrite (реле_контакт, ВЫСОКИЙ); liquid_crystal_display.clear (); liquid_crystal_display.print («Неверный пароль»); liquid_crystal_display.setCursor (0,1); liquid_crystal_display.print ("Pres # to Change"); задержка (2000); liquid_crystal_display.clear (); liquid_crystal_display.print («Введите пароль»); liquid_crystal_display.setCursor (0,1); я =0; }}} Void change () {int j =0; liquid_crystal_display.clear (); liquid_crystal_display.print («Текущий пароль»); liquid_crystal_display.setCursor (0,1); в то время как (j <4) {char key =keypad_key.getKey (); если (ключ) {новый_пароль [j ++] =ключ; liquid_crystal_display.print (ключ); } Ключ =0; } Задержка (500); если ((strncmp (новый_пароль, начальный_пароль, 4))) {liquid_crystal_display.clear (); liquid_crystal_display.print («Неверный пароль»); liquid_crystal_display.setCursor (0,1); liquid_crystal_display.print («Попробовать еще раз»); задержка (1000); } Иначе {j =0; liquid_crystal_display.clear (); liquid_crystal_display.print («Новый пароль:»); liquid_crystal_display.setCursor (0,1); в то время как (j <4) {char key =keypad_key.getKey (); если (ключ) {начальный_пароль [j] =ключ; liquid_crystal_display.print (ключ); EEPROM.write (j, ключ); j ++; }} Liquid_crystal_display.print («Пропуск изменен»); задержка (1000); } Liquid_crystal_display.clear (); liquid_crystal_display.print («Введите пароль»); liquid_crystal_display.setCursor (0,1); key_pressed =0;} void initialpassword () {для (int j =0; j <4; j ++) EEPROM.write (j, j + 49); for (int j =0; j <4; j ++) initial_password [j] =EEPROM.read (j);}
Фрагмент кода 2 Обычный текст
#include#include #include
Фрагмент кода № 3 Обычный текст
key_pressed =keypad_key.getKey (); if (key_pressed =='#') change ();
Фрагмент кода №4 Обычный текст
if (key_pressed) {пароль [i ++] =key_pressed; liquid_crystal_display.print (нажата клавиша); } если (я ==4) {задержка (200); для (int j =0; j <4; j ++) начальный_пароль [j] =EEPROM.read (j); если (! (strncmp (пароль, начальный_пароль, 4))) {liquid_crystal_display.clear (); liquid_crystal_display.print («Пропуск принят»); digitalWrite (relay_pin, LOW); задержка (2000);
Фрагмент кода № 5 Обычный текст
void change () {int j =0; liquid_crystal_display.clear (); liquid_crystal_display.print («Текущий пароль»); liquid_crystal_display.setCursor (0,1); в то время как (j <4) {char key =keypad_key.getKey (); если (ключ) {новый_пароль [j ++] =ключ; liquid_crystal_display.print (ключ); } Ключ =0; } Delay (500);
Схема
Используйте Arduino для управления дверным замком с соленоидом, который можно открыть с помощью правильной комбинации клавиш.
Производственный процесс
- Игра с гироскопом Arduino с MPU-6050
- Система посещаемости с использованием Arduino и RFID с Python
- Датчик DHT11 со светодиодами и пьезо-динамиком
- ЖК-анимация и игры
- Unopad - MIDI-контроллер Arduino с Ableton
- Регистратор данных температуры и влажности
- Простой датчик препятствий с Arduino
- Светодиодный куб 4x4x4 с Arduino Uno и 1sheeld
- Счетчик RPM на основе Arduino с новым и более быстрым алгоритмом
- Система посещаемости на основе Arduino и Google Spreadsheet