Делаем на Arduino замок RFID со счетчиком входов

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

Шаг 1. Как работает RFID

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

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

Шаг 2. Комплектующие

Для этого проекта нам понадобятся:

Оборудование:
  1. Модуль RFID MFRC522
  2. Сервопривод
  3. ЖК дисплей
  4. Плата Ардуино
  5. Макетная плата
  6. Провода-перемычки

Программное обеспечение:

Ardunio IDE

Шаг 3. Как найти код тега

Прежде всего вам нужно скачать библиотеку RFID с нашего сайта из раздела Библиотеки или с GitHub.

После чего мы соединяем модуль 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);
  }
}

Итоговый результат вы можете увидеть на видео ниже:

На этом пока всё. Больше отличных проектов еще впереди.

Ардуино+