Дублікатор домофонних ключів – це зручний пристрій, який дозволяє створювати копії електронних ключів для домофонів. Якщо вам потрібно запрограмувати або продублювати ключ, ви можете зробити це самостійно, використовуючи Arduino NANO. У цій статті ми розглянемо, як зібрати дублікатор ключів із мінімальним бюджетом. Вам знадобляться Arduino NANO, кнопка, резистори та декілька простих компонентів.
ДИСКЛЕЙМЕР: Цей матеріал надано винятково в ознайомчих та навчальних цілях. Автор та платформа не закликають до копіювання, модифікації або злому будь-яких пристроїв. Всі приклади й інструкції націлені на вивчення електроніки, програмування Arduino та безпеки технологій, і не повинні використовуватися в порушення законодавства.
Час створити власний дублікатор домофонних ключів, який не лише зможе копіювати існуючі ключі, а й дозволить записувати унікальний індивідуальний код.
Для мінімального складання дублікатора знадобиться:
Arduino NANO, кнопка, 2 опори 1 – 2.2 ком, і трохи проводів.
Для складання більш повноцінного дублікатора, я ще використовую:
2 мідні платівки, 2 шматки від роз’єму IDE шини і баночка від якихось таблеток.
Перш ніж приступити до збирання, завантажте цей скетч на плату.
#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 = 12; // Пин D11
const int ledPin = 13;
int buttonState = 0;
int writeflag = 0;
int readflag = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
Serial.begin(115200);
Serial.println("---------- Start ----------");
}
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]);
//Или int 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;
}
Після завантаження скетчу зберіть все відповідно до цієї схеми.
Про те, як зібрати дублікатор, і про те, як ним користуватися, дивіться це відео.
Посилання на відеоінструкцію: https://www.youtube.com/watch?v=CJEHb01H05A&ab_channel=MasterKolotushkinArduino