Дубликатор домофонных ключей (iButton) с мозгами из Arduino Nano

Дубликатор домофонных ключей (iButton) с мозгами из Arduino Nano Электронная цифровая подпись

Cyfral.

Эти домофоны работают только с ключами DC2000А и Цифрал-КП1.

Dallas.

В большинстве случаев под TM подразумевается ключ семейства Dallas (например, DS1990A). С этими ключами работает множество устройств: Vizit, Eltis, Z-5R, С2000-2 и др.

Em-marin

самый популярный на сегодня формат.

Metakom.

Под эти домофоны разработаны ключи К1233КТ2. Эти ключи годятся и для многих других контроллеров.

Mifare

перспективный формат. Именно к нему относятся бесконтактные смарт-карты.

Внешний вид прибора:

Дубликатор домофонных ключей (iButton) с мозгами из Arduino Nano

Внутренности ключа:

Дубликатор домофонных ключей (iButton) с мозгами из Arduino Nano

Внутренности прибора:

Дубликатор домофонных ключей (iButton) с мозгами из Arduino Nano

Дубликатор домофонных ключей (ibutton) с мозгами из arduino nano

Добрый день! Как-то надоело платить по 150 рублей за копию ключа от домофона и решил собрать простой, бюджетный дубликатор iButton на Arduino. Цены на подобные готовые устройства «кусаются», хотя и функционал у них шире, копируют практически всё, включая беспроводные ключи. Мне достаточно простого копирования ключа iButton а-ля «кнопка». Интересно? Прошу под «cut»!

Итак, приступим! Для начала «техзадание», что должно уметь это устройство:
1) Читать содержимое ключа, интересно же что там зашито.
2) Копировать ключи, как это ни странно звучит 🙂
3) Прошивать «универсальный» ключ. Под словом «универсальный» будем понимать какой-либо свой ключ, который будет записываться по-умолчанию.

Мозгами будет Arduino Nano v3 неоднократно рассмотренная на этом ресурсе.

Корпусом для этого устройства будет служить неисправный «однобаночный повербанк», так же неоднократно обозримый и тут, и там. Из внутренностей «повербанка» останется только печатная плата с гнёздами USB и MicroUSB. Через MicroUSB будем питать устройство от 5В, так же может быть запитано от порта Mini-USB Arduino. Через USB подключим считыватель iButton. Всё остальные электронные компоненты выпаяны из платы «повербанка». Кнопка для дубликатора куплена в оффлайне, ничего особенного в ней нет, обычная, без фиксации. В корпусе проделаны отверстия для порта Mini-USB расположенного на плате Arduino и над кнопкой «Reset».
Дубликатор домофонных ключей (iButton) с мозгами из Arduino Nano

Считыватель iButton, взят от какого-то неведомого устройства, ничего особенного в нём нет, просто контактная площадка. К считывателю припаян USB штекер. Так как разъём используется не по назначению и чтобы ничего не «сжечь» при подключении считывателя к порту ПК, ноутбука или зарядного устройства, для подключения используются провода зелёного «Data » и белого «Data-» цвета.
Дубликатор домофонных ключей (iButton) с мозгами из Arduino Nano
Дубликатор домофонных ключей (iButton) с мозгами из Arduino Nano

Дубликатор со считывателем и ключами:

Дубликатор домофонных ключей (iButton) с мозгами из Arduino Nano

Светодиоды для индикации процесса прошивки на корпус не стал выводить, корпус белый и хорошо просвечивается, всё видно.

Схема подключения:
Дубликатор домофонных ключей (iButton) с мозгами из Arduino Nano
Резистор R2 поставил 1кОм, в интернетах пишут что надо 2,2 кОм.

Программное обеспечение. Для компиляции необходима библиотека

OneWire

взять её можно

тут

.

Скетч от 27.06.2021

Дубликатор домофонных ключей (iButton) с мозгами из Arduino Nano

#include <OneWire.h>

#define pin 11
OneWire ibutton (pin); // Пин D11 для подлючения iButton (Data)
byte addr[8];
byte ReadID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F }; // "Универсальный" ключ. Прошивается последовательность 01:FF:FF:FF:FF:FF:FF:2F

const int buttonPin = 6;
const int ledPin = 13;
int buttonState = 0;
int writeflag = 0;
int readflag = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  Serial.begin(115200);
}

void loop() {

  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    readflag = 1;
    writeflag = 1;
    digitalWrite(ledPin, HIGH);
  }
  if (!ibutton.search (addr)) {
    ibutton.reset_search();
    delay(50);
    return;
  }

  digitalWrite(ledPin, HIGH);
  delay(50);

  for (byte x = 0; x < 8; x  ) {
    Serial.print(addr[x], HEX);
    if (readflag == 0) {
      ReadID[x] = (addr[x]);
    }
    Serial.print(":");
  }

  byte crc; // Проверка контрольной суммы
  crc = ibutton.crc8(addr, 7);
  Serial.print("CRC: ");
  Serial.println(crc, HEX);
  digitalWrite(ledPin, LOW);

  if ((writeflag == 1) or (Serial.read() == 'w')) {
    ibutton.skip(); ibutton.reset(); ibutton.write(0x33);
    Serial.print("  ID before write:");
    for (byte x = 0; x < 8; x  ) {
      Serial.print(' ');
      Serial.print(ibutton.read(), HEX);
    }
    // send reset
    ibutton.skip();
    ibutton.reset();
    // send 0xD1
    ibutton.write(0xD1);
    // send logical 0
    digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(60);
    pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);

    Serial.print('n');
    Serial.print("  Writing iButton ID:n    ");
    byte newID[8] = { (ReadID[0]), (ReadID[1]), (ReadID[2]), (ReadID[3]), (ReadID[4]), (ReadID[5]), (ReadID[6]), (ReadID[7]) };
    ibutton.skip();
    ibutton.reset();
    ibutton.write(0xD5);
    for (byte x = 0; x < 8; x  ) {
      writeByte(newID[x]);
      Serial.print('*');
    }
    Serial.print('n');
    ibutton.reset();
    // send 0xD1
    ibutton.write(0xD1);
    //send logical 1
    digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(10);
    pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);
    writeflag = 0;
    readflag = 0;
    digitalWrite(ledPin, LOW);
  }
}

int writeByte(byte data) {
  int data_bit;
  for (data_bit = 0; data_bit < 8; data_bit  ) {
    if (data & 1) {
      digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
      delayMicroseconds(60);
      pinMode(pin, INPUT); digitalWrite(pin, HIGH);
      delay(10);
    } else {
      digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
      pinMode(pin, INPUT); digitalWrite(pin, HIGH);
      delay(10);
    }
    data = data >> 1;
  }
  return 0;
}

Скетч от 04.09.2021, добавлена функция восстановления ключей с неправильным family code

Дубликатор домофонных ключей (iButton) с мозгами из Arduino Nano

#include <OneWire.h>

#define pin 11
OneWire ibutton (pin); // Пин D11 для подлючения iButton (Data)
byte addr[8];
byte ReadID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F }; // "Универсальный" ключ. Прошивается последовательность 01:FF:FF:FF:FF:FF:FF:2F

const int buttonPin = 6;
const int ledPin = 13;
int buttonState = 0;
int writeflag = 0;
int readflag = 0;
int val = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  Serial.begin(115200);
}

void loop() {

  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    readflag = 1;
    writeflag = 1;
    digitalWrite(ledPin, HIGH);
    val  ;
    if (val > 6) val = 6;
    Serial.print(val);
    delay(500);
  }
  else {
    val = 0;
  }


  if (!ibutton.search (addr)) {
    ibutton.reset_search();
    delay(50);
    if (val <= 5) return;
    val = 0;
  }

  digitalWrite(ledPin, HIGH);
  delay(50);

  for (byte x = 0; x < 8; x  ) {
    Serial.print(addr[x], HEX);
    if (readflag == 0) {
      ReadID[x] = (addr[x]);
    }
    Serial.print(":");
  }

  byte crc; // Проверка контрольной суммы
  crc = ibutton.crc8(addr, 7);
  Serial.print("CRC: ");
  Serial.println(crc, HEX);
  digitalWrite(ledPin, LOW);

  if ((writeflag == 1) or (Serial.read() == 'w')) {
    ibutton.skip(); ibutton.reset(); ibutton.write(0x33);
    Serial.print("  ID before write:");
    for (byte x = 0; x < 8; x  ) {
      Serial.print(' ');
      Serial.print(ibutton.read(), HEX);
    }
    // send reset
    ibutton.skip();
    ibutton.reset();
    // send 0xD1
    ibutton.write(0xD1);
    // send logical 0
    digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(60);
    pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);

    Serial.print('n');
    Serial.print("  Writing iButton ID:n    ");
    byte newID[8] = { (ReadID[0]), (ReadID[1]), (ReadID[2]), (ReadID[3]), (ReadID[4]), (ReadID[5]), (ReadID[6]), (ReadID[7]) };
    ibutton.skip();
    ibutton.reset();
    ibutton.write(0xD5);
    for (byte x = 0; x < 8; x  ) {
      writeByte(newID[x]);
      Serial.print('*');
    }
    Serial.print('n');
    ibutton.reset();
    // send 0xD1
    ibutton.write(0xD1);
    //send logical 1
    digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(10);
    pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);
    writeflag = 0;
    readflag = 0;
    digitalWrite(ledPin, LOW);
  }
}

int writeByte(byte data) {
  int data_bit;
  for (data_bit = 0; data_bit < 8; data_bit  ) {
    if (data & 1) {
      digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
      delayMicroseconds(60);
      pinMode(pin, INPUT); digitalWrite(pin, HIGH);
      delay(10);
    } else {
      digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
      pinMode(pin, INPUT); digitalWrite(pin, HIGH);
      delay(10);
    }
    data = data >> 1;
  }
  return 0;
}

Как это работает:

Читайте также:  Как увидеть флешку на компьютере рутокен

Для вывода содержимого ключа подключаем дубликатор через порт Mini-USB к компьютеру. Устанавливаем драйвер устройства.
В диспетчере устройств появится COM-порт с каким-либо номером, в моём случае 4.

Запускаем программу

Putty

, выбираем тип соединения «Serial» прописываем номер COM порта, в моём случае 4, и скорость 115200.

Нажимаем кнопку «Open» и прикладываем ключ к считывателю.

Для копирования прикладываем ключ к считывателю. Светодиод на корпусе Arduino подключенный к пину D13 начинает мигать, это говорит о том, что код ключа считался в память дубликатора. Нажимаем «зелёную» кнопку записи, светодиод начинает светиться постоянно. Прикладываем ключ который хотим записать, светодиод тухнет и примерно через 1 секунду начинает мигать, это значит что ключ записан.

Для записи «универсального» ключа включаем дубликатор и не прикладывая к считывателю ключа нажимаем «зелёную» кнопку записи, светодиод начинает светиться постоянно. Прикладываем ключ который хотим записать, светодиод тухнет и примерно через 1 секунду начинает мигать, это значит что ключ записан.

Важно! При записи «универсального» ключа, например такого 01:FF:FF:FF:FF:FF:FF:2F, нужно правильно указать контрольную сумму ключа, в данном случае 2F это и есть контрольная сумма, рассчитывается по особому алгоритму, который описывать не вижу смысла. Ключ можно записать с кривой контрольной суммой, и скорее всего считываться устройствами (домофонами, панелями) он будет, но устройства будут его игнорировать.

Например нам нужно прошить ключ 01:12:34:56:AB:CD:EF:XX. Первый байт, передаваемый из памяти ключа, является кодом типа устройства — family code, всегда 01. После него идёт гарантированно уникальный серийный номер (6 байт) 12:34:56:AB:CD:EF. Последний байт XX несёт информацию Cyclic Redundancy Check (CRC), что означает проверочный циклический избыточный код. CRC специальным образом вычисляется от первых семи байт.
Для вычисления контрольной суммы вместо XX записываем любое шестнадцатеричное число, например AA. Получаем ключ следующего вида 01:12:34:56:AB:CD:EF:AA. Заменяем в скетче строку

byte ReadID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F };

на

byte ReadID[8] = { 0x01, 0x12, 0x34, 0x56, 0xAB, 0xCD, 0xEF, 0xAA };

прошиваем ключ и смотрим что там, а там видно что в поле CRC должно быть

Читайте также:  выгрузить ключ из криптопро на флешку

E0

.

Дубликатор домофонных ключей (iButton) с мозгами из Arduino Nano

Меняем в скетче строку

byte ReadID[8] = { 0x01, 0x12, 0x34, 0x56, 0xAB, 0xCD, 0xEF, 0xAA };

на

byte ReadID[8] = { 0x01, 0x12, 0x34, 0x56, 0xAB, 0xCD, 0xEF, 0xE0 };

снова прошиваем ключ и смотрим что там, а там теперь ключ с правильной CRC.

Дубликатор домофонных ключей (iButton) с мозгами из Arduino Nano

Коды ключей

тут

.

UPD. Очень важно! Если первый байт, family code, будет 00, например 00:12:34:56:AB:CD:EF:AA, то после прошивки ключ «умрёт», читаться он уже этим программатором, а возможно и другими, не будет. Выявлено опытным путём, спасибо товарищу belik1982‘у. Подробнее тут.

UPD. В скетч от 04.09.2021 добавлена функция восстановления ключей с неправильным family code, для этого необходимо приложить ключ к считывателю и удерживать кнопку в течение 6 секунд. После этого в ключ будет записан «универсальный» ключ. Спасибо за помощь товарищу krassalex‘у. Подробнее тут.

В итоге получаем полезную в хозяйстве штуку за смешные деньги, «болванки» для записи продают

тут

, хотя у нас в оффлайне можно найти по 30 рублей за штуку, у копировальщиков на рынке по 100 — 150 рублей :).

UPD.

О том какие типы ключей можно записать этим дубликатором читаем

тут

. Спасибо за помощь товарищу

biverov

‘у.

UPD.

Если ключ не пишется следуем

совету

товарища

andrey2596

.

Инструкция:

Дубликатор домофонных ключей (iButton) с мозгами из Arduino Nano

1. Вставляем две батарейки ААА.

2. Включаем тумблер, расположенный с правой стороны (загорается красный индикатор с надписью POWER и издается два коротких звуковых сигнала).

3. Подносим карточку или брелок к левой боковине, на уровне надписи POWER.

4. Нажимаем кнопку «READ». В ответ дубликатор пискнет 2 раза и загорается зеленый светодиод с надписью «PASS»

5. Убираем карточку или брелок с которого считали метку.

Читайте также:  ЭЦП участника ВЭД для личного кабинета Таможни (ФТС)

6. Подносим к копировальщику перезаписываемую карточку или брелок. Нажимаем кнопку «WRITE». На время загорится желтый светодиод с надписью BUSY и опять и раздастся двойной писк. Всё новом брелоком или карточкой можно пользоваться.

Как выбрать дубликатор?

При выборе дубликатора нужно понять задачи, функции, которые вам нужны.

Параметры на которые следует обратить внимание:

Интересные дополнительные функции:

  • ввод данных ключа вручную;
  • генерация случайных кодов;
  • совместимость с базой ikeybase;
  • удаление кодировки с заготовок tm1;
  • поддержка связи со смартфоном по bluetooth;

Комплект поставки:

— RFID 125KHz EM4100 ID Card Copier;

— перезаписываемы брелки 6шт;

— перезаписываемые карточки 6шт.;

— инструкция (англо-китайская).


Батарейки ААА в комплект не входят.

Популярные модели дубликаторов

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

  • KEYCOPY 2 – базовый дубликатор для создания копий контактных ключей Cyfral, Dallas и Metacom. Цена 3500 руб.
  • Синий дубликатор idcc4305 mini. Обычный прибор копирует RFID бесконтактные ключи и брелки на распространенные заготовки T5577 и EMM4305. Cтоит ~1500 руб.
  • KEYCOPY 4. Надежный современный обновляемый прибор для создания двух типов контактных ключиков, производителей Даллас, Цифрал, Метаком, Em-Marine, HID и других. Универсальный с различными функциями. Цена ~9000 руб. 
  • KEYMASTER 3 rf. Многоцелевое устройство, копирует карты, брелки, браслеты, ключи-таблетки. Обладает большой внутренней памятью, обновляется. Стоит ~5500 руб.

Чтобы быть в курсе новинок рынка и интересных свойств рекомендуем подписаться на наш канал.

Резистивные.

Есть экзотические домофоны, работающие с резистивными ключами. Вместо кода с них считывается сопротивление. Без сомнения, это контактные ключи, но я бы не назвал их Touch memory.

Дубликатор домофонных ключей (iButton) с мозгами из Arduino Nano

( их надо просто подносить к считывателю на расстояние 2-3 см).

Выпускаются в форме карт, брелоков, браслетов и пр. Бытовое название «карточки» и «капельки» (брелоки). Ключи действующие до 10-15 см называются Proximity (ближнего действия), а действующие до 1 м — Vicinity (дальнобойные). В домофонах используются исключительно ключи Proximity, и этот термин стал чуть ли не синонимом «бесконтактного ключа».

В мире Proximity тоже нет единства форматов:

Содержимое посылки:

Дубликатор домофонных ключей (iButton) с мозгами из Arduino Nano

Итог.

Всё прекрасно работает.

Если надо сделать несколько копий ключей RFID 125KHz, смело можете покупать, тем более что в комплекте 6 брелоков и 6 карт, а средняя цена за одну копию 100 рублей, выгода очевидна. Если брелоки или карточки закончатся на просторах интернета можно купить в пределах 20р.


Перед покупкой данного устройства рекомендую узнать частоту и тип вашего ключа, иначе Вы выбросите деньги на ветер.

Если обзор вам понравился, или помог в выборе устройства ставим лайки, это лучшая Ваша награда моего труда.Всем спасибо за внимание!

Товар предоставлен для написания обзора магазином. Обзор опубликован в соответствии с п.18 Правил сайта.

Оцените статью
ЭЦП Эксперт
Добавить комментарий