Arduino rfid-замок своими руками: урок по шагам, код проекта

Урок 10. Контроль доступа. RFID-rc522 + Servo + Arduino

В данном уроке мы научимся делать простую систему, которая будет отпирать замок по электронному ключу (Метке).

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

В этом уроке нам понадобится:

Для реализации проекта нам необходимо установить библиотеки:

  • RFID Library for MFRC522.

Сборка:

1) RFID-модуль RC522 подключается к arduino проводами Папа-Мама в следующей последовательности:

Более подробно о подключении Rfid модуля.

2) Теперь нужно подключить Зуммер, который будет подавать сигнал, если ключ сработал и замок открывается, а второй сигнал, когда замок закрывается.

Зуммер подключаем в следующей последовательности:

ArduinoЗуммер
5V VCC
GND GND
pin 5 IO

3) В роли отпирающего механизма будет использоваться сервопривод. Сервопривод может быть выбран любой, в зависимости от требуемых вам размеров и усилий, который создает сервопривод. У сервопривода имеется 3 контакта:

ArduinoСервопривод
5V * Красный (Центральный)
GND Черный или Коричневый (Левый)
pin 6 Белый или Оранжевый (Правый)

*Сервопривод рекомендуется питать от внешнего источника питания, если запитать сервопривод от ардуины, то могут возникнуть помехи и перебои в работе arduino. Организовать это можно с помощью источника питания 9V и комбинированного стабилизатора 5V ,3.3V.

Более наглядно Вы можете посмотреть, как мы подключили все модули на картинке ниже:

Теперь, если все подключено, то можно переходить к программированию.

Скетч:

#include
#include
#include // библиотека «RFID».
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp; // для храниения номера метки в десятичном формате
Servo servo;
void setup() { Serial.begin(9600); Serial.println(«Waiting for card…»); SPI.begin(); // инициализация SPI / Init SPI bus. mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card. servo.attach(6); servo.write(0); // устанавливаем серву в закрытое сосотояние
}
void loop() { // Поиск новой метки if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Выбор метки if ( ! mfrc522.PICC_ReadCardSerial()) { return; } uidDec = 0; // Выдача серийного номера метки. for (byte i = 0; i < mfrc522.uid.size; i++) { uidDecTemp = mfrc522.uid.uidByte[i]; uidDec = uidDec * 256 + uidDecTemp; } Serial.println("Card UID: "); Serial.println(uidDec); // Выводим UID метки в консоль. if (uidDec == 3763966293) // Сравниваем Uid метки, если он равен заданому то серва открывает. { tone(5, 200, 500); // Делаем звуковой сигнал, Открытие servo.write(90); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.) delay(3000); // пауза 3 сек и механизм запирается. tone(5, 500, 500); // Делаем звуковой сигнал, Закрытие } servo.write(0); // устанавливаем серву в закрытое сосотояние }

Разберем скетч более детально:

Для того, что бы узнать UID карточки(Метки), необходимо записать данный скетч в arduino, собрать схему, изложенную выше, и открыть Консоль (Мониторинг последовательного порта). Когда вы поднесете метку к RFID, в консоли выведется номер

Полученный UID необходимо ввести в следующую строчку:

if (uidDec == 3763966293) // Сравниваем Uid метки, если он равен заданному то сервопривод открывает задвижку.

У каждой карточки данный идентификатор уникальный и не повторяется. Таком образом, когда вы поднесете карточку, идентификатор которой вы задали в программе, система откроет доступ с помощью сервопривода.

Видео:

Источник: https://lesson.iarduino.ru/page/kontrol-dostupa-rfid-rc522-servo-arduino/

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

Дмитрий Яровицын Місяць тому Nfc прочитает? Со смарт кольцом будет работать? Katapuf Місяць тому Здравия.Подскажите пожалуйста.

Тригер получатся сделать, но там просто счетчик, первый раз поднес, открылся, второй раз закрылся, счетчик обнулился и по кругу.

А вот как сделать, чтоб пока метка на считывателе, «замок» открыт, как только метку убрали, «замок» закрывается?Используя именно эту библиотеку.

В этой статье я хочу рассказать как можно занести в таблицу Excel данные через com последовательный порт. А данными у нас будет время и код RFID карты. Считыватель — RFID-RC522. Все это работает на Arduino Uno.

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

Теперь обсудим скетч.

Для работы с данным считывателем нам необходимо установиться библиотеку rfid-master.

RFID — это технология взаимодействия с радио метками, которые могут быть встроены в брелоки, пластиковые карты и многие другие вариации.

Наше устройство считывает так называемый UID — номер карты и сравнивает с теми номерами, что внесены в программу, далее в скетче возле каждого номера присутствует флаг, который может принимать значение «1», или «0», что в первом случае означает — доступ по данному номеру разрешен, во втором запрещен.

Для переделки SPI версии в I2C необходимо сдуть чип и отрезать pin 1 от GND (земляной шины), переподключив затем на VCC (питание). Камрад N0GooD сообщает, что при переделке MFRC-522 на I2C необходимо ОБЯЗАТЕЛЬНО сажать ноги EA, ADR_0(30), ADR_1(29) и ADR_2(28) на 0 (землю), ибо в противном случае из-за наводок при сбросе или включении модуля, у него может установиться произвольный адрес.

Сегодня я расскажу про RFID модуль RC522, на базе чипа MFRC522. Питание 3.3В, дальность обнаружения до 6см. Предназначен для чтения и записи RFID меток с частотой 13.56 МГц. Частота в данном случае очень важна, так как RFID метки существуют в трех частотных диапазонах:

Подробнее: arthurphdent.livejournal.com

Я только что получил по почте RC522 RFID считыватель и сделал эту простую систему управления доступом на базе Arduino , который открывает дверной замок  (если вам нужен громкий сигнал тревоги, то вы можете заменить небольшой зуммер громкой сиреной питания).

Подробнее: www.junradio.com

Валера Радецкий Miesiac temu Доброго времени суток. У меня вопрос такого плана — работает ли считыватель через металл? Хотя бы толщиной до 2 мм? Руслан Барахман 2 miesiecy temu Здравствуйте скажите вот на лыжных курортах тоже стоят турникеты, на них тоже можно сообразить карточки с эти оборудованием??

Всем привет! Вот я вернулся и опять за своё! Сегодня мы будем мастерить считыватель для RFID (Radio Frequency IDentification) карточке. Arduino Uno (или совместимая плата) RFID-ридер RC-522 Несколько карточек от Метрополитена

Соединительные провода

Кстати, на этот раз я начал собирать схемы на аналоге Arduino Uno R3 от RobotDyn, выполнен на аналогичном чипе, намного более бюджетный, чем итальянский Arduino, но так же прекрасно справляющийся со своими задачами.

RFID метки стали неотъемлемой частью нашей жизни, без них немыслимы современные системы автоматизации и умные устройства.

Ардуино предоставляет нам отличные возможности использовать современные технологии даже в начальных проектах.

В этой статье мы расскажем, что такое RFID, сделаем обзор стандартов , типов карточек, узнаем как подключать популярные RFID-считыватели RC522 и RDM3600 к Arduino.

Подробнее: ArduinoMaster.ru

Знаете, во многих многоэтажных домах устанавливают домофоны. Есть такой ещё электрозамочек, к нему подносим ключик и дверь открывается. Для электронщиков сделали такую интересную штуку под Arduino. Она называется RFID-модуль RC522. RFID и Ардуино — занятная смесь для ваших проектов. Чаще всего такая связка требуется для того, чтобы что-то открывать.

Валера Радецкий Month ago Доброго времени суток. У меня вопрос такого плана — работает ли считыватель через металл? Хотя бы толщиной до 2 мм? Руслан Барахман 2 months ago Здравствуйте скажите вот на лыжных курортах тоже стоят турникеты, на них тоже можно сообразить карточки с эти оборудованием??

RFID в названии этой штуки означает технологию радиоидентификации, то есть ничего конкретно не означает. Зато из спецификаций следует, что железка совместима с распространенными RFID карточками с протоколом MIFARE. Скорее всего, вы неоднократно встречались с такими карточками. Чаще всего — в виде офисного пропуска. Другой яркий пример — бесконтактные билеты для прохода в метро.

Этот модуль служит для чтения и записи данных, хранящихся в RFID – метках. Подробно об этой технологии можно почитать, например, в википедии. Мы здесь занимаемся практикой – поэтому приступим.

Я располагаю модулем RFID-RC522. Он поставляется в комплекте с двумя ключами разного исполнения – картой и брелоком. Разницы, непосредственно, в работе нет никакой.

Для работы модуля есть библиотека, её можно скачать по ссылке в в конце статьи.

Подробнее: ardutime.wordpress.com

RFID (англ.

Radio Frequency IDentification, радиочастотная идентификация) — способ автоматической идентификации объектов, в котором посредством радиосигнала считываются или записываются данные, хранящиеся в так называемых транспондерах, или RFID-метках. Любая RFID-система состоит из считывающего устройства (считыватель, ридер или интеррогатор) и транспондера (он же RFID-метка, иногда также применяется термин RFID-тег).

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

Подробнее: lesson.iarduino.ru

Читайте также:  Avr studio: среда разработки для программирования и отладки

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

Концепция была такова: карточку приклеиваем на дно ноутбука, а считыватель ставим в то место, где компьютер обычно заряжается. Результат: когда кладем ноутбук на «зарядку», то автоматически включается розетка с его зарядным устройством.

А в остальное время розетка, понятно, выключена. Не сказать, что особо полезно, но — развлечение.

Источник: http://www.chsvu.ru/kak-podklyuchit-rfid-schityvatel-rc522-k-arduino/

Автоматический «умный» замок и Arduino

Прогресс не стоит на месте и «Умные замки» все чаще появляются на дверях квартир, гаражей и домов.

Открывается подобный замок при нажатии на кнопку на смартфоне. Благо, смартфоны и планшеты уже вошли в наш обиход. В некоторых случаях, «умные замки» подключают к «облачным сервисам» вроде гугл диска и открывают удаленно. Кроме того, подобный вариант дает возможность давать доступ к открытию двери другим людям.

В этом проекте будет реализована DIY версия умного замка на Arduino, управлять которым можно удаленно из любой точки Земли.

Кроме того, в проект добавлена возможность открывать замок после опознания отпечатка пальца. Для этого будет интегрирован датчик отпечатка пальца. Оба варианта открытия дверей будут работать на базе Adafruit IO платформы.

Подобный замок может стать отличным первым шагом в проекте вашего «Умного дома».

Настройка датчика отпечатка пальца

Для работы с датчиком отпечатка пальцев, есть отличная библиотека для Arduino, которая значительно облегчает процесс настройки датчика. В этом проекте используется Arduino Uno. Для подключения к интернету используется плата Adafruit CC3000.

Начнем с подключения питания:

  • Подключите контакт 5V с платы Arduino к красной рельсе питания;
  • Контакт GND с Arduino подключается к синей рельсе на беспаечной монтажной плате.

Переходим к подключению датчика отпечатка пальца:

  • Сначала подключите питание. Для этого красный провод соединяется с рельсой +5 V, а черный — с рельсой GND;
  • Белый провод датчика подключается к контакту 4 на Arduino.
  • Зеленый провод идет к контакту 3 на микроконтроллере.

Теперь займемся модулем CC3000:

  • Контакт IRQ с платы CC3000 подключаем к пину 2 на Arduino.
  • VBAT — к контакту 5.
  • CS — к контакту 10.
  • После этого надо подключить SPI контакты к Arduino: MOSI, MISO и CLK — к контактам 11, 12 и 13 соответственно.

Ну и в конце надо обеспечить питание: Vin — к Arduino 5V (красная рельса на вашей монтажной плате), а GND к GND (синяя рельса на макетке).

Фотография полностью собранного проекта показана ниже:

Перед разработкой скетча, который будет подгружать данные на Adafruit IO, надо передать данные о вашем отпечатке пальца сенсору. Иначе в дальнейшем он вас не опознает ;).

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

Если вы работаете с этим сенсором впервые, рекомендуем ознакомиться с процессом калибровки и детальной инструкцией по работе с датчиком отпечатка пальца.

Если вы еще не сделали этого, то заведите аккаунт на Adafruit IO.

После этого можем перейти к следующему этапу разработки «умного замка» на Arduino: а именно, разработка скетча, который будет передавать данные на Adafruit IO. Так как программа достаточно объемная, в статье мы выделим и рассмотрим только ее основные части, а после дадим ссылку на GitHub, где вы сможете скачать полный скетч.

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

#include<\p>

#include<\p>

#include<\p>

#include «Adafruit_MQTT.h»

#include «Adafruit_MQTT_CC3000.h»

#include<\p>

#include >

После этого надо немного подкорректировать скетч, вставив параметры вашей WiFi сети, указав SSID и пароль (password):

#define WLAN_SSID «ваш_wifi_ssid»

#define WLAN_PASS «ваш_wifi_пароль»

#define WLAN_SECURITY WLAN_SEC_WPA2>

Кроме этого, необходимо ввести имя и AIO ключ (key) для входа в ваш аккаунт Adafruit IO:

#define AIO_SERVER «io.adafruit.com»

#define AIO_SERVERPORT 1883

#define AIO_USERNAME «adafruit_io_имя»

#define AIO_KEY «adafruit_io_ключ»>

Следующие строки отвечают за взаимодействие и обработку данных с датчика отпечатка пальца. Если датчик был активирован (отпечаток совпал), будет '1':

const char FINGERPRINT_FEED[] PROGMEM = AIO_USERNAME «/feeds/fingerprint»;

Adafruit_MQTT_Publish fingerprint = Adafruit_MQTT_Publish(&mqtt, FINGERPRINT_FEED);

Кроме того, надо создать экземпляр объекта SoftwareSerial для нашего сенсора:

SoftwareSerial mySerial(3, 4);

После этого мы можем создать объект для нашего сенсора:

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

Внутри скетча мы указываем какой fingerID должен активировать замок в дальнейшем. В данном примере используется 0, который соответствует ID первого отпечатка пальцев, который используется датчиком:

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

int activationCounter = 0;

int lastActivation = 0;

int activationTime = 10 * 1000;

В теле функции setup() мы инициализируем датчик отпечатка пальцев и обеспечиваем подключение чипа CC3000 к вашей WiFi сети.

В теле функции loop() подключаемся к Adafruit IO. За это отвечает следующая строка:

После подключения к платформе Adafruit IO, проверяем последний отпечаток пальца. Если он совпадает, а замок не активирован, мы отсылаем '1' для обработки в Adafruit IO:

if (fingerprintID == fingerID && lockState == false) {

Serial.println(F(«Access granted!»));

lockState = true;

state = 1;

if (! fingerprint.publish(state)) {

Serial.println(F(«Failed»));

} else {

Serial.println(F(«OK!»));

}

lastActivation = millis();

}

Если же в пределах функции loop() замок активирован и мы достигли значения задержки, которое указывали выше, отсылаем '0':

if ((activationCounter — lastActivation > activationTime) && lockState == true) {

lockState = false;

state = 0;

if (! fingerprint.publish(state)) {

Serial.println(F(«Failed»));

} else {

Serial.println(F(«OK!»));

}

}

Последнюю версию кода вы можете скачать на GitHub.

Пришло время тестировать наш проект! Не забудьте скачать и установить все необходимые библиотеки для Arduino!

Убедитесь, что вы внесли все необходимые изменения в скетч и загрузите его на ваш Arduino. После этого откройте окно серийного монитора.

Когда Arduino подключится к WiFi сети, сенсор отпечатка пальца начнет мигать красным цветом. Прислоните палец к датчику. В окне серийного монитора должен отобразится ID номер. Если он совпадет, появится сообщение, 'OK!'. Это значит, что данные были отправлены на сервера Adafruit IO.

Схема и скетч для дальнейшей настройки замка на примере светодиода

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

Для подключения к беспроводной сети и активации/деактивации замка понадобится дополнительный модуль Adafruit ESP8266 (модуль ESP8266 не обязательно должен быть от Adafruit).

На примере, который рассмотрим ниже, вы сможете оценить насколько легко обеспечить обмен данными между двумя платформами (Arduino и ESP8266) с использованием Adafruit IO.

В этом разделе мы не будем работать непосредственно с замком. Вместо этого мы просто подключим светодиод к контакту, на котором в дальнейшем будет подключен замок. Это даст возможность протестить наш код, не углубляясь в особенности конструкции замка.

Схема достаточно простая: сначала установите ESP8266 на breadboard. После этого установите светодиод. Не забывайте, что длинная (позитивная) нога светодиода подключается через резистор. Вторая нога резистора подключается к контакту 5 на модуле ESP8266. Вторая (катод) светодиода подключаем к пину GND на ESP8266.

Полностью собранная схема показана на фото ниже.

Теперь давайте разберемся со скетчем, который используем для этого проекта. Опять-таки, код достаточно объемный и сложный, поэтому мы рассмотрим только его основные части:

Начинаем с подключения необходимых библиотек:

#include<\p>

#include «Adafruit_MQTT.h»

#include «Adafruit_MQTT_Client.h»

Настраиваем параметры WiFi:

#define WLAN_SSID «ваш_wifi_ssid»

#define WLAN_PASS «ваш_wifi_пароль»

#define WLAN_SECURITY WLAN_SEC_WPA2

Также настраиваем параметры Adafruit IO. Так же, как и в предыдущем разделе:

#define AIO_SERVER «io.adafruit.com»

#define AIO_SERVERPORT 1883

#define AIO_USERNAME «adafruit_io_имя_пользователя»

#define AIO_KEY «adafruit_io_ключ»

Указываем, к какому пину мы подключили светодиод (в дальнейшем это будет наш замок или реле):

Взаимодействие с датчиком отпечатка пальцев, как и в предыдущем разделе:

const char LOCK_FEED[] PROGMEM = AIO_USERNAME «/feeds/lock»;

Adafruit_MQTT_Subscribe lock = Adafruit_MQTT_Subscribe(&mqtt, LOCK_FEED);

В теле функции setup() указываем, что пин, к которому подключен светодиод, должен работать в режиме OUTPUT:

pinMode(relayPin, OUTPUT);

В пределах цикла loop() сначала проверяем, подключились ли мы к Adafruit IO:

После этого проверяем, какой сигнал поступает. Если передается '1', активируем контакт, который мы объявили раньше, к которому подключен наш светодиод. Если мы получили '0', переводим контакт в состояние 'low':

Adafruit_MQTT_Subscribe *subscription;

Читайте также:  Iskra js - российский аналог микроконтроллера arduino

while ((subscription = mqtt.readSubscription(1000))) {

if (subscription == &lock) {

Serial.print(F(«Got: «));

Serial.println((char *)lock.lastread);

// Сохраняем команду в данные типа строка

String command = String((char *)lock.lastread);

command.trim();

if (command == «0») {

digitalWrite(relayPin, LOW);

}

if (command == «1») {

digitalWrite(relayPin, HIGH);

}

}

}

Найти последнюю версию скетча вы можете на GitHub.

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

Для программирования чипа ESP8266 можно использовать простой USB-FTDI конвертер.

Загрузите скетч на Arduino и откройте окно серийного монитора. На данном этапе мы просто проверили, удалось ли подключиться к Adafruit IO: доступный функционал мы рассмотрим дальше.

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

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

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

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

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

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

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

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

https://www.youtube.com/watch?v=GfZJTlWOnZc

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

Настраиваем электронный замок

Мы добрались до последней части проекта: непосредственное подключение и управление электронным замком с помощью Arduino и датчика отпечатка пальца. Проект непростой, вы можете использовать все исходники в том виде, в котором они изложены выше, но вместо светодиода подключить реле.

Для непосредственного подключения замка вам понадобятся дополнительные компоненты: источник питания на 12 В, джек для подключения питания, транзистор (в данном примере используется IRLB8721PbF MOSFET, но можно использовать и другой, например, биполярный транзистор TIP102. Если вы используете биполярный транзистор, вам надо будет добавить резистор.

Ниже показана электрическая схема подключения всех компонентов к модулю ESP8266:

Обратите внимание, что если вы используете MOSFET транзистор, вам не понадобится резистор между пином 5 модуля ESP8266 и транзистором.

Полностью собранный проект показан на фото ниже:

Запитайте модуль ESP8266 с использованием FTDI модуля и подключите источник питания 12 В к джеку. Если вы использовали рекомендованные выше пины для подключения, в скетче ничего менять не придется.

Теперь можете прислонить палец к сенсору: замок должен сработать, отреагировав на ваш отпечаток пальца. На видео ниже показан проект автоматического «умного» замка в действии:

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

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

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

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

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

Источник: http://arduino-diy.com/arduino-avtomaticheskiy-umnyy-zamok

Электронный RFID замок на микроконтроллере своими руками. Схема

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

Самое главное для рядового пользователя — это удобство в эксплуатации и надежность электронного замка. Этим требованиям удовлетворяют устройства, основанные на RFID (от англ. Radio Frequency IDentification — радиочастотная идентификация) — бесконтактной радиочастотной идентификации.

Подобная система идентификации состоит из стационарного приемника и носимого передатчика (транспондера).

Представленный в данной статье RFID замок работает подобным образом. Идентификация осуществляется на основе чтения 40-битного серийного номера карты Unique. Рабочее состояние сигнализируется звуковым сигналом. Замок может работать в двух основных режимах: чтения и регистрация карт Unique в памяти микроконтроллера. Всего в память можно записать 4 карты.

Краткие характеристики RFID замка;

  • взаимодействие с картами Unique;
  • количество регистрируемых карт: 4;
  • идентификация на основе серийного номера;
  • чувствительность считывателя: ок. 5 см;
  • исполнительное устройство: реле с двумя режимами работы;
  • звуковая сигнализация работы;
  • питание: 9…12В.

Описание работы RFID замка

Всю схему можно разделить на две части: цифровую и аналоговую. Цифровая схема состоит из микроконтроллера, который управляет всем устройством. В схеме применен микроконтроллер типа PIC12F683 в корпусе DIP8.

Внутренний RC генератор микроконтроллера позволяет получить тактовую частоту с программируемым диапазоном частот 37кГц … 8МГц.

Аппаратный генератор сигнала ШИМ, содержащийся в контроллере, используется для генерации прямоугольных импульсов с чистотой 125 кГц, которые после усиления поступают на антенну считывателя.

Для генерации использован таймер TMR2, который с помощью цифрового компаратора автоматически сбрасывается после подсчета соответствующего количества импульсов. Кроме того, автоматически изменяется состояние выхода GP2 на противоположное.

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

Форма волны, полученный таким образом, направляется на вход усилителя, состоящего из транзисторов VT1 и VТ2, и далее на катушку-антену считывателя, которая используется для бесконтактного питания схемы, находящейся в Unique карте.

Для используемых Unique карт скорость передачи данных равна примерно 2 кбит/с (125000/64=1953bps). Уникальный код каждой авторизованной карты хранится в энергонезависимой памяти EEPROM микроконтроллера.

Состояние работы замка сигнализируется с помощью зуммера, подключенного к выводу GP4. Управление реле осуществляется с выхода GP5 через транзистор VT3.

Две перемычки служат для установки режима работы микроконтроллера. Перемычка JP2 переводит контроллер в режим программирования новых карт, а JP1 меняет способ управления реле между режимом переключения и временным включением.

Аналоговая часть схемы служит для усиления сигнала, индуцированного в катушке и преобразования его в цифровую форму. Основным элементом здесь является сдвоенный операционный усилитель LM358. Катушка подключается к разъему CON1.

Индуцированный в ней сигнал поступает на анод диода VD1. Кроме полезного сигнала, также есть несущая волна (125 кГц) и случайные сигналы помех, поэтому в схему добавлен полосовой фильтр , который ограничивают полосу пропускания на частоте около 2 кГц.

После всей обработки, уже соответствующий цифровой сигнал поступает на вход GP3 микроконтроллера.

Антенна состоит из 40 витков эмалированного обмоточного провода диаметром 0,1…0,3 м
м, намотанного на временную оправку диаметром 40…60 мм. После этого катушку для защиты следует обмотать изоляционной лентой.

Для питания всей схемы, применен стабилизатор типа LM7805. Диод VD4 защищает стабилизатор от повреждения в случае подключения питания неправильной полярности.

Питающее напряжение подается к выводу CON2. Его значение должно находиться в диапазоне 9…12 В. Более высокое напряжение не повредит стабилизатор, но из-за этого он может значительно греться.

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

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

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

Перемычку нужно разомкнуть, чтобы в случае отключения питания процессор не был снова переведен в режим программирования. Если число уполномоченных карт меньше чем четыре, то необходимо несколько раз приложить одну карту (в общем, должно быть 4 регистрации).

Во время работы, приближение карты к антенне сигнализируется двойным звуковым сигналом зуммера и включением реле. Если перемычка JP1 не установлена, то каждое приближение карты будет вызывать изменение состояния реле на противоположное. Если она установлена, то реле включиться на 10 секунд, после чего вернется в исходное состояние.

Читайте также:  Сравнение микроконтроллеров arduino и stm32

Скачать прошивку (62,6 Kb, скачано: 992)

Источник: http://www.joyta.ru/10271-elektronnyj-rfid-zamok-na-mikrokontrollere-svoimi-rukami-sxema/

Как сделать кодовый замок на Arduino

ПодробностиКатегория: ArduinoСоздано 29.11.2013 14:41Автор: Admin

Кодовый замок представляет собой цифровое устройство предназначенное для разблокировки замка.

Разблокировка замка осуществляется после того как пользователь наберет на клавиатуре определенную комбинацию клавиш. В данной статье речь идет о простом кодовом замке на платформе Arduino.

Код состоит из комбинации 6 цифр, который вводиться через клавиатуру. Введенное значение сравнивается с хранящимся в памяти значением.

Для того чтобы сделать кодовый замок нам понадобиться:

  • одна плата Arduino UNO, или другие платы;
  • клавиатура ввода данных;
  • нагрузка.

О том что такое Arduino было сказано ранее.

Принципиальна схема замка

«Строчные» линии R1-R4 подключены к выводам Arduino с 6-го по 9-й. Колонные выводы C1-C4 подключены к выводам C1-C4.

Третий вывод настроен как выход в цепь включена нагрузка, в нашем случае это светодиод D1, последовательно к которому подключено сопротивление номиналом в 330 Ом. Оно необходимо для ограничения тока через светодиод.

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

Данная схема позволяет подсоединить к компьютеру и просматривать состояние кодового замка через мониторинг последовательного порта
среды разработки Arduino.

int p[6]; //array for storing the password int c[6]; // array for storing the input code int n; int a=0; int i=0; int lock=3; int r1=6; int r2=7; int r3=8; int r4=9; int c1=10; int c2=11; int c3=12; int c4=13; int colm1; int colm2; int colm3; int colm4; void setup() { pinMode(r1,OUTPUT); pinMode(r2,OUTPUT); pinMode(r3,OUTPUT); pinMode(r4,OUTPUT); pinMode(c1,INPUT); pinMode(c2,INPUT); pinMode(c3,INPUT); pinMode(c4,INPUT); pinMode(lock,OUTPUT); Serial.begin(9600); //sets the baud rate at 9600 digitalWrite(c1,HIGH); digitalWrite(c2,HIGH); digitalWrite(c3,HIGH); digitalWrite(c4,HIGH); digitalWrite(lock,LOW); p[0]=1; //sets 1st digit of the password p[1]=2; // sets 2nd digit of the password p[2]=3; // sets 3rd digit of the password p[3]=4; // sets 4th digit of the password p[4]=5; // sets 5th digit of the password p[5]=6; // sets 6th digit of the password } void loop() { digitalWrite(r1,LOW); digitalWrite(r2,HIGH); digitalWrite(r3,HIGH); digitalWrite(r4,HIGH); colm1=digitalRead(c1); colm2=digitalRead(c2); colm3=digitalRead(c3); colm4=digitalRead(c4); if(colm1==LOW) { n=1; a=1; Serial.println(«1»); delay(200);} else { if(colm2==LOW) { n=2; a=1; Serial.println(«2»); delay(200);} else { if(colm3==LOW) {Serial.println(«3»); n=3; a=1; delay(200);} else { if(colm4==LOW) {Serial.println(«LOCKED»); digitalWrite(lock,LOW); //locks i=0; delay(200);} }}} digitalWrite(r1,HIGH); digitalWrite(r2,LOW); digitalWrite(r3,HIGH); digitalWrite(r4,HIGH); colm1=digitalRead(c1); colm2=digitalRead(c2); colm3=digitalRead(c3); colm4=digitalRead(c4); if(colm1==LOW) {Serial.println(«4»); n=4; a=1; delay(200);} else { if(colm2==LOW) {Serial.println(«5»); n=5; a=1; delay(200);} else { if(colm3==LOW) {Serial.println(«6»); n=6; a=1; delay(200);} else { if(colm4==LOW) { if(c[0]==p[0]&&c[1]==p[1]&&c[2]==p[2]&&c[3]==p[3]&&c[4]==p[4]&&c[5]==p[5]) {digitalWrite(lock,HIGH); //unlocks Serial.println(«UNLOCKED»); c[5]=9;} //corrupts the code in array c else {Serial.println(«WRONG PASSWORD»);} delay(200);} }}} if(a==1) // test whether a digit key is pressed { c[i]=n; // saves the current digit pressed to array c i=i+1; a=0;} } 

 Как работает программа самодельного кодового замка

Наш пароль состоит из 6 цифр «123456» это значение храниться в массиве «p». Введенные нами значения последовательно записываются в массив «c». В коде программы происходит сравнение этих двух массивов,после того как будет нажата кнопка разблокировки. Если они совпадают то посылаем на вывод 3 «положительный сигнал», а если не совпадают то «отрицательный».

 Теперь вы знаете как сделать настоящий кодовый замок, и сохранить все ваше имущество!)

Источник: http://www.radio-magic.ru/arduino-projects/107-kodovji-zamok

Кодовый замок из ардуино

В этой статье я расскажу, как сделать кодовый замок из ардуино. Для этого нам понадобятся красный и зелёный светодиоды, зуммер, ардуино нано, LCD дисплей с I2C конвертором, сервопривод и матричная клавиатура 4×4. При включении дисплей будет писать «Enter code.»,

включится красный светодиод,

а зелёный погаснет, сервопривод установится на 0°. При вводе цифр на дисплее будут загораться *.

Если код введён неверно, то дисплей напишет «Enter cod.». Если код правильный, то прозвучит звуковой сигнал, серво привод повернётся на 180°, дисплей напишет «Open.»

включится зелёный светодиод,

а красный отключится. После 3 секунд сервопривод вернётся в начальное положение, включится красный светодиод, а зелёный погаснет, дисплей напишет «Close.»,

затем дисплей напишет «Enter code.». Теперь о схеме. Сначала соединяем ардуино проводами с макетной платой (контакты питания).

Потом подключаем к контактам D9 — D2 матричную клавиатуру.

Далее подключаем дисплей. Контакты питания к макетной плате, SDA — А4, SCL — А5.

Затем сервопривод. Его подключаем к контакту 10.

Красный светодиод к контакту 11.

Зелёный — к контакту 12.

Зуммер — к контакту 13.

Теперь загружаем скетч.

#include
#include
#include
#include
iarduino_KB KB(9, 8, 7, 6, 5, 4, 3, 2);
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servo;
int pass[4] = {3, 6, 1, 8};
int in[4];
int r = 11;
int g = 12;
void setup() { KB.begin(KB1); pinMode(r, OUTPUT); pinMode(g, OUTPUT); lcd.init(); lcd.backlight(); digitalWrite(g, LOW); digitalWrite(r, HIGH); servo.attach(10); servo.write(0); lcd.setCursor(0, 0);
}
void loop() { lcd.clear(); lcd.print(«Enter code.»); while (!KB.check(KEY_DOWN)) { delay(1); } in[0] = KB.getNum; lcd.clear(); lcd.setCursor(0, 0); lcd.print('*'); while (!KB.check(KEY_DOWN)) { delay(1); } in[1] = KB.getNum; lcd.print('*'); while (!KB.check(KEY_DOWN)) { delay(1); } in[2] = KB.getNum; lcd.print('*'); while (!KB.check(KEY_DOWN)) { delay(1); } in[3] = KB.getNum; lcd.print('*'); if (in[0] == pass[0]) { if (in[1] == pass[1]) { if (in[2] == pass[2]) { if (in[3] == pass[3]) { lcd.clear(); lcd.setCursor(0, 0); lcd.print(«Open.»); tone(13, 400, 750); servo.write(180); digitalWrite(r, LOW); digitalWrite(g, HIGH); delay(3000); lcd.clear(); lcd.setCursor(0, 0); lcd.print(«Close.»); tone(13, 300, 700); servo.write(0); digitalWrite(g, LOW); digitalWrite(r, HIGH); delay(1000); } } } }
}

Вот и всё. Наслаждайтесь кодовым замком!

Скачать список элементов (PDF)

Прикрепленные файлы:

  • kod.ino (1 Кб)
  • Плата.brd (12 Кб)

Источник: http://cxem.net/arduino/arduino224.php

Электронный замок. Урок 13 — Уроки — Уроки по Arduino — MikroBord

Теперь перейдем к замку.Для примера мы взяли электромагнит.

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

Теперь соберем схему, показанную на рисунке:

Page 2

Мы соберем электронный замок)))

Для начала разработки замка рассмотрим процесс считывания и почитаем данные карты метрополитена.Именно их мы и будем использовать их.Для этого нам понадобиться:

Библиотеки можно скачать в каталоге файлов

Перейдем к схеме:

Если тут не возникает вопросов.То перейдем к коду:

#include 

#include 

#define RST_PIN 9 

#define SS_PIN 10 MFRC522 mfrc522(SS_PIN, RST_PIN); // Создаем экземпляр MFRC522 void setup() { Serial.begin(9600); // Настраиваем порт while (!Serial);  SPI.begin(); //Начинаем работать по spi с устройством  mfrc522.PCD_Init(); ShowReaderDetails(); // Показать детали карты Serial.println(F(«Сканирование PICC, смотрим блоки UID …»)); } void loop() { // Ищем новые карты if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Выберите одну из карт if ( ! mfrc522.PICC_ReadCardSerial()) { return; } // Выдача отладочной информации о карточке mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); } void ShowReaderDetails() { // Получаем программное обеспечение MFRC522 byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg); Serial.print(F(«MFRC522 Software Version: 0x»)); Serial.print(v, HEX); if (v == 0x91) Serial.print(F(» = v1.0″)); else if (v == 0x92) Serial.print(F(» = v2.0″)); else Serial.print(F(» (unknown)»)); Serial.println(«»); // Когда 0x00 0xFF , вероятно, не удалось связаться if ((v == 0x00) || (v == 0xFF)) { Serial.println(F(«WARNING: Карты неисправна или проверьте считыватель!»)); } }

Теперь в «Мониторе порта» вы можете наблюдать данные с карты.Модуль работает по интерфейсу SPI (англ.

Serial Peripheral Interface, SPI bus — последовательный периферийный интерфейс, шина SPI) — последовательный синхронный стандарт передачи данных в режиме полного дуплекса, предназначенный для обеспечения простого и недорогого сопряжения микроконтроллеров и периферии. SPI также иногда называют четырёхпроводным (англ. four-wire) интерфейсом.Удачи.

Page 3

Теперь когда мы можем понаблюдать за температурой и влажностью в «Мониторе порта».Теперь мы сделаем индикатор превышения порога температуры.С помощью все тех же компонентов и уже установленных библиотек с прошлых уроков.

Соберем схему ниже:

Запрограммируем следующим кодом:#include «DHT.h»// Подключаем библиотеки
#define DHTPIN 12 // это пин для датчика
#define DHTTYPE DHT11 // тип датчика DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600);// настраиваем порт Serial.println(«elemic_test!»); // выводим небольшой текст в начале pinMode(5, OUTPUT);// Подключаем светодиод dht.begin();// начинаем работать } void loop() { delay(2000);// задержка на старт датчика float h = dht.readHumidity(); // измеряем влажность float t = dht.readTemperature();// измеряем температуру float f = dht.readTemperature(true); // вычисляем коэффициент и выводим точную температуру в не зависимости от влажности if (isnan(h) || isnan(t) || isnan(f)) { Serial.println(«Failed sensor!»);// выводим если датчик не работает return; } float hif = dht.computeHeatIndex(f, h);//вычисляем float hic = dht.computeHeatIndex(t, h, false);// вычисляем Serial.print(«Humidity: «);// вывод показаний Serial.print(h);// вывод показаний Serial.print(» % «);// вывод показаний Serial.print(«Temperature: «);// вывод показаний Serial.print(t);// вывод показаний Serial.print(» *C «);// вывод показаний Serial.print(f);// вывод показаний Serial.print(» *F «);// вывод показаний Serial.print(«Heat index: «);// вывод показаний Serial.print(hic);// вывод показаний Serial.print(» *C «);// вывод показаний Serial.print(hif);// вывод показаний Serial.println(» *F»);// вывод показаний if(hic

Источник: http://mikrobord.do.am/publ/uroki/ehlektronnyj_zamok_urok_13/1-1-0-14

Ссылка на основную публикацию