Дубликатор домофонных ключей (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, взят от какого-то неведомого устройства, ничего особенного в нём нет, просто контактная площадка. К считывателю припаян USB штекер. Так как разъём используется не по назначению и чтобы ничего не «сжечь» при подключении считывателя к порту ПК, ноутбука или зарядного устройства, для подключения используются провода зелёного «Data+» и белого «Data-» цвета.



Дополнительное фото






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

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

Схема подключения:

Резистор R2 поставил 1кОм, в интернетах пишут что надо 2,2 кОм.
Вовка одобряет...


Программное обеспечение. Для компиляции необходима библиотека OneWire взять её можно тут.
Скетч от 27.06.2016


#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.2016, добавлена функция восстановления ключей с неправильным family code


#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.

Меняем в скетче строку
byte ReadID[8] = { 0x01, 0x12, 0x34, 0x56, 0xAB, 0xCD, 0xEF, 0xAA };

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

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

Коды ключей тут.

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

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


Лирическое отступление
Сейчас с домофонами устанавливают всякие фильтры для проверки подлинности ключей. Самый подлый который мне попался, установлен у родителей в подъезде. Например в болванку зашит ключ 01:12:34:56:AB:CD:EF:E0, контрольная сумма верная и фильтр домофона пытается изменить один из 6 байт ключа, так как ключ перезаписываемый, то фильтру это удаётся. Теперь в болванке уже ключ 01:12:34:16:AB:CD:EF:E0 с естественно неверной контрольной суммой E0. Так как контрольная сумма неверная, то домофон игнорирует эту последовательность при считывании. Этот домофон загубил все перезаписываемые ключи, пока я разбирался в чём дело и почему «сами по себе» меняются данные в ключах. В итоге дубликат к этому домофону сделать не удалось, пришлось идти в обслуживающую организацию и заказывать ключик за 100 рублей. :)

В итоге получаем полезную в хозяйстве штуку за смешные деньги, «болванки» для записи продают тут, хотя у нас в оффлайне можно найти по 30 рублей за штуку, у копировальщиков на рынке по 100 — 150 рублей :).
UPD. О том какие типы ключей можно записать этим дубликатором читаем тут. Спасибо за помощь товарищу biverov'у.
UPD. Если ключ не пишется следуем совету товарища andrey2596.
Планирую купить +199 Добавить в избранное +95 +184
+
avatar
+7
Ай, молодец! Какой полезный штука замутил!
+
avatar
0
Полезная но ключики Цифрал не читает
+
avatar
  • lexx
  • 27 июня 2016, 01:07
+5
Что это за домофон который ключи меняет подскажите модель? И кстати а если ключ финализировать?
+
avatar
  • kvolk
  • 27 июня 2016, 01:17
+3
Болванки rw1990 не финализируются. Если взять другие ключи с финализацией, то домофон не сможет отличить его от неперезаписываемого ключа DS1990A и, скорее всего, откроет дверь. Но функция финализации не предусмотрена в этом дубликаторе. Для фнализации нужно подать 9В после определённой последовательности данных при записи. Довольно сложно это реализовать. Тут-то смысл в том, что дёшево, быстро, для большинства устройств подойдёт.
Домофон, предположительно Vizit, без опознавательных знаков, точнее они все затёрты.
+
avatar
  • lexx
  • 27 июня 2016, 01:22
0
На arduino uno r3 наверно можно подать 9В
+
avatar
  • kvolk
  • 27 июня 2016, 01:26
0
Без дополнительного обвеса — никак.
+
avatar
0


Номер ключа считывается, но затем что-то идет не так — при кратковременном замыкании D6 и +5 красный светодиод загорается на 1 секунду, а не светится постоянно. Так и должно быть?

Второй iButton не работает. Мог я его испортить во время попыток записи? Возможно он пока в кармане валялся пришел в негодность
+
avatar
  • kvolk
  • 16 января 2017, 15:43
0
при кратковременном замыкании D6 и +5 красный светодиод загорается на 1 секунду, а не светится постоянно.
Резистор подключили к кнопке?
Второй iButton не работает. Мог я его испортить во время попыток записи? Возможно он пока в кармане валялся пришел в негодность
Болванка точно RW1990?
+
avatar
0
Я кратковременным соединением провода идущего от +5 к контакту d6 включаю. Резистор соединен с проводом идущим к d6 контактной линией на брэдборде. Туда же кратковременно подключаю провод от +5

На фотографии плохо видно, но они подключены к линии 15 брэдборда. Я проверял. Там ноги резистора идут вверх и они слишком светлые на снимке.

К сожалению, я не знаю как определить тип болванки, но на днях мне принесут еще несколько — поэксперементирую с ними.
+
avatar
0
Достал еще 4 бывших в употреблении болванки. Три читаются, но не пишутся, а одна даже не читается. Итого у меня 6 болванок не записалось. Какова вероятность, что все не того типа либо финализированы?
+
avatar
  • kvolk
  • 22 января 2017, 10:44
0
У нас тут не центр обработки статистики, купите нормальные болванки.
+
avatar
0
А что так грубо? Можно было бы сказать: «да, вполне» или «маловероятно».
+
avatar
  • kvolk
  • 22 января 2017, 15:17
0
А что так грубо?
Где грубо? Покажите.
+
avatar
+1
Подать можно, да и на большинство остальных тоже, но не на ноги — только для питания через специальный пин.
+
avatar
0
Код ключа считал, но не записывает
+
avatar
  • kvolk
  • 16 января 2017, 15:43
+1
Болванка точно RW1990?
+
avatar
0
Не знаю. Как определить?
+
avatar
  • kvolk
  • 16 января 2017, 21:54
+1
Визуально почти никак.
+
avatar
0
Пожалуйста помогите найти ошибку. Ключ не клонируется
+
avatar
  • kvolk
  • 17 января 2017, 19:50
+1
Фото ключа покажите, это 100% не перезаписываемый или финализированный ключ.
+
avatar
0

+
avatar
  • kvolk
  • 17 января 2017, 22:36
+1
Если вы не можете её перезаписать этим дубликатором, значит этот ключ не rw1990.
+
avatar
0
Странно, что красный светодиод после короткого замыкания контактов d6 и +5 зажигается только на секунду. Я не успеваю приложить к контактам второй ключ. Я где-то накосячил?

Из изменений в схеме:
1. Не поставил кнопку, а дотрагиваюсь джампером до контакта.
2. Поставил не 1K, а 2K резистор
3. Питание от USB только на miniUSB Arduino Nano
+
avatar
  • kvolk
  • 17 января 2017, 23:46
+1
Резистор который на кнопке стоит нормальный? В скетче изменения производились?
+
avatar
0
Оба резистора проверил тестером — 9.97K и 1.99K.
Использовал скетч второй редакции. Изменений не производил.
+
avatar
0
+
avatar
  • kvolk
  • 18 января 2017, 22:30
+1
В конце обзора есть ссылка на ключи, на рубль дороже и продаж больше.
+
avatar
0
Да вроде не так уж сложно, глядя на схему — пара транзисторов как ключи и step-up до 9В (или крона, хотя она внутрь не влезет, вроде как)
+
avatar
  • volser
  • 27 июня 2016, 09:35
0
Так для этого устройства только rw1990 годные?
+
avatar
  • kvolk
  • 27 июня 2016, 09:47
0
Я использую rw1990, другие не пробовал, у меня их нет.
+
avatar
0
Подскажите пожалуйста, на Gnd и +5 питание подать от USB или от блока питания на 5V?
+
avatar
  • kvolk
  • 15 января 2017, 15:23
+1
А какая разница? И там и там 5В.
+
avatar
0
У меня есть блок питания на 4,5V. Подойдет?
+
avatar
  • kvolk
  • 15 января 2017, 18:42
+1
Да, конечно.
+
avatar
0
Если есть питание на miniUSB, то точно надо подать питание на Gnd и +5?
+
avatar
  • kvolk
  • 15 января 2017, 18:43
+1
Нет. Можно питать через порт Mini-USB.
+
avatar
0
Отлично! Задача облегчается. Спасибо!
+
avatar
0
Я обломался. Пробовал на двух компах. С Win7 и Win10 и с тремя кабелями. Устанавливал софт, вручную пытался обновлять драйвер, скачивал драйвер, переустанавливал софт, пытался бросить (reset нажать, подключить кабель, reset отпустить) и всё-равно пишет «Другие устройства USB2.0_Serial»
Заказывать другой Arduino Nano?
+
avatar
  • kvolk
  • 16 января 2017, 07:39
0
Видимо глючная ардуина.
+
avatar
0
Перевел Win10 в тестовый режим и поставил драйвер CH340. Заработало. Библиотеку загрузил. Ваш скетч загрузил. Сейчас попробую копировать iButton. Спасибо!
+
avatar
+8
Вопрос на засыпку — вы ключи от квартиры столь же часто копируете/теряете? )))
Это намёк на то, что полезность устройства весьма ммм… сомнительна чтоли… Впрочем, правильный кот вполне вполне оправдывает автора (про стремление к рукоблудию я уж не говорю — оно похвально по умолчанию! ))).
+
avatar
  • kvolk
  • 27 июня 2016, 01:42
+4
Не часто, но иногда обслуживающая организация делает ревизию ключей, ставит домофон на «обучение» на недельку, и все те кто не пользовался ключами в эту неделю попасть к себе в дом не могут. На вопрос: «Почему не работает?» отвечают: «Сломался ключ, покупайте новый!», хотя ключи прекрасно читаются, это бизнес :). А так как у нас есть резервные связки ключей, для родственников и гостей, которыми мы не пользуемся месяцами, то эти ключи перестают работать :(. Именно по этой причине запилил этот дубликатор.
+
avatar
  • katran
  • 27 июня 2016, 01:52
+2
все проще. потребуй от организации цифровой код на открытие
он есть практически на всех домофонах
.
и его дай гостят\родственикам
+
avatar
  • kvolk
  • 27 июня 2016, 01:54
+2
«Сломался ключ, покупайте новый! Кода нет!» Как-то так :)
+
avatar
  • katran
  • 27 июня 2016, 02:56
+4
код есть! всегда. просто надо начать выносить мозг этим клоунам
.
не кто не имеет права ограничивать вход в подъезд
.
если чтото не нравится пускай их человек сидит у двери 24\7 и открывает по первому требованию
+
avatar
+1
естественно коды есть. но их не дают.
не каждый пойдёт в суд из-за кода…
+
avatar
+4
Домофон — общая собственность жильцов.
Они могут (общим решением) делать с ним всё, что хотят: снять, поставить, выключить, включить, сменить обслуживающую организацию, программировать самостоятельно, и т. д.
Подсказать, что нужно делать?
+
avatar
+2
Если дом этажей 17 и подъездов так 7, подскажите как заставить эту массу народа прийти на собрание.
+
avatar
0
На Ваш домофон скидывались все 7 подъездов?
Кроме того, для добросовестного использования общего имущества не всегда требуется общее согласие.
+
avatar
+1
домофон был при постройке дома. входит он в общедомовое имущество.
Подскажите, как цивилизованно решить вопрос с кодом не прибегая к общему собранию.
+
avatar
+1
Обратиться с письменным требованием-претензией в УК. Договор с обслуживающей организацией наверняка заключала она. Как обычно, лучше «коллективно» (распечатайте N заявлений, попросите соседей их подписать, отправьте их отдельными ценными письмами (чтобы была опись) ценностью 1 рубль).
Это может быть долгий путь.

Быстрый и неофициальный — наладить личные отношения с инженером, обслуживающим домофон.

Более неофициальный — прописать самому. Если подойдёт один из «стандартных» — даже вскрывать ничего не надо…

А вообще, я не адвокат. :) Я думаю, это не то место, где нужно это обсуждать.
+
avatar
0
Более неофициальный — прописать самому. Если подойдёт один из «стандартных»
не подойдет, потому что для входа в режим программирования нужен индвидуальный код домофона, который написан внутри блока электроники. Который не находится в вызывной панели и его нужно еще найти.
С жалобами понятно, на жалобу будет дан официальный ответ, что работа кодов непредусмотрена (хоть мы и знаем, что это не так). Всё.
А дальше только в суд, а это минимум на пол года тягомотина.
+
avatar
0
Я разве говорил, что с панели? ;)
+
avatar
  • katran
  • 27 июня 2016, 12:07
+1
какой суд ты о чём?

P.S.
многие банально не знают про наличии Кодов доступа, по мимо ключей.
а эти «клоуны» намерено скрывают такую возможность работы системы
(всем хочется побольше поиметь с жильцов помимо абонентской платы, это просто бизнес нечего личного )
+
avatar
0
Дело было в прошлом году: приятель написал заявление в домофонную конторку и ему дали код. А вот когда его отец поступил точно так-же -отказали. Только через суд удалось добиться предоставления кода. Основной аргумент домофонщиков -нарушение уровня безопасности…
То есть когда народ тупо кирпичом дверь подпирает -это безопасно, а если я дал код знакомому -это ужас-ужас…
+
avatar
  • katran
  • 27 июня 2016, 21:36
-1
хочешь сказать что они материально отвечают за имущество и здоровое жильцов?
+
avatar
0
конечно они ни за что не отвечают, тупо голову «любят».
+
avatar
  • SEM
  • 28 июня 2016, 09:24
+3
Я, как житель, категорически против кодов домофонов, т.к. «копирование кода» никак не ограничено. Сегодня по коду ходит родственник жильцов квартиры напротив, завтра код узнал ещё кто-то, послезавтра его знают все наркоманы и любители погрызть семечки в тепле.
Только ключи (таблетки или карты), только по количеству официально проживающих.
+
avatar
  • kvolk
  • 28 июня 2016, 10:29
+2
Согласен, с кодом полный бардак, через месяц будет известен всем. Родители сказали сказали детям, дети всему двору, или на двери маркером напишут.
+
avatar
  • katran
  • 28 июня 2016, 10:49
+2
Только ключи (таблетки или карты), только по количеству официально проживающих.
которые копируются на раз два.и от которых по сути нет толку кто хочет тот и ходит…
да и вообще если надо звони в любую квартиру и говори почта… откроют в 9 из 10 квартир
.
обще-подъездный домофон по сути не более чем закрывалка двери от сквозняка и ВСЁ
.
хотя некоторые верят что домофон их спасёт от кражы или гопоты

P.S.
да и вообще если угодно можешь домофонщиков хоть каждую неделю заставить менять код…
они не плохие $$ за воздух получают (абонентской платой с дома)
хотя большинство таких нытиков боятся права качать, дальше чем в интернете

P.S.S.
я лично против когда кто-то там решил что он имеет права ограничить доступ. да ещё за это требует $, при этом не неся не какой ответственности материальной
+
avatar
  • SEM
  • 28 июня 2016, 11:53
+1
которые копируются на раз два.и от которых по сути нет толку кто хочет тот и ходит…
Чтобы скопировать — нужно иметь оригинал и потратить 150 рублей. Это хоть какой-то барьер от желающих поссать в подъезде, в отличие от кода, нацарапанного на двери.

Но с тезисом «домофонная компания гребёт бабло из воздуха» согласен, умножил сумму из квитанции на число квартир в подъезде, за год сумма превышает стоимость домофона.
А если соскочить с обслуживания — кто-то должен будет взвалить на себя работу по замене ключей, вызове ремонтников в случае поломки домофона и сбору денег на этот ремонт. И скандалам с теми кто деньги не сдаёт — им ведь вход в подъезд не запретишь, а переговорным устройством пользоваться им м.б. и не надо.
+
avatar
0
Только ключи (таблетки или карты), только по количеству официально проживающих.
А смысл?
Если кому нужно пройти в подъезд тупо постоит полчаса возле подъезда.
войдет вслед за входящим или выходящим.
+
avatar
  • SEM
  • 30 июня 2016, 10:21
0
Или не станет ждать и пойдёт в ссать в другой подъезд.
Да и жители бывают разные, некоторые таких «просачивающихся» принципиально не пускают, «открывай своим ключом или звони к кому пришёл». Особенно если это пьяный бомж или группа быдлодетей с «ягуаром» и семечками.
+
avatar
0
Коды меняются.
Для своего домофона я нашел алгоритм без мастер-ключей- требуется подтверждающее нажатие на кнопку из квартиры для смены.
п.с. ежемесячная плата раньше даже покрывала стоимость домофона (основного блока)
+
avatar
+2
Встречались такие. Залез в домофон, вытащил из панельки eeprom-ку и вычитал содержимое. Для визитов есть софт, который показывает по дампу все пароли, ну и ключи
+
avatar
-3
Купил универсальный ключ и нет проблем.
+
avatar
  • kvolk
  • 27 июня 2016, 09:23
+3
А что вы понимаете под словом «универсальный»?
+
avatar
+1
Может фомку? )
+
avatar
  • vadik
  • 30 июня 2016, 15:52
0
Пустой (тобишь забитый нулями или единицами). Зачастую подходит.
+
avatar
0
Разве? В HEX значит или одни «0» или «F»?
+
avatar
  • vadik
  • 17 января 2017, 01:42
0
В памяти домофона скажем триста ячеек, квартир в доме 40. Настройщики вбивают эти сорок ключей и не удосуживаются обнулить остальные 260. А они то по умолчанию забиты единицами/нулями/эфками.
+
avatar
0
Ого! Спасибо за информацию. А я нашел таблицу из 15 ключей для разных домофонов, но сюда url постить нельзя :-(
+
avatar
  • vadik
  • 19 января 2017, 00:51
+1
Почему же нельзя, в окошке написания сообщения вверху есть значек похожий на цепь…
+
avatar
  • kvolk
  • 19 января 2017, 07:35
+1
Нельзя — в смысле можно, но делать этого не стоит.
+
avatar
+2
Гнать взашей эту шарашкину контору. У нас тоже одно время обслуживала подобная хитрожопая фирма. То ключи резко переставали у всех работать, то домофон неделями был выключен. Потом заключили договор на обслуживание с другой организацией и уже шестой год никаких проблем.
С тех пор ни разу ключи не меняли, хотя сам домофон был год назад заменён на новый.
И вроде бы ключи они бесплатно в офисе раздают, по предъявлению паспорта.
+
avatar
  • clavic
  • 27 июня 2016, 08:22
0
Хм…
У меня компания обслуживающая домофон, новый (вместо утерянного) ключ вообще бесплатно выдала, единственное — пришлось ждать приезда специалиста пару дней, а когда я попросил несколько про запас, тогда пришлось заплатить, но символически, по 50р. за ключ…
+
avatar
0
почти доллар — это не символически. У автора дешевле должны быть болванки.
А вот халявный курьер — это приятно.
+
avatar
+1
общественность, посоветуйте тематические форумы, где можно задать нубовопросы по ардуине ))
+
avatar
+3
forum.arduino.cc
arduino.ru
+
avatar
0
Спасибо за обзор!
Давно хотел позаморачиваться с ардуиной :)
+
avatar
+1
Спасибо за обзор и скетч, как раз такой копировщик понадобился оперативно, пока для RECTO контроллеры идут.Полезная штука, дополните только, что для записи скетча необходимо еще библиотеку OneWire подключить. Ну и где ее скачать, не все об этом знают.
Однозначно плюс.
+
avatar
  • kvolk
  • 27 июня 2016, 07:06
0
В версии ардуино иде 1.6.9 я не подключал библиотеку, как я понял она сама подтягивается из репозитория.
+
avatar
+1
Мне пришлось скачивать и подключать, версия та же.
+
avatar
  • kvolk
  • 27 июня 2016, 07:22
0
Интересно, я вчера искал эту библиотеку у себя на компе и не нашел, решил что она подтягивается из репозатория. В одном из файлов нашел только ссылку на загрузку этой библиотеки. На всякий случай добавил ссылку в обзоре.
+
avatar
  • kvolk
  • 28 июня 2016, 21:41
+1
Да, подключать нужно. Установил себе SSD, и естественно все документы и прочие пользовательские данные перенёс на другой раздел. А эта библиотека была установлена в папку документы/arduino/library, которая естественно переехала на другой раздел. Искал не там, и естественно не нашел. В общем «тупанул» :)
+
avatar
0
Как стереть ключ? Или перезаписать? У меня куча ключей с ненужной информацией.
+
avatar
  • kvolk
  • 27 июня 2016, 15:06
0
Попробую в «двух словах» объяснить. Есть ключи которые можно перезаписывать, например rw1990. Есть ключи которые программируются на заводе и не могут быть перепрограммированы никаким образом, например DS1990A. Как перезаписать ключ с помощью дубликатора:
1. Собрать дубликатор.
2. Приложить исходный ключ к считывателю.
3. Нажать кнопку.
4. Приложить ключ который хотим перепрограммировать.
Всё.
+
avatar
  • Pash
  • 27 июня 2016, 08:07
+1
Сначала обрадовался, что наконец для таблеток дубликатор, а почитал и опечален. Из всех составляющих нет главного — считывателя. ТС от какого-то прибора использовал, вот только у другой публики, таких неведомых приборов не водится. Где можно приобресть эту штуку, или как она называется?
+
avatar
  • kvolk
  • 27 июня 2016, 08:20
+10
Вы прикалываетесь? Считыватель это всего лишь 2 провода, нет считывателя возьмите гнездо от батарейки с материнской платы, нет гнзда — прижимайте 2 провода пальцами :) Купите вконце концов на али или ебее 200р стоит.
+
avatar
  • Pash
  • 27 июня 2016, 09:38
+3
Вы прикалываетесь?
А вы считаете что все гении в электронике? Очевидные для вас вещи, не всегда понятны малопонимающим в этой области. Теперь, канешна, стыдно, что сам не догадался. Но в любом случае, спасибо, что не заминусили.
+
avatar
  • kvolk
  • 27 июня 2016, 09:50
+1
Считыватель iButton, взят от какого-то неведомого устройства, ничего особенного в нём нет, просто контактная площадка.
Как бы в обзоре об этом написано.
+
avatar
+3
Если человек не разбирался с ключами, да еще и в электронике плавает, то может пропустить инфу даже если она выделена жирным красным цветом большого размера.
Потом когда дойдет, сидит и плюется, да вот… оно все так просто :( :)
+
avatar
  • girox
  • 27 июня 2016, 08:56
+2
считыватель по сути — 2 контакта, прижимаемые к центральной и боковой частям таблетки, только в удобном форм-факторе
P.S. опередили выше:)
+
avatar
+1
возьмите пластиковую бельевую прищепку, 2 болтика в губки — вот вам и считыватель для баттонов. Кстати — на порядок надежнее контакт, чем в родном…
+
avatar
0
гнезда есть на али
+
avatar
  • lexx
  • 27 июня 2016, 14:22
0
Ссылку
+
avatar
  • kvolk
  • 27 июня 2016, 14:49
+1
Поиск по фразе «ibutton reader». Вот на Али, вот на Ебее. Дорого? Сколхозить считыватель можно из держателя для батареи cr2032.
+
avatar
+1
> По традиции

Наверное, повторюсь не в первый (и даже не в десятый) раз, но, вижу, некоторым это всё же не известно: «традиция» в том, чтобы фотографировать купленный товар на фоне домашних питомцев как доказательство факта его приобретения. А не просто «котофото» и прочая «милота». :) В Вашем случае вряд ли возникнут сомнения в том, что Вы товар действительно покупали, а не взяли фото в Сети. :)
+
avatar
  • kvolk
  • 27 июня 2016, 09:25
+1
Ясно, понятно!
+
avatar
0
Вы убрали КОТА????
+
avatar
  • kvolk
  • 27 июня 2016, 10:37
0
Кошку :)
+
avatar
0
Неважно! Верните взад плиз, не слушайте буквоедов!
+
avatar
+2
Коты в конце обзора — это уже просто традиция.
Не могу припомнить случая, когда у автора требовали фотографий, подтверждающих факт покупки.
Фото из сети в 99% случаев легко вычисляются.
+
avatar
0
Запускаем программу Pytty
+
avatar
  • kvolk
  • 27 июня 2016, 09:28
0
Очепятка. Спасибо, поправил! :)
+
avatar
0
Как насчет последних метаковских ключей?
+
avatar
  • kvolk
  • 27 июня 2016, 09:52
0
Понятия не имею.
+
avatar
  • DainB
  • 27 июня 2016, 09:27
0
А нет такого же но с перламутровыми пуговицами для RFID токенов?
+
avatar
  • kvolk
  • 27 июня 2016, 09:29
0
Всё есть, надо только собрать и скетч написать. Руки ещё не дошли.
+
avatar
0
А считыватель RFID для Ардуино продается?
Ведь контактной площадкой не обойдешься
+
avatar
  • kvolk
  • 27 июня 2016, 10:42
+3
А считыватель RFID для Ардуино продается?
Этот на 13 МГц.
Этот на 125 КГц.
Ведь контактной площадкой не обойдешься
Само собой разумеется!
+
avatar
  • kvolk
  • 27 июня 2016, 15:17
0
На 125 КГц проще и дешевле купить уже готовый дубликатор. Или вот, вроде бы как «всеядный».
+
avatar
+1
Отличная статья, спасибо за скеч, фото и разжёвывание всех моментов.
Буду делать себе такой же.
ЗЫ плюсануть не могу, кармы не хватат, поэтому от меня +1 за кадром
+
avatar
+1
Спасибо за обзор. +
Вот может кому будет интересно. Дубликатор на почти все случаи жизни. Правда не на ардуино (посложнее в исполнении), но тоже ничего страшного. Сам собирал (сначала на макетке, потом ЛУТом) всё с первого раза завелось.
А есть и на ардуино. Его я не пробовал, но люди пишут, что работает.
+
avatar
  • dsr
  • 27 июня 2016, 13:02
0
Что-то по второй ссылке не видать ардуину…
+
avatar
  • kvolk
  • 27 июня 2016, 13:04
+1
Как это нет? Ардуино про мини. На приципиальной схеме она обозначена.
+
avatar
  • sav13
  • 27 июня 2016, 16:27
+1
Такой просится собрать на на тиньке в маленьком корпусе и батарейкой литиевой на 3В.
Чтобы размер был с обычный домофонный ключ. А то такую хреновину как то не очень в кармане носить.
А в этом можно до кучи собрать бутфорсер с экранчиком, пароли на цифровых замках перебирать, как в голливудсктх фильмах.
+
avatar
  • Q2W
  • 27 июня 2016, 17:14
0
Боюсь, после каждой попытки домофон делает слишком большую паузу, чтобы брутфорс прошёл за адекватное время.
+
avatar
  • kvolk
  • 27 июня 2016, 17:27
0
Полностью согласен, да и времени понадобится не мало для перебора, разве что по словарю.
+
avatar
  • sav13
  • 27 июня 2016, 17:33
0
Народ так взламывает аймаки с залоченной клавиатурой. Там пауза 12 сек после каждого кода — пароль 4 цифры. Время взлома порядка 2-х суток.
+
avatar
  • sav13
  • 27 июня 2016, 17:34
0
Какой там словарь — дни цифры )))
+
avatar
  • Q2W
  • 27 июня 2016, 18:31
+1
Оставить на двое суток ноут и стоять двое суток у домофона — удовольствия разного уровня =).
+
avatar
+1
А зачем стоять у домофона двое суток?
и при количестве битности 6 байт, вам прийдется ждать гораздо больше чем 10К вариантов у Эппла :)), годиков так на 1000+
+
avatar
  • mivaybki
  • 17 августа 2016, 14:42
0
данный скетч успешно собирается под attiny85, так что это вполне реально сделать
+
avatar
  • kvolk
  • 18 августа 2016, 02:02
0
Это хорошо. Можно уменьшать габариты.
+
avatar
  • kvolk
  • 21 ноября 2016, 23:14
0
Без модификации?
+
avatar
0
Хочу добавить, что существуют несколько систем домофонов, с разными протоколами. Хотя все они будут иметь внешне одинаковый домофонный ключ iButton (металлическая таблетка ключа). Это протоколы Metakom, Cyfral и собственно Dallas (о котором речь в статье)). Статья подходит только тем, у кого домофон работает по протоколу Dallas. Есть заготовки под конкретный протокол, так и универсальные, которые можно запрограммировать под любую систему.
P.S. С iButton работал еще в 90х :). Например с логгерами температуры (DS1921H) и управление ими с КПК Palm :). Собственный аппаратно-программные разработки.
+
avatar
  • kvolk
  • 27 июня 2016, 17:29
0
Всё верно.
+
avatar
  • kvolk
  • 28 июня 2016, 21:57
+1
Но с поправками, сегодня проверил цифрал, метаком, визит. Приняли «универсальный» ключик, как родной. Дело в том, что все (99 ,9 %) устройства понимают ключи Даллас, если конечно не отключили инженеры обслуживающей организации, и если там вшит нужный ключик, то дверь откроется. Например, есть у меня оригинальный ключ от Визита, домофон по этому ключу в подъезд пускает, обозреваемый дубликатор прочитать этот ключ не может, НО «универсальный» ключ прошитый этим дубликатором домофон принимает и открывает дверь. Фраза
Статья подходит только тем, у кого домофон работает по протоколу Dallas.
означает, что подходит для большинства устройств. Другое дело если в домофоне установлен фильтр. Но его выявить тоже можно, например как тот, который меняет ключ. Если приложить неперезаписываемый «левый» ключ, домофон начинает «визжать» Error. Если приложить перезаписываемый, тупо молчит, ничего не происходит, как будто нет ключа. И это понятно, ключ перезаписан, crc не совпадает, ошибка чтения = отсутствие ключа.
+
avatar
0
народ, какой crc должен быть у такого ключа: 00:00:00:FE:D4:53? семейсво 01.
+
avatar
  • kvolk
  • 29 июня 2016, 17:11
0
01000000FED4531E, вечером проверю в дубликаторе.
+
avatar
  • kvolk
  • 29 июня 2016, 18:34
0
Всё верно, 01000000FED4531E.
+
avatar
0
спасибо
+
avatar
0
что-то не сходится. где-то ошибка.
если не трудно, проверьте еще вот этот ключ 00:36:5A:11:40:BE код семейства 01. crc какой должен быть?
+
avatar
  • kvolk
  • 01 июля 2016, 06:57
0
Всё сходится, только ключ этот задом наперёд записан. 01:be:40:11:5a:36:00:e1
+
avatar
0
да нет, ключ не задом наперед написан.
+
avatar
  • kvolk
  • 01 июля 2016, 11:57
0
Ну да конечно, 01 в конце стоять не может, прочтите обзор, там всё написано.
Первый байт, передаваемый из памяти ключа, является кодом типа устройства — family code, всегда 01.
и теперь посмотрите на Ваш ключик:
E1 00 36 5A 11 40 BE 01 – код универсального ключа в формате Даллас, для устаревших моделей домофонов марки Vizit.
Так что если вы хотите прошить этот ключ этим дубликатором, нужно байты записать в обратном порядке, начиная с 01:be:40:11:5a:36:00:e1.
Разные программаторы по разному выводят ключ, одни начиная с 01, другие с CRC. Интернеты вам в помощь.
+
avatar
0
вообще-то на всех ключах tm1990a код семейства стоит в конце. вот пример ключа переписаный с таблетки: 16 000001F8A473 01.
+
avatar
  • kvolk
  • 04 июля 2016, 09:44
0
Первый байт, передаваемый из памяти ключа, является кодом типа устройства — family code, всегда 01.
А передаётся всегда первым.
+
avatar
  • kvolk
  • 04 июля 2016, 10:48
0
Почитать тут.
+
avatar
0
Ребят подскажите, у меня скетч не компилируется.
Arduino: 1.6.10 (Windows 7), Плата:«Arduino Nano, ATmega328»

C:\Users\Андрей\Documents\Arduino\sketch_aug03a\sketch_aug03a.ino: In function 'void loop()':

sketch_aug03a:74: error: 'writeByte' was not declared in this scope

exit status 1
'writeByte' was not declared in this scope

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
«Показать подробный вывод во время компиляции»
+
avatar
0
Вопрос решен, установил иде 1.6.9 все скомпилировалось.
+
avatar
  • kvolk
  • 13 сентября 2016, 11:20
0
Проблема в русских буквах в имени пользователя — может кому-нибудь пригодится.
+
avatar
  • spirt
  • 22 августа 2016, 23:14
0
Купил Arduino nano v3, подключил на комп по USB — горит POW и мигает L, а в трее вылезло сообщение «Одно из подключенных к этому компьютеру USB-устройств работает неправильно, и Windows не удаётся опознать его». Попробовал подключить на другом компе — тоже самое.
Мне брак попался или я что-то сделал неправильно?
+
avatar
  • kvolk
  • 24 августа 2016, 10:28
0
Или брак, или кабель замените. Скорее всего дело в шнурке.
+
avatar
+1
Подскажите пожалуйста. Собрал сей девайс. Прикупил 10 болванок перезаписуемых. Все работает отлично, но в процессе тестирования, по дурочке в строке адреса универсального ключа изменил первый байт с 01 на 00 и попытался прошить болванку. После записи болванка умерла (точне 2шт умерло) После записи она не читается и не перезаписывается. Это всё — трупы?
+
avatar
  • kvolk
  • 29 августа 2016, 15:47
0
Скорее всего да. Я так 4 болванки загубил и не понял как. Читаться они перестают, просто не видятся дубликатором, так?
+
avatar
+1
Да, именно так. превратились в трупы. Спасибо за ответ, главное что не я один такой ламастер, теперь будет опыт.
+
avatar
  • kvolk
  • 29 августа 2016, 17:02
0
В обзоре задокументировал. Спасибо, поставил плюс в карму.
+
avatar
+1
Ключи не умирают! Другой скетч их видит (правда он не может ничего записать, только читает).
Нашел крайне костыльный способ решени проблемы. Для «лечения» подобного ключа необходимо закомментировать return в приведенном куске кода:
void loop(){
  if (!ibutton.search (addr)){//read attached ibutton and asign value to buffer
    ibutton.reset_search();
    delay(200);
    return;
 }

Запустить скетч(с заранее указанным «правильным» family code), прижать таблетку к контактам, отправляем в монитор порта «w».
И происходит маленькое чудо! Ключ успешно пишется. Можно убирать коммент, ключ снова определяется в штатном режиме.
+
avatar
  • kvolk
  • 02 сентября 2016, 09:53
0
Спасибо, протестирую, добавлю в обзор. Надо модифицировать скетч для реанимации ключей.
+
avatar
0
Вот скетч который видит ключи, но не записывает
dl.dropboxusercontent.com/u/40958483/key.ino
+
avatar
  • kvolk
  • 02 сентября 2016, 13:06
0
Да, я с этим скетчем намучился, когда только начал эту затею. Кривоватый скетч.
+
avatar
  • kvolk
  • 04 сентября 2016, 16:04
0
Спасибо за помощь, добавил в скетч, теперь можно восстанавливать такие ключи.
+
avatar
  • kvolk
  • 04 сентября 2016, 16:03
+1
Новый скетч от 04.09.2016 восстанавливает такие ключи.
+
avatar
0
Спасибо за работу. Буду пробовать.
+
avatar
0
Опробовал новый скетч, ключи оживил. От всего сердца благодарю за проявленный энтузиазм.
+
avatar
  • prom77
  • 02 сентября 2016, 10:07
0
Ветку не читал но спрошу, а можно в ключик универсальный код записать что бы ко всем подходил ну или к многим домофонам?
+
avatar
  • kvolk
  • 02 сентября 2016, 13:05
0
Можно.
+
avatar
  • hardlock
  • 10 октября 2016, 20:17
0
на домашнем домофоне сработал ключик FF:FF:FF:FF:FF:FF, ну и заодно, скопировал один из существующих, на случай утери. Спасибо!
+
avatar
  • kvolk
  • 10 октября 2016, 22:13
0
Пустые ячейки инженеры не перезаписали в домофоне, стандартный баг :)
+
avatar
  • biverov
  • 15 октября 2016, 12:16
0
Прошу пардона, если спрошу не то.
А болванки TM08v2 должны поддерживаться этим дубликатором?
+
avatar
  • kvolk
  • 15 октября 2016, 18:09
+1
Скорее всего да. Нашёл на просторах сети:
Заготовки ТМ08 и ТМ08v2, RW1990, КС-4ТМ это полные аналоги, чип ключа используется один и тот же, различия могут быть в держателе (ручке), TM08v2 проходят предпродажную проверку на запись.
+
avatar
  • biverov
  • 15 октября 2016, 22:12
0
Ясно!
Как приедет ардуино (пара недель, надеюсь), буду пробовать, начну тогда с RW1990, но постараюсь попробовать и ТМ08v2.
Т.к. цель, кроме познавательной, еще и показать место компании, которая обслуживает домофон, которая наотрез не говорит коды, заставляя всех делать ключи по 150р. Возможно так же придется попробовать болванки ТМ08Vi-2 (уверяют, что они не фильтруются новыми Vizit, а у меня, похоже, как раз такой).

Пользуясь случаем, хочу выразить большой респект за данный дубликатор :). И если всё получится, с меня отчет по совместимости с ТМ08v2 и ТМ08Vi-2.
+
avatar
  • kvolk
  • 15 октября 2016, 22:52
0
Буду ждать результата, очень интнресно как тм-ки будут себя вести.
+
avatar
  • biverov
  • 01 ноября 2016, 20:53
+1
Ну вот, за 2 недели дошла из Китая плата с Ардуино. Соорудил по-быстрому схему и опробовал запись в 3 версии меток: RW1990, TM08v2 и TM-08 VZT F.
ТМ08Vi-2 пока опробовать не получилось из-за их отсутствия.

Ключи данным скетчем успешно записались во все 3 типа меток! Т.е. опробованные ТМ совместимы по методу записи с RW1990 и никаких проблем не возникло. Аллилуйя, ура, занавес :).
Домофон все 3 ключа скушал, правда это еще не целевой домофон, более простой вариант. Испытания на совместимость с новым Визитом еще впереди.

up. Для отчетности. Резистор R2 использовал номиналом 2.7К.
+
avatar
  • kvolk
  • 02 ноября 2016, 22:48
0
Спасибо, добавил в обзор.
+
avatar
  • ns6k
  • 30 ноября 2016, 15:07
+1
ТМ08Vi-2 у меня не видит эту болванку
+
avatar
  • biverov
  • 30 ноября 2016, 15:25
0
А жаль, т.к. на них возлагал определенные надежды. Остальные целевой домофон отфильтровал, использованный код скомпроментировал и похоже занес в свой ЧС. Думал продолжить эксперимент как раз с ТМ08Vi-2, но пока не купил.
+
avatar
  • ns6k
  • 30 ноября 2016, 16:55
0
я заказал еще пару болванок ТМ08Vi, мож их этот скетч увидит
а разница между vi и vi2 как пишут только «улучшенной стабильностью при считывания ключа панелью. „
+
avatar
  • lenin-ul
  • 17 октября 2016, 13:59
0
Подскажите как быть у ключа от домофона family code заводской стоит (00) и ключ не читается. Домофон «Метаком». С него можно как то сделать дубликат?
+
avatar
  • kvolk
  • 17 октября 2016, 15:46
0
Этим скетчем прочитать ключ и узнать код ключа, потом прошить его как «универсальный» вручную на болванку rw1990.
Может быть так получится.
+
avatar
  • lenin-ul
  • 18 октября 2016, 06:57
0
Пробовал! считывает, но код выглядит вот так 00:00:00:00:00:00.
Записывать не пробовал, заготовки еще нет.
+
avatar
  • kvolk
  • 18 октября 2016, 07:03
0
Значит не считывается, дубликат этого ключа этим дубликатором не сделать, пробуйте прошивать универсальные ключи может быть какой-то подойдёт
+
avatar
  • lenin-ul
  • 19 октября 2016, 14:09
0
Купил на рынке две болванки без надписей, пробовал записать универсальные ключи. Не пишутся или записывается что то случайное. путем экспериментов был установлен подтягивающий резистор на 200 ом и только после этого ключи записались.
+
avatar
  • kvolk
  • 19 октября 2016, 17:53
0
Что за болванки такие?
+
avatar
  • lenin-ul
  • 20 октября 2016, 06:49
0
не знаю. на них нет надписей.
Вчера записал на две разные ключи, один подошел. сегодня хотел на другой тоже такой ключ записать а он не пишется(остается прежний).
+
avatar
  • kvolk
  • 20 октября 2016, 07:11
0
С питанием всё впорядке?
+
avatar
  • lenin-ul
  • 20 октября 2016, 07:25
0
да вроде как.
+
avatar
  • nomeron
  • 14 ноября 2016, 21:03
0
Очень понравилась статья. Заказал ключи, но оказалось, что родной ключ cyfral, модель домофона на определил, но скорее всего метаком. Облазил все статьи, но простого рецепта чтения ключей нет, да и с записью как повезет (самому писать было лень, лучше часы доделаю). Универсальные ключи домофон не принимает, почтальон со связкой ходит. Уже думал покупать оригинальный ключ cyfral, но приложил болванку и домофон пикнул на ключ (на ключи с FF в начале домофон не реагирует). Вызвал фирму и за копейки привязал одну болванку со случайным номером (в режиме программирования болванка с FF тоже не определилась). Ну а дальше все просто. Привет Брянску и заводу кремний с его k1233kt1.
+
avatar
  • kvolk
  • 17 ноября 2016, 23:53
0
Да, в комментариях выше уже говорили об этом, главное домофону скормить один ключ даллас, а дальше всё как по маслу :)
+
avatar
  • ns6k
  • 21 ноября 2016, 18:37
0
Отлично, скетч помог восстановить ключ
сам пользуюсь другим, попроще


//метаком, цифрал
//0x2F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01
//0x9B, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01
//0x14, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
//0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4C, 0x01
//0x3D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
//0x49, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x01
//визит
//0x01, 0xBE, 0x40, 0x11, 0x5A, 0x36, 0x00, 0xE1  //My OK
//0xE1, 0x00, 0x36, 0x5A, 0x11, 0x40, 0xBE, 0x01
//0x1D, 0x00, 0x00, 0x0A, 0x11, 0x40, 0xBE, 0x01
//0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F  //My OK



#include <OneWire.h>
#define pin 10

OneWire ibutton (pin); // I button connected on PIN 2.

byte addr[8]; //array to store the Ibutton ID.

void setup(){
 Serial.begin(115200); 
}

void loop(){
  if (!ibutton.search (addr)){//read attached ibutton and asign value to buffer
    ibutton.reset_search();
    delay(200);
    return;
 }
 
  Serial.print(millis()/1000);
  Serial.print("> ");
  for (byte x = 0; x<8; x++){  
    Serial.print(addr[x],HEX); //print the buffer content in LSB. For MSB: for (int x = 8; x>0; x--) 
     Serial.print(" ");
  }
 
  //compute crc//
  byte crc;
  crc = ibutton.crc8(addr, 7);
  Serial.print("CRC: ");
  Serial.println(crc,HEX);
  if ( 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(10, LOW); pinMode(10, OUTPUT); delayMicroseconds(60);
    pinMode(10, INPUT); digitalWrite(10, HIGH); delay(10);
    
    Serial.print('\n');
    Serial.print("  Writing iButton ID:\n    ");
    // Hardcode here your desired ID //
    // 01 D5 9F DC 02 00 00 96
    byte newID[8] = {0x01, 0x9B, 0xDF, 0x9B, 0x08, 0x00, 0x00, 0x15};
                     
    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(10, LOW); pinMode(10, OUTPUT); delayMicroseconds(10);
    pinMode(10, INPUT); digitalWrite(10, HIGH); delay(10);

  }
} 

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;
}


подключение


Для чтения ключа подключите как на картинке и смотрите монитор порта

Для прошивки кода ввести w в мониторе порта, подключить как на картинке
+
avatar
  • kvolk
  • 26 ноября 2016, 22:04
0
Запихните по спойлер пожалуйста скетч.
+
avatar
  • ns6k
  • 26 ноября 2016, 22:20
0
уже нет «Редактировать» да и спойлер я в коментах не вижу
+
avatar
  • kvolk
  • 26 ноября 2016, 23:49
0
ok :)
+
avatar
0
//метаком, цифрал
//0x2F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01
//0x9B, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01
//0x14, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
//0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4C, 0x01
//0x3D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
//0x49, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x01
//визит
//0x01, 0xBE, 0x40, 0x11, 0x5A, 0x36, 0x00, 0xE1 //My OK
//0xE1, 0x00, 0x36, 0x5A, 0x11, 0x40, 0xBE, 0x01
//0x1D, 0x00, 0x00, 0x0A, 0x11, 0x40, 0xBE, 0x01
//0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F //My OK

У тя тут коды, которые не ок, записаны задом наперёд, поэтому и не ок
//метаком, цифрал
//0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F
//0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x9B
//0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x14
//0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4C, 0x71
//0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3D
//0x01, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x49
//визит
//0x01, 0xBE, 0x40, 0x11, 0x5A, 0x36, 0x00, 0xE1 //My OK
//0x01, 0xBE, 0x40, 0x11, 0x5A, 0x36, 0x00, 0xE1
//0x01, 0xBE, 040, 0x11, 0x0A, 0x00, 0x00, 0x1D
//0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F //My OK

вот так над
а этот код скорей всего убьёт ключ (сам я не записывал его)
//0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x14
+
avatar
  • kvolk
  • 15 января 2017, 23:21
0
а этот код скорей всего убьёт ключ (сам я не записывал его)
Не убьёт, последний скетч с успехом восстанавливает такие «убитые» ключи.
+
avatar
0
«сам пользуюсь другим, попроще»
простите, а где указать какой код я хочу прошить?
+
avatar
  • kvolk
  • 06 марта 2017, 19:52
+1
В этой строке:
byte newID[8] = {0x01, 0x9B, 0xDF, 0x9B, 0x08, 0x00, 0x00, 0x15};
+
avatar
0
блин, спросонья что ли не увидел… спасибо, но все равно не помогло, ключи оказались не перезаписываемые, заказал болванок RW1990. скетч с описанием сохранил, понравился своей простотой подключения к ключу.
+
avatar
  • Flexdj
  • 11 декабря 2016, 08:44
0
Цифрал можно таким способом запрограммировать?
+
avatar
  • kvolk
  • 11 декабря 2016, 09:53
0
Это устройство — дубликатор ключей, что вы «запрограммировать» хотите, домофон?
+
avatar
  • Flexdj
  • 11 декабря 2016, 13:44
0
Ключ к домофону цифрал, хочу дубликат сделать
+
avatar
  • kvolk
  • 11 декабря 2016, 14:01
0
Контактные ключи. Официальное название Touch memory (сокр. TM) или iButton. Бытовое название: «таблетки».
Dallas. В большинстве случаев под TM подразумевается ключ семейства Dallas (например, DS1990A). С этими ключами работает множество устройств: Vizit, Eltis, Z-5R, С2000-2 и др.
Cyfral. Эти домофоны работают только с ключами DC2000А и Цифрал-КП1.
Metakom. Под эти домофоны разработаны ключи К1233КТ2. Эти ключи годятся и для многих других контроллеров.
Возможно будет работать.
+
avatar
  • sepryn
  • 13 декабря 2016, 11:39
0
Почему у меня не записываются ключи? Есть целая горсть ключей, но ни один не пишется. Только считываются, а после «записи» код не меняется. Это как раз тот случай с неперезаписываемыми ключами?
+
avatar
  • kvolk
  • 13 декабря 2016, 13:42
0
Да, скорее всего это DS1990A — они не перезаписываются.
+
avatar
  • Flexdj
  • 13 декабря 2016, 12:31
0
Какие ключи пишет андуинка кроме DS 1990?
+
avatar
  • kvolk
  • 13 декабря 2016, 13:44
0
Почитать последнее предложение обзора, или тут.
+
avatar
  • art1984
  • 15 декабря 2016, 11:57
0
Добрый день!
Собрал все по схеме, только резисторов подходящих не было, поставил 1.6 кОм и вместо 10кОм поставил 2 по 5.1кОм. Код считывается, но не перезаписывает, болванки 1990А-F5, может изза этого?
И еще вопрос: что за сноска GND и +5v? случайно не нужно подавать еще питания?
+
avatar
  • kvolk
  • 15 декабря 2016, 13:22
+1
Собрал все по схеме, только резисторов подходящих не было, поставил 1.6 кОм и вместо 10кОм поставил 2 по 5.1кОм.
Это норма.
Код считывается, но не перезаписывает, болванки 1990А-F5, может изза этого?
Тыщу раз уже расписано выше: ключи DS1990A-F5, TM1990A-F5не перезаписываемые, то есть их один раз программируют на заводе и всё, код внутри ключа зашивается один раз и на всегда.

Проверенные на запись ключи: RW1990, TM08v2 и TM-08 VZT F.

И еще вопрос: что за сноска GND и +5v? случайно не нужно подавать еще питания?
Нет.
+
avatar
  • bbv1970
  • 28 сентября 2020, 11:55
0
а ключи DS1993A-F5 и DS1992A-F5 можно прошить на данном устройстве, будут они прошиваться?
+
avatar
  • kvolk
  • 01 октября 2020, 15:00
0
А они умеют перезаписываться?
+
avatar
  • kvolk
  • 15 декабря 2016, 13:21
0
del
+
avatar
  • sepryn
  • 16 декабря 2016, 11:56
0
Большое спасибо! Всё получилось. Просто у меня все болванки были незаписываемые. Нашёл перезаписываемую и всё получилось.
+
avatar
  • kvolk
  • 16 декабря 2016, 13:03
0
На здоровье! :)
+
avatar
  • ru591
  • 18 декабря 2016, 20:30
0
Спасибо!!!
Очень пригодилось. Работа очень понравилась.
Andrey_n303 августа 2016, 10:53
0
Ребят подскажите, у меня скетч не компилируется.
Arduino: 1.6.10 (Windows 7), Плата:«Arduino Nano, ATmega328»

C:\Users\Андрей\Documents\Arduino\sketch_aug03a\sketch_aug03a.ino: In function 'void loop()':

sketch_aug03a:74: error: 'writeByte' was not declared in this scope

exit status 1
'writeByte' was not declared in this scope

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
«Показать подробный вывод во время компиляции»
ОтветитьСообщить
avatar
Andrey_n303 августа 2016, 11:20
0
Вопрос решен, установил иде 1.6.9 все скомпилировалось.
ОтветитьСообщить
avatar
kvolk13 сентября 2016, 11:20
0
Проблема в русских буквах в имени пользователя — может кому-нибудь пригодится.
+
avatar
  • sepryn
  • 19 декабря 2016, 11:35
0
Интересно, а на Attiny 13 можно такой собрать? А то жалко целую Ардуинку для этого использовать.
+
avatar
  • kvolk
  • 19 декабря 2016, 14:21
0
на Attiny 85 собирали, пруф.
+
avatar
0
На мой TM08v2 вообще не реагирует.
Болванку еще не успел затестить.
Кто что может подсказать? У кого читает?
+
avatar
  • kvolk
  • 06 января 2017, 18:39
0
А RW1990 читает/пишет?
+
avatar
0
собрал схему буквально вчера. Еще не успел приобрести и опробовать болванки другого типа.
На днях думаю найду, тогда отпишусь.

А пока на счет ключа TM08v2…
Скетч на принудительное чтение показал ключ типа 00-00-00-00-00-00.
Это означает что ключ не считан? Или это ключ такой и есть?
+
avatar
  • kvolk
  • 07 января 2017, 00:05
0
Очень похоже на то, что это убитый ключ. Попробуйте восстановить его: 6 сек ундное удержание кнопки и прошивка.
+
avatar
0
Похоже, но это не так. Такое поведение замечено на всех ключах которые есть в семье, а это 4 шт. И при этом они продолжают работать с домофоном (КС-ДОМОФОН)
При попытке их восстановить таким способом, нечего не происходит.
Программатор сообщает о том, что код успешно записан и сразу же выполняет его чтение на что в ответ и получает ( 0 0 0 0 0 0 0 0 )

После всех этих манипуляций он все еще успешно продолжает работать с домофоном.

img.mysku-st.ru/uploads/images/06/09/28/2017/01/07/a9ea3c.png
+
avatar
  • kvolk
  • 07 января 2017, 10:51
0
Сначала проверьте работоспособность на rw1990.
mySKU.me/blog/aliexpress/42027.html#comment1659981
+
avatar
0
Приобрел сегодня ключи двух типов, rw1990A и tm08v2.

Так вот, rw1990A без проблем читается и пишется, а вот с болванкой tm08v2 проблема остается, потому пока вообще ее отложил в сторону.

Сходил в сервис, там уже на более продвинутом дубликаторе с моего «домашнего» ключа tm08v2 считали дамп и залили на болванку rw1990a.
Этот дамп я уже смог прочитать схемой на arduino, только вот этот ключ дверь не открывает)
+
avatar
  • kvolk
  • 10 января 2017, 23:29
0
Вы на 100% уверены что вторая болванка tm08v2?
+
avatar
0
Ну что там внутри мне не известно, но уверен на 100% что маркировка у болванки tm08v2
+
avatar
  • Flexdj
  • 10 января 2017, 14:09
0
На RW2007 не могу записать может кто знает как?
Ключ читается так 00:00:00:00:00:00
+
avatar
  • kvolk
  • 10 января 2017, 23:28
0
Скорее всего никак.
+
avatar
  • Flexdj
  • 12 января 2017, 02:18
0
И верно ключ вообще не читается
+
avatar
0
TM01a перезаписывается данным скетчем?
+
avatar
  • kvolk
  • 15 января 2017, 23:23
0
Надо проверять, у меня такой болванки нет.
+
avatar
  • Maxsky
  • 20 октября 2017, 18:02
0
Rw1990 читает и пишет. А вот tm01a даже не видит.

У кого tm01a оаботает с данной схемой?
+
avatar
0
Доброго дня. У меня получается так, что болванки RW1990 пишутся только с резистором 330-390Ohm, с большим номиналом только читаются. И 2 безызвестные болванки читаются и пишутся с указанными автором номиналами. Спасибо вам за проделанную работу.
Подскажите, можно ли прописать 2 кода в один ключ? Если не трудно, объясните как или дайте ссылку на скетч. Заранее спасибо.
+
avatar
  • kvolk
  • 01 февраля 2017, 00:25
0
Напряжение питания точно 5В?
2 кода в один ключ нельзя, 1код = 1 ключ.
+
avatar
0
Я тоже грешил на напряжение — питание от усб компьютера идет 4.71В, но я подключал адаптер выдающий 5.02В — тоже самое. А ведь на магазинных программаторах как-то прописывают 2 кода — у моего товарища недавно поставили вторую дверь и тоже с домофоном — и ключ эту дверь не открывает — так он дал свой старый ключ установщикам — теперь его ключ открывает обе двери. Или они просто считали его код ключа и добавили в память нового домофона просто?
+
avatar
  • kvolk
  • 01 февраля 2017, 14:08
0
А ведь на магазинных программаторах как-то прописывают 2 кода
Нет, учите матчасть, это невозможно.
Или они просто считали его код ключа и добавили в память нового домофона просто?
Именно это они и сделали.
+
avatar
  • san001
  • 20 марта 2017, 07:13
0
Здравствуйте! Собрал данное устройство только на Arduino Uno (номиналы резисторов 1к и 10к). Как reader работает идеально, а как writer может записать считанный код верно, а может записать код левый, у которого даже CRC не правильный. Может кто подскажет возможную проблему. Тут прочитал, «что болванки RW1990 пишутся только с резистором 330-390Ohm», так может номинал уменьшить?
+
avatar
  • kvolk
  • 20 марта 2017, 10:08
0
а может записать код левый, у которого даже CRC не правильный
Записывается всегда одинаковый код или всё время разный?
ут прочитал, «что болванки RW1990 пишутся только с резистором 330-390Ohm», так может номинал уменьшить?
Пробуйте, может быть это отбраковка?
+
avatar
  • san001
  • 20 марта 2017, 11:59
0
Записывается всегда разный код. Откуда он берется, не понятно. Но, что пишет (записываемый код в PuTTY показывается), то и записывается. Значит, номинал резистора не причем. Жаль, что не дает вставить скриншот. От болванок тоже зависимости не нашел, на любой может и нормально запись пройти и криво.
+
avatar
  • san001
  • 22 марта 2017, 06:35
0
Собрал на другой плате Arduino, все заработало без проблем.
+
avatar
  • kvolk
  • 22 марта 2017, 06:55
0
99% проблема с питанием на ардуино уно
+
avatar
  • san001
  • 22 марта 2017, 10:14
0
Так питание бралось с USB-порта ноутбука. В чем может быть разница?
+
avatar
  • kvolk
  • 22 марта 2017, 10:16
0
Уно с USB?
Входное напряжение (рекомендуемое)
7-12 В
+
avatar
  • san001
  • 22 марта 2017, 10:58
0
Внешнего питания нет, питание идет с USB-разъема ноутбука на USB-разъем Arduino.
+
avatar
  • kvolk
  • 22 марта 2017, 11:00
0
Просадки нет никакой по напряжению?
+
avatar
  • san001
  • 22 марта 2017, 11:27
0
Не проверял, при возможности посмотрю.
+
avatar
  • san001
  • 28 марта 2017, 08:52
0
И на другой Arduino такое же случается. Прилагаю скриншот такого случая.
+
avatar
  • Tosha
  • 22 апреля 2017, 15:28
0
Не подскажите, что может быть не так.
Болванка rw1990. Пытаюсь копировать ключ:
1:8C:8F:B8:9:0:0:D:CRC: D
11:B5:C8:28:1:0:0:A:CRC: A
  ID before write: 1 B5 C8 28 1 0 0 A
  Writing iButton ID:
    ********
1:94:88:B8:9:0:0:B:CRC: A6
+
avatar
  • kvolk
  • 22 апреля 2017, 15:35
0
Попробуйте другую болванку. Это точно RW1990, судя по логам она не пишется.
+
avatar
  • Tosha
  • 24 апреля 2017, 11:23
0
Да вот, купил в оффлайне десяток, похоже они все глючные такие.
На али из обзора проверенные, можно брать?
+
avatar
  • kvolk
  • 24 апреля 2017, 11:29
0
Да, нормальные, пришли все 10, все рабочие.
+
avatar
  • Tosha
  • 24 апреля 2017, 11:41
0
Придётся заказать.
Кстати, в сети попадалась информация, что существуют разные версии болванок rw1990 («Новый код для RW1990 записывается инверсно. Как обычно передача начинается с family code, младшим байтом вперед, но биты в каждом байте инвертированы. Больше отличий в протоколах нет»). Ещё где-то попадалось, что эти болванки при записи чувствительны к помехам. Может дело в этом, попробую укоротить провода.
+
avatar
  • kvolk
  • 24 апреля 2017, 11:47
0
… Новый код для RW1990 записывается инверсно....
Эти данные из серии "ОБС". И как это должны «домофоны» понимать? Есть стандарт, и этого стандарта должны придерживаться производители.
+
avatar
  • Tosha
  • 24 апреля 2017, 11:58
0
Насколько я понял, это касается только самого процесса записи: electromost.com/news/protokol_dlja_ehlektronnykh_kljuchej_rw1990/2011-04-24-35
+
avatar
  • Tosha
  • 26 апреля 2017, 00:39
0
Получилось!
С теми же самыми болванками попробовал еще поэкспериментировать. Более короткие провода сделал, потом начал экспериментировать с сопротивлением R2. В итоге с 500 Ом и какой-то магией получилось с n-ной попытки.
Похоже, действительно помехи. Либо ардуина…
+
avatar
  • kvolk
  • 26 апреля 2017, 09:37
+1
Проверьте питание или кабель питания.
+
avatar
  • Tosha
  • 26 апреля 2017, 10:08
0
Пробовал к ПК разными кабелями подключать. К отдельному БП, к пауэрбанку… Все через USB-разъём Ардуины.
+
avatar
  • yuri64
  • 01 мая 2017, 21:25
0
Спасибо огромное!!! Сегодня попробовал, правда с одной только болванкой, всё получилось. Только чтение и запись (копирование)
+
avatar
  • stant
  • 30 мая 2017, 15:19
0
Разбирался со всем этим, по ошибке запорол 4 ключа, зашил не полный код. Грубо говоря выглядело следующим образом
byte newID[8] = {0x00, 0x00, 0x00, 0x00, 0x00 };
Возможно теперь как-либо восстановить ключ? Прикладывая его снова, он не читается, будто его нет!
+
avatar
  • kvolk
  • 30 мая 2017, 15:38
0
UPD. В скетч от 04.09.2016 добавлена функция восстановления ключей с неправильным family code, для этого необходимо приложить ключ к считывателю и удерживать кнопку в течение 6 секунд. После этого в ключ будет записан «универсальный» ключ
+
avatar
  • Skipus
  • 30 мая 2017, 19:51
0
Комрады, у меня следующее предложение, а реально ли добавить проверку того, что в ключ записан действительно тот код, который мы считали? И после записи нам бы сигнализировал светодиод. К примеру у меня были проблемы с некоторыми ключами, когда запись происходила не с первого раза.
+
avatar
  • kvolk
  • 30 мая 2017, 21:29
0
а реально ли добавить проверку
Конечно. Но обычно нормальные ключи пишутся сразу и без проблем.
+
avatar
0
Всем привет. Кто-нибудь в курсе, а домофоны Метаком с синей подсветкой клавиш С и В универсальный ключ откроет?
Прошивал с помощью первого скетча.
+
avatar
0
Доброе утро.
Не получается у меня всё никак вывести на дисплей считываемую информацию. Скетч работает без дисплея, а как ввожу в скетч для вывода на дисплей, программа ругается на ошибку в скетче и так далее:

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

Помогите пожалуйста, уже запутался. Заранее благодарю.
+
avatar
  • kvolk
  • 22 июля 2017, 08:54
0
Было бы неплохо увидеть эту ошибку.
+
avatar
  • SeregaB
  • 28 августа 2017, 07:27
0
Здравствуйте.
Ключи rw1990 пишутся и читаются на ура.
Не получается прочитать код с ключей cyfral. В чем может быть дело?
+
avatar
  • kvolk
  • 28 августа 2017, 09:49
0
В чем может быть дело?
Другой принцип чтения/записи у ключа.
+
avatar
  • SeregaB
  • 28 августа 2017, 18:01
0
на ардуино можно как-то записать или прочитать ключи cyfral?
+
avatar
  • kvolk
  • 29 августа 2017, 14:24
0
google/yandex
+
avatar
  • SeregaB
  • 29 августа 2017, 16:00
0
Можно было просто написать ДА, НЕТ или НЕ ЗНАЮ, а не умничать.
+
avatar
  • kvolk
  • 29 августа 2017, 16:26
0
Можно было, но ссылка на google или yandex мне кажется более эффективной.
+
avatar
+1
Отличный обзор.
Наконец дошли руки тоже сделать такой дубликатор.
С резистором 2,2 КОм ключ также не записывался как у Tosha.
Но поставил на 390 Ом — ключ записался, домофон открыл.

Болванки RW1990 с Алиэкспресс, система — Windows XP SP3, среда — Arduino IDE 1.0.6.
(Т.к. под ХР в более поздних версиях программы не компилируются скечи.
Возможно нужно доустанавливать какие-то файлы).
+
avatar
  • kvolk
  • 25 октября 2017, 12:18
0
У вас только один такой ключ или несколько? Может просто ключ «бракованный»?
ЗЫ. Спасибо, добавлю в обзор.
+
avatar
0
Пробовал пока на 2-х ключах. Пока записывает нормально.
На одном форуме писали, что записывали на резисторе 220 Ом.
Или 240 Ом.
Или, вот тоже, похоже, в каком-то серьезном исследовании используют резистор на 200 Ом.
"...RW1990.2 стабильно записывается при номинале подтягивающего резистора 200 Ом".
Правда там RW1990.2 и дубликаторы не на Ардуине (Microchip PIC16F88 и второй на ATMEGA16).
+
avatar
  • Liss41
  • 27 ноября 2017, 19:24
0
у меня один ключ записался с номиналом резистора около 300 Ом, а другие два ключа записались только при уменьшении номинала резистора до 170 Ом. Я поставил переменный резистор 1,5 кОм и при записи ключей подбираю для каждого ключа номинал резистора при котором данный ключ пишется.
+
avatar
  • Rostik
  • 07 ноября 2017, 23:59
0
Добрый день, автор!

Всё собрал — работает!
Интересуюсь именно программой.
Для копирования ключа можно приложить исходный ключ, его номер считается в архив [addr], ключ убираю, кратковременно нажимаю кнопку, загорается светодиод и программа ждёт пока не будет приложена болванка. Как только болванка приложена — в неё записывается новый ID из исходного ключа.
Вопрос в следующем: почему останавливается loop() и на какой строке?

Вижу, что автор бывает тут и надеюсь на ответ, спасибо!
+
avatar
  • Rostik
  • 08 ноября 2017, 09:49
0
Разобрался, цикл loop() не останавливается.
Пока не приложен ключ, условие «if (!ibutton.search (addr))» выполняется и код продолжается до строки «if (val <= 5) return», после чего происходит возврат к началу loop(). Т.о. кроме опроса состояния кнопки и нового поиска устройства на OneWire ничего не происходит.

Подскажите, пожалуйста, где можно прочитать про команды «ibutton.write(0xD1);» и «ibutton.write(0xD5);» — понятно, что это часть алгоритма записи на RW1990, но хотелось бы почитать подробнее. С ходу не нашел информации про эти коды. Везде только «0x33» и «0х0F».
+
avatar
  • kvolk
  • 08 ноября 2017, 10:12
0
Подскажите, пожалуйста, где можно прочитать...
Можно вот тут.
Пришло время разобрать протокол записи на болванки rw1990. Команда считывания 8-байтного кода у них идентична с ключами dallas.

Запись на rw1990 происходит так:
1) Посылаем импульс reset, и ожидаем presence импульс;
2) Отправляем команду 0xD1, тем самым разрешаем запись;
3) Тайм-слот, посылаем логический «0»;
4) Посылаем импульс reset и ожидаем presence импульс;
5) Отправляем команду записи, 0xD5;
6) Посылаем 8-байтный код(все биты инвертированы), передача отличается от протокола oneWire;
7) Посылаем импульс reset и ожидаем presence импульс;
8) Отправляем команду 0xD1, тем самым запрещаем запись;
9) Тайм-слот, посылаем логический «1».
+
avatar
  • Rostik
  • 08 ноября 2017, 23:39
0
Спасибо за быстрый ответ!
Видел эту статью, но когда читал, ещё так глубоко не копал и пропустил информацию мимо.

Сегодня нашел анализ протокола записи RW-1990 неким студентом, прочитать можно тут.
+
avatar
  • Andy117
  • 10 ноября 2017, 22:52
0
Если судить по той статье, диаграммам и коду, то логическая «1» — это посылка низкого сигнала, задержка 6us, высокий сигнал. Логический «0» — то же самое, только задержка уже 60us. Причем не важно, посылаем ли мы их после команды 0xD1 или посылаем бит данных.
А вот в скетче в этой статье после посылки команды 0xD1 все делается правильно, а в функции writeByte задержка 60us используется при посылке бита 1, а не 0.
Ошибка?
+
avatar
  • Andy117
  • 12 ноября 2017, 20:04
0
А дело оказалось в том, что болванки RW1990 бывают двух видов: так называемые RW1990.1 и RW1990.2.
В RW1990.1 данные записываются инверсно!
Так что скетч рассчитан именно на них.
+
avatar
  • serg51
  • 12 ноября 2017, 18:35
+1
супер!!! прошил универсальный из скетча. проверил в 4 х подъездах своего дома
открылись как с родного. спасибо. удачи вам
+
avatar
0
Куда тут лампочку паять,13 pin а другой конец куда?
+
avatar
  • kvolk
  • 17 ноября 2017, 16:39
0
Нет тут лампочек.
+
avatar
  • SeregaB
  • 20 ноября 2017, 16:47
0
второй конец на GND

+
avatar
  • kvolk
  • 21 ноября 2017, 15:38
0
Не сгорит «лампочка»?
+
avatar
  • SeregaB
  • 23 ноября 2017, 16:47
0
нет, работает отлично
+
avatar
  • kvolk
  • 23 ноября 2017, 16:53
0
Резистор последовательно светодиоду поставьте.
+
avatar
  • SeregaB
  • 23 ноября 2017, 17:01
0
для себя я вообще не ставил светодиод на 13 пин. не вижу в нем смысла. выложил ту схему которая есть в сети. если человеку надо ограничить яркость светодиода то тогда согласен что нужно установить резистор.
+
avatar
  • kvolk
  • 23 ноября 2017, 17:05
0
Дело не в яркости, а в том что светодиод через время сгорит, нужно ограничить ток.
+
avatar
  • SeregaB
  • 28 ноября 2017, 15:36
0
Ограничим ток, уменьшится и напряжение следовательно светодиод будет гореть тусклее.
+
avatar
  • kvolk
  • 28 ноября 2017, 15:49
0
Ограничим ток, уменьшится и напряжение
Можно подробнее пожалуйста?
+
avatar
  • kvolk
  • 01 декабря 2017, 12:24
0
Почитайте тут, и не пишите ерунды.
+
avatar
0
))))))
+
avatar
  • Connar
  • 04 марта 2018, 16:18
0
ТАК НАДО РЕЗСИТОР 2 2 ИЛИ 1 КОМ?
+
avatar
  • kvolk
  • 04 марта 2018, 19:57
0
Поставьте на 320-680 Ом.
+
avatar
+2
Докупил дубликатор для RFID ключей на 125 кГц. Доработал данный дубликатор. Добавил в него дубликатор на arduino nano 3 для копирования контактных ключей. Для питания arduino nano 3 использовал преобразователь с 0,9 в до 5 в.Удалил с платки выходной разъем USB. Укоротил платку, чтобы вошла в корпус. В качестве контактора для ключей использовал держатель для батарейки Cr2032 со старой материнской платы от компьютера. Кнопку взял из сломанного поттера (чайника). Все детали разместил внутри дубликатора. Подключил внешний светодиод через 1 ком на выход D13 arduino. Взял синий. Его хорошо видно через стекло дубликатора. Получился универсальный дубликатор. Питание подается сразу на оба дубликатора. Работают независимо друг от друга. Через разъем мини USB можно подключать к компу без включения внутреннего питания. Посмотреть что прописано в контактных ключах.
+
avatar
  • cuter
  • 04 декабря 2017, 21:12
+2
У меня красивее
+
avatar
  • sergey58
  • 05 декабря 2017, 09:50
+1
Не спорю — красивее. Но делалось из того что есть под рукой, а заказывать в Китае и ждать 1-1,5 месяца как-то не хотелось. Можно было заказать контактор для ключа сразу со светодиодом. Я показал саму идею совмещения программаторов. Видно, что Arduino nano 3 спокойно входит внутрь. Есть доступ к разъему мини USB. Есть место для преобразователя с 3 в до 5 в для питания Arduino от двух батареек. А исполнение каждый делает исходя из своих возможностей.
+
avatar
  • sergey58
  • 05 декабря 2017, 17:33
0
нашел кнопку с подсветкой aliexpress.com/item/12mm-flat-round-ring-illumination-push-button-momentary-1NO-Nickel-plated-brass-metal-push-Press-Button/32676237684.html Думаю будет смотреться еще красивее совместно со считывателем aliexpress.com/item/1-PCS-TM-probe-DS9092-Zinc-Alloy-probe-iButton-probe-reader-with-LED-M98/32802713087.html Цвет светодиода в кнопке и напряжение можно выбрать при заказе. Например 5 в. Они сразу отправляют нужный резистор. Не надо заморачиваться с выбором номинала и искать куда встроить светодиод.
+
avatar
  • cuter
  • 05 декабря 2017, 19:17
0
Кнопка конечно красивая, но по ссылке она вроде с фиксацией, нам нужна без фиксации.
+
avatar
  • sergey58
  • 05 декабря 2017, 19:24
0
Она без фиксации. просто кнопка. Специально прочитал отзывы покупателей. Вот что пишут:" Кнопка без фиксации. Работает отлично. 12мм диаметр."
+
avatar
  • cuter
  • 05 декабря 2017, 22:16
0
А, ну тогда нормально, сбило с толку что на фото выше светодиод горит при не нажатой кнопке, ну и желательно диаметром 16 мм брать, 12 мм маловата если пальцы толстые, и кнопка без выступа.
+
avatar
  • sergey58
  • 06 декабря 2017, 09:31
0
Ноги светодиод выведен на отдельные выводы. Он включается независимо от состояния кнопки. Резистор подключается внешний. На 16 мм нужно внимательно читать описание. Бывают и с фиксацией особенно если у нее три вывода самой кнопки. Вот эти точно без фиксации aliexpress.com/store/product/16mm-Metal-brass-Push-Button-Switch-flat-round-illumination-ring-Momentary-1NO-Car-press-button-pin/2021064_32676237694.html И высота у них такая же как у 12 мм, чтобы вошли в корпус.
+
avatar
  • mikefun
  • 30 декабря 2018, 23:38
0
Подскажите, кнопку брали на 5v или на 3v брали?
+
avatar
  • sergey58
  • 31 декабря 2018, 11:01
+1
На 5V. Чаще всего в кнопке стоит просто светодиод на 3V, а к кнопке прилагается дополнительный резистор. Он включается последовательно со светодиодом снаружи кнопки.В зависимости от рабочего напряжения, сопротивление этого резистора будет разным. При выборе кнопки указывать 5V. На фото выше виден этот резистор в пакетике с кнопкой. Если в наборе есть резистор, то его обязательно припаять последовательно с выводом светодиода. Бывают кнопки у которых этот резистор уже установлен внутри. Некоторые брали кнопку на 12V, включали без резистора напрямую к 12V. Светодиод сразу сгорал. Будьте внимательны с этим. У выводов светодиода есть обозначение + и -. Минус соединяем с общим проводом. Плюс через сопротивление подключаем к выводу 13 pin.
+
avatar
  • mikefun
  • 31 декабря 2018, 13:52
0
Спасибо за ответ! Профи.
+
avatar
0
Переделал. Поставил кнопку с подсветкой на 12 мм. Нажимается нормально. Светит тоже.
+
avatar
0
Интересная идея, решил сделать также, но появился такой вопрос. Если поставить повышайку после выключателя, то её выход постоянно подключен к ардуино, тогда при подключении ардуино к компу на выход повышайки идёт 5в, не сгорит ли она? Повышайка у меня такая, нашёл в закромах, 0.9-5в до 5в. И какая повышайка установлена у вас, и как подключена? не нашёл такую на али.
+
avatar
+1
Не сгорит. Схема повышайки сделана так, выходной диод на ней стоит между выходным плюсом и остальной схемой. Я меня стоит такая, как на картинке. Их много вариантов и с разъемами и без. Схема выхода у всех одинаковая. У меня вход повышайки подключен после выключателя, чтобы постоянно не садить батарейку. Выход напрямую к питанию ардуино. При подключению к компьютеру повышайку не задействую. Питание на ардуино идет по USB, а повышайка развязана от этого питания своим выходным диодом. Все работает отлично.
+
avatar
0
Переделал расположение ардуино и повышайки. Чтобы не мешало кнопке и считывателю.
+
avatar
+1
Как не странно, я на днях сделал почти также ;-), с нижнего торца было какое то отверстие, расточил его всего на пару мм, повышайку поставил под плату.

+
avatar
0
Так у вас разъем микро USB, а у меня мини USB. У вас считыватель со встроенным светодиодом. У меня кнопка со светодиодом. Она выше. Пришлось сдвигать ардуино вбок, чтобы кнопка вошла по глубине. А так получился универсальный копировщик ключей от двух мизинчиковых батареек. Тоже все работает отлично. Отверстие внизу и на верхней крышке для выхода звука от пищалки. Надеюсь светодиод в считывателе подключили через ограничительное сопротивление.
+
avatar
0
Светодиод из считывателя вытащил, так как он всё равно при копировании закрыватся ключём и его невидно. Поставил над зелёной кнопкой. подключил согласно схеме через 330 ом. А отверстия на лиц.панели остались видимо от старых версий дубликатора, которые работали на кроне и пищалка была пьезо типа наших зп. Там внутри даже остались полукруглые бортики вокруг этих щелей под уствновку зп. Которые пришлось сломать чтоб поставить считыватель.
+
avatar
0
Ставлю лампочку на 13 pin а второй конец на gnd и ничего не происходит, лампочка нужна мне чтоб видеть что идёт запись и копирование
+
avatar
  • kvolk
  • 29 ноября 2017, 13:30
0
Лампочку на 220В взяли?

Такую?
+
avatar
0
3В диодная
+
avatar
  • kvolk
  • 30 ноября 2017, 10:10
0
Или сгорел светодиод, или неправильно подключили светодиод. Чтобы не сгорел надо ставить резистор последовательно светодиоду.
+
avatar
  • sergey58
  • 01 декабря 2017, 11:39
+2
Светодиоды должны включаться с использованием ограничивающего ток через него резистора.Резистор должен быть расчитан на требуемый уровень тока по закону Ома. Для многих светодиодов рабочий ток составляет около 20 мА, при меньшем токе свет будет тусклее. При большем токе светодиод сразу или быстрее выйдетиз строя. При расчете тока учитывают напряжение на светодиоде.У Arduino рабочее напряжение выхода 5 в, максимальный выходной ток 40 мА.

+
avatar
0
Благодарю дружище!!!
+
avatar
  • sergey58
  • 05 декабря 2017, 21:36
0
посмотрите это=«mySKU.me/blog/aliexpress/42027.html#comment2388553»
+
avatar
  • armada
  • 03 декабря 2017, 22:12
0
Добрый день.
Есть 1 оригинальный ключ DS1990a
Есть болванки DS1993 +F5
Возможно ли сделать копию оригинального ключа?
+
avatar
  • Piatno
  • 07 декабря 2017, 10:42
0
У меня ключ DS1990A-F5 уже с кодом, и переписать его по этой схеме не получается.
+
avatar
  • sergey58
  • 07 декабря 2017, 19:19
0
Ключи DS 1990 не перезаписываемые. Они программируются при производстве только один раз. Нужны ключи RW1990. DS можно только считать и с него сделать копию на RW.
+
avatar
  • armada
  • 07 декабря 2017, 19:47
0
Спасибо, значит придётся покупать RW 1990
Просто прямо сейчас имеются DS1993. Жалко что нельзя их использовать.
+
avatar
0
А у меня сей девайс категорически не видит ключей от цифрала. В чем может быть проблема?
+
avatar
  • zazafa
  • 09 мая 2018, 14:47
0
насколько понял, на ардуино недоступно пока,
+
avatar
0
del
+
avatar
  • qw123
  • 09 сентября 2018, 14:07
0
Подскажите пожалуйста, TM08 Vi-2 поддерживают финализацию и вроде как протокол записи совместим, а как, собственно, делается финализация? Я понимаю, что этой прошивкой никак, я готов сам изменить скетч и схему — в этом разбираюсь. Просто никак не могу найти в интернете документации с протоколами на все эти болванки, не понимаю как выпускают не задокументированные чипы и как потом делают дубликаторы для них, если нет информации о протоколе.
+
avatar
  • abomin
  • 29 сентября 2018, 09:21
+2
Привет, народ!
Суну и я свой пятак. Собрал макетку для Уны, добавил пищалку. Скетч доработал — использовал другие пинЫ, для компактности макетки. «Причесал» вывод на экран, чтобы строки не сползали.

Мой вариант скетча (не получается убрать в спойлер, извиняюсь)):
//Чтобы прописать в ключ номер из массива ReadID[8], после запуска (до-ми-соль) сразу нажать коротко кнопку на шильде (загорится зелёный диод на ардуине) и после этого приложить ключ - прошьётся.
//Чтобы сделать копию какого-то ключа, надо после запуска (до-ми-соль) считать оригинал, нажать коротко кнопку на шильде (загорится зелёный диод на ардуине) и после этого приложить ключ - прошьётся.
//Чтобы прошить в ключ FF..FF, надо после запуска (до-ми-соль) нажать кнопку на шильде (загорится зелёный диод на ардуине) и держать её более 3-х сек (досчитает до 6) и после этого приложить ключ - прошьётся.

#include <OneWire.h>

#define pin 8
OneWire ibutton (pin); // Пин для подлючения iButton (Data)
byte addr[8];

//byte ReadID[8] = {0x01, 0xBE, 0x40, 0x11, 0x5A, 0x36, 0x00, 0xE1}; //– код универсального ключа, для Vizit    
//byte ReadID[8] = {0x01, 0xBE, 0x40, 0x11, 0x5A, 0x56, 0x00, 0xBB}; //- проверен работает     
//byte ReadID[8] = {0x01, 0xBE, 0x40, 0x11, 0x00, 0x00, 0x00, 0x77}; //- проверен работает     
//byte ReadID[8] = {0x01, 0xBE, 0x40, 0x11, 0x0A, 0x00, 0x00, 0x1D}; //- проверен работает Визит иногда КЕЙМАНЫ   
byte ReadID[8] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x90, 0x19, 0xFF}; //???-Отлично работает на старых домофонах     
//byte ReadID[8] = {0x01, 0x6F, 0x2E, 0x88, 0x8A, 0x00, 0x00, 0x4D}; //???-Открывать что-то должен     
//byte ReadID[8] = {0x01, 0x53, 0xD4, 0xFE, 0x00, 0x00, 0x7E, 0x88}; //???-Cyfral, Metakom     
//byte ReadID[8] = {0x01, 0x53, 0xD4, 0xFE, 0x00, 0x00, 0x00, 0x6F}; //???-домофоны Визит (Vizit) - до 99%   
//byte ReadID[8] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3D}; //???-домофоны Cyfral CCD-20 - до 70%     
//byte ReadID[8] = {0x01, 0x00, 0xBE, 0x11, 0xAA, 0x00, 0x00, 0xFB}; //???-домофоны Кейман (KEYMAN)     
//byte ReadID[8] = {0x01, 0x76, 0xB8, 0x2E, 0x0F, 0x00, 0x00, 0x5C}; //???-домофоны Форвард
//byte ReadID[8] = {0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F }; // "Универсальный" 
//byte ReadID[8] = {0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x9B}; //- проверен Визит, Метакомы, КОНДОР - выходит в сервис!!!
//byte ReadID[8] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x14}; //???-Открываает 98% Метаком и некоторые Цифрал 


const int buttonPin = 9;
const int ledPin = 13;
const int speakerPin = 12;
int buttonState = 0;
int writeflag = 0;
int readflag = 0;
int val = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  pinMode(speakerPin, OUTPUT);
  Serial.begin(115200);
  tone(speakerPin,3*261);
  delay(150);
  tone(speakerPin,3*329);
  delay(150);
  tone(speakerPin,3*392);
  delay(250);
  noTone(speakerPin);
}

void loop() {

  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    readflag = 1;
    writeflag = 1;
    digitalWrite(ledPin, HIGH);
    tone(speakerPin,3*392);
    val++;
    if (val > 6) val = 6;
    Serial.println(val);
    delay(500);
    noTone(speakerPin);
  }
  else {
    val = 0;
  }


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

  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);
  tone(speakerPin,4*392);
  delay(100);
  noTone(speakerPin);

  if ((writeflag == 1) or (Serial.read() == 'w')) {
    ibutton.skip(); ibutton.reset(); ibutton.write(0x33);    
    Serial.println();
    Serial.println(" ID before write:");
    for (byte x = 0; x < 8; x++) {
      Serial.print(ibutton.read(), HEX);
      Serial.print(':');
    }
    Serial.println();
    
    // 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.println();
    Serial.println(" Writing iButton ID:");
    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(newID[x], HEX);
      Serial.print(':');
      }
    Serial.println();
    Serial.println();
    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;
}

На Алишке закупился болванками по ~40 руб\шт. Прошил их «вездеходными» номерами (см. в начале скетча) и пошёл проверять в своём подъезде. Там стоит Визит. Подошли первые пять кодов. Скачал инструкцию от домофона и эти ключи стёр из него все по одному. Профит: вот уже 2 недели НИКАКОЙ рекламы в ящиках!!! А почту и квитанции приносят.

Спасибо ТС и всем участвовавшим!
+
avatar
  • 407s
  • 06 октября 2018, 10:17
0
И куда какие пины переназначены, где дисплей? Что за муть сверху с СССРовскими резюками?
+
avatar
  • abomin
  • 06 октября 2018, 10:46
+1
Да вот же в скетче:
#define pin 8
OneWire ibutton (pin); // Пин для подлючения iButton (Data)
...
const int buttonPin = 9;
const int ledPin = 13;
const int speakerPin = 12;

А какой Дисплей? Вы о чём? Всё через терминал выводится.
Про «муть» читайте в начале коммента, а не только картинки смотрите.
+
avatar
  • Alvent
  • 08 ноября 2018, 15:24
0
Вставлю свои пять копеек. Собрал устройство, заказал RW 1990 по ссылке от автора. Читает, но не шьёт. Поставил подстроечный R2 — всё равно не шьёт при любом значении. Попробовал с другим ключом — шьёт, и без проблем. Купил ключи в Чипе и Дипе — тоже шьёт. ( кстати, там два из пятнадцати изначально убитые были, но прекрасно восстановились).
Так что скорее всего мне китайцы Read Only прислали. Пытаюсь с ними поругаться, но скорее всего бесполезно — говорят, что устройство самодельное, оттого возможно и не работает. Попробуйте, говорят, на другом проверить. Кстати, судя по почте, на которую они просили видео работы прислать, это Banggood.
+
avatar
0
Вот уже больше года назад собрал такой дубликатор,
и каждый раз не перестаю убеждаться, насколько это нужная вещь.
Но нужно открыть один домофон, и ни один универсальный ключ не подходит.
Кодами с клавиатуры не открывается.

Коды для ключей, которые по поиску на первой странице яндекса не подходят.
(Это 0x01, 0xBE, 0x40, 0x11, 0x5A, 0x56, 0x00, 0xBB и другие).

Возможно может кто-нибудь подскажет еще универсальные коды?
Или другие коды с клавиатуры?
Т.к. почтальоны заходят, и вряд ли они делали специальный ключ именно для этого домофона.
Домофон обычный визит типа такого.
+
avatar
  • draiv
  • 24 февраля 2019, 14:32
0
сделал все как автор но после прошивки включаю монитор порта и прислоняю ключ rw1990 и у меня в одну строчку бесконечно пишет вот такую ерунду,
⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮Y⸮⸮⸮⸮⸮i⸮⸮Y⸮M⸮mzY⸮⸮y⸮Y⸮x⸮jY⸮y⸮x⸮⸮⸮⸮y⸮k⸮⸮⸮x⸮Y⸮x⸮⸮⸮⸮⸮mk⸮Y⸮zY⸮Y⸮k1⸮zY⸮Kqk⸮⸮⸮⸮M⸮⸮⸮k1⸮zy⸮⸮mK1⸮mY⸮K1zY⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮Y⸮k⸮⸮mYQYQ⸮⸮K1⸮y⸮zY⸮⸮Mx⸮Kqy⸮⸮⸮k⸮x⸮K1KqY⸮MY⸮M⸮⸮⸮z⸮k⸮⸮y⸮⸮Mk⸮⸮⸮⸮⸮ɗM⸮Mk⸮⸮⸮⸮zy⸮⸮⸮⸮⸮m⸮MK1y⸮MOq⸮y⸮k⸮⸮⸮⸮⸮⸮⸮Y⸮k⸮y⸮YQk1⸮⸮MY⸮⸮q⸮⸮Y⸮⸮YٕMK1zY⸮x⸮Y⸮MK1Y⸮Y⸮Z⸮Y⸮x⸮⸮⸮⸮Z⸮⸮⸮⸮qzY⸮⸮MKqY⸮⸮mK1Oq⸮y⸮Y⸮x⸮⸮MY⸮⸮⸮zY⸮x⸮Y⸮k⸮Y⸮k⸮zY⸮KqzY⸮k⸮zY⸮K1x⸮zY⸮⸮Mk]⸮⸮y⸮k⸮OqK1x⸮Y⸮⸮y⸮Y⸮z
пробовал менять резисторы не помогает, что может быть не так?
+
avatar
  • kvolk
  • 24 февраля 2019, 14:52
0
Скорость порта какая у вас?
+
avatar
  • draiv
  • 26 февраля 2019, 15:07
0
+
avatar
  • kvolk
  • 26 февраля 2019, 16:24
+1
Внизу измените скорость порта на 115200

В обзоре это написано:
… и скорость 115200.
+
avatar
  • draiv
  • 26 февраля 2019, 16:47
0
спасибо дружище огромное, сразу не понял, теперь все получилось)))
+
avatar
0
Купил arduino nano (micro usb)arduino nano (micro usb)брал тут
В корпус стал как родной и пилить не чего не надо)))

я к тому что если делать в корпусе от Powerbank то это идеальное решение
Он собран на ATMEGA168P
+
avatar
0
Офлайн инструкция по сборке и настройки: Скачать
+
avatar
0
Фото моего устройства
Фото моего устройства
Фото моего устройства
+
avatar
0
Здравствуйте, купил в Леруа 5 ключей. Написано ts-1990a f-5, в интернете дельного по ним ничего не нашел. Не прошиваются. Может кто знает, что-то неправильно, или они для этого не годятся?
+
avatar
0
Они не перезаписываемые вам нужно ключ RW1990
+
avatar
0
Понятно, спасибо
+
avatar
0
Не читаются ключики Цифрал.Скетчей перебрал много.Резистор переменный на iButton регулировал от680 Ом до 5кОм. Как решить проблему?
+
avatar
0
Подскажите как выводить данные по шине I2c на LCD 16x2
Интересует вывод:
Serial.print(«CRC: „);
Serial.print(“ ID before write:»);
Serial.print(" Writing iButton ID:\n ");
вот ссылка на скетч cloud.mail.ru/public/3bb3/w6mTc6KNH
+
avatar
  • kvolk
  • 06 сентября 2019, 17:28
0
В этом обзоре смотрите
mySKU.me/blog/aliexpress/58428.html
+
avatar
0
мне как бы на нужно на Arduino Nano а не на Arduino uno
+
avatar
  • kvolk
  • 11 сентября 2019, 21:16
0
А что, есть разница?
+
avatar
0
Atmega 168 Micro USB память 16 Килобайт
Atmega 328 Mini USB память 32 Килобайт

У меня как раз Atmega 168
+
avatar
  • dikers
  • 07 ноября 2019, 18:36
0
элементарно. замените serial.print на lcd.print
ну и библиотеки ессно подключите. например так
#include <OneWire.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.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;
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
  lcd.init();                      // initialize the lcd 
  lcd.init();
  // Print a message to the LCD.
  lcd.backlight();
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  Serial.begin(9600);
  lcd.print("mega kopir :-)");
}

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++) {
    lcd.print(addr[x], HEX);
    if (readflag == 0) {
      ReadID[x] = (addr[x]);
    }
    lcd.print(":");
  }

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

  if ((writeflag == 1) or (Serial.read() == 'w')) {
    ibutton.skip(); ibutton.reset(); ibutton.write(0x33);
    lcd.print("  ID before write:");
    for (byte x = 0; x < 8; x++) {
      lcd.print(' ');
      lcd.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);

    lcd.print('\n');
    lcd.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]);
      lcd.print('*');
    }
    lcd.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;
}
+
avatar
0
А к каким пинам подключить 1602- к arduino?
и ещё можно дублировать буфер и надписи на дисплее?
+
avatar
  • dikers
  • 07 ноября 2019, 22:06
0
A4-SDA
A5-SCL
+
avatar
0
При считывании выдаёт такое=)))

Это и з за того что в буфер он постоянно отправляет данные

+ у вас ошибка
lcd.init(); // initialize the lcd
lcd.init();
надо изменить на
lcd.begin();
lcd.begin(); // инициализация LCD
+
avatar
  • dikers
  • 08 ноября 2019, 12:29
0
одну строку lcd.init надо заменить на lcd.begin(16, 2);
а Serial.begin(9600); удалить. он тут не используется
+
avatar
0
А как прописывать чтобы данные шли на дисплей и в монитор порта
+
avatar
  • dikers
  • 09 ноября 2019, 16:27
0
serial.print добавить
подправил код

#include <OneWire.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.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;
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
  lcd.init();                      // initialize the lcd 
  lcd.begin(16,2);
  lcd.clear();
  lcd.backlight();
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  Serial.begin(9600);
  lcd.print("mega kopir :-)");
}

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);
    lcd.clear();
  for (byte x = 0; x < 8; x++) {
        Serial.print(addr[x], HEX);
    lcd.print(addr[x], HEX);
    if (readflag == 0) {
      ReadID[x] = (addr[x]);
    }
    lcd.print("");
     Serial.print(":");
  }

  byte crc; // Проверка контрольной суммы
  crc = ibutton.crc8(addr, 7);
 lcd.setCursor(0, 1);
  lcd.print(" CRC:");
  lcd.print(crc, HEX);
  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.println();
    Serial.println(" ID before write:");
                                                                                                                                                                  lcd.clear();
    lcd.print("  ID before write:");
    for (byte x = 0; x < 8; x++) {
      lcd.print(' ');
      lcd.print(ibutton.read(), HEX);
      Serial.print(ibutton.read(), HEX);
      Serial.print(':');
    }
    // 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.println();
    Serial.println(" Writing iButton ID:");
    lcd.print('\n');
    lcd.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]);
      lcd.print('*');
       Serial.print(newID[x], HEX);
      Serial.print(':');
    }
  lcd.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;
}
+
avatar
0
В мониторе порта твориться вот такая жесть
это при попытке зашить ключ
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C

ID before write:
FF:FF:FF:2F:FF:FF:FF:FF:
Writing iButton ID:
F1:FF:FF:FF:FF:FF:2F:2F:F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
F1:FF:FF:FF:FF:FF:2F:2F: CRC:3C
+
avatar
  • dikers
  • 12 ноября 2019, 20:48
0
так должно норм выводить.
плохо что здесь строки кода не пронумерованы. приходится весь скетч выкладывать.
#include <OneWire.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#define pin 11
OneWire ibutton (pin); // Пин D11 для подлючения iButton (Data)
byte addr[8];
byte ReadID[8] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x90, 0x19, 0xFF}; 
const int buttonPin = 6;
const int ledPin = 13;
int buttonState = 0;
int writeflag = 0;
int readflag = 0;
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
  lcd.init();                      // initialize the lcd 
  lcd.begin(16,2);
  lcd.backlight();
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  Serial.begin(9600);
  lcd.print("mega kopir :-)");
}

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);
    lcd.clear();
  for (byte x = 0; x < 8; x++) {
        Serial.print(addr[x], HEX);
    lcd.print(addr[x], HEX);
    if (readflag == 0) {
      ReadID[x] = (addr[x]);
    }
    lcd.print("");
     Serial.print(":");
  }

  byte crc; // Проверка контрольной суммы
  crc = ibutton.crc8(addr, 7);
 lcd.setCursor(0, 1);
  lcd.print(" CRC:");
  lcd.print(crc, HEX);
  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.println();
    Serial.println(" ID before write:");
                                                                                                                                                                  lcd.clear();
    lcd.print("  ID before write:");
    for (byte x = 0; x < 8; x++) {
      Serial.print(ibutton.read(), HEX);
      // lcd.print(' ');
     // lcd.print(ibutton.read(), HEX);
      Serial.print(':');
          }
    // 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.println();
    Serial.println(" Writing iButton ID:");
    lcd.print('\n');
    lcd.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]);
      lcd.print('*');
       Serial.print(newID[x], HEX);
      Serial.print(':');
    }
  lcd.print('\n');
  Serial.println();
    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;
}
+
avatar
0
1:4B:F2:7E:B:0:0:E9: CRC:E9

ID before write:
1:4B:F2:7E:B:0:0:E9:
Writing iButton ID:
1:FF:FF:FF:FF:FF:FF:2F:
1:FF:FF:FF:FF:FF:FF:2F: CRC:2F

После считывания не пишется контрольная сума CRC:E9 и CRC:2F
+
avatar
  • kvolk
  • 14 ноября 2019, 09:53
0
После считывания не пишется контрольная сума CRC:E9
А зачем писать контрольную сумму после считывания?
+
avatar
  • dikers
  • 17 ноября 2019, 18:38
0
как то так. заодно поправил вывод на 1602
#include <OneWire.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#define pin 11
OneWire ibutton (pin); // Пин D11 для подлючения iButton (Data)
byte addr[8];
byte ReadID[8] = {0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f}; 
const int buttonPin = 6;
const int ledPin = 13;
int buttonState = 0;
int writeflag = 0;
int readflag = 0;
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
  lcd.init();                      // initialize the lcd 
  lcd.begin(16,2);
  lcd.backlight();
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  Serial.begin(9600);
  lcd.print("mega kopir :-)");
}

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);
    lcd.clear();
  for (byte x = 0; x < 8; x++) {
        Serial.print(addr[x], HEX);
    lcd.print(addr[x], HEX);
    if (readflag == 0) {
      ReadID[x] = (addr[x]);
    }
    lcd.print(":");
     Serial.print(":");
      if (x==5)  lcd.setCursor (0,1);
  }



  byte crc; // Проверка контрольной суммы
  crc = ibutton.crc8(addr, 7);
 lcd.setCursor(9, 1);
  lcd.print(" CRC:");
  lcd.print(crc, HEX);
  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.println();
    Serial.println(" ID before write:");
                                                                                                                                                                  lcd.clear();
    lcd.print("  ID before write:");
    for (byte x = 0; x < 8; x++) {
      Serial.print(ibutton.read(), HEX);
      // lcd.print(' ');
     // lcd.print(ibutton.read(), HEX);
     Serial.print(':');     
          }
          Serial.print("  CRC:");
     Serial.println(crc, 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.println();
    Serial.println(" Writing iButton ID:");
    lcd.print('\n');
    lcd.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]);
      lcd.print('*');
      Serial.print(newID[x], HEX);
      Serial.print(':');
     
    }
  Serial.print("  CRC:");
  Serial.println(crc, HEX);
  lcd.print('\n');
  Serial.println();
    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;
}
+
avatar
  • kvolk
  • 18 ноября 2019, 14:59
0
Есть очень полезная кнопка «Спрятать часть текста (спойлер)», попробуйте, очень удобно.
+
avatar
0
А можно сделать так что ключ в LCD экране писался без двоеточий к примеру: 1:FF:FF:FF:FF:FF:FF:2F И без надписи crc:2F
А в мониторе порта все осталось как вы сделали
+
avatar
  • cofein
  • 24 октября 2019, 19:36
0
В общем — вышло у меня.
Я бы еще добавил в пост, что делать с «OneWire ». Лишь по коментариям понял что это «плагин» который надо добавить в N папку.
это для таких же «тугих» как я )) кто первый раз видит «ардуино».
Надеюсь теперь закрою проблему с ключами на работе.
использовал smd компоненты, 102 и 103 (выпаял с платы водонагревателя, больше негде взять)

и остался вопрос, а можно как-то самому прописывать ключи?
+
avatar
  • cofein
  • 24 октября 2019, 20:21
0
Кажется разобрался. надо скеч переписывать с указанием «нужного ключа» и потом его писать под видом «универсального».
Спасибо.
Буду думать как это собрать в приятный корпус.

Кстати, среди ключей что валялись на работе, нашлась парочка перезаписываемых, на одном даже заводская надпись — христос воскрес.
Видимо кто-то заказывал «именные».
+
avatar
0
Мой скетч на Русском языке
/*

Подключение LCD дисплея
GND-GND
+5V-VCC
A4-SDA
A5-SCL

*/
#include <OneWire.h>
#include <Wire.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystalRus_I2C.h>
#define pin 11
OneWire ibutton (pin); // Пин D11 для подлючения iButton (Data)
byte addr[8];
byte ReadID[8] = {0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f}; // «Универсальный» ключ. Прошивается последовательность 1:FF:FF:FF:FF:FF:FF:2F:CRC: 2F
const int buttonPin = 6; // Пин D6 Подключение кнопки
const int ledPin = 13; // Пин D13 Подключение плюса светодиода
int buttonState = 0;
int writeflag = 0;
int readflag = 0;
LiquidCrystalRus_I2C lcd(0x27, 16, 2); // Адрес Lcd дисплея 16х2
void setup() {
lcd.init(); //Инициализация
lcd.begin(16,2);
lcd.backlight(); //Подсветка (с некоторыми экранами не обязательно)
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
Serial.begin(9600); // Скорость монитора порта
lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
lcd.print(L" Программатор"); //выводим русский текст
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print(L" RW-1990 Ключей"); // Вторая строка при включении
}

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);
lcd.clear();
for (byte x = 0; x < 8; x++) {
Serial.print(addr[x], HEX);
lcd.print(addr[x], HEX);
if (readflag == 0) {
ReadID[x] = (addr[x]);
}
lcd.print(":");
Serial.print(":");
if (x==5) lcd.setCursor (0,1);
}

byte crc; // Проверка контрольной суммы
crc = ibutton.crc8(addr, 7);
lcd.setCursor(9, 1);
lcd.print(" CRC:");
lcd.print(crc, HEX);
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.println();
Serial.println(" ID ключа перед записью:");
lcd.clear();
lcd.print(" ID before write:");
for (byte x = 0; x < 8; x++) {
Serial.print(ibutton.read(), HEX);
// lcd.print(' ');
// lcd.print(ibutton.read(), HEX);
Serial.print(':');
}
Serial.print(" CRC:");
Serial.println(crc, 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.println();
Serial.println(" ID ключа после записи:");
lcd.print('\n');
lcd.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]);
lcd.print('*');
Serial.print(newID[x], HEX);
Serial.print(':');

}
Serial.print(" CRC:");
Serial.println(crc, HEX);
lcd.print('\n');
Serial.println();
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;
}

Ссылка на библиотеки
Распаковывать в: Папка с Arduino\libraries
Далее Файл=>Примеры=>OneWire=>RW1990_LCD_RUS
+
avatar
  • dikers
  • 26 ноября 2019, 14:28
0
это конечно замечательно. но в большинстве lcd1602 нет русских букв
+
avatar
  • dikers
  • 27 ноября 2019, 17:07
0
Не сразу заметил что используется библиотека автоматом подгружающая русские буквы в знакогенератор.
А зачем. Эти строки
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
Их можно и убрать.
+
avatar
0
Подскажите как написать в дисплей после ID before write: номер ключа
чтобы было примерно написано
ID before write:
1FFFFFFFFFFFF2F

и ещё

Writing iButton:
1FFFFFFFFFFFF2F (где это новый ключ)
+
avatar
0
Крайний скетч
/*

Подключение LCD дисплея
GND-GND
+5V-VCC
A4-SDA
A5-SCL

*/
#include <OneWire.h>
#include <Wire.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystalRus_I2C.h>
#define pin 11
OneWire ibutton (pin); // Пин D11 для подлючения iButton (Data)
byte addr[8];
byte ReadID[8] = {0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f}; // «Универсальный» ключ. Прошивается последовательность 1:FF:FF:FF:FF:FF:FF:2F:CRC: 2F
const int buttonPin = 6; // Пин D6 Подключение кнопки
const int ledPin = 13; // Пин D13 Подключение плюса светодиода
int buttonState = 0;
int writeflag = 0;
int readflag = 0;
LiquidCrystalRus_I2C lcd(0x27, 16, 2); // Адрес Lcd дисплея 16х2
void setup() {
lcd.init(); //Инициализация
lcd.begin(16,2);
lcd.backlight(); //Подсветка (с некоторыми экранами не обязательно)
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
Serial.begin(9600); // Скорость монитора порта
lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
lcd.print(L" Программатор"); //выводим русский текст
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print(L" RW-1990 Ключей"); // Вторая строка при включении
}

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);
lcd.clear();
for (byte x = 0; x < 8; x++) {
Serial.print(addr[x], HEX);
lcd.print(addr[x], HEX);
if (readflag == 0) {
ReadID[x] = (addr[x]);
}
Serial.print(":");
if (x==7) lcd.setCursor (0,1);
}

byte crc; // Проверка контрольной суммы
crc = ibutton.crc8(addr, 7);
lcd.setCursor(5, 1);
lcd.print(«CRC:»);
lcd.print(crc, HEX);
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.println();
Serial.println(" ID ключа перед записью:");
lcd.clear();
//lcd.print(«ID before write:»);
for (byte x = 0; x < 8; x++) {
Serial.print(ibutton.read(), HEX);
// lcd.print(' ');
// lcd.print(ibutton.read(), HEX);
Serial.print(':');
}
Serial.print(" CRC:");
Serial.println(crc, 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.println();
Serial.println(" ID ключа после записи:");
//lcd.print('\n');
lcd.print(«Writing iButton:\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]);
//lcd.print('*');
Serial.print(newID[x], HEX);
Serial.print(':');

}
Serial.print(“ CRC:»);
Serial.println(crc, HEX);
lcd.print('\n');
Serial.println();
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;
}
+
avatar
+1
Вот что получилось


+
avatar
+1
Мой дубликатор без экрана 1602 и с Mail облако
+
avatar
0
как бы еще баззер добавить при считывании-записи…
+
avatar
0
Помогите приспособить arduino pro micro.
Пока учусь на чужих примерах.
Спасибо.
+
avatar
0
Новая версия моего дубликатора с экраном 1602 ссылка
Отличие от других версий она всего с 2 резисторами (но без монитора порта)
Инструкция находиться по пути: libraries\OneWire\examples\v3_RW1990_LCD_RUS\Dublicator_v3.pdf
+
avatar
0
Не в укор автору, но немного код подправил и корпус под 3д принтер ссылка
+
avatar
0
А можете сделать скетч с поддержкой экрана 1602
+
avatar
  • levsha66
  • 11 декабря 2020, 18:58
0
Возможно ли его подключить по OTG через какой нибудь терминал к Андроид, чтобы видно было ключи? Питания от OTG хватает, а как пишутся не вижу.
+
avatar
0
В схеме один «косячок» есть — да, все так делают, но меня как инженера это коробит. Нажимаем кнопку и на цифровой вход шарашит питание!!! Да, там внутри есть защита — но правильнее все таки кнопку и резистор подтяжки местами поменять. Ну и в скетче поменять высокий на низкий…
Видел еще у китайцев считыватели MATRIX2 — они по выходу onewire. Можно еще и клонирование 13Мгц ключей добавить — места до черта остается…
+
avatar
  • ezhaga
  • 04 декабря 2021, 12:04
0
Пробую собрать дубликатор на ардуине nano и на STM nano.
На ардуине работает.
На STM не читает ключи. Кнопка и порт вывода работает.
Почему так?
+
avatar
  • SebSeb
  • 06 декабря 2021, 21:33
0
Спасибо за разработку, удобно!