Як зробити дублікатор домофонних ключів на Arduino NANO своїми руками

29.01.2025 2 хвилин Автор: Lady Liberty

Дублікатор домофонних ключів – це зручний пристрій, який дозволяє створювати копії електронних ключів для домофонів. Якщо вам потрібно запрограмувати або продублювати ключ, ви можете зробити це самостійно, використовуючи Arduino NANO. У цій статті ми розглянемо, як зібрати дублікатор ключів із мінімальним бюджетом. Вам знадобляться Arduino NANO, кнопка, резистори та декілька простих компонентів.

  • ДИСКЛЕЙМЕР: Цей матеріал надано винятково в ознайомчих та навчальних цілях. Автор та платформа не закликають до копіювання, модифікації або злому будь-яких пристроїв. Всі приклади й інструкції націлені на вивчення електроніки, програмування Arduino та безпеки технологій, і не повинні використовуватися в порушення законодавства.

Дублікатор домофонних ключів на базі Arduino NANO своїми руками

Час створити власний дублікатор домофонних ключів, який не лише зможе копіювати існуючі ключі, а й дозволить записувати унікальний індивідуальний код.

Для мінімального складання дублікатора знадобиться:

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

//Кінець скетчу

Після завантаження скетчу зберіть все відповідно до цієї схеми.

Про те, як зібрати дублікатор, і про те, як ним користуватися, дивіться це відео.

Підписатися
Сповістити про
0 Коментарі
Найстаріші
Найновіше Найбільше голосів
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.