В этом уроке вы узнаете, что такое RFID, как это работает и как сделать входной замок RFID на Arduino с счетчиком входов, а также узнать, кто последний им воспользовался. Мы уже делали RFID-замок, но сегодня мы добавим к нему некоторые дополнительные функции.
Шаг 1. Как работает RFID
RFID означает радиочастотную идентификацию, т.е. это концепция идентификации по радиочастоте. Простыми словами - это метод передачи данных с помощью радиоволн в магнитных полях без проводов и без необходимости прикосновений ключа и замка.
Эта технология используется для автоматической идентификации, например, товаров, предметов и людей. RFID предлагает важную платформу для идентификации объектов, сбора данных и управления товарами.
Система RFID состоит из двух основных компонентов: транспондера или тега, который находится на объекте, который мы хотим идентифицировать, и приемопередатчика или считывателя. RFID-считыватель состоит из радиочастотного модуля, блока управления и антенной катушки который генерирует высокочастотное электромагнитное поле.
С другой стороны, тег обычно представляет собой пассивный компонент, состоящий только из антенны и электронного микрочипа, поэтому, когда он приближается к электромагнитному полю трансивера, из-за индукции в своей антенной катушке генерируется напряжение, и это напряжение служит для питания микрочипа.
Шаг 2. Комплектующие
Для этого проекта нам понадобятся:
- Модуль RFID MFRC522
- Сервопривод
- ЖК дисплей
- Плата Ардуино
- Макетная плата
- Провода-перемычки
Программное обеспечение:
Шаг 3. Как найти код тега
Прежде всего вам нужно скачать библиотеку RFID с нашего сайта из раздела Библиотеки.
После чего мы соединяем модуль RFID с Ардуино:
Теперь вам нужно загрузить DumpInfo из примера, используя меню:
File → Examples → MFRC522 → DumpInfo
(Файл → Примеры → MFRC522 → DumpInfo)
Теперь, если вы запустите Serial Monitor (серийный монитор), вы можете найти код тега RFID:
Шаг 4. Схема проекта
Теперь нам нужно собрать всё вместе, используя данную схему проекта RFID-замка на Ардуино:
Шаг 5. Код проекта
Скетч для проекта вы можете скачать или скопировать ниже. Не забудьте подключить нужные библиотеки, которые указаны в начале программы.
#include <SPI.h> #include <MFRC522.h> int count = 0; #include <LiquidCrystal.h> const int rs = 8, en = 7, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //LiquidCrystal lcd(7,6,5,4,3,2); //replex 6 into 8 //LiquidCrystal lcd(A5,A4,A3,A2,A1,A0); //replex 6 into 8 #include <VarSpeedServo.h> VarSpeedServo servo1; const int servopin = 6; #define SS_PIN 10 #define RST_PIN 9 #define LED_G 2 //define green LED pin #define LED_R 3 //define red LED #define BUZZER 4 //buzzer pin MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. void setup() { lcd.begin(16,2); lcd.print("RFID attendance"); servo1.attach(servopin); servo1.write(70,10,true); //servo1.write(0,60,true); Serial.begin(9600); // Initiate a serial communication SPI.begin(); // Initiate SPI bus mfrc522.PCD_Init(); // Initiate MFRC522 pinMode(LED_G, OUTPUT); pinMode(LED_R, OUTPUT); pinMode(BUZZER, OUTPUT); noTone(BUZZER); Serial.println("Put your card to the reader..."); Serial.println(); } void loop() { // Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) { return; } //Show UID on serial monitor Serial.print("UID tag :"); String content= ""; byte letter; for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ")); content.concat(String(mfrc522.uid.uidByte[i], HEX)); } Serial.println(); Serial.print("Message : "); content.toUpperCase(); if (content.substring(1) == "C0 88 17 A4") { servo1.write(10,70,true); delay(3000); servo1.write(70,10,true); delay(500); Serial.println("Authorized access"); Serial.println(); delay(500); digitalWrite(LED_G, HIGH); tone(BUZZER, 500); delay(300); noTone(BUZZER); digitalWrite(LED_G, LOW); lcd.clear(); count++; // Increment Count by 1 lcd.setCursor(1, 0); lcd.print("Subas is Present"); lcd.setCursor(0, 1); lcd.print(count); delay(400); } if (content.substring(1) == "6A 22 5D 74") { servo1.write(10,70,true); delay(3000); servo1.write(70,10,true); delay(1000); Serial.println("Authorized access"); Serial.println(); delay(500); digitalWrite(LED_G, HIGH); tone(BUZZER, 500); delay(300); noTone(BUZZER); digitalWrite(LED_G, LOW); lcd.clear(); count++; // Increment Count by 1 lcd.setCursor(1, 0); lcd.print("VC Sir is Present"); lcd.setCursor(0, 1); lcd.print(count); delay(400); } if (content.substring(1) == "27 DB 3E 65") { servo1.write(10,70,true); delay(3000); servo1.write(70,10,true); delay(1000); Serial.println("Authorized access"); Serial.println(); delay(500); digitalWrite(LED_G, HIGH); tone(BUZZER, 500); delay(300); noTone(BUZZER); digitalWrite(LED_G, LOW); lcd.clear(); count++; // Increment Count by 1 lcd.setCursor(1, 0); lcd.print("Imarn is Present"); lcd.setCursor(0, 1); lcd.print(count); delay(400); } if (content.substring(1) == "E3 28 96 BB") { servo1.write(10,70,true); delay(3000); servo1.write(70,10,true); delay(1000); Serial.println("Authorized access"); Serial.println(); delay(500); digitalWrite(LED_G, HIGH); tone(BUZZER, 500); delay(300); noTone(BUZZER); digitalWrite(LED_G, LOW); lcd.clear(); count++; // Increment Count by 1 lcd.setCursor(1, 0); lcd.print("Shikha is Present "); lcd.setCursor(0, 1); lcd.print(count); delay(400); } else { Serial.println(" Access denied"); digitalWrite(LED_R, HIGH); tone(BUZZER, 300); delay(1000); digitalWrite(LED_R, LOW); noTone(BUZZER); } }
Итоговый результат вы можете увидеть на видео ниже:
На этом пока всё. Больше отличных проектов еще впереди.