Touch memory подключение к компьютеру
- Arduino UNO (Или Arduino совместимая плата)
- WG12864B графический экран
- Резистор 100 Ом 0.25 Вт
- Блок питания 6 – 12 В
- Резистор 2.2 КОм 0.25 Вт
- Резистор 10 КОм 0.25 Вт
- Коробка от картриджа приставки SEGA
- Изолента
- Соединительные провода
- Кнопка
- Небольшой кусочек нержавейки
- ножницы по металлу
- Канцелярский нож
- Паяльник
- Припой, канифоль
- Двусторонний скотч
Шаг 1 Немного о самих ключах Ibutton.
Чтобы было понятно iButton - это просто микросхема, запиханная в круглый корпус из нержавеющей стали. Диаметр корпуса 16.3 мм. Корпус из нержавеющей стали устойчив к воздействию ударов, грязи и влажности. Стандарт корпуса носит название iButton MicroCan. Выпускаются в двух вариантах стандартной толщины: 3.1 мм (версия F3) и 5.9 мм (версия F5). Питание микросхема получает от линии данных master устройства. Диаметр крышки у всех версий одинаковы. Поэтому для всех подойдет одна и та же считывающая чашка. Блок-схема наших ключей:
Ключи бывают перезаписываемыми и нет. Чтобы сделать дубликат понадобятся, соответственно, перезаписываемые. Бывают 3 версии меток: RW1990, TM08v2 и TM-08 VZT F. Отличаются по микросхеме, находящейся внутри. Наиболее распространённые RW1990. Их можно купить на aliexpress или розничном магазине по продаже охранно-пожарных систем.
Шаг 2 Экран.
Мы будем использовать жидкокристаллический дисплей, разрешение 128 на 64 точки. Большинство из них работают на микросхемах ks0107/ks0108, поэтому проблемы с совместимостью не должно быть. Все эти экраны можно разделить на 4 типа. Отличаются разным подключение:
Лучше всего брать WG12864B3 V2.0, его можно легко найти как в китайских, так в российских магазинах. Могут быть несколько видов подсветки, но на функционале это никак не отразиться. Также есть два варианта подключения: параллельное и последовательное. При выборе параллельного типа нам потребуется 13 свободных выводов Arduino. Выбираем последовательное. Тут задействуется всего 3 вывода. И не забудьте про питание:
WG12864B – Arduino UNO
1 (GND) - GND
2 (VCC) - +5V
4 (RS) – 10
5 (R/W) – 11
6 (E) – 13
15 (PSB) – GND
19 (BLA) – через резистор 100 Ом - +5V
20 (BLK) – GND
Яркость экрана регулируется потенциометром, находящемся на плате с экраном. Если его – возможность регулировки яркости отсутствует, но такое бывает редко:
Сопротивление в 100 Ом используется для снижения напряжения для подсветки экрана. Вставляем его в разрез провода, питающего подсветку:
Шаг 3 Корпус и считывающая чашка.
Чтобы у нас не было «джигурды», и выглядело все нормально, начнем изготовление корпуса. Отлично подойдет любая пластиковая коробка, в которую поместиться Arduino Uno и экран. Оптимальное решение – коробка от картриджа.
Срезаем петлю коробку и снимаем пленку:
Берем в руки канцелярский нож и начинаем вырезать прорези. Для начала вырежем самую большую в верхней части коробки размером 37х69. Она нужна для экрана.
Внутри коробки наклеиваем клеим двусторонний скотч,:
Теперь озадачимся считывающийся чашкой. Можно купить и использовать готовую. Это самый простой вариант. Я покажу как можно самому изготовить эту чашку. Вырезаем из нержавейки два прямоугольника: 20х20 мм и 20х8 мм:
Делаем небольшую прорезь внизу экрана и вставляем туда прямоугольник побольше:
И загибаем края:
И с обратной стороны делаем тоже для фиксации минусовой контактной пластины:
Для плюса также делаем прорезь и вставляем в нее плюсовой контакт:
С внутренней стороны контакты выглядят так:
На заранее наклеенный скотч крепим экран:
Снаружи должно быть так:
Внутри коробки, ниже экрана располагаем Arduino:
Не забудьте сделать прорези для USB и гнезда питания:
Для переключения режимов между чтение и записью, выводи кнопку:
Шаг 4 Решаем вопрос питания.
Чтобы наше устройство работало, обеспечим его питанием. Для этого нам нужен блок питания. Напряжение должно быть от 6 вольт до 12. Штекер на конце должен подходить к гнезду Arduino:
Можно обойтись и без блока питания. Можно запитать устройство от USB компьютера. Если хотите можно взять отсек для 4 батарее размера ААА и запихнуть его внутрь. Плясовой вывод тогда надо подключить к Vin платы Arduino.
Шаг 5 Соединение всего воедино.
Считывающую чашу подключаем по схеме:
Плюсовой контакт чаши подключаем к pin 7, подтягивая через резистор в 2.2 Ком к VCC. Кнопку подключаем к pin 6, подтягивая резистором на 10 Ком к GND.
Шаг 6 Программная часть.
Скачиваем и устанавливаем Arduino IDE с официального сайта
Для работы с Touch memory используется библиотека One Wire. Ее также надо скачать и установить в среду Arduino IDE:
Экран запустим с помощью библиотеки U8glib:
Без библиотек скомпилировать скетч и залить его в Arduino не получиться. Действуем следующим образам: разархивируем скаченные архивы и перемещаем эти файлы в папку с именем «libraries». Ее можно найти по пути установки среды программирования.
Скачиваем архив со скетчем:
Распаковываем архив, открываем скетч в Arduino Ide и заливаем в Arduino.
Шаг 7 Процесс копирования ключей.
При включении нашего устройства на экране отобразится надпись «Read» и универсальный ключ. Этот ключ записан в скетче. Я его нашел на просторах интернета. Лично не проверял на сколько он универсальный. Если это произошло наше устройство готово к работе:
Прикладываем ключ, который нужно скопировать. На экране должен отобразиться этот ключ. Я для примера взял один из тех, что есть у меня:
Теперь нажимает кнопку, надпись на экране должна поменяться на «Write». Также будет отображен ключ, который будет записан:
Прикладываем таблетку, болванку на которую будем писать, и дожидаемся пока на экране надпись снова смениться на «Read». Если это произошло – запись прошла удачно. Для проверки снова приложить болванку, устройство должно ее прочесть и отобразить ключ.
Если вы хотите записать универсальный ключ, просто в самом начале нажмите кнопу, когда надпись смениться на «Write» приложите болванку.
Также устройство отправляет информацию о ключах и процессах чтения и копирования через serial порт. Можно открыть терминал Arduino Ide или любую другую терминальную программу и следить за процессом копирования в нем.
Универсальный ключ, записанный в скетче, можно поменять. Для этого надо открыть скетч и отредактировать строку:
Но тут не все так просто. Последний байт — это контрольная сумма ключа или Cyclic Redundancy Check (CRC). В данном случаем это 2F. Без этой суммы считывающие устройства не принимают ключ. CRC рассчитывается особым алгоритмом. Можно этот алгоритм найти и посчитать самому, но проще использовать наше устройство. Первый байт это — family code, он должен быть всегда 01. Далее прописывает в строке байты, которые мы хотим записать как универсальный ключ. Заливаем скетч. Записываем этот ключ на болванку и пробуем считать его обратно, при этом открыв окно терминала. В терминале мы увидим наш ключ и в конце CRC. Это и есть искомая контрольная сумма. Теперь опять редактируем скетч. Вместо последнего байта в той же строке записываем байт, полученный при чтении, после CRC. Снова заливаем скетче и записываем новый ключ на болванку. Открываем окно терминала, пробуем прочесть наш ключ. Последний байт ключа должен совпадать с байтом записанным после CRC.
iButton — это общее название для формата электронного ключа в форм-факторе металлической “таблетки”. Еще его называют Dallas Touch Memory. Часто его ошибочно называют “магнитным” ключом, но это неправильно, ничего магнитного в нем нет. Внутри iButton полноценный микрочип, работающий по цифровому протоколу.
В статье разберем формат ключей iButton от физического устройства до протоколов, а также трюки, которые можно с ним делать при помощи Flipper Zero.
Что такое iButton
Название iButton — это продукт фирмы Dallas Semiconductor, в 1991 году выпустившей на рынок ключ под торговой маркой Touch Memory, потом замененной на iButton.
Схематическое устройство ключа iButton: в центре корпуса контакт плюс, потом пластиковая изоляция, и внешняя часть корпуса это минус
Обычно под словом iButton принято понимать именно физический формфактор ключа и считывателя — круглая таблетка с двумя контактами. Существуют разные вариации оправ самой таблетки. Кроме привычного пластикового держателя с отверстием бывают варианты в виде колец, кулонов и т.д.
Внутреннее устройство iButton: внутри металлической оболочки находится микрочип
Считыватель
При поднесении ключа к считывателю, контакты соприкасаются, и на ключ подается питание. Далее осуществляется передача ID ключа. Иногда ключ не считывается сразу, потому что внешние контуры ключа и считывателя не соприкоснулись. В этом случае нужно упереть ключ в одну из стенок считывателя.
Касание контактов iButton ключа с домофонным считывателем
В формфакторе «таблетки» iButton бывают не только простые ключи с ID, но и климатические датчики, устройства для хранения криптографических ключей со своей батарейкой, часами и прочими наворотами. Эти устройства выглядят так же как ключи, но ими не являются.
Как устроен iButton во Flipper Zero
Разработка контактной площадки iButton во Flipper Zero — это огромная боль. Дело в том, что не существует готовых контактных площадок для одновременного чтения и эмуляции. Если бы мы просто взяли существующие модули, из флиппера бы торчала огромная металлическая кнопка, и рядом такая же огромная площадка для считывания. Это бы многократно увеличило размер устройства.
Нам пришлось изобретать собственную конструкцию контактной площадки с нуля, которую можно было бы реализовать на печатной плате так, чтобы итоговый размер устройства не увеличился. Было решено использовать 3 подпружиненных пого-пина. В итоге было протестировано около 20 разных конструкций.
Прототипы конструкций контактной площадки iButton во Flipper Zero, которые мы печатали на 3D-принтере в процессе разработки
Самая большая сложность конструкции контактной площадки в эмуляции, когда флиппер сам выступает ключом и его нужно прикладывать к домофону. Каждый производитель изобретает собственную конструкцию считывателя, из-за этого постоянно находятся домофоны в которых конструкция не работает: пины просто не дотягиваются либо до центрального контакта Data+, либо до бокового контакта GND.
Левая часть контактной площадки используется для считывания и записи ключей, правая для эмуляции. Центральный пин GND общий для обоих режимов.
Финальная конструкция получилась компромиссной: 100% ключей считывается успешно, примерно 80% считывателей успешно работают с эмуляцией. В оставшихся 20% считывателей приходится корячиться, чтобы контакт достал до нужных стенок. Для этих редких случаев можно использовать внешние контакты GPIO, на которые выведены контакты ibutton: подключиться макетными проводами и ткнуть их в считыватель.
Режим считывателя
В режиме считывателя флиппер ожидает поднесения ключа, при этом готов прожевать сразу три типа ключей: Dallas, Cyfral, Metakom. Флиппер сам определит тип ключа при чтении. Название протокола ключа отобразится на экране над ID номером.
Чтение ключа ibutton формата Dallas. Прочитанный ключ сохраняется на SD-карту.
Для считывания ключа необходимо зайти в меню iButton —> Read и приложить читаемый ключ к контактной площадке. Считанный ключ можно сразу эмулировать, записать на болванку, либо сохранить на SD-карту. Хоть контактная площадка находится на задней стороне от экрана, можно быстро наловчиться читать ключи не разворачивая флиппер, просто на ощупь.
В режиме чтения iButton используются два правых контакта Flipper Zero
Режим эмуляции iButton
В режиме эмуляции ключа, Флиппер сам выступает ключом и программно эмулирует iButton из памяти. ID ключа для эмуляции во Flipper Zero можно добавить двумя способами:
В режиме эмуляции Флиппер передает конкретный ID и эмулирует только один, заранее заданный, протокол ключа, так что его можно подносить только к конкретному домофону, который знает этот ключ. Перебирать сразу несколько ключей в этом режиме нельзя, так как нельзя однозначно убедиться, прочитал ли домофон наш ключ, и нельзя знать задержку в домофоне, между ошибкой чтения. Поэтому для дома, офиса, дачи, подвала нужно будет каждый раз выбирать конкретный ключ из меню.
В режиме эмуляции ключа iButton Флиппер нужно подносить к домофону как ключ. При этом нужно убедиться, что оба контакта коснулись контактной площадки считывателя.
iButton через внешний GPIO
Контакт iButton на нижней крышке также выведен на гребенку GPIO. Это можно использовать для подключения к нестандартным считывателям, ключам, любым устройствам работающим по протоколу 1-Wire вроде датчиков. Мы используем эти контакты для анализа сигналов через осциллограф. При этом, этот контакт не совсем честный GPIO, потому что имеет подтяжку к 5V.
Контакты iButton соединены с гребенкой GPIO. Порт iButton работает в режиме open-drain и подтянут к напряжению 5 В через резистор 1 кОм.
Протокол 1-Wire
В протоколе 1-Wire всегда есть главное устройство Master и ведомые Slave
Ключи Dallas обмениваются данными по протоколу 1-wire. Всего один контакт на передачу данных(!!) в обе стороны, от мастера к слейву и наоборот. Протокол 1-wire работает по модели Master-Slave. В этой топологии устройство Master всегда инициирует общение, а Slave следует его указаниям.
При контакте ключа (Slave) с домофоном (Master) чип внутри ключа включается, получив питание от домофона и происходит инициализация ключа, после чего домофон запрашивает ID ключа. Далее мы разберем подробно этот процесс.
Флиппер умеет работать в режимах Master и Slave. В режиме чтения ключа Флиппер выступает в роли считывателя, то есть работает как Master. А в режиме эмуляции ключа, флиппер прикидывается ключом, то есть работает в режиме Slave.
При чтении ключа Флиппер выступает мастером, а при эмуляции с домофоном работает как slave
Формат данных в ключе Dallas
Домофон считывает из iButton 8 байт (64 бита) информации, чтобы решить, открывать дверь или нет.
Структура данных этих 8 байт следующая:
- 1 байт — код семейства (Family Code), для iButton он всегда равен 0x01
- 6 байт — серийный номер ключа
- 1 байт — контрольная сумма СRC
Код семейства у ключей Dallas всегда 0x01. Если у вас этот код отличается, то скорее всего, это не ключ от домофона.
Серийный номер в некоторых случаях выгравирован на ключе, но может:
- Не содержать все 8 байт
- Иметь последовательность символов задом-наперед
- Иметь начало в непонятном месте
На картинке выше показан неочевидный пример гравировки ID на оригинальном ключе iButton. В нем читать байты нужно справа налево, контрольная сумма написана слева, а family code справа.
Ошибки чтения
При некорректном чтении ключа Flipper Zero сообщает об ошибках. Возможные ошибки:
- Некорректная контрольная сумма — ошибка в CRC
- Неправильный код семейства — когда family code отличается от 0x01, Флиппер ругается что это не ключ iButton.
Ввод ID вручную
Если ID ключа известен, его можно ввести во Флиппер вручную. Это удобно когда самого физического ключа нет, например можно передать нужные байты просто в чате или скинув другу фото. На видео показан пример создания нового ключа Cyfral из 2 байт. Новый сгенерированный ключ сохраняется на SD-карту.
Создание нового ключа с помощью ручного ввода айдишника
При создании ключа нужно выбрать его тип: Dallas, Cyfral или Metakom. От этого будет зависеть длина ID и протокол, используемый при эмуляции. После ввода ID Флиппер предложит ввести имя нового ключа, либо использовать сгенерированное.
Запись ключей 1-Wire Dallas
Существуют ключи Dallas, которые можно записать и которые нельзя. Популярные перезаписываемые iButton болванки: RW1990, TM2004, TM01C. Процесс записи имеет свои нюансы, разберем их.
Запись болванки может требовать повышенного напряжения — например, для записи менее популярной RW2000 требуется напряжение 8 В (правда это Cyfral, но смысл понятен).
Некоторые болванки требуют финализиации — после финализации ключ больше не может быть перезаписан. Этим пользуются некоторые домофоны, пробуя перезаписать ключ перед считыванием, чтобы избежать поддельных ключей. Обычно для финализации используют импульс напряжения и специальную команду, которая может отличаться для разных ключей.
Существуют болванки, которые могут подходить ко всем типам ключей: Dallas/Cyfral/Metakom. Флиппер умеет записывать основные популярные болванки.
Запись ключа Dallas на болванку RW1990 с помощью Flipper Zero
Русские народные ключи Cyfral, Metakom
Протоколы Metakom и Cyfral — отечественные разработки, распространенные только в СНГ. В отличие от ключей Dallas, они работают не по напряжению, а по току. Это менее распространенные и более дорогие ключи. Они очень чувствительны к параметрам ключа (частота, сила тока, амплитуда сигнала и пр.), из-за чего изготовление дубликатов бывает капризным процессом.
Cyfral и Metakom не принимают никакие команды. При подаче питания на ключ, он сразу начинает бесконечно посылать ID за счет изменения сопротивления. Таким образом, логические уровни определяются сопротивлением ключа. По документации ключей условно принимается, что информационные слова кода выдаются начиная с младшего бита.
Cyfral
Логические уровни в Cyfral, так же как и в Dallas имеют временные ограничения: если сопротивление остается низким около 50 мкс — это логический “0”, если 100 мкс — это логическая “1”.
Формат передаваемых данных специфичен.
Cyfral циклично отправляет 9 нибблов (1 ниббл = 4 бита): 1 стартовый и 8 ID. Ниббл может иметь всего 4 значения для ID и одно значение для стартового слова. Все остальные записи — некошерные.
В итоге ID записывается в 2 байта (Всего 8 нибблов ID. 4 ниббла = 16 состояний = 1 байт информации).
Бывает, что домофоны Cyfral занимаются проверкой ключа, подавая некорректные данные.
У Cyfral нет никаких контрольных сумм. Хочешь убедиться в целостности ID — прочитай ключ еще раз, а хочешь пять. Так как сигнал аналоговый, то чтение сигнала требует наличия АЦП или компаратора. Проще всего использовать компаратор, выход которого является низким или высоким уровнем напряжения.
С эмулированием ключа на практике проблем не возникает. Замыкания на землю (отсутствия сопротивления) вполне достаточно, чтобы ключ выдал логический «0».
Metakom
Ключ Metakom посылает 4 байта, где каждый байт заканчивается битом четности.
Metakom имеет 3 примитива передачи:
- Синхронизирующий бит
- Бит 0
- Бит 1
Структура посылки выглядит так:
- Синхронизирующий бит
- 4 байта информации, где каждый байт содержит:
- 1 бит четности
- 7 бит данных
Смотрим на 1-Wire через осциллограф
Захват сигнала осциллографом в момент чтения ключа Dallas
Линия передачи устроена по принципу «монтажного И» и может иметь одно из двух состояний: логический “0” и логическая “1”.
Устройства (ключи и домофон) имеют внутренние транзисторы, которые в нужное время подтягивают линию к нулю. Вся линия передачи переходит в состояние логического “0”, если любое из устройств перевело ее в нуль, т.е. если домофон перетянул линию в нуль — ключ об этом узнает, и наоборот.С помощью перетяжек напряжения и удержания уровней 1-wire имеет 4 примитива для работы на шине:
- импульс сброса (RESET)
- импульс присутствия (PRESENCE)
- отправка бита 0
- отправка бита 1 и она же по совместительству чтение бита
Чтение ключа на Flipper Zero устроено так: командой поиска проверяется наличие ключа, а затем происходит чтение ID. Это сделано, чтобы избежать случайных совпадений с другими ключами Cyfral/Metakom, тайминги которых могут случайно совпасть с требуемыми.
На осциллограмме виден длинный сигнал из 2 команд, где каждая состоит из:
- Инициализации команды:
- Импульс сброса
- Импульс присутствия
Разберем более детально каждый из пунктов.
Reset sequence — инициализация команды. Состоит из Импульса Сброса и Импульса Присутствия. Импульс Сброса — уровень опускает Master. Импульс Присутствия — уровень опускает Slave.Инициализация (reset sequence) состоит из двух импульсов:
- Импульс Сброса (Reset pulse)
- Импульса Присутствия (Presence pulse)
Некоторые домофоны не подают импульс сброса, так как отсутствие контакта между ключом и домофоном и есть сигнал сброса.
Команда чтения ID с ответом. Тайм-слот бита информации состоит из 2 участков: синхронизации и значения бита. В КОМАНДАХ за уровни напряжения на обоих участках отвечает Master. В ОТВЕТЕ на команду чтения за синхронизацию отвечает Master, за значение бита отвечает Slave.После инициализации команды происходит обмен информацией:
- отправка команды для Slave
- ответ Slave на команду
Важно, что все сигналы имеют конкретные временные ограничения, которые обязательно должны быть соблюдены! Бывает, что производители домофонов упарываются, и соблюдают какие-то свои временные задержки.
Еще у iButton есть режим Overdrive, в котором временные задержки сокращены, из-за чего передача информации происходит быстрее. Есть вероятность, что в дикой природе существуют домофоны, работающие в этом режиме… Но на практике они не встречались.Стандартные команды 1-wire ключей Dallas
Для iButton характерны команды размером 1 байт (8 бит).
Зачастую домофон использует команды поиска и чтения ID (Search ROM и Read ROM).Некоторые производители домофонов — люди оригинальные, поэтому придумывают разные последовательности команд, чтобы проверить, а действительно ли к домофону прикладывают ключ, а не эмулятор. Поэтому ознакомимся с существующими командами.
Стандартные команды iButton для Regular режима следующие:
Бонус про домофонные ключи
Почему старые домофоны это плохо?
Некоторые старинные домофоны с ключами Dallas имеют в памяти базу ID ключей, заполненную не полностью. Незаполненные поля имеют некоторое значение, иногда соответствующее всем нулям (0x00) или всем единицам (0xFF). Для проверки домофона на дремучесть создаются два ключа: один со всеми нулями, другой со всеми единицами.
Эти ключи содержат неправильный код семейства (не 0x01) и неправильный CRC (вообще не контрольная сумма). — Да, бывают и такие исключения.Как почтальоны разносят по подъездам рекламу?
Никак, почтальоны разносят письма :) Но очевидно, что в почтовом отделении нет огромной связки с ключами для каждого подъезда. Часто используют универсальные ключи, они же “вездеходы”, подходящие на группу домофонов, например для всего района. Этот ключ может быть один на город, один на группу домов, может быть дефолтным для какой-то модели, а может и вовсе отсутствовать.
Что такое мастер ключ?
Обычно это ключ, который сам не открывает дверь, а позволяет добавлять в память новые ключи. Он записан в отдельную область памяти домофона. Такой ключ может одновременно для одних домофонов быть мастер-ключом, а для других обычным. Это всего лишь циферки, которые записаны в одну или другую область памяти домофона.
Играясь заблокировали домофон?
Такой вариант возможен, когда в домофоне есть “блокирующий ключ”. Он блокирует домофон для всех остальных ключей, пока не снимут блокировку с помощью мастер-ключа.
Какие болванки нам известны
В ходе работы с iButton мы зафиксировали некоторые известные нам “болванки” ключей. Вот они, на здоровье!
Наши соцсети
Все обновления по проекту первым делом публикуются в Telegeram-канале @zhovner_hub
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
С помощью Ардуино можно сделать дома копию ключа для домофона за 15 минут, если, к примеру, мастерская закрыта, а ключ нужен срочно.
Инструкция по чтению и записи ключа iButton (1-wire) с помощью Arduino
- Ардуино (или совместимая плата);
- персональный компьютер с Arduino IDE или иной средой разработки;
- ключ для домофона типа iButton или 1-wire, копию которого нужно сделать;
- ключ-болванка для создания «клона» оригинального ключа (покупаем здесь);
- 1 резистор сопротивлением 2,2 кОм (вот отличный набор резисторов самых популярных номиналов); (breadboard);
- соединительные провода (вот такие).
1 Схема подключения ключа к Arduinoпо однопроводному интерфейсу
Каждый ключ для домофона имеет свой номер – именно этот номер и служит идентификатором ключа. Именно по номеру ключа домофон решает – свой или чужой. Поэтому алгоритм копирования такой: сначала нужно узнать номер разрешённого ключа, а затем присвоить этот номер другому ключу – клону. Для домофона нет разницы, был приложен оригинальный ключ или его копия. Сверив номер со своей базой данных разрешённых номеров, он откроет дверь.
Ключи для домофона, которые мы будем подключать к Arduino (их иногда называют iButton или Touch Memory), считываются и записываются по однопроводному интерфейсу 1-wire. Поэтому схема подключения очень проста. Нам нужны лишь пара проводов и подтягивающий резистор номиналом 2,2 кОм. Схема соединений показана на рисунке.
Схема подключения ключа iButton к Arduino по интерфейсу 1-wire
Собранная схема может выглядеть примерно так:
Схема для чтения ключа Dallas на Arduino
2 Считывание идентификатора ключа iButton с помощью Arduino
Для работы с интерфейсом 1-wire существуют готовые библиотеки для Ардуино. Можно воспользоваться, например, этой. Скачиваем архив и распаковываем в папку /libraries/, расположенную в каталоге Arduino IDE. Теперь мы можем очень просто работать с данным протоколом.
Загрузим в Ардуино стандартным способом этот скетч:
Скетч чтения ключа iButton с помощью Arduino (разворачивается)
Данный скетч показывает номер ключа для домофона, который подключён к схеме. Это то, что нам и нужно сейчас: мы должны узнать номер ключа, копию которого хотим сделать. Подключим Ардуино к компьютеру. Запустим монитор последовательного порта: Инструменты Монитор последовательного порта (или сочетание клавиш Ctrl+Shift+M ).
Теперь подключим ключ к схеме. Монитор порта покажет номер ключа. Запомним этот номер.
Запоминаем номер ключа iButton, выводимый в монитор последовательного порта
А вот какой обмен происходит на однопроводной линии при чтении идентификатора ключа (подробнее – далее):
Диаграмма взаимодействия ключа Dallas с Arduino по однопроводному интерфейсу (1-wire)
На рисунке, конечно, не видны все детали реализации. Поэтому в конце статьи я прикладываю временную диаграмму в формате *.logicdata , снятую с помощью логического анализатора и программы Saleae Logic Analyzer и открываемую ей же. Программа бесплатная и скачивается с официального сайта Saleae. Чтобы открыть файл *.logicdata нужно запустить программу, нажать сочетание Ctrl+O или в меню Options (расположено вверху справа) выбрать пункт Open capture / setup.
3 Запись идентификатора ключа Dallasс помощью Arduino
Теперь напишем скетч для записи данных в память ключа iButton.
Скетч записи ключа iButton с помощью Arduino (разворачивается)
Не забудьте задать номер своего оригинального ключа в массиве key_to_write, который мы узнали ранее.
Если данный скетч не сработал, попробуйте заменить код после Serial.print("Start programming. ") и до конца функции loop() на следующий:
Дополнительный скетч записи ключа iButton с помощью Arduino (разворачивается)
Здесь функция writeByte() будет следующей:
Временную диаграмму работы скетча записи идентификатора ключа показывать бессмысленно, т.к. она длинная и не поместится на рисунке. Однако файл *.logicdata для программы логического анализатора прикладываю в конце статьи.
Ключи для домофона бывают разных типов. Данный код подойдёт не для всех ключей, а только для RW1990 или RW1990.2. Программирование ключей других типов может привести к выходу ключей из строя!
Кстати, некоторые современные домофоны читают не только идентификатор ключа, но и другую информацию, записанную на оригинальном ключе. Поэтому сделать клон, скопировав только номер, не получится. Нужно полностью копировать данные ключа.
4 Описание однопроводного интерфейса 1-Wire
- импульс сброса (master)
- импульс присутствия (slave)
- запись бита "0" (master)
- запись бита "1" (master)
- чтение бита (master)
1) Инициализация
Инициализация заключается в том, что ведущий выставляет условие сброса RESET (на время от 480 мкс или более опускает линию в "0", а затем отпускает её, и за счёт подтягивающего резистора линия поднимается в состояние "1"), а ведомый не позднее чем через 60 мкс после этого должен подтвердить присутствие, также опустив линию в "0" на 60…240 мкс и затем освободив её:
Инициализация: сигнал сброса и подтверждения протокола 1-wire
2) Команды работы с ПЗУ
Название Команда Назначение Чтение (Read ROM ) 0x33 Мастер считывает 64 первых битов iButton, в которых содержатся: 8 бит кода семейства (*), 48 бит серийного номера и 8 бит контрольной суммы. Совпадение (Match ROM) 0x55 Обращение к определённому устройству с известным 64-битным номером. Поиск (Search ROM) 0xF0 Позволяет определить все 64-битные номера ведомых устройств, подключённых к шине. Пропуск (Skip ROM) 0xCC Позволяет сэкономить время обмена данными с ключом благодаря тому, что мастер пропускает проверку серийного номера. Не рекомендуется к использованию в ситуации, когда на линии присутствуют несколько ведомых. (*) Кстати, семейств устройств iButton существует довольно много, некоторые из них перечислены в таблице ниже.
Данные передаются последовательно, бит за битом. Передачу каждого бита инициирует ведущее устройство. При записи ведущий опускает линию к нулю и удерживает её. Если время удерживания линии равно 1…15 мкс, значит записывается бит "1". Если время удерживания от 60 мкс и выше – записывается бит "0".
Чтение битов также инициируется мастером. В начале чтения каждого бита мастер устанавливает низкий уровень на шине. Если ведомое устройство хочет передать "0", оно удерживает шину в состоянии LOW на время от 60 до 120 мкс, а если хочет передать "1", то на время примерно 15 мкс. После этого ведомый отпускает линию, и за счёт подтягивающего резистора она возвращается в состояние HIGH.
Временная диаграмма отправки команды поиск (0xF0) ведомому iButton
Далее, если предшествующей командой подразумевается работа с ППЗУ (чтение и запись из перезаписываемой памяти ключа Dallas), то мастер передаёт команду работы с ППЗУ.
3) Команды работы с ППЗУ
Прежде чем рассматривать команды для работы с ППЗУ iButton, необходимо пару слов сказать о структуре памяти ключа. Память разделена на 4 равных участка: три из них предназначены для хранения трёх уникальных ключей, а четвёртый – для временного хранения данных. Этот временный буфер служит своеобразным черновиком, где данные готовятся для записи ключей.
Структура памяти ключа iButton
Для работы с ППЗУ существуют 6 команд:
Название Команда Назначение Записать во временный буфер (Write Scratchpad) 0x96 Используется для записи данных во временный буфер (scratchpad). Прочитать из временного буфера (Read Scratchpad) 0x69 Используется для чтения данных из временного буфера. Копировать из временного буфера (Copy Scratchpad) 0x3C Используется для передачи данных, подготовленных во временном буфере, в выбранный ключ. Записать пароль ключа (Write Password) 0x5A Используется для записи пароля и уникального идентификатора выбранного ключа (одного из трёх). Записать ключ (Write SubKey) 0x99 Используется для непосредственной записи данных в выбранный ключ (минуя временный буфер). Прочитать ключ (Read SubKey) 0x66 Используется для чтения данных выбранного ключа. 4) Передача данных
5 Возможные ошибки при компиляции скетча
2) Если при компиляции появляется ошибка class OneWire has no member named read_bytes, то найдите и попробуйте использовать другую библиотеку для работы с интерфейсом OneWire.
Преграждающие устройстваДомофонное оборудование в новостройках сейчас является обязательным условием, да и в старых домах его устанавливают довольно часто. Это значительно повышает безопасность жильцов и способствует поддержанию порядка в подъезде. Но что делать, если ключ к домофону утерян или сломался? Раньше компании установщики были монополистами и поднимали цену на резервные устройства, сейчас появилось множество фирм и мастерских которые за сравнительно небольшую сумму могут перезаписать ключ от домофона. Однако те же действия можно выполнить и самостоятельно.
Существует два основных способа получения нового ключа, в зависимости от типа используемых устройств – это программирование электронных ключей домофона и внесение кода в домофонную систему.
Touch memory
Touch memory – энергонезависимый идентификатор в составе которого имеется запоминающее устройство, часы реального времени и аккумуляторная батарея. Считывание или запись информации производится простым касанием к корпусу устройства. Существует множество разновидностей Touch memory. Различаются не только устройства разных производителей, но и модели по объему памяти. Совместимость с установленным оборудованием необходимо учитывать при покупке заготовок для записи кодов.
Модели Touch memory
Читайте так же: Системы контроля управления доступом, область использования и функциональные возможностиНекоторые новые модели домофонных систем Vizit не поддерживают работу с заготовками ТМ2004, в этом случае можно воспользоваться более дорогой универсальной моделью ТМ08.
Бесконтактный RFID
В последнее время широкое распространение получают системы бесконтактного считывания, где используются ключи RFID или карты типа проксимити. Внешне они напоминают обычный пластиковый брелок или банковскую карту. Устройства не имеют собственного источника питания. Передача кода на устройство приема осуществляется после получения радиосигнала, энергия волнового излучения и выступает в качестве энергоснабжения. Поэтому активация происходит только на расстоянии 10-15 см от замка. В остальном устройство и действие метки не отличается от аналогичного Touch memory.
Сами ключи имеют вид брелоков размерами не более пятирублевой монеты и толщиной 5 мм. Бесконтактные карты имеют формат аналогичный банковской и несколько большую толщину – до 3 мм. Взаимозаменяемость карт и брелоков, несмотря на одинаковую технологию функционирования, не всегда осуществима, так как возможно нарушение интенсивности передаваемого сигнала. На данный момент для копирования RFID ключей различных производителей подходит практически любая заготовка: HID Prox II, EM-Marin, Indala и т.п.
Запись на заготовку
- RW/ТМ 2004;
- КС 1, 3;
- ТМ – 01, 07, 08;
- RW 1990, 2007, 125RF.
Поддерживает стандарты наиболее распространенных производителей:
Для Touch memory:
- Cyfral;
- Dallas;
- ТМ
- HID Prox II;
- EM-Marin;
- Indala и некоторые другие.
Запись заготовки производится в одно касание. Алгоритм копирования ключа следующий:
- К считывателю подносится ключ, который необходимо скопировать.
- Устройство самостоятельно определяет тип, производителя и модель рекомендуемой заготовки.
- К считывателю подносится заготовка. И нажимается кнопка на запись.
- Производится запись в память ключа.
Кроме того, устройство может производить запись без ключа исходника, если известен код, записанный в память. Дубликатор подключается к ПК через USB порт и имеет собственное ПО, которое сохраняет в памяти 500 последних записей, и ведет распределение записей Touch memory и RFID. Такое дорогостоящее оборудование не по карману большинству простых пользователей, но существуют и более простые модели с ограниченным функционалом:
- KeyMaster 3;
- KeyMaster 3 RF – поддерживает бесконтактные метки;
- TMD-5 RFID;
- TM-Pro.
Программирование домофонов
Внесение информации о новых ключах можно осуществлять и непосредственно на домофонное оборудование. Естественно, у разных производителей разработаны различные инструкции по программированию домофонов.
Занесение информации в память домофона возможно, только если монтажники не произвели изменение заводского кода доступа в устройство. Обычно, замену пароля доступа монтажники производят крайне редко, а большинство паролей по умолчанию – 1234.
Производитель Raimann
Производитель VIZIT
Производитель Eltis
- Для входа в меню нажимается кнопка В, держится нажатой 7 сек.;
- Системный пароль 1234;
- После того как на экране загрузится меню, выбираем пункт «Key master»;
- Набираем номер квартиры и нажимаем на кнопку В;
- После появления на экране команды LF нужно прислонить ключ к считывателю;
- Запись закончена если на экране появится надпись ADD (если до этого ключей для данной квартиры в памяти не имелось) или номер квартиры.
При применении инструкций для записи информации в домофон настоятельно не рекомендуем заходить в другие пункты меню, кроме раздела работы с ключами.
Читайте также: