RFID RC522: Raspberry Pi та радіочастотна ідентифікація

Все як завжди – знайшов прикольний проект і довісив сповіщення через телеграм 🙂 Буде розглянуто підключенн RFID модуля, lcd дисплея і електромагнітного реле до Raspberry Pi. Будемо сканувати дві мітки: в однієї буде доступ, в іншої ні. Результат зчитування традиційно прийде у телеграм.

Замість вступу

Замість вступу попросимо ChatGPT розповісти нам про технологію RFID 😉
RFID (Radio Frequency Identification) – це бездротова технологія ідентифікації та зчитування даних, що використовується для визначення та відстеження об’єктів за допомогою радіочастотного сигналу. Система RFID складається з двох основних компонентів: RFID-мітки і RFID-читачі.

RFID-мітка (також відома як RFID-тег або транспондер) – це невеликий пристрій, що містить мікрочип і антенну систему. Цей мікрочип зберігає інформацію про об’єкт, до якого його прикріплено. Антена забезпечує зчитування та передачу даних між міткою та читачем за допомогою радіочастотного сигналу.

RFID-читач – це пристрій, який здійснює комунікацію з RFID-мітками. Він випромінює радіочастотний сигнал для активації мітки та отримання даних з неї. Читач зчитує інформацію з мітки та передає її на комп’ютер або іншу систему для подальшої обробки.

Технологія RFID використовується в різних сферах, включаючи логістику, управління запасами, транспортні системи, безпеку, медицину та інше. Вона дозволяє автоматизувати процеси ідентифікації та відстеження об’єктів, що знижує час і затрати, пов’язані зі збором та обробкою даних.

Схема під’єднання RFID

Особисто я орієнтувався на наступну схему підключення взяту із публікації How to make an RFID door lock system with Raspberry Pi board (власне описаний там проект я брав за основу):

image

Налаштування

Нам потрібно увімкнути I2C та SPI, а також інсталюємо необхідні пакети:

sudo apt install python3-dev python3-pip

sudo pip3 install spidev

sudo pip3 install mfrc522

Увімкнути I2C та SPI можна через термінал за допомогою raspi-config.

Якщо все зроблено успішно, ми повинні бачити такий вивід для команди i2cdetect -y 1

image 1

Скрипт для зчитування id мітки

Завантажити python скрипти і бібліотеку для I2C можна за люб’язно наданим посиланням на вже згаданому сайті. srituhobby.com. Один із наведених там скриптів ми тільки доповнимо надсиланням повідомлення у телеграм.

Створення простого чат-бота в Telegram

Оскільки я детально розписував цей крок у попередньому проекті Raspberry Pi + OpenCV: розпізнавання об’єктів та сповіщення через Telegram-бот, то тут повторюватись не буду, просто можна проглянути відповідний розділ Налаштовування телеграм бота для Raspberry Pi. Головне на цьому кроці створити чат-бот та отримати токен та ідентифікатор чату.

Фінальний скрипт

Доповнивши скрипт надсиланням повідомлень у телеграм, я також змінив керування зумером, адже мені в руки потрапив той, що активується низьким рівнем напруги. Також у мене 5В реле на відміну від схеми що наведена вище.

# Include the library files
import I2C_LCD_driver
import RPi.GPIO as GPIO
from mfrc522 import SimpleMFRC522
from time import sleep
import requests

TOKEN = "ТОКЕН ВАШОГО ТЕЛЕГРАМ БОТА"
chat_id = "ІДЕНТИФІКАТОР ТЕЛЕГРАМ ЧАТУ"

#Include the buzzer pin
buzzer = 19

#Include the relay pin
relay = 26

#Enter your tag ID
Tag_ID = "МІТКА, ЯКІЙ ДОЗВОЛЕНО ДОСТУП"

door = True

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(buzzer,GPIO.OUT)
GPIO.output(buzzer,1)
GPIO.setup(relay,GPIO.OUT)

# Create a object for the LCD
lcd = I2C_LCD_driver.lcd()

# Create a object for the RFID module
read = SimpleMFRC522()

#Starting text
lcd.lcd_display_string("Door lock system",1,0)
for a in range (0,15):
    lcd.lcd_display_string(".",2,a)
    sleep(0.1)

while True:
    lcd.lcd_clear()
    lcd.lcd_display_string("Place your Tag",1,1)
    id,Tag = read.read()

    id = str(id)

    if id == Tag_ID:
        lcd.lcd_clear()
        lcd.lcd_display_string("Successful",1,3)

        if door == True:
            lcd.lcd_display_string("Door is locked",2,1)
            GPIO.output(relay,GPIO.HIGH)
            GPIO.output(buzzer,0)
            sleep(0.5)
            GPIO.output(buzzer,1)
            door = False
            message = "Автентифікація з міткою: " + id + "\nУспішно! \nДвері заблоковано."
            url = f"https://api.telegram.org/bot{TOKEN}/sendMessage?chat_id={chat_id}&text={message}"
            requests.get(url)
            sleep(3)
        elif door == False:
            lcd.lcd_display_string("Door is open",2,2)
            GPIO.output(relay,GPIO.LOW)
            GPIO.output(buzzer,0)
            sleep(0.5)
            GPIO.output(buzzer,1)
            door = True
            message = "Автентифікація з міткою: " + id + "\nУспішно! \nДвері розблоковано."
            url = f"https://api.telegram.org/bot{TOKEN}/sendMessage?chat_id={chat_id}&text={message}"
            requests.get(url)
            sleep(3)
    else:
        lcd.lcd_clear()
        lcd.lcd_display_string("Wrong Tag!",1,3)
        GPIO.output(buzzer,0)
        sleep(0.3)
        GPIO.output(buzzer,1)
        sleep(0.3)
        GPIO.output(buzzer,0)
        sleep(0.3)
        GPIO.output(buzzer,1)
        sleep(0.3)
        GPIO.output(buzzer,0)
        sleep(0.3)
        GPIO.output(buzzer,1)
        message = "Автентифікація з міткою: " + id + "\nПомилка! \nДоступ несанкціоновано!"
        url = f"https://api.telegram.org/bot{TOKEN}/sendMessage?chat_id={chat_id}&text={message}"
        requests.get(url)

GPIO.cleanup()

Результат

Отже в нас є дві rfid мітки: одній дозволено доступ, а іншій ні. При зчитуванні дозволеної мітки перший раз відбувається вивід повідомлення про зчитування на lcd дисплей, перемикання електромагнітного реле та надсилання повідомлення про розблокування дверей у телеграм. При другому зчитуванні перемикаємо реле у протилежний стан та відправляємо повідомлення про те, що двері заблоковано.

У випадку зчитування rfid мітки, доступ для якої заборонено, виводимо на дисплей повідомлення про помилку, не перемикаємо реле та направляємо повідомлення відповідного змісту в телеграм.

У телеграм приходять повідомлення трьох типів, як і описано вище:

raspberry pi rfid telegram

Якщо у вас був цікавий досвід чи є цікаві ідеї як ще можна цікаво зібрати це все до купи – буду вдячний за інформацію про це в коментарях 😉

rfid

Spread the love

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *