// подключаем библиотеку const int pin = 10; // объявляем номер пина OneWire iButton(pin); // объявляем объект OneWire на 10-ом пине // номер ключа, который мы хотим записать в iButton: byte key_to_write = { 0x01, 0xF6, 0x75, 0xD7, 0x0F, 0x00, 0x00, 0x9A }; void setup(void) {
Serial.begin(9600); pinMode(pin, OUTPUT);
} void loop(void) {
delay(1000); // задержка на 1 сек iButton.reset(); // сброс устройства 1-wire delay(50); iButton.write(0x33); // отправляем команду «чтение» byte data; // массив для хранения данных ключа iButton.read_bytes(data, 8); // считываем данные приложенного ключа, 8х8=64 бита if (OneWire::crc8(data, 7) != data) { // проверяем контрольную сумму приложенного ключа Serial.println(«CRC error!»); // если CRC не верна, сообщаем об этом return; // и прерываем программу } if (data & data & data & data & data & data & data & data == 0xFF) { return; // если ключ не приложен к считывателю, прерываем программу и ждём, пока будет приложен } Serial.print(«Start programming…»); // начало процесса записи данных в ключ for (int i = 0; i } // Инициализация записи данных в ключ-таблетку iButton:
void send_programming_impulse() {
digitalWrite(pin, HIGH); delay(60); digitalWrite(pin, LOW); delay(5); digitalWrite(pin, HIGH); delay(50);
}
Не забудьте задать номер своего оригинального ключа в массиве key_to_write
, который мы узнали ранее.
Загрузим этот скетч в Arduino. Откроем монитор последовательного порта (Ctrl+Shift+M). Подключим к схеме ключ, который будет клоном оригинального ключа. О результате программирования монитор последовательного порта выведет соответствующее сообщение.
Если данный скетч не сработал, попробуйте заменить код после Serial.print(«Start programming…»)
и до конца функции
loop()
на следующий:
Дополнительный скетч записи ключа iButton с помощью Arduino
(разворачивается) delay (200); iButton.skip(); iButton.reset(); iButton.write(0x33); // чтение текущего номера ключа Serial.print(«ID before write:»); for (byte i=0; iЗдесь функция
writeByte()
будет следующей:
int writeByte(byte data) {
int data_bit; for(data_bit=0; data_bit> 1; } return 0; }
Временную диаграмму работы скетча записи идентификатора ключа показывать бессмысленно, т.к. она длинная и не поместится на рисунке. Однако файл *.logicdata для программы логического анализатора прикладываю в конце статьи.
Ключи для домофона бывают разных типов. Данный код подойдёт не для всех ключей, а только для RW1990 или RW1990.2. Программирование ключей других типов может привести к выходу ключей из строя!
При желании можно переписать программу для ключа другого типа. Для этого воспользуйтесь техническим описанием Вашего типа ключа (datasheet) и изменить скетч в соответствии с описанием. Скачать datasheet для ключей iButton
можно в приложении к статье.
Кстати, некоторые современные домофоны читают не только идентификатор ключа, но и другую информацию, записанную на оригинальном ключе. Поэтому сделать клон, скопировав только номер, не получится. Нужно полностью копировать данные ключа.
Предназначение дубликатора домофонных ключей
С помощью микроконтроллера Arduino можно копировать домофонный ключ, если случайно его потерял.
RFID – радиочастотная идентификация. Устройство выполняет ту же функцию, что и штрих-код или магнитная полоска на задней стороне кредитной карты. Он предоставляет уникальный идентификатор для этого объекта. И так же, как штрих-код или магнитная полоса, RFID должен быть отсканирован для получения информации.
RFID используется в этом проекте для чтения данных из RFID-меток и отправки информации в энергонезависимую память MCU.
Идентификатор, считываемый из тегов, сравнивается с хранимой информацией, и если он совпадает, то дверь открывается.
Принцип работы дубликатора на Ардуино
Каждый ключ имеет внутреннюю связь с домофонной дверью – этот номер и служит ключевым идентификатором. Этот номер интерком-ключа решает, нужный ли вы приложили ключ. Поэтому принцип работы дубликатора домофонных ключей на Arduino довольно прост: сначала нужно проверить «разрешенный» ключ, а затем присвоить тот же номер другому ключевому клону.
Проверяя номер из своей базы данных разрешенных скоростей передачи данных, он откроет дверь. Ключи для внутренней связи, которые мы будем подключать к Arduino дубликатору (иногда называемому iButton или Touch Memory), считываются и записываются в 1-проводной интерфейс. Поэтому схема подключения очень проста.
Электрическая Схема
Так выглядит схема копировальщика: к ардуино нано подключается луза для копирования контактных ключей, а к ногам 11 и 7 подключается вход и выход rfid модуля. Rgb-cветодиод для индикации режима чтение/запись/BlueMode, buzzer — для попискивания. Энкодер — для управления дибликатором. На шине i2c подцеплен oled дисплей.
Схема дубликатора
Взрослая схема платы дубликатора из онлайн-редактора EasyEda
Gerber_PCB3_20200103004523
Создание дубликатора своими руками
ЖК-дисплей имеет 16 контактов, что слишком много для Arduino Nano домофона, поэтому важно иметь адаптер I2C. Это позволяет управлять дисплеем только из двух сигнальных штырей на Ардуино. Это полезно из-за небольшого числа контактов, которые нужно будет контролировать из MCU.
ЖК-контакты
ЖК-дисплеи имеют параллельный интерфейс, а это означает, что MCU должен одновременно управлять несколькими контактами интерфейса для управления дисплеем. В приведенной ниже таблице дается описание каждого из контактов на английском языке:
Спецификация контактов
Для начала сделаем связи между ЖК-дисплеем и I2C. Для этого нужен адаптер ЖК-дисплея I2C (LCD1602). Адаптер преобразует ЖК-дисплей формата 16 x 2 в серийный ЖК-дисплей I2C, которым можно управлять через Arduino всего посредством 2-х проводов.
Соединения между Arduino и LCD
Аппаратная часть
Для набора кода понадобится библиотека LiquidCrystal_I2C.h в Arduino IDE. Библиотека позволяет подключить ЖК-дисплей к Ардуино. Встроенная библиотека LiquidCrystal_I2C позволяет легко отображать символы на ЖК-дисплее.
Вы можете скачать LiquidCrystal_I2C.h с нашего сайта отсюда, или с Github — https://github.com/todeilatiberia/SmartDoor.
Следуйте приведенным ниже инструкциям, чтобы установить новую библиотеку в свою среду разработки Arduino.
- Сначала загрузите файлы из Github
. - Извлеките из архивов каждую папку.
- Скопируйте ZIP-файлы в папку Ардуино.
- Откройте Ардуино и добавьте Keypad.zip: Меню эскиза -> Включить библиотеку -> Добавить ZIP-библиотеку
- Добавить библиотеку клавиатуры: Эскиз -> Включить библиотеку -> Клавиатура
OSBoy notes.
В интернете можно найти достаточно готовых Arduino-проектов устройств для копирования домофонных ключей DS1990, в народе так же известных как ibutton, или просто «таблетки». Но практически всё проекты, что я нашёл, оказались несколько сыроваты. Поэтому решено было, используя уже имеющиеся наработки, сделать свой проект, полностью законченный и достаточно функциональный. За основу была взята эта статья, а так же, некоторые идеи были почерпнуты отсюда, поэтому на авторство сильно не претендую.
Аппаратная часть
Данное устройство я собрал на Arduino Nano (его китайском аналоге) в корпусе от нерабочего USB-хаба. Получилось достаточно компактно и удобно:
дубликатор домофонных ключей — монтаж
дубликатор домофонных ключей в сборе
USB-кабель используется как для питания устройства, так и для взаимодействия с COM-терминалом. На корпусе установлена нефиксируемая кнопка для переключения режимов чтение/запись/восстановление, светодиод для индикации текущего режима, и контактная площадка (считыватель) для ключей.
Схема устройства простейшая. Линия данных 1wire (ibutton) обязательно подтягивается к питанию (+5В) через резистор 2,2 кОм (скорее всего, будет нормально работать и с другими номиналами порядка 1…4,7 кОм). Светодиод подключаем через ограничительный резистор подходящего номинала. Так как в скетче используем вход кнопки (D2) со встроенным подтягивающим (PULLUP) резистором, то кнопку сажаем на GND.
Дубликатор домофонных ключей — схема
Програмная часть
В прошивке практически без изменений оставил только часть кода, отвечающую непосредственно за чтение/запись данных в ключи по протоколу 1-wire и, собственно, принцип работы устройства (дабы не изобретать велосипеды). Однако, остальная программная часть была фактически полностью переписана и при этом дополнена разными полезными фичами. В скетче используется стандартная Ардуино-библиотека «OneWire». Актуальную версию скетча смотрите в конце статьи.
Возможности устройства:
- Чтение ID ключа с последующей записью в перезаписываемую «болванку» (RW1990);
- Запись «универсального» ID, заранее заданного в скетче (в данном случае используется ID: 01:FF:FF:FF:FF:FF:FF:2F );
- Защита от случайной записи некорректного значения ID;
- Восстановление нечитаемых ключей, случайно испорченных при неудачной записи;
- Ввод ID вручную в терминале;
- Возможность работы без COM-терминала (при наличии источника питания постоянного тока на 5В с USB разъёмом).
Работа с устройством
Устройство можно использовать как с COM-терминалом (предпочтительно), так и без него. Для работы с терминалом на компьютере должны быть установлены драйверы для платы Arduino (FTDI, CH341 или др., в зависимости от того, какой чип установлен на Вашей плате). Если плата удачно программируется в среде разработки Arduino-IDE, значит нужный драйвер в системе уже установлен. Терминал COM-порта можно использовать любой, какой больше нравится (например, монитор порта среды Arduino-IDE или Гипертерминал. Лично я использую PuTTY). В настройках терминала нужно выбрать виртуальный COM-порт, под которым определилась наша плата, и скорость обмена, выставленную в скетче (в моём случае — 115200).
Итак, подключаем устройство к компьютеру и запускаем терминал COM-порта (Arduino при этом автоматически перезагружается). Светодиод несколько раз мигает в процессе загрузки. Через пару секунд устройство готово к работе, светодиод при этом гаснет, а в терминале выводится сообщение о готовности системы.
Список доступных команд через терминал:
- d — загрузка в буфер «универсального» ключа (в данном случае: 01:FF:FF:FF:FF:FF:FF:2F);
- w — переключение режима чтение/запись;
- m — переход в режим ручного ввода ID;
- r — переход в режим восстановления нечитаемых ключей;
- h — показать справку по командам.
Чтобы считать ID ключа, прикладываем ключ к контактной площадке. Светодиод при этом начинает часто моргать, а в терминале отображается считанный ID, который сохраняется в буфере (переменной oldID ) до тех пор, пока в неё не будет загружен другой ID. Идентификатор состоит из восьми бит, которые отображаются в шестнадцатиричном виде: 01 XX XX XX XX XX XX YY. Здесь первый бит — это Family code, для ключей ibutton он всегда будет равен 1. Если считанный Family code будет отличаться от 1, в терминал будет выведено соответствующее предупреждение и записывать данный ID устройство откажется. Следующие шесть бит — это, собственно, уникальный идентификатор ключа. А восьмой бит — это, так называемый, «избыточный код» CRC или, другими словами, контрольная сумма, вычисляемая по специальному алгоритму из предыдущих семи бит. Контрольная сумма проверяется, и если её значение не верно, то, опять же, в терминал выводится предупреждение об этом и запись такого ID будет невозможна.
Чтобы записать ID в перезаписываемый ключ, в терминале нужно отправить символ «w», либо нажать кнопку на устройстве. При этом зажигается светодиод, что говорит о готовности устройства к записи. Прикладываем записываемый ключ к контактной площадке: светодиод при этом гаснет, а примерно через секунду начинает часто моргать, что говорит о завершении процесса записи и переключении устойства обратно в режим чтения. Если в терминале мы видим, что считывается только что записанный ID, без каких либо предупреждений, значит всё прошло успешно. С таким же успехом можно копировать ключи и без использования терминала, наблюдая только за светодиодом.
Если записываемый ID был некорректный (с неверным Family code, или CRC), в терминал выведется соответствующее сообщение и запись будет отменена. Таким образом, устройство предохраняняет ключ от записи в него некорректных данных. Тем не менее, всё же может случиться так, что данные запишутся с ошибками. Такое может произойти, например, если ключ будет недостаточно плотно приложен к контактной площадке при записи данных. Более того, ключ в этом случае может вовсе перестать читаться некоторыми устройствами (включая данный дубликатор), если в первый бит будет записано нулевое значение. А при эксперементах с ключами такое частенько бывает, особенно по неопытности! Так что незнавши можно и подумать, что ключик умер.
Для восстановления нечитаемого ключа необходимо перевести устройство в соответствующий режим. Для этого в терминале нужно отправить символ «r», либо включить устройство, удерживая кнопку нажатой. Светодиод начнёт часто моргать, независимо от того, приложен ключ, или нет (для выхода из режима восстановления отправьте символ «r» снова, или переподключите устройство). Прикладываем ключ к контактной площадке. Если он читаемый, то его ID считается так же, как и в обычном режиме чтения. Если же ключ не читается, соответственно ничего не произойдёт. Удерживая ключ приложенным, нажимаем кнопку. При этом в ключ принудительно будет записан «универсальный» ID, прописанный в скетче (у меня: 01:FF:FF:FF:FF:FF:FF:2F) либо другой, ранее загруженный в буфер. По окончанию записи устройство вернётся в обычный режим чтения.
Загрузить в буфер универсальный ID можно, отправив в терминале символ «d», либо просто перезагрузив устройство (он используется по умолчанию, если не был введён какой-либо другой ID).
Кроме всего прочего, в устройстве предусмотрена возможность сделать дубликат ключа, даже не имея под рукой оригинала! Достаточно лишь знать его идентификатор.
Переводим устройство в режим ручного ввода ID. Для этого в терминале нужно отправить символ «m». После этого появляется приглашение ввести ID, либо выйти из ручного режима (по нажатию Esc). После этого можно ввести любой ID (в шестнадцатиричном виде). При этом первый бит (Family code) всегда должен быть равным 1 и программа подставляет его автоматически, а так же, автоматически вычисляет CRC и подставляет в восьмой бит. Таким образом, нам нет необходимости вводить Family code и вычислять контрольную сумму CRC, достаточно ввести только значения битов со второго по седьмой.
В итоге мы имеем вполне функциональное, полезное в хозяйстве устройство за смешные дениги. Теперь скопировать на скорую руку ключик на дежурную болванку можно где угодно, при наличии источника питания на 5В постоянного тока с USB разъёмом!
[ Показать/скрыть скетч от 25.05.2017 ] #include const int switchPin = 2; // Будем использовать аппаратное прерывание INT0, поэтому кнопка должна быть подключена к 2-му пину const int dataPin = 12; // Data пин считывателя ключей const int ledPin = 13; // Пин контрольного светодиода volatile boolean writeMode = false; // Режим записи: 1 — включен; 0 — выключен (режим чтения) boolean recoveryMode = false; // Режим восстановления нечитаемых ключей (с записанным по ошибке нулевым первым байтом) byte oldID[8]; // Считанный ID ключа byte newID[8]; // Записываемый ID ключа const byte defaultID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F }; // По умолчанию прошивается «Универсальный» ID: 01:FF:FF:FF:FF:FF:FF:2F byte crc; // Контрольная сумма CRC OneWire ibutton (dataPin); void setup() { Serial.begin(115200); loadDefaultID(); pinMode(ledPin, OUTPUT); pinMode(switchPin, INPUT_PULLUP); // При включении устройства, удерживая кнопку нажатой, активируется режим восстановления if (digitalRead(switchPin) == LOW) recoveryMode = true; attachInterrupt(0, int0, LOW); // при нажитии кнопки срабатывает 0-е прерывание, обработчик прерывания (ISR) — функция int0() Serial.println(«Device is ready. Send ‘h’ for help.»); } // Загрузка дефолтного «универсального» ID void loadDefaultID() { for (byte x = 0; x < 8; x++) oldID[x] = defaultID[x]; } // Переключение режима: Чтение/Запись void changeMode () { // Перестраховка от записи некорректного ID if (!writeMode) { crc = ibutton.crc8(newID, 7); // Вычисление контрольной суммы записываемого ID if (newID[0] != 1 || newID[7] != crc) { Serial.println(F(«ID is incorrect! Writing is not permitted.»)); writeModeOff(); return; } } writeMode = !writeMode; digitalWrite(ledPin, writeMode); if (writeMode) { Serial.print(F(«Waiting for the key to WRITE the new ID: «)); for (byte x = 0; x < 8; x++) { Serial.print(newID[x], HEX); Serial.print(‘ ‘); } Serial.println(» …»); } else { writeModeOff(); } } // Автоматическое отключение режима восстановления после записи и вывод приглашения считать новый ключ void writeModeOff() { if (recoveryMode) { recoveryMode = false; Serial.println(F(«Recovery mode disabled.»)); } Serial.println(F(«Waiting for the key to READ the ID…»)); } // Обработчик прерывания по нажатию кнопки: переключает режим: Чтение/Запись (отфильтровывая дребезг контактов) void int0() { static unsigned long millis_prev; if ( millis() — millis_prev > 100 ) changeMode(); millis_prev = millis(); } // Вывод считанного ID в терминал void printID() { for (byte x = 0; x < 8; x++) { Serial.print(oldID[x], HEX); Serial.print(» «); } crc = ibutton.crc8(oldID, 7); // Вычисление контрольной суммы считанного ID Serial.print(» CRC: «); Serial.print(crc, HEX); if (oldID[0] != 0x01) Serial.print(F(» Family code is not valid!»)); if (crc != oldID[7]) Serial.print(F(» CRC is not valid!»)); Serial.println(); } void loop() { // Обработка команд, посылаемых через терминал COM-порта if (Serial.available() > 0) { byte com; // Команда, отправляемая через терминал COM-порта com = Serial.read(); switch ( com ) { case ‘h’: { Serial.println(F(«Help:»)); Serial.println(F(«d — load default ID»)); Serial.println(F(«w — switch read/write mode»)); Serial.println(F(«m — enter ID manually»)); Serial.println(F(«r — enable recovery mode (send ‘r’ again to disable)»)); Serial.println(F(«h — show this help»)); break; } case ‘d’: { if (writeMode) { writeMode = false; digitalWrite(ledPin, LOW); } loadDefaultID(); Serial.println(F(«Default ID is loaded.»)); printID(); break; } case ‘w’: { changeMode(); break; } case ‘r’: { writeMode = false; recoveryMode = !recoveryMode; Serial.println(recoveryMode ? F(«Recovery mode enabled.») : F(«Recovery mode disabled.»)); break; } case ‘m’: { byte inputID[8]; // Введённый вручную ID ключа char inputChar; // Код введённого символа char inputNum = 2; // Порядковый номер вводимого сивмола (от 0 до 15). Начинаем вводить со 2-го символа, т.к. 0-ой и 1-ый — фиксированные. char charEncode; // 16-ричное число (от 0 до F), в которое преобразуется каждый вводимый ASCII символ boolean even = 0; // Признак чётности порядкового номера вводимого символа Serial.println(F(«Enter the new ID, or press ‘Esc’ to cancel.»)); inputID[0] = 1; Serial.print(F(«The new ID is: 01 «)); while (inputNum < 14) { if (Serial.available() > 0) { inputChar = Serial.read(); if (inputChar == 27) { Serial.flush(); Serial.println(); Serial.print(F(«Canceled…»)); break; } else { if ( inputChar >= 48 && inputChar <= 57 ) charEncode = inputChar — 48; else if ( inputChar >= 65 && inputChar <= 70 ) charEncode = inputChar — 55; else if ( inputChar >= 97 && inputChar <= 102 ) charEncode = inputChar — 87; else inputNum = -1; if ( inputNum != -1 ) { Serial.write(inputChar); if (!even) inputID[inputNum/2] = charEncode << 4; else { inputID[inputNum/2] = inputID[inputNum/2] + charEncode; Serial.print(‘ ‘); } even = !even; inputNum++; } } } } if (inputNum == 14) { inputID[7] = ibutton.crc8(inputID, 7); // Автоматическое вычисление контрольной суммы введённого ID for (byte i=0; i<8; i++) oldID = inputID; } Serial.println(oldID[7], HEX); printID(); break; } } } for (byte x = 0; x < 8; x++) newID[x] = oldID[x]; // Проверяем, приложен ли ключ if (!ibutton.search (oldID)) { ibutton.reset_search(); delay(50); if (!recoveryMode) return; } // Режим чтения if (!writeMode) { digitalWrite(ledPin, HIGH); delay(50); printID(); digitalWrite(ledPin, LOW); } // Режим записи if (writeMode) { delay(200); digitalWrite(ledPin, LOW); ibuttonCommand(0x33, 1, 1); Serial.print(«Old ID: «); for (byte x = 0; x < 8; x++) { Serial.print(ibutton.read(), HEX); Serial.print(‘ ‘); } ibuttonCommand(0xD1, 1, 1); // устанавливаем на линии логический 0 digitalWrite(dataPin, LOW); pinMode(dataPin, OUTPUT); delayMicroseconds(60); pinMode(dataPin, INPUT); digitalWrite(dataPin, HIGH); delay(10); Serial.print(» New ID: «); for (byte x = 0; x < 8; x++) { Serial.print(newID[x], HEX); Serial.print(‘ ‘); } ibuttonCommand(0xD5, 1, 1); Serial.print(«Writing… «); for (byte x = 0; x < 8; x++) { writeByte(newID[x]); Serial.print(‘*’); } Serial.println(F(» OK!»)); ibuttonCommand(0xD1, 0, 1); // устанавливаем на линии логическую 1 digitalWrite(dataPin, LOW); pinMode(dataPin, OUTPUT); delayMicroseconds(10); pinMode(dataPin, INPUT); digitalWrite(dataPin, HIGH); delay(10); changeMode(); } } // Отправка команды iButton void ibuttonCommand(uint8_t command, boolean sk, boolean rs) { if (sk) ibutton.skip(); if (rs) ibutton.reset(); ibutton.write(command); } // Побайтовая запись нового ID void writeByte(byte data) { for (int data_bit = 0; data_bit < 8; data_bit++) { digitalWrite(dataPin, LOW); pinMode(dataPin, OUTPUT); if (data & 1) delayMicroseconds(60); pinMode(dataPin, INPUT); digitalWrite(dataPin, HIGH); delay(10); data = data >> 1; } }
Возможно, что прошивка устройства будет и дальше дорабатываться. Если Вы заметили какие-то баги и недоработки в программе, конструктивная критика всегда приветствуется!
Программная часть
Мы подключим клавиатуру для отображения номеров на ЖК-дисплее для 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/
Программирование ключа домофона
Намеренно испортить ключ домофона довольно сложно, но возможно. Итак, что может произойти? Магнитный ключ для домофона (дубликат) понадобится, если бесконтактные карточки или браслеты сломались из-за изломов или перегибов. Размагничивание подобных ключей от нахождения рядом с телефоном или пластиковыми картами невозможно.
Испортить «таблетки» можно путём воздействия сильного напряжения, например, поместив их в микроволновку. Они достаточно прочные, редко выходят из строя. Однако если у вас несколько ключей для разных подъездов, их можно объединить, используя так называемый универсальный домофонный ключ.
Три способа изготовить копию ключа :
- Изготовление домофонных копий проводится специализированной организацией или у мастера, который сделает это за несколько минут при предъявлении оригинала. Сделать дубликат быстро и качественно можно в офисе StarNew в Москве (м. Дубровка), где вы легко подберёте заготовку на любой вкус и возраст: это могут быть изображения мультяшных героев, стильная кожаная обработка, пластик.
- Изготовить ключ домофона можно самостоятельно. Для этого нужно знание основ программирования и электромеханики. Однако наличие дубликатора значительно упрощает задачу. Он считывает код оригинального ключа от домофона, а затем записывает его на заготовку. Копия ключа получится, если знать модель и марку домофона. Большой выбор дубликаторов, заготовок на сайте.
- Возможно переписать индивидуальный код в чип таблетки самостоятельно. Как программировать копию ключа от домофона смотрите в видео
Чем больше квартир мы посещаем (родители, близкие люди), тем больше ключей для подъездных дверей требуется. Можно использовать один домофонный ключ, прописав его в считывателе кодовых замков или внеся его в список всех контроллеров. Подобрать заготовку, домофонный ключ, подходящий к нему дубликатор поможет таблица.
Тестирование и настройка готового дубликатора
Для описанного выше проекта понадобится специальный корпус, чтобы аккуратно разместить все компоненты и сохранить их без ущерба.
Можно разработать корпус с использованием программы SketchUp, которая имеет удобный интерфейс с простыми кнопками, такими как Eraser, Lines и Tape Measure Tool.
Размеры коробки составляют: 120 х 125 х 37 мм.
Если вы не знакомы с Sketchup, вам нужно ознакомиться со следующими учебниками SketchUp:
https://www.sketchup.com/learn/videos/58
Коробка для корпуса устройства (вид сверху)
Коробка для корпуса устройства (вид снизу)
Перед разработкой корпуса для проекта необходимо учитывать следующие аспекты:
- Вид сверху: — 2 отверстия для светодиодов (5,2 мм). — 1 для ЖК-дисплея (42,2 × 7,3 мм). — 1 отверстие для кабеля (16 × 10,5 мм).
- Вид снизу: — 1 открытие для клавиатуры (27 × 10 мм).
После этого можно соотнести размеры и построить пластиковый корпус. Причем можно менять дизайн по своему усмотрению.
Полный корпус с модулями, расположенными внутри