Вам понадобится
  • - Ардуино;
  • - компьютер;
  • - ключ для домофона типа iButton или 1-wire;
  • - ключ-болванка для создания "клона" оригинального ключа;
  • - 1 резистор сопротивлением 2,2 кОм;
  • - соединительные провода.
Инструкция
1
Каждый ключ для домофона имеет свой номер - именно этот номер и служит идентификатором ключа. Именно по номеру ключа домофон решает - свой или чужой. Поэтому алгоритм копирования такой: сначала нужно узнать номер "разрешённого" ключа, а затем присвоить этот номер другому ключу - клону. Для домофона нет разницы, был приложен оригинальный ключ или его копия. Сверив номер со своей базой данных разрешённых номеров, он откроет дверь.
Ключи для домофона, которые мы будем подключать к Arduino (их иногда называют iButton или Touch Memory), считываются и записываются по 1-проводному интерфейсу 1-wire. Поэтому схема подключения очень проста. Нам нужны лишь пара проводов и подтягивающий резистор 2,2 кОм. Схема показана на рисунке.
2
Для работы с интерфейсом 1-wire существуют готовые библиотеки для Ардуино. Можно воспользоваться, например, этой: http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip. Скачиваем архив и распаковываем в папку "libraries", расположенную в каталоге Arduino IDE. Теперь мы можем очень просто работать с данным протоколом.
Загрузим в Ардуино стандартным способом скетч, приведённый на иллюстрации.
3
Данный скетч показывает номер ключа для домофона, который подключён к схеме. Это то, что нам и нужно сейчас - мы должны узнать номер ключа, копию которого хотим сделать. Подключим Ардуино к компьютеру. Запустим монитор последовательного порта: Инструменты -> Монитор последовательного порта (или сочетание клавиш Ctrl + Shift + M).
Теперь подключим ключ к схеме. Монитор порта покажет номер ключа. Запомним этот номер.
4
Теперь перепишем скетч таким образом, чтобы он мог записывать данные в память ключа. Код приведён на иллюстрации. В коде даны подробные комментарии. Главное, не забудьте задать номер своего оригинального ключа в массиве key_to_write, который вы узнали чуть ранее.
5
Загрузим этот скетч в Arduino. Откроем монитор последовательного порта. Подключим к схеме ключ, который будет клоном оригинального ключа. О результате программирования монитор последовательного порта выведет соответствующее сообщение.
6
1) Если при компиляции скетча возникнет ошибка [ WConstants.h: No such file or directory #include "WConstants.h" ], то следует в файле "OneWire.cpp" заменить первый блок после комментариев на следующий:

#include "OneWire.h"
#include "Arduino.h"
extern "C" {
#include "avr/io.h"
#include "pins_arduino.h"
}

2) Если при компиляции появляется ошибка "class OneWire has no member named read_bytes" или подобная, то найдите другую библиотеку OneWire, в интернете их много.