Работа с ibutton на arduino. дубликатор ключей ibutton

Содержание

Arduino İle RC522 RFID Modül Kullanarak Kapı Kilidi Projesi Yapalım

Kart okuyucu devresini yaparken aynı zamanda RFID ile servo motor kontrolü uygulamasını da gerçekleştirmiş olacağız. Yani hem Arduino’nun RFID ile iletişimini öğreneceğiz hem de servo motor kullanarak algoritmamızı yazmış olacağız.

Gereken malzemeler:

  • Arduino UNO
  • Breadboard
  • RC522 RFID NFC Kiti
  • Servo motor
  • Erkek-erkek jumper kablo

Devre şemamız şu şekilde:

Kart Okuyucu Devresi

Projeye Başlamadan Önce İndirmemiz Gereken RFID ve Servo Motor Kütüphaneleri

Bu adresten kartımızı çalıştırmamızda gerekli olan kütüphaneyi indirerek Arduino programının kurulu olduğu klasör altındaki libraries klasörüne MFRC522 ismiyle kaydediyoruz.

Arduino Kart Okuyucu devremiz için gerekli kodu aşağıdaki gibi yazıyoruz. Her bir satırda açıklamalar bulunuyor fakat projede bir sorun yaşarsanız yorum kısmından bildirebilirsiniz.

#include <spi.h>                   //SPI kütüphanemizi tanımlıyoruz.

#include <mfrc522.h>              //MFRC522 kütüphanemizi tanımlıyoruz.

#include <servo.h>               //Servo kütüphanemizi tanımlıyoruz

int RST_PIN = 9; //RC522 modülü reset pinini tanımlıyoruz.
int SS_PIN = 10; //RC522 modülü chip select pinini tanımlıyoruz.
int servoPin = 8; //Servo motor pinini tanımlıyoruz.

Servo motor; //Servo motor için değişken oluşturuyoruz.
MFRC522 rfid(SS_PIN, RST_PIN); //RC522 modülü ayarlarını yapıyoruz.
byte ID = {
  97,
  76,
  67,
  9
}; //Yetkili kart ID'sini tanımlıyoruz. 

void setup() {
  motor.attach(servoPin); //Servo motor pinini motor değişkeni ile ilişkilendiriyoruz.
  Serial.begin(9600); //Seri haberleşmeyi başlatıyoruz.
  SPI.begin(); //SPI iletişimini başlatıyoruz.
  rfid.PCD_Init(); //RC522 modülünü başlatıyoruz.
}

void loop() {

  if (!rfid.PICC_IsNewCardPresent()) //Yeni kartın okunmasını bekliyoruz.
    return;

  if (!rfid.PICC_ReadCardSerial()) //Kart okunmadığı zaman bekliyoruz.
    return;

  if (rfid.uid.uidByte == ID && //Okunan kart ID'si ile ID değişkenini karşılaştırıyoruz.
    rfid.uid.uidByte == ID &&
    rfid.uid.uidByte == ID &&
    rfid.uid.uidByte == ID) {
    Serial.println("Kapi acildi");
    ekranaYazdir();
    motor.write(180); //Servo motoru 180 dereceye getiriyoruz.
    delay(3000);
    motor.write(0); //Servo motoru 0 dereceye getiriyoruz.
    delay(1000);
  } else { //Yetkisiz girişte içerideki komutlar çalıştırılır.
    Serial.println("Yetkisiz Kart");
    ekranaYazdir();
  }
  rfid.PICC_HaltA();
}
void ekranaYazdir() {
  Serial.print("ID Numarasi: ");
  for (int sayac = 0; sayac < 4; sayac++) {
    Serial.print(rfid.uid.uidByte);
    Serial.print(" ");
  }
  Serial.println("");
}

RFID ile yaptığımız bu projeden memnun kaldınız mı? Öyleyse kendinizi RFID protokolü konusunda daha çok geliştirebileceğiniz bir proje seti tavsiye ediyoruz. Arduino RFID Kit Seti ile servo motor haricinde LDR, yangın sensörü, ses sensörü, sıcaklık sensörü gibi birçok komponent kullanarak bilgi sinyali alarak step motor, LED, buzzer ve daha bir sürü aktüatör ile projeler yapabilirsiniz

> Buradan Alabilirsin.

Виды домофонных ключей

Все ключи делятся на контактные и бесконтактные. Магнитные ключи для домофонов вышли из обихода из-за постоянных сбоев. До сих пор такая система встречается в банках, где вход осуществляется по намагниченным картам.

В России наиболее распространены варианты контактных «таблеток», представляющие собой пластиковый корпус с магнитным носителем. Визуально они почти одинаковы, но методы кодирования при этом разные.

Электронные ключи (брелоки или карточки доступа) содержат код, который проверяет считыватель при открытии двери. Сделать мастер-ключ можно с помощью дубликатора магнитных ключей. Для этого потребуется копировщик, пустая «болванка» и непосредственно оригинал. Код оригинала записывается на «болванку», она распознаётся домофоном как «своя» и открывает входную дверь. Подробную информацию смотрите в видео ниже.

Шаг 4: Соединяем все детали

Связь с платой Arduino Uno очень проста. Сначала подключим питание как считывателя, так и дисплея.

Будьте осторожны, считыватель RFID должен быть подключен к выходу 3,3 В от Arduino Uno или он будет испорчен.

Так как дисплей также может работать на 3,3 В, мы подключаем VCC от обоих модулей к положительной шине макета. Затем эта шина подключается к выходу 3,3 В от Arduino Uno. После чего соединяем обе земли (GND) с шиной заземления макета. Затем мы соединяем GND-шину макета с Arduino GND.

OLED-дисплей → Arduino

VCC → 3.3V

GND → GND

SCL → Аналоговый Pin 5

SDA → Аналоговый Pin 4

RFID-ридер → Arduino

RST → Цифровой Pin 9

IRQ → Не соединен

MISO → Цифровой Pin 12

MOSI → Цифровой Pin 11

SCK → Цифровой Pin 13

SDA → Цифровой Pin 10

Модуль RFID-считывателя использует интерфейс SPI для связи с Arduino. Поэтому мы собираемся использовать аппаратные штыри SPI от Arduino UNO.

Вывод RST поступает на цифровой контакт 9. Контакт IRQ остается несвязным. Контакт MISO подключается к цифровому выходу 12. Штырь MOSI идет на цифровой контакт 11. Контакт SCK переходит на цифровой контакт 13, и, наконец, вывод SDA идет на цифровой вывод 10. Вот и все.

Считыватель RFID подключен. Теперь нам нужно подключить OLED-дисплей к Arduino, используя интерфейс I2C. Таким образом, вывод SCL на дисплее переходит к аналоговому выводу Pin 5 и SDA на дисплее к аналоговому Pin 4. Если теперь мы включим проект и разместим RFID-карту рядом с ридером, мы увидим, что проект работает нормально.

Как подключить RFID считыватель RC522 к Arduino

В этой статье мы рассмотрим подключение к Arduino считывателя карт и брелоков RFID RC522, работающего на частоте 13,56 МГц.

Модуль RFID-RC522 выполнен на микросхеме MFRC522 фирмы NXP. Эта микросхема обеспечивает двухстороннюю беспроводную (до 6 см) коммуникацию на частоте 13,56 МГц.

Беспроводной модуль RFID-RC522

Микросхема MFRC522 поддерживает следующие варианты подключения:

SPI (Serial Peripheral Interface, последовательный интерфейс для связи периферийных устройств) до 10 Мбит/сек;
двухпроводной интерфейс I2C до 3400 кбод в режиме High-speed,до 400 кбод в режиме Fast;
последовательный UART (аналог RS232) до 1228,8 кбод.

С помощью данного модуля можно записывать и считывать данные с различных RFID-меток: брелоков от домофонов, пластиковых карточек-пропусков и билетов на метро и наземный транспорт, а также набирающих популярность NFC-меток.

RFID – это сокращение от “Radio Frequency IDentification” и переводится как «радиочастотная идентификация». NFC – это “Near field communication”, «коммуникация ближнего поля» или «ближняя бесконтактная связь».

2Схема подключения RFID-RC522 к Arduino

Подключим модуль RFID-RC522 к Arduino по интерфейсу SPI по приведённой схеме.

Схема подключения RFID-RC522 к Arduino по интерфейсу SPI

Питание модуля обеспечивается напряжением от 2,5 до 3,3 В. Остальные выводы подключаем к Arduino так:

RST D9
SDA (SS) D10
MOSI D11
MISO D12
SCK D13

Не забывайте также, что Arduino имеет специальный разъём ICSP для работы по интерфейсу SPI. Его распиновка также приведена на иллюстрации. Можно подключить выводы RST, SCK, MISO, MOSI и GND модуля RC522 к разъёму ICSP на Ардуино.

3Библиотека для работы Arduino с RFID

Микросхема MFRC522 имеет достаточно обширную функциональность. Познакомиться со всеми возможностями можно изучив её паспорт (datasheet). Мы же для знакомства с возможностями данного устройства воспользуемся одной из готовых библиотек, написанных для работы Arduino с RC522. Скачайте её и распакуйте в директорию Arduino IDE\libraries\

Установка библиотеки “rfid-master” для работы Arduino с RFID-метками

После этого запустите среду разработки Arduino IDE.

4Скетч для считывания информации, записанной на RFID-метке

Теперь давайте откроем скетч из примеров: Файл Образцы MFRC522 DumpInfo и загрузим его в память Arduino.

Открываем скетч DumpInfo

Данный скетч определяет тип приложенного к считывателю устройства и считывает данные, записанные на RFID-метке или карте, а затем выводит их в последовательный порт.

#include #include const int RST_PIN = 9; // пин RST const int SS_PIN = 10; // пин SDA (SS) MFRC522 mfrc522(SS_PIN, RST_PIN); // создаём объект MFRC522 void setup() { Serial.begin(9600); // инициализация послед. порта SPI.begin(); // инициализация шины SPI mfrc522.PCD_Init(); // инициализация считывателя RC522 } void loop() { // Ожидание прикладывания новой RFID-метки: if ( ! mfrc522.PICC_IsNewCardPresent()) { return; // выход, если не приложена новая карта } // Считываем серийный номер: if ( ! mfrc522.PICC_ReadCardSerial()) { return; // выход, если невозможно считать сер. номер } // Вывод дампа в послед. порт: mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); }

Текст скетча достаточно хорошо прокомментирован.

Для более полного знакомства с библиотекой изучите файлы MFRC522.h и MFRC522.cpp из директории rfid-master.

5Дамп данных с RFID-метки

Запустим монитор последовательного порта сочетанием клавиш Ctrl+Shift+M, через меню Инструменты или кнопкой с изображением лупы. Теперь приложим к считывателю билет метро или любую другую RFID-метку. Монитор последовательного порта покажет данные, записанные на RFID-метку или билет.

Считываем данные с билета на наземный транспорт и метро с помощью RFID

Например, в моём случае здесь зашифрованы уникальный номер билета, дата покупки, срок действия, количество оставшихся поездок, а также служебная информация. Мы разберём в одной из будущих статей, что же записано на карты метро и наземного транспорта.

Примечание

Да, с помощью модуля RFID-RC522 можно записать данные на билет метро.

Но не обольщайтесь, каждая карта имеет неперезаписываемый счётчик циклов записи, так что «добавить» поездок себе на метро не получится – это сразу будет обнаружено и карта будет забракована турникетом А вот использовать билеты метро для записи на них небольших объёмов данных – от 1 до 4 кб – можно. И способы применения этому ограничены только вашей фантазией.

Шаг 3: OLED-дисплей

В уроке используется OLED-монитор 0.96′ 128×64 I2C.

Это очень хороший дисплей для использования с Arduino. Это дисплей OLED и это означает, что он имеет низкое энергопотребление. Потребляемая мощность этого дисплея составляет около 10-20 мА, и это зависит от количества пикселей.

Дисплей имеет разрешение 128 на 64 пикселя и имеет крошечный размер. Существует два варианта отображения. Один из них монохромный, а другой, как тот, который использован в уроке, может отображать два цвета: желтый и синий. Верхняя часть экрана может быть только желтой, а нижняя часть – синей.

Этот OLED-дисплей очень яркий и у него отличная и очень приятная библиотека, которую разработала компания Adafruit для этого дисплея. В дополнение к этому дисплей использует интерфейс I2C, поэтому соединение с Arduino невероятно простое.

Вам нужно только подключить два провода, за исключением Vcc и GND. Если вы новичок в Arduino и хотите использовать недорогой и простой дисплей в вашим проекте, начните с этого.

Подключение

Некоторые столкнуться с проблемой — название пинов в большинстве уроков и руководств может не соответствовать распиновке на вашем модуле. Если в скетчах указан пин SS, а на вашем модуле его нет, то скорее всего он помечен как SDA. Ниже я приведу таблицу подключения модуля для самых распространенных плат.

MFRC522

Arduino Uno

Arduino Mega

Arduino Nano v3

Arduino Leonardo/
Micro

Arduino Pro Micro

RST

9

5

D9

RESET/ICSP-5

RST

SDA(SS)

10

53

D10

10

10

MOSI

11 (ICSP-4)

51

D11

ICSP-4

16

MISO

12 (ICSP-1
)

50

D12

ICSP-1

14

SCK

13 (ICSP-3)

52

D13

ICSP-3

15

3.3V

3.3V

3.3V

Стабилизатор 3,3В

Стабилизатор 3,3В

Стабилизатор 3,3В

GND

GND

GND

GND

GND

GND

Тестируем проект

Теперь приступаем к тестированию! Перейдите в меню пользователя вашего Adafruit IO, в меню Feeds. Проверьте, созданы или нет каналы для отпечатка пальцев и замка (на принт-скрине ниже это строки fingerprint и lock):

Если их нет, то придется создать вручную.

Теперь нам надо обеспечить обмен данными между каналами fingerprint и lock. Канал lock должен принимать значение ‘1’, когда канал fingerprint принимает значение ‘1’ и наоборот.

Для этого используем очень мощный инструмент Adafruit IO: триггеры. Триггеры – это по-сути условия, которые вы можете применять к настроенным каналам. То есть, их можно использовать для взаимосвязи двух каналов.

Создаем новый reactive trigger из раздела Triggers в Adafruit IO. Это обеспечит возможность обмениваться данными между каналами датчика отпечатка пальцев и замка:

Вот как это должно выглядеть, когда оба триггера настроены:

Все! Теперь мы действительно можем тестить наш проект! Прикладываем палец к сенсору и видим как Arduino начал подмигивать светодиодом, который соответствует передаче данных. После этого должен начать мигать светодиод на модуле ESP8266. Это значит, что он начал получать данные через MQTT. Светодиод на монтажной плате в этот момент должен тоже включиться.

После задержки, которую вы установили в скетче (по умолчанию это значение равно 10 секундам), светодиод выключится. Поздравляем! Вы можете управлять светодиодом с помощью отпечатка пальца, находясь в любой точке мира!

RFID Nedir?

Açılımı Radio Frequency Identification yani radyo frekansı ile tanımlamadır. RFID teknolojisi nesnelerin radyo dalgaları kullanılarak tanınması için kullanılan teknolojidir. Günlük hayatımızda toplu taşıma biletlerinde, işyeri ve okul girişlerindeki turnikelerde karşımıza sıklıkla çıkmaktadır. Arduino ile RFID projelerini incelediğimizde kapı kilidi, bir ortamda bulunan kişi sayısı bilgisinin alınması, bilgisayar oturum kilidi, alarm sistemi gibi projelerle sıklıkla karşılaşabilirsiniz. Kablosuz haberleşme teknolojileri ile ilgili daha fazla bilgi edinmek isterseniz, Kablosuz Haberleşme Teknolojileri yazımızı okuyabilirsiniz.

RFID Kart Okuyucular – RFID Kart Okuma Yazma İşlemi

Kullandığımız kartların kendilerine ait UID isimli bir numarası vardır. Bu numara, her kart için farklıdır. Okuyucumuza kartımızı veya anahtarlığımızı yaklaştırdığımızda bu numara okunarak işlem yapılır.

RC522 RFID modülü haricinde başka birçok RFID kart okuyucu modül piyasada bulunmaktadır. HZ-1050 RFID Kart okuyucu modülü 125 kHz frekansında çalışmaktadır. Arduino ve birçok mikro kontrolcü ile çalışabilir, Raspberry Pi ile rahatlıkla proje geliştirmek mümkündür. RDM6300 modülü ofis/ev güvenliği, kişisel kimlik ve erişim kontrolü, anti-sahtecilik ve üretim kontrol sistemleri gibi pek çok alanda kullanılmaktadır. Grove modülü ise 7 cm mesafeye kadar algılama yapabilen RFID modülüdür.

Sitemizdeki tüm RF kart okuyuculara ve kablosuz haberleşme sistemlerine buradan ulaşabilirsiniz.

Установка блокировки/разблокировки компьютера с помощью RFID

После сборки схемы проекта подключите плату Arduino к компьютеру. Определите COM порт компьютера, к которому подключилась плата Arduino – это можно сделать либо с помощью диспетчера устройств Windows, либо с помощью Arduino IDE как показано на следующем рисунке. В нашем случае плата Arduino оказалась подключенной к COM порту под номером 1.

После этого в плату Arduino необходимо загрузить код программы для работы с модулем RC522 – он приведен в конце статьи. После загрузки кода программы в плату откройте окно монитора последовательной связи (serial monitor). Затем прислоните RFID метку к модулю RC522, после чего вы увидите в окне монитора последовательной связи 5 значений. Эти значения необходимо скопировать себе в «укромное место» и закрыть окно монитора последовательной связи. Полученные нами значения показаны на следующем рисунке.

После распаковки ZIP архива зайдите в нем в каталог с именем 32 bit или 64-bit в зависимости от того 32 или 64-разрядная у вас операционная система. В этом каталоге откройте текстовый файл RFIDcredentials.txt. Вставьте в него свои значения из окна монитора последовательной связи (которые вы получили ранее) и обновите (укажите свои) имя пользователя (user name) и пароль (password). Если вы хотите добавить две карты для входа в операционную систему, то заполните и вторую строчку в файле RFIDcredentials.txt как показано на следующем рисунке.

После этого сохраните и закройте этот файл. Затем откройте из этой же папки файл RFIDCredSettings, измените в нем номер COM порта, к которому подключена плата Arduino, на свой, сохраните и закройте этот файл. Остальные значения в файле не меняйте.

Теперь скопируйте все 4 элемента нашего каталога, которые вы извлекли из скачанного ZIP архива и изменили в них часть значений на свои, в каталог C:\Windows\System32. Если система потребует подтверждения этой операции – подтвердите ее.

Теперь запустите файл реестра (register file) чтобы внести изменения в реестр. При этом, скорее всего, вы на своем экране увидите примерно следующее диалоговое окно:

Нажмите «yes», затем «ok». После этого осуществите выход из системы и вы увидите что в систему был добавлен еще один пользователь – с именем RFID.

Вход в учетную запись этого пользователя теперь можно будет осуществлять с помощью RFID карт/меток. То есть никакого пароля на вход в систему вводить уже не будет нужно – достаточно будет всего лишь прислонить RFID метку к RFID считывателю и вход в систему произойдет автоматически.

Arduino Code — Single RFID/NFC Tag

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 5
#define RELAY_PIN A5

MFRC522 rfid(SS_PIN, RST_PIN);

byte authorizedUID = {0xFF, 0xFF, 0xFF, 0xFF};

void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);

Serial.println(«Tap RFID/NFC Tag on reader»);
}

void loop() {
if (rfid.PICC_IsNewCardPresent()) {
if (rfid.PICC_ReadCardSerial()) {
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);

if (rfid.uid.uidByte == authorizedUID &&
rfid.uid.uidByte == authorizedUID &&
rfid.uid.uidByte == authorizedUID &&
rfid.uid.uidByte == authorizedUID ) {
Serial.println(«Authorized Tag»);
digitalWrite(RELAY_PIN, HIGH);
delay(2000);
digitalWrite(RELAY_PIN, LOW);
}
else
{
Serial.print(«Unauthorized Tag with UID:»);
for (int i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte < 0x10 ? » 0″ : » «);
Serial.print(rfid.uid.uidByte, HEX);
}
Serial.println();
}

rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
}
}

Quick Steps

Because UID is usually not printed on RFID/NFC tag, The first step we need to do is to find out the tag’s UID. This can be done by:

  • Copy the above code and open with Arduino IDE

  • Click Upload button on Arduino IDE to upload code to Arduino

  • Open Serial Monitor

  • Tap an RFID/NFC tag on RFID-RC522 module

  • Get UID on Serial Monitor

COM6

Send

Tap RFID/NFC tag on reader
Unauthorized Tag with UID: 3A C9 6A CB

Autoscroll
Show timestamp
Clear output
9600 baud  

Newline  

After having UID:

  • Update UID in the line 18 of the above code. For example, change byte authorizedUID = {0xFF, 0xFF, 0xFF, 0xFF}; TO byte authorizedUID = {0x3A, 0xC9, 0x6A, 0xCB};

  • Upload the code to Arduino again

  • Tap an RFID/NFC tag on RFID-RC522 module

  • See output on Serial Monitor

COM6

Send

Tap RFID/NFC tag on reader
Authorized Tag

Autoscroll
Show timestamp
Clear output
9600 baud  

Newline  

Tap another RFID/NFC tag on RFID-RC522 module

See output on Serial Monitor

COM6

Send

Tap RFID/NFC tag on reader
Authorized Tag
Unauthorized Tag with UID: BD 1E 1D 00

Autoscroll
Show timestamp
Clear output
9600 baud  

Newline  

Считывание данных с RFID-тега

Подключив все как нужно, кликните в IDE Arduino по Файл > Примеры > MFRC522 > DumpInfo (File > Examples > MFRC522 > DumpInfo) и загрузите этот скетч на Arduino. Он уже будет в IDE Arduino, когда вы установите в него библиотеку RFID.

Затем откройте в IDE Arduino монитор порта. В нем должны появиться данные примерно как на картинке ниже:

Приложите к RFID-ридеру карту или брелок с RFID-тегом. Держите их в таком положении, пока в мониторе порта не будет показана вся необходимая информация.

Это информация, считанная с RFID-тега, включая UID, который высвечен желтым цветом. Информация хранится в памяти, которая поделена на сегменты и блоки, которые можно наблюдать на картинке выше. Общий объем памяти составляет 1024 байта, которые поделены на 16 секторов, и каждый сектор защищен двумя разными ключами, A и B.

Запишите где-нибудь UID свой карты – позже он вам понадобится.

Загрузите на Arduino код, показанный ниже:

 1 /*
 2  * 
 3  * Более подробно о проекте на: http://randomnerdtutorials.com/
 4  * Модифицирован Руи Сантосом (Rui Santos)
 5  * 
 6  * Написан FILIPEFLOP
 7  * 
 8  */
 9  
10 #include <SPI.h>
11 #include <MFRC522.h>
12  
13 #define SS_PIN 10
14 #define RST_PIN 9
15 MFRC522 mfrc522(SS_PIN, RST_PIN);   // создаем экземпляр MFRC522 instance.
16  
17 void setup() 
18 {
19   Serial.begin(9600);   // запускаем последовательную коммуникацию
20   SPI.begin();          // инициализируем шину SPI
21   mfrc522.PCD_Init();   // инициализируем MFRC522
22   Serial.println("Approximate your card to the reader...");
23   //  "Приложите карту к ридеру... "
24   Serial.println();
25 
26 }
27 void loop() 
28 {
29   // ищем новые карты:
30   if ( ! mfrc522.PICC_IsNewCardPresent()) 
31   {
32     return;
33   }
34   // выбираем одну из карт:
35   if ( ! mfrc522.PICC_ReadCardSerial()) 
36   {
37     return;
38   }
39   // показываем UID на мониторе порта: 
40   Serial.print("UID tag :");  //  "UID тега: "
41   String content= "";
42   byte letter;
43   for (byte i = ; i < mfrc522.uid.size; i++) 
44   {
45      Serial.print(mfrc522.uid.uidBytei < 0x10 ? " 0"  " ");
46      Serial.print(mfrc522.uid.uidBytei], HEX);
47      content.concat(String(mfrc522.uid.uidBytei < 0x10 ? " 0"  " "));
48      content.concat(String(mfrc522.uid.uidBytei], HEX));
49   }
50   Serial.println();
51   Serial.print("Message : ");  //  "Сообщение: "
52   content.toUpperCase();
53   if (content.substring(1) == "BD 31 15 2B")
54   //  впишите здесь UID тега, которому вы хотите дать доступ 
55   {
56     Serial.println("Authorized access");  //  "Доступ открыт"
57     Serial.println();
58     delay(3000);
59   }
60  
61  else   {
62     Serial.println(" Access denied");  //  "Запрос на доступ отклонен"
63     delay(3000);
64   }
65 }

В этом скетче вам нужно поменять строчку…

if (content.substring(1) == "BD 31 15 2B")

…вписав вместо BD 31 15 2B значение для UID, которое ранее было показано в мониторе порта.

Считыватель RFID меток RC522

Сейчас на рынке доступно достаточно много моделей считывателей RFID меток, однако для нашего проекта мы выбрали модуль RC522, работающий по интерфейсу SPI. Это достаточно дешевое устройство, доступное для покупки практически во всех магазинах радиоэлектроники. Модуль RC522 имеет интерфейсы SPI, UART и I2C, однако по умолчанию он использует интерфейс SPI. Внешний вид данного модуля показан на следующем рисунке.

В этом проекте модуль RC522 подключен к плате Arduino, а плата Arduino подключена к компьютеру. Когда RFID метку подносят к модулю RC522, плата Arduino с его помощью считывает идентификатор RFID метки (ID number) и передает его в компьютер.

Wiring the RFID

Next, we will add the RFID. In this case, the RFID board uses a SPI communication protocol, where the Arduino will be acting as a master and the RFID reader as a slave. The card reader and the tags are designed to communicate using a frequency equal to 13.56MHz.

This is an important step because it helps us to read data from the card and it will decide if the ID corresponds to the information stored in the EEPROM. If it matches, it will give us access and display “Unlocked”. Otherwise, the LCD will display “Blocked”.

Figure 7: Connection between Arduino, LCD, and RFID

Figure 8: Arduino, LCD, and RFID

Adding a buzzer & LEDs

Next step is to add a buzzer and 2 LEDs to simulate a controlled access system. Please review the wire diagram below (Figure 9). The buzzer is set so that it buzzes whenever we gain access (unlocked). The red LED is always on when it is locked, but the green LED will come on when it is unlocked.

In order to protect the modules, I decided to 3D print the housing box/case. If you don’t have a 3D printer, you can just use a plastic case that allows you to fit all of the components inside. This is very helpful because the modules will be placed inside and the only parts outside of the box will be the LEDs, keypad, and LCD.

Figure 9: Wire diagram showing connection between Nano, LCD, Keypad, RFID, and buzzer

Дальнейшее развитие проекта «Умный замок»

В нашем проекте релизовано дистанционное управление дверным замком с помощью отпечатка пальца.

Можете смело экспериментировать, модифицировать скетч и обвязку. Например, можно заменить дверной электронный замок на реле для управления питанием вашего 3D принтера, манипулятора или квадрокоптера…

Можно развивать ваш “умный дом”. Например, удаленно активировать систему полива на Arduino или включать свет в комнате… При этом не забывайте, что вы одновременно можете активировать практически неограниченное количество устройств, используя Adafruit IO.

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

3Запись идентификатора ключа Dallasс помощью Arduino

Теперь напишем скетч для записи данных в память ключа iButton.

Скетч записи ключа iButton с помощью Arduino (разворачивается)

#include <OneWire.h>  // подключаем библиотеку
const int pin = 10;   // объявляем номер пина
OneWire iButton(pin); // объявляем объект OneWire на 10-ом пине

// номер ключа, который мы хотим записать в iButton:
byte key_to_write[] = { 0x01, 0xF6, 0x75, 0xD7, 0x0F, 0x00, 0x00, 0x9A };

void setup(void) { 
  Serial.begin(9600); 
  pinMode(pin, OUTPUT);  
}

void loop(void) {
  delay(1000); // задержка на 1 сек  
  iButton.reset(); // сброс устройства 1-wire
  delay(50); 
  iButton.write(0x33); // отправляем команду "чтение"

  byte data; // массив для хранения данных ключа
  iButton.read_bytes(data, 8); // считываем данные приложенного ключа, 8х8=64 бита
  
  if ( OneWire::crc8(data, 7) != data ) { // проверяем контрольную сумму приложенного ключа
      Serial.println("CRC error!"); // если CRC не верна, сообщаем об этом
      return; // и прерываем программу
  }

  if (data & data & data & data & data & data & data & data == 0xFF) {
    return; // если ключ не приложен к считывателю, прерываем программу и ждём, пока будет приложен
  }

  Serial.print("Start programming..."); // начало процесса записи данных в ключ
  
  for (int i = 0; i }

// Инициализация записи данных в ключ-таблетку iButton:
void send_programming_impulse() { 
  digitalWrite(pin, HIGH); 
  delay(60);
  digitalWrite(pin, LOW); 
  delay(5);
  digitalWrite(pin, HIGH); 
  delay(50); 
}

Не забудьте задать номер своего оригинального ключа в массиве key_to_write, который мы узнали ранее.

Загрузим этот скетч в Arduino. Откроем монитор последовательного порта (Ctrl+Shift+M). Подключим к схеме ключ, который будет клоном оригинального ключа. О результате программирования монитор последовательного порта выведет соответствующее сообщение.

Если данный скетч не сработал, попробуйте заменить код после Serial.print(«Start programming…») и до конца функции loop() на следующий:

Дополнительный скетч записи ключа iButton с помощью Arduino (разворачивается)

delay (200);
iButton.skip();
iButton.reset();
iButton.write(0x33); // чтение текущего номера ключа
Serial.print("ID before write:");
for (byte i=0; i<8; i++){
  Serial.print(' ');
  Serial.print(iButton.read(), HEX);
}    
Serial.print("\n");

iButton.skip();
iButton.reset();
iButton.write(0xD1); // команда разрешения записи
digitalWrite(pin, LOW); 
pinMode(pin, OUTPUT); 
delayMicroseconds(60);
pinMode(pin, INPUT); 
digitalWrite(pin, HIGH); 
delay(10);

// выведем ключ, который собираемся записать:
Serial.print("Writing iButton ID: ");
for (byte i=0; i<8; i++) {
  Serial.print(key_to_write, HEX);
  Serial.print(" ");
}
Serial.print("\n");
                 
iButton.skip();
iButton.reset();
iButton.write(0xD5); // команда записи
for (byte i=0; i<8; i++) {
  writeByte(key_to_write);
  Serial.print("*");
}
Serial.print("\n");

iButton.reset();
iButton.write(0xD1); // команда выхода из режима записи
digitalWrite(pin, LOW); 
pinMode(pin, OUTPUT); 
delayMicroseconds(10);
pinMode(pin, INPUT); 
digitalWrite(pin, HIGH); 
delay(10);

Serial.println("Success!"); 
delay(10000);

Здесь функция writeByte() будет следующей:

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

Временную диаграмму работы скетча записи идентификатора ключа показывать бессмысленно, т.к. она длинная и не поместится на рисунке. Однако файл *.logicdata для программы логического анализатора прикладываю в конце статьи.

Ключи для домофона бывают разных типов. Данный код подойдёт не для всех ключей, а только для RW1990 или RW1990.2. Программирование ключей других типов может привести к выходу ключей из строя!

При желании можно переписать программу для ключа другого типа. Для этого воспользуйтесь техническим описанием Вашего типа ключа (datasheet) и изменить скетч в соответствии с описанием. Скачать datasheet для ключей iButton можно в приложении к статье.

Кстати, некоторые современные домофоны читают не только идентификатор ключа, но и другую информацию, записанную на оригинальном ключе. Поэтому сделать клон, скопировав только номер, не получится. Нужно полностью копировать данные ключа.

Передача аутентификации

делегирования аутентификации

  1. Написать код аутентификации пользователей в рутине ZAUTHENTICATE. У неё есть 4 точки входа: получения логина/пароля, их проверка и назначение прав, смена пароля, формирование токена. Подробнее об этом ниже.
  2. Включить передачу аутентификации в Caché (SMP → System Administration → Security → System Security → Authentication/CSP Session Options, установите флаг Allow Delegated authentication и сохраните настройки).
  3. Включить передачу аутентификации для требуемых сервисов (SMP → Menu → Manage Services → Сервис → Allowed Authentication Methods → выбрать Delegated → Save) и/или приложений (SMP → Menu → Manage Web Applications → Приложение → Allowed Authentication Methods → выбрать Delegated → Save).

Замок с электромагнитным управлением

Замок с электромагнитным управлением (solenoid lock) использует электромеханический блокирующий механизм. Он содержит в своем составе личинку со скошенным концом и монтажный кронштейн. Когда на данный замок подается питание, электрический ток создает магнитное поле, под действием которого личинка втягивается внутрь замка и, таким образом, дверь открывается. Личинка будет оставаться внутри замка до тех пор, пока на замок будет подаваться питание. Когда питание на замок перестает подаваться, личинка выдвигается наружу замка и закрывает дверь. В закрытом состоянии замок не потребляет питания. Внешний вид замка с электромагнитным управлением показан на рисунке ниже. Для управления подобным замком необходим источник питания, который будет выдавать 12V @ 500mA.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Arduino

#include <rdm6300.h>

1 #include <rdm6300.h>

Затем зададим (определим) контакт, который будет использоваться для чтения данных с модуля RDM6300.

Arduino

#define RDM6300_RX_PIN 6

1 #define RDM6300_RX_PIN 6

Далее внутри функции setup() инициализируем последовательную связь со скоростью 9600 бод (для целей отладки) и модуль чтения RFID меток.

Arduino

void setup()
{
Serial.begin(9600);
rdm6300.begin(RDM6300_RX_PIN);
Serial.println(«\nPlace RFID tag near the rdm6300…»);
}

1
2
3
4
5
6

voidsetup()

{

Serial.begin(9600);

rdm6300.begin(RDM6300_RX_PIN);

Serial.println(«\nPlace RFID tag near the rdm6300…»);

}

Затем в функции loop() мы будем проверять находится ли рядом с модулем радиочастотная метка или нет. Если находится, то мы будем считывать ее номер и печатать его в окне монитора последовательной связи (Serial Monitor).

Arduino

void loop()
{
if (rdm6300.update())
Serial.println(rdm6300.get_tag_id(), HEX);
delay(10);
}

1
2
3
4
5
6

voidloop()

{

if(rdm6300.update())

Serial.println(rdm6300.get_tag_id(),HEX);

delay(10);

}

Код программы готов, можно приступать к проверке работоспособности проекта.

Pin Layout

The following table shows the typical pin layout used:

  PCD Arduino
MFRC522 Uno / 101 Mega Nano v3 Leonardo / Micro Pro Micro Yun Due
Signal Pin Pin Pin Pin Pin Pin Pin Pin
RST/Reset RST 9 5 D9 RESET / ICSP-5 RST Pin9 22
SPI SS SDA 10 53 D10 10 10 Pin10 23
SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 ICSP4 SPI-4
SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 ICSP1 SPI-1
SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 ICSP3 SPI-3
  ESP8266 Teensy
Wemos D1 mini 2.0 ++ 2.0 3.1
Signal Pin Pin Pin Pin
RST/Reset D3 7 4 9
SPI SS D8 20 10
SPI MOSI D7 2 22 11
SPI MISO D6 3 23 12
SPI SCK D5 1 21 13
(, , ) Configurable, typically defined as RST_PIN in sketch/program.
(, , ) Configurable, typically defined as SS_PIN in sketch/program.
The SDA pin might be labeled SS on some/older MFRC522 boards.
Source: .

Important: If your micro controller supports multiple SPI interfaces, the library only uses the default (first) SPI of the Arduino framework.

Библиотека MFRC522

Установим через менеджер библиотек вариант MFRC522 (домашняя страница).

При поднесении карточки в мониторе порта увидите большую таблицу данных

Дождитесь полной загрузки данных и обратите внимание на данные в блоке 0 — там можно увидеть идентификатор

Но у вас нет необходимости вручную считывать информацию из массива данных, идентификатор можно получить через вызов функции. В начале есть отдельная строка Card UID: 77 E7 BC 3A.

Рассмотрим упрощённый пример. Суть в следующем. Инициализируем объект класса MFRC522 и проверяем различные условия. Если к ридеру не поднесли карточку, то выходим из функции loop(), если прочитать карточку не можем, то также выходим из функции. Если оба условия всё же выполнились (есть карта и данные с неё), то выполняем уже нужный код.

Подносим карточку и брелок из комплекта (MIFARE 1 KB), а также карточки московского транспорта (MIFARE Ultralight or Ultralight C). Идентификатор карточки выводится в десятичном формате.

Вход по пропускам

Каждая карточка имеет свой идентификатор, который можно узнать после запуска скетча библиотеки DumpInfo. Запомним идентификатор и напишем свой скетч для проверки. Если идентификатор совпадает, то выводим сообщение (включаем светодиод, открываем ворота и т.д.). Если идентификатор не совпадает, то выводим сообщение о запрете. Карточку с правом доступа отдаём коту (вешаем на шею) и проверяем.

Меня программа не пустила на порог собственного дома, а кота пустили. «Умный дом» — угроза человечеству.

Подключение

Некоторые столкнуться с проблемой — название пинов в большинстве уроков и руководств может не соответствовать распиновке на вашем модуле. Если в скетчах указан пин SS, а на вашем модуле его нет, то скорее всего он помечен как SDA. Ниже я приведу таблицу подключения модуля для самых распространенных плат.

MFRC522

Arduino Uno

Arduino Mega

Arduino Nano v3

Arduino Leonardo/
Micro

Arduino Pro Micro

RST

9

5

D9

RESET/ICSP-5

RST

SDA(SS)

10

53

D10

10

10

MOSI

11 (ICSP-4)

51

D11

ICSP-4

16

MISO

12 (ICSP-1
)

50

D12

ICSP-1

14

SCK

13 (ICSP-3)

52

D13

ICSP-3

15

3.3V

3.3V

3.3V

Стабилизатор 3,3В

Стабилизатор 3,3В

Стабилизатор 3,3В

GND

GND

GND

GND

GND

GND