О проекте
Этот смарт-замок является безопасным, простым и легким в управлении для блокировки вашего дома.
Замок не нуждается в ключах и устанавливается внутри дома с обратной стороны двери, а управлять им вы можете из-за двери с помощью Bluetooth модуля Android.
Поскольку замок находится внутри двери, у воров нет возможности его взломать. Для открытия и закрытия требуется приложение Android, а как его сделать объясняется в последней части урока.
Пароль отправляется на замок с помощью этого приложения для Android и если пароль будет соответствовать вашему паролю с предустановленной блокировкой, тогда она будет снята, а на ваш телефон будет передано сообщение об открытии замка.
Шаг 4: Соединяем все детали
Связь с платой Arduino Uno очень проста. Сначала подключим питание как считывателя, так и дисплея.
Будьте осторожны, считыватель RFID должен быть подключен к выходу 3,3 В от Arduino Uno или он будет испорчен.
Так как дисплей также может работать на 3,3 В, мы подключаем VCC от обоих модулей к положительной шине макета. Затем эта шина подключается к выходу 3,3 В от Arduino Uno. После чего соединяем обе земли (GND) с шиной заземления макета. Затем мы соединяем GND-шину макета с Arduino GND.
OLED-дисплей → Arduino
VCC → 3.3V
GND → GND
SCL → Аналоговый Pin 5
SDA → Аналоговый Pin 4
RFID-ридер → Arduino
RST → Цифровой Pin 9
IRQ → Не соединен
MISO → Цифровой Pin 12
MOSI → Цифровой Pin 11
SCK → Цифровой Pin 13
SDA → Цифровой Pin 10
Модуль RFID-считывателя использует интерфейс SPI для связи с Arduino. Поэтому мы собираемся использовать аппаратные штыри SPI от Arduino UNO.
Вывод RST поступает на цифровой контакт 9. Контакт IRQ остается несвязным. Контакт MISO подключается к цифровому выходу 12. Штырь MOSI идет на цифровой контакт 11. Контакт SCK переходит на цифровой контакт 13, и, наконец, вывод SDA идет на цифровой вывод 10. Вот и все.
Считыватель RFID подключен. Теперь нам нужно подключить OLED-дисплей к Arduino, используя интерфейс I2C. Таким образом, вывод SCL на дисплее переходит к аналоговому выводу Pin 5 и SDA на дисплее к аналоговому Pin 4. Если теперь мы включим проект и разместим RFID-карту рядом с ридером, мы увидим, что проект работает нормально.
Принцип работы дубликатора на Ардуино
Каждый ключ имеет внутреннюю связь с домофонной дверью – этот номер и служит ключевым идентификатором. Этот номер интерком-ключа решает, нужный ли вы приложили ключ. Поэтому принцип работы дубликатора домофонных ключей на Arduino довольно прост: сначала нужно проверить «разрешенный» ключ, а затем присвоить тот же номер другому ключевому клону.
Проверяя номер из своей базы данных разрешенных скоростей передачи данных, он откроет дверь. Ключи для внутренней связи, которые мы будем подключать к Arduino дубликатору (иногда называемому iButton или Touch Memory), считываются и записываются в 1-проводной интерфейс. Поэтому схема подключения очень проста.
Шаг 4. Программа Arduino для управления замком защищенным паролем через Bluetooth
Код для управления умным замком через Bluetooth довольно прост. Я разработал приложение для Android, так что оно отправляет команду с паролем.
На самом деле я установил две команды: одна «OPEN =» (Открыть), а другая «CLOSE =» (Закрыть), пароль может содержать любую цифру, букву или символ или комбинацию из них по вашему усмотрению.
В приложении я использовал две кнопки — для открытия двери и для закрытия двери. Когда пароль вводится в нужное поле и нажимается кнопка «открыть» приложение соединяет команду «OPEN =» с паролем и отправляет его в Arduino.
Мы добавили знак ‘=’ с командой для того, чтобы разделить команду и пароль, используя ‘=’. После получения строки из телефонной программы Arduino отделяет команду и пароль от строки приема и сохраняет их в две отдельные переменные.
Затем сначала проверяет пароль, и если пароль совпадает с сохраненным паролем открывается дверь командой «ОТКРЫТЬ» и закрывается дверь командой «ЗАКРЫТЬ». «=» помогает отделить команду и пароль. Ниже приведен полный скетч (эскиз) для Ардуино.
Если Arduino получил неверный пароль, он отправит на телефон Android сообщение о том, что пароль неверен. Фактически Ардуино отправил строку «WRONG». Затем программа на Android показывает неправильное сообщение с паролем.
Дальнейшее развитие проекта «Умный замок»
В нашем проекте релизовано дистанционное управление дверным замком с помощью отпечатка пальца.
Можете смело экспериментировать, модифицировать скетч и обвязку. Например, можно заменить дверной электронный замок на реле для управления питанием вашего 3D принтера, манипулятора или квадрокоптера…
Можно развивать ваш «умный дом». Например, удаленно активировать систему полива на Arduino или включать свет в комнате… При этом не забывайте, что вы одновременно можете активировать практически неограниченное количество устройств, используя Adafruit IO.
Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!
Шаг 7. Разработка приложения для Android
Я покажу вам, как разработать приложение Bluetooth на Aandroid с помощью приложения MIT App Inventor. Я использую App Inventor, потому что он не требует каких-либо навыков программирования и установки программного обеспечения. Вам нужна только учетная запись google. Перейдите по адресу http://ai2.appinventor.mit.edu/ и войдите в систему, используя учетную запись google.
Войдите в приложение Inventor с помощью gmail и выполните следующие действия.
I | Принять условия | Картинка 1 |
II | Нажмите «take survey later», а затем «продолжить», чтобы закрыть экран заставки | Картинка 2, 3 |
III | Начните новый проект | Картинка 4 |
IV | Назовите проект «BluetoothControlDoorLock» (без пробелов) | Картинка 5 |
Теперь вы находитесь в Дизайнере, где вы делаете «пользовательский интерфейс» вашего приложения (изображение 6). В окне конструктора вы найдете внешний вид вашего приложения и укажете, какие функции он должен иметь. Вы можете выбрать для пользовательского интерфейса кнопки, изображения, ярлыки, текстовые поля и функциональные возможности, такие как Text-to-Speech, Bluetooth, датчики и GPS.
Теперь, следуйте рисунку 7 и добавьте «List Picker» в программу просмотра. Переименуйте его в «Подключение к устройству Bluetooth» (рисунок 8). Добавьте одну метку, одно текстовое поле пароля и две кнопки, показанные на рисунке 10. Измените текстовые свойства компонентов как «Введите пароль», «Открыть дверь» и «Закрыть дверь» соответственно. Конечный пользовательский интерфейс должен выглядеть так, как показано на рисунке 11. Теперь добавьте клиент Bluetooth в программу просмотра. Это невидимый компонент, и он не имеет интерфейса. См. Изображение 12.
Переключитесь на редактор блоков
Пришло время сказать вашему приложению что делать! Нажмите «Блоки» (Blocks), чтобы перейти к редактору блоков (рис. 13). Подумайте о кнопках Designer и Blocks, таких как вкладки, — вы используете их для перемещения вперед и назад между двумя областями App Inventor. Редактор блоков — это программа, в которой вы программируете поведение своего приложения. Есть встроенный блок, который обрабатывает такие вещи, как математика, логика и текст. Ниже перечислены блоки, которые идут с каждым из компонентов вашего приложения. Чтобы заставить блоки для определенного компонента отображаться в редакторе блоков, сначала нужно добавить этот компонент в свое приложение через конструктор.
Давайте создадим блоки для List Picker. List Picker — это элемент пользовательского интерфейса при нажатии на него показывается список соответствующих элементов, здесь — это сопряженное устройство Bluetooth. Мы должны добавить два блока ListPicker.BeforePicking и ListPicker.AfterPicking (изображение 14). Законченные блоки показаны на рисунках 18 и 19.
Сделайте файл .apk
Наш дизайн завершен, теперь нам нужно собрать файл apk для нашего телефона Android. Нажмите, чтобы создать меню и выберите «Приложение (сохранить .apk на мой компьютер)». Подождите минуту. Файл apk загрузится в папку загрузки по умолчанию. Установите и используйте его.
Шаг 3: OLED-дисплей
В уроке используется OLED-монитор 0.96′ 128×64 I2C.
Это очень хороший дисплей для использования с Arduino. Это дисплей OLED и это означает, что он имеет низкое энергопотребление. Потребляемая мощность этого дисплея составляет около 10-20 мА, и это зависит от количества пикселей.
Дисплей имеет разрешение 128 на 64 пикселя и имеет крошечный размер. Существует два варианта отображения. Один из них монохромный, а другой, как тот, который использован в уроке, может отображать два цвета: желтый и синий. Верхняя часть экрана может быть только желтой, а нижняя часть — синей.
Этот OLED-дисплей очень яркий и у него отличная и очень приятная библиотека, которую разработала компания Adafruit для этого дисплея. В дополнение к этому дисплей использует интерфейс I2C, поэтому соединение с Arduino невероятно простое.
Вам нужно только подключить два провода, за исключением Vcc и GND. Если вы новичок в Arduino и хотите использовать недорогой и простой дисплей в вашим проекте, начните с этого.
Технология конденсаторной сварки
Одна из разновидностей контактной сварки – конденсаторная. Такой метод сварки известен с первой половины прошлого века. Сварка происходит за счет расплавления заготовок в тех местах, где происходит короткое замыкание тока, которое получают из энергии разряда конденсаторов. Время процесса сварки составляет от 1 до 3 миллисекунд.
Технология конденсаторной сварки
В основе такого сварочного аппарата находится конденсаторная емкость, заряжаемая от источника постоянного напряжения.
По достижении потребного количества энергии в емкости, электроды смыкают в месте сварки. Ток, протекающий между заготовками, вызывает необходимый нагрев поверхности и в результате металл плавится и образуется шов высокого качества.
На практике применяют два вида аппаратов такого типа сварки. Первые обеспечивают разряд из накопителей энергии на поверхности деталей, вторые получают разряд от второй обмотки трансформатора. Первый метод применяют при проведении ударно-конденсаторной сварки, второй применяют тогда, когда речь идет о необходимости получения качественного шва.
Такая сварка отличается экономичностью и поэтому ее часто применяют в условиях домашней мастерской. На рынке можно встретить устройства с мощностью в 100 – 400 Вт, которые часто применяют для работы в небольших мастерских по ремонту автомобильных кузовов. Продолжительность нагрева и сила давления Режимы сварки определяют следующими характеристиками – силой тока, длительностью нагрева, силой сжатия, размерами рабочего конца электрода.
Шаг 5: Код проекта
Чтобы код проекта был скомпилирован, нам нужно включить некоторые библиотеки. Прежде всего, нам нужна библиотека MFRC522 Rfid.
Чтобы установить её, перейдите в Sketch -> Include Libraries -> Manage libraries (Управление библиотеками). Найдите MFRC522 и установите её.
Нам также нужна библиотека Adafruit SSD1306 и библиотека Adafruit GFX для отображения.
Установите обе библиотеки. Библиотека Adafruit SSD1306 нуждается в небольшой модификации. Перейдите в папку Arduino -> Libraries, откройте папку Adafruit SSD1306 и отредактируйте библиотеку Adafruit_SSD1306.h. Закомментируйте строку 70 и раскомментируйте строку 69, т.к. дисплей имеет разрешение 128×64.
Сначала мы объявляем значение метки RFID, которую должен распознать Arduino. Это массив целых чисел:
int code[] = {69,141,8,136}; // UID
Затем мы инициализируем считыватель RFID и дисплей:
rfid.PCD_Init(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
После этого в функции цикла мы проверяем тег на считывателе каждые 100 мс.
Если на считывателе есть тег, мы читаем его UID и печатаем его на дисплее. Затем мы сравниваем UID тега, который мы только что прочитали, со значением, которое хранится в кодовой переменной. Если значения одинаковы, мы выводим сообщение UNLOCK, иначе мы не будем отображать это сообщение.
if(match) { Serial.println("\nI know this card!"); printUnlockMessage(); }else { Serial.println("\nUnknown Card"); }
Конечно, вы можете изменить этот код, чтобы сохранить более 1 значения UID, чтобы проект распознал больше RFID-меток. Это просто пример.
Код проекта:
#include <MFRC522.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <SPI.h> #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); #define SS_PIN 10 #define RST_PIN 9 MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class MFRC522::MIFARE_Key key; int code[] = {69,141,8,136}; //This is the stored UID int codeRead = 0; String uidString; void setup() { Serial.begin(9600); SPI.begin(); // Init SPI bus rfid.PCD_Init(); // Init MFRC522 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64) // Clear the buffer. display.clearDisplay(); display.display(); display.setTextColor(WHITE); // or BLACK); display.setTextSize(2); display.setCursor(10,0); display.print("RFID Lock"); display.display(); } void loop() { if( rfid.PICC_IsNewCardPresent()) { readRFID(); } delay(100); } void readRFID() { rfid.PICC_ReadCardSerial(); Serial.print(F("\nPICC type: ")); MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); Serial.println(rfid.PICC_GetTypeName(piccType)); // Check is the PICC of Classic MIFARE type if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { Serial.println(F("Your tag is not of type MIFARE Classic.")); return; } clearUID(); Serial.println("Scanned PICC's UID:"); printDec(rfid.uid.uidByte, rfid.uid.size); uidString = String(rfid.uid.uidByte)+" "+String(rfid.uid.uidByte)+" "+String(rfid.uid.uidByte)+ " "+String(rfid.uid.uidByte); printUID(); int i = 0; boolean match = true; while(i<rfid.uid.size) { if(!(rfid.uid.uidByte == code)) { match = false; } i++; } if(match) { Serial.println("\nI know this card!"); printUnlockMessage(); }else { Serial.println("\nUnknown Card"); } // Halt PICC rfid.PICC_HaltA(); // Stop encryption on PCD rfid.PCD_StopCrypto1(); } void printDec(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer < 0x10 ? " 0" : " "); Serial.print(buffer, DEC); } } void clearUID() { display.setTextColor(BLACK); // or BLACK); display.setTextSize(1); display.setCursor(30,20); display.print(uidString); display.display(); } void printUID() { display.setTextColor(WHITE); // or BLACK); display.setTextSize(1); display.setCursor(0,20); display.print("UID: "); display.setCursor(30,20); display.print(uidString); display.display(); } void printUnlockMessage() { display.display(); display.setTextColor(BLACK); // or BLACK); display.setTextSize(2); display.setCursor(10,0); display.print("RFID Lock"); display.display(); display.setTextColor(WHITE); // or BLACK); display.setTextSize(2); display.setCursor(10,0); display.print("Unlocked"); display.display(); delay(2000); display.setTextColor(BLACK); // or BLACK); display.setTextSize(2); display.setCursor(10,0); display.print("Unlocked"); display.setTextColor(WHITE); // or BLACK); display.setTextSize(2); display.setCursor(10,0); display.print("RFID Lock"); display.display(); }
Предназначение дубликатора домофонных ключей
С помощью микроконтроллера Arduino можно копировать домофонный ключ, если случайно его потерял.
RFID – радиочастотная идентификация. Устройство выполняет ту же функцию, что и штрих-код или магнитная полоска на задней стороне кредитной карты. Он предоставляет уникальный идентификатор для этого объекта. И так же, как штрих-код или магнитная полоса, RFID должен быть отсканирован для получения информации.
RFID используется в этом проекте для чтения данных из RFID-меток и отправки информации в энергонезависимую память MCU.
Идентификатор, считываемый из тегов, сравнивается с хранимой информацией, и если он совпадает, то дверь открывается.
Необходимые компоненты
Плата Arduino Uno
Модуль клавиатуры (матричная клавишная панель)
Буззер (звонок)
ЖК дисплей 16х2
Резистор 1 кОм
Транзистор BC547
Макетная плата
Источник питания
Соединительные провода
В представленном проекте мы будем использовать технологию мультиплексирования для подключения клавиатуры (с помощью которой и будет вводиться пароль) к плате Arduino Uno. Мы будем использовать клавиатуру 4х4 которая содержит 16 кнопок (клавиш). В обычном режиме для подключения 16 кнопок к плате Arduino нам бы понадобилось 16 контактов, но с использованием технологии мультиплексирования нам будет достаточно 8 контактов для подключения 16 кнопок. Более подробно об этом можно прочитать в статье про подключение клавишной панели к Arduino.
Технология мультиплексирования является простым и эффективным способом уменьшения числа используемых контактов микроконтроллера при взаимодействии с большим числом кнопок (клавиш). В основном в этой технологии используется два простых приема: сначала сканируются строки, а потом сканируются столбцы. Но поскольку в Arduino мы используем специальную библиотеку для работы с клавиатурой, используя технологию мультиплексирования, нам нет необходимости писать специальный код для реализации этой технологии, по сравнению, например, с подключением клавишной панели к микроконтроллеру AVR.
Создание дубликатора своими руками
ЖК-дисплей имеет 16 контактов, что слишком много для Arduino Nano домофона, поэтому важно иметь адаптер I2C. Это позволяет управлять дисплеем только из двух сигнальных штырей на Ардуино
Это полезно из-за небольшого числа контактов, которые нужно будет контролировать из MCU.
ЖК-контакты
ЖК-дисплеи имеют параллельный интерфейс, а это означает, что MCU должен одновременно управлять несколькими контактами интерфейса для управления дисплеем. В приведенной ниже таблице дается описание каждого из контактов на английском языке:
Спецификация контактов
Для начала сделаем связи между ЖК-дисплеем и I2C. Для этого нужен адаптер ЖК-дисплея I2C (LCD1602). Адаптер преобразует ЖК-дисплей формата 16 x 2 в серийный ЖК-дисплей I2C, которым можно управлять через Arduino всего посредством 2-х проводов.
Соединения между Arduino и LCD
Программная часть
Мы подключим клавиатуру для отображения номеров на ЖК-дисплее для Arduino и скопируем ключ, который вводим с клавиатуры.
Keypad.h – это библиотека, которая позволяет Arduino читать клавиатуру с матричным типом.
В этом проекте используется клавиатура 4 × 4.
В таблице показано соединение между платой Arduino и клавиатурой. Штыри клавиатуры подключены к цифровым выходным выводам Arduino. Pin D6 использовался для зуммера, потому что это был штырь ШИМ.
Вывод клавиатуры | Контакт Arduino |
---|---|
1 | D2 |
2 | D3 |
3 | D4 |
4 | D5 |
5 | A0 |
6 | D7 |
7 | D8 |
Соединение между Arduino, LCD и клавиатурой
ЖК-дисплей и клавиатура, подключенные к Arduino
Затем добавим RFID. В этом случае плата RFID использует протокол связи SPI, где Arduino будет действовать, как ведущий и считыватель RFID в качестве подчиненного. Считыватель карт и теги предназначены для связи с частотой, равной 13,56 МГц.
Это важный шаг, поскольку он помогает нам считывать данные с карты, и он будет решать, соответствует ли идентификатор информации, хранящейся в EEPROM. Если он соответствует, он даст нам доступ и отобразит «Unlocked». В противном случае на ЖК-дисплее отобразится «Заблокировано».
Соединение между Arduino, LCD и RFID
Домофон на Ардуино, LCD и RFID
Следующий шаг – добавить зуммер и 2 светодиода для имитации системы контролируемого доступа. Ознакомьтесь с приведенной ниже диаграммой. Зуммер установлен так, что он гудит всякий раз, когда мы получаем доступ (разблокирован). Красный светодиод всегда горит, когда он заблокирован, но зеленый светодиод загорается, когда он разблокирован.
Чтобы защитить модули, нужно использовать 3D-печать корпуса. Если у вас нет 3D-принтера, вы можете просто использовать пластиковый корпус, который позволяет вам вставлять все компоненты внутрь. Это очень полезно, потому что модули будут размещены внутри, а единственными частями вне коробки будут светодиоды, клавиатура и ЖК-дисплей.
Схема соединений, показывающая соединение между Nano, LCD, клавиатурой, RFID и звуковым сигналом
www.deviceplus.com/how-tos/arduino-guide/make-your-own-arduino-rfid-door-lock/
Тестируем проект
Теперь приступаем к тестированию! Перейдите в меню пользователя вашего Adafruit IO, в меню Feeds. Проверьте, созданы или нет каналы для отпечатка пальцев и замка (на принт-скрине ниже это строки fingerprint и lock):
Если их нет, то придется создать вручную.
Теперь нам надо обеспечить обмен данными между каналами fingerprint и lock. Канал lock должен принимать значение ‘1’, когда канал fingerprint принимает значение ‘1’ и наоборот.
Для этого используем очень мощный инструмент Adafruit IO: триггеры. Триггеры — это по-сути условия, которые вы можете применять к настроенным каналам. То есть, их можно использовать для взаимосвязи двух каналов.
Создаем новый reactive trigger из раздела Triggers в Adafruit IO. Это обеспечит возможность обмениваться данными между каналами датчика отпечатка пальцев и замка:
Вот как это должно выглядеть, когда оба триггера настроены:
Все! Теперь мы действительно можем тестить наш проект! Прикладываем палец к сенсору и видим как Arduino начал подмигивать светодиодом, который соответствует передаче данных. После этого должен начать мигать светодиод на модуле ESP8266. Это значит, что он начал получать данные через MQTT. Светодиод на монтажной плате в этот момент должен тоже включиться.
После задержки, которую вы установили в скетче (по умолчанию это значение равно 10 секундам), светодиод выключится. Поздравляем! Вы можете управлять светодиодом с помощью отпечатка пальца, находясь в любой точке мира!
ринципиальна схема замка
«Строчные» линии R1-R4 подключены к выводам Arduino с 6-го по 9-й. Колоночне выводы C1-C4 подключены к выводам 10-10. Третий вывод настроен как выход, в цепь которого включена нагрузка, в нашем случае, для примера, это светодиод D1, последовательно к которому подключено сопротивление номиналом в 330 Ом. Оно необходимо для ограничения тока через светодиод. В настоящем кодовом замке подключатся электромагнит, управляющий положением защелки замка или реле. Если светодиод горит, то замок открыт.
Данная схема позволяет подключить к ней компьютер и просматривать состояние кодового замка через мониторинг последовательного порта среды разработки Arduino.
Скетч кодового замка:
int p; //array for storing the passwordint c; // array for storing the input codeint n;int a=0;int i=0;int lock=3;int r1=6;int r2=7;int r3=8;int r4=9;int c1=10;int c2=11;int c3=12;int c4=13;int colm1;int colm2;int colm3;int colm4;void setup(){ pinMode(r1,OUTPUT); pinMode(r2,OUTPUT); pinMode(r3,OUTPUT); pinMode(r4,OUTPUT); pinMode(c1,INPUT); pinMode(c2,INPUT); pinMode(c3,INPUT); pinMode(c4,INPUT); pinMode(lock,OUTPUT); Serial.begin(9600); //sets the baud rate at 9600 digitalWrite(c1,HIGH); digitalWrite(c2,HIGH); digitalWrite(c3,HIGH); digitalWrite(c4,HIGH); digitalWrite(lock,LOW); p=1; //sets 1st digit of the password p=2; // sets 2nd digit of the password p=3; // sets 3rd digit of the password p=4; // sets 4th digit of the password p=5; // sets 5th digit of the password p=6; // sets 6th digit of the password}void loop(){ digitalWrite(r1,LOW); digitalWrite(r2,HIGH); digitalWrite(r3,HIGH); digitalWrite(r4,HIGH); colm1=digitalRead(c1); colm2=digitalRead(c2); colm3=digitalRead(c3); colm4=digitalRead(c4); if(colm1==LOW) { n=1; a=1; Serial.println(«1»); delay(200);} else { if(colm2==LOW) { n=2; a=1; Serial.println(«2»); delay(200);} else { if(colm3==LOW) {Serial.println(«3»); n=3; a=1; delay(200);} else { if(colm4==LOW) {Serial.println(«LOCKED»); digitalWrite(lock,LOW); //locks i=0; delay(200);} }}} digitalWrite(r1,HIGH); digitalWrite(r2,LOW); digitalWrite(r3,HIGH); digitalWrite(r4,HIGH); colm1=digitalRead(c1); colm2=digitalRead(c2); colm3=digitalRead(c3); colm4=digitalRead(c4); if(colm1==LOW) {Serial.println(«4»); n=4; a=1; delay(200);} else { if(colm2==LOW) {Serial.println(«5»); n=5; a=1; delay(200);} else { if(colm3==LOW) {Serial.println(«6»); n=6; a=1; delay(200);} else { if(colm4==LOW) { if(c==p&&c==p&&c==p&&c==p&&c==p&&c==p) {digitalWrite(lock,HIGH); //unlocks Serial.println(«UNLOCKED»); c=9;} //corrupts the code in array c else {Serial.println(«WRONG PASSWORD»);} delay(200);} }}} if(a==1) // test whether a digit key is pressed { c=n; // saves the current digit pressed to array c i=i+1; a=0;} }
Как работает программа самодельного кодового замка
Наш пароль состоит из 6 цифр «123456», это значение хранится в массиве «p». Введенные нами значения последовательно записываются в массив «c». В коде программы происходит сравнение этих двух массивов, после того как будет нажата кнопка разблокировки. Если они совпадают, то посылаем на вывод 3 «положительный сигнал», а если не совпадают то «отрицательный».
Работа схемы
Схема устройства представлена на следующем рисунке.
Как видим, она достаточно проста – достаточно только подсоединить Bluetooth модуль HC05 и одеть сверху на плату Arduino шилд (расширение) TFT ЖК дисплея (TFT LCD Shield). Этот шилд достаточно легко монтируется – достаточно только проследить чтобы контакты GND и Vcc шилда и платы Arduino совпадали. Также вы должны установить библиотеку для работы с данным TFT ЖК дисплеем, более подробно все эти процессы описаны в статье про подключение TFT ЖК дисплея к плате Arduino.
Bluetooth модуль HC05 запитывается от контакта Vcc Arduino, его земля подключена к контакту GND Arduino. Контакты TX и RX модуля HC05 соединены с контактами RX1 и TX1 платы Arduino. Один контакт буззера (звонка) подключен к контакту GND Arduino, а другой – к контакту 22 Arduino.
Аппаратная часть
Для набора кода понадобится библиотека LiquidCrystal_I2C.h в Arduino IDE. Библиотека позволяет подключить ЖК-дисплей к Ардуино. Встроенная библиотека LiquidCrystal_I2C позволяет легко отображать символы на ЖК-дисплее.
Следуйте приведенным ниже инструкциям, чтобы установить новую библиотеку в свою среду разработки Arduino.
- Сначала загрузите файлы из Github.
- Извлеките из архивов каждую папку.
- Скопируйте ZIP-файлы в папку Ардуино.
- Откройте Ардуино и добавьте Keypad.zip:Меню эскиза -> Включить библиотеку -> Добавить ZIP-библиотеку
- Добавить библиотеку клавиатуры:Эскиз -> Включить библиотеку -> Клавиатура