Дубликатор домофонных ключей на базе Arduino NANO своими руками.

Привет друзья!

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

Дубликатор домофонных ключей на базе Arduino NANO

Для минимальной сборки дубликатора понадобится:

Arduino NANO, кнопка, 2 сопротивления 1 - 2.2 кОм, и немного проводов.

Для сборки более полноценного дубликатора, я еще использую:

2 медные пластинки, 2 куска от разъема IDE шины и баночка от каких то таблеток.

материалы для дубликатора домофонных ключей на базе Arduino NANO

Прежде чем приступить к сборке, загрузите этот скетч на плату.


//Начало скетча


  1. #include "OneWire.h"
  2. #define pin 11
  3. OneWire ibutton (pin); // Пин D11 для подключения iButton (Data)
  4. byte addr[8];
  5. byte ReadID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F };
  6. // Свой ключ. Прошивается последовательность 01:FF:FF:FF:FF:FF:FF:2F
  7. const int buttonPin = 12; // Пин D11
  8. const int ledPin = 13;
  9. int buttonState = 0;
  10. int writeflag = 0;
  11. int readflag = 0;
  12. void setup() {
  13. pinMode(ledPin, OUTPUT);
  14. pinMode(buttonPin, INPUT);
  15. Serial.begin(115200);
  16. Serial.println("---------- Start ----------");
  17. }
  18. void loop() {
  19. buttonState = digitalRead(buttonPin);
  20. if (buttonState == HIGH) { readflag = 1; writeflag = 1;
  21. digitalWrite(ledPin, HIGH);
  22. }
  23. if (!ibutton.search (addr)) { ibutton.reset_search(); delay(50); return; }
  24. digitalWrite(ledPin, HIGH);delay(50);
  25. for (byte x = 0; x < 8; x++) {
  26. Serial.print(addr[x], HEX);
  27. if (readflag == 0) { ReadID[x] = (addr[x]);
  28. }Serial.print(":");
  29. }
  30. byte crc; // Проверка контрольной суммы
  31. crc = ibutton.crc8(addr, 7);
  32. Serial.print("CRC: ");
  33. Serial.println(crc, HEX);
  34. digitalWrite(ledPin, LOW);
  35. if ((writeflag == 1) or (Serial.read() == 'w')) {
  36. ibutton.skip(); ibutton.reset(); ibutton.write(0x33);
  37. Serial.print("  ID before write:");
  38. for (byte x = 0; x < 8; x++) {
  39. Serial.print(' '); Serial.print(ibutton.read(), HEX);
  40. }
  41. // send reset
  42. ibutton.skip();
  43. ibutton.reset(); // send 0xD1
  44. ibutton.write(0xD1); // send logical 0
  45. digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(60);
  46. pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);
  47. Serial.print('\n');
  48. Serial.print("  Writing iButton ID:\n    ");
  49. byte newID[8] = { (ReadID[0]), (ReadID[1]), (ReadID[2]), (ReadID[3]), (ReadID[4]), (ReadID[5]), (ReadID[6]), (ReadID[7]) };
  50. ibutton.skip(); ibutton.reset(); ibutton.write(0xD5);
  51. for (byte x = 0; x < 8; x++) {
  52. writeByte(newID[x]);
  53. //Или int writeByte(newID[x]); если будет выдавать ошибку!
  54. Serial.print('*');
  55. }
  56. Serial.print('\n');
  57. ibutton.reset(); // send 0xD1
  58. ibutton.write(0xD1); //send logical 1
  59. digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(10);
  60. pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);
  61. writeflag = 0; readflag = 0; digitalWrite(ledPin, LOW);
  62. }}
  63. int writeByte(byte data) {
  64. int data_bit;
  65. for (data_bit = 0; data_bit < 8; data_bit++) {
  66. if (data & 1) {
  67. digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
  68. delayMicroseconds(60);
  69. pinMode(pin, INPUT); digitalWrite(pin, HIGH);
  70. delay(10);
  71. } else {
  72. digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
  73. pinMode(pin, INPUT); digitalWrite(pin, HIGH);
  74. delay(10);} data = data >> 1;} return 0; }

//Конец скетча


После загрузки скетча соберите все согласно этой схемы.

материалы для дубликатора домофонных ключей на базе Arduino NANO

О том как собрать дубликатор, и о том как им пользоваться смотрите это видео.

Arduini IDE