Инструменты пользователя

Инструменты сайта


проект_прошивателя_ключей_от_домофона

Проект прошивателя ключей от домофона

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

Нам понадобятся

Arduino Макетная плата Резистор 2,2 кОм Провода ключ от домофона, типа i-Button

Схема

Схема нашего незатейливого устройства выглядит так:

Копируем код и компилируем. Библиотека есть в общем списке библиотек, необязательно ее искать и качать, просто установите и все.

Код

#include <OneWire.h>
#define pin 10
 
OneWire ibutton (pin); // I button connected on PIN 10.
 
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, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F};
 
    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;
}

Порядок работы

Открываем чтение порта. Плюс прикладываем к верху ключа, а минус соответственно держим сбоку. Если вы все правильно сделали, то в мониторе порта вы увидите данные, которые записаны на ваш ключ. Если вы хотите сделать дубликат, то смело их копируйте. Чтобы записать новые данные, нам необходимо будет отредактировать код. Находим:

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, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F};

Нам нужна строчка:

byte newID[8] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F};

Редактируем ее, например у меня домофон открывается так:

byte newID[8] = {0x00, 0x36, 0x5A, 0x11, 0x40, 0xBE, 0xE1, 0x05};

Компилируем и снова открываем монитор порта. Вводим «w», жмякаем энтер и после этого прикладываем провода к ключу. Происходит запись и все, готово. Вы молодец. Готовые коды вы можете найти в интернете. И еще, не все ключи прошиваются, обращайте на это внимание. Нужно использовать rw1990.

проект_прошивателя_ключей_от_домофона.txt · Последнее изменение: 2020/12/27 18:58 — admin

Инструменты страницы