Все як завжди – знайшов прикольний проект і довісив сповіщення через телеграм 🙂 Буде розглянуто підключенн 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 (власне описаний там проект я брав за основу):
Налаштування
Нам потрібно увімкнути I2C та SPI, а також інсталюємо необхідні пакети:
sudo apt install python3-dev python3-pip
sudo pip3 install spidev
sudo pip3 install mfrc522
Увімкнути I2C та SPI можна через термінал за допомогою raspi-config.
Якщо все зроблено успішно, ми повинні бачити такий вивід для команди i2cdetect -y 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 мітки, доступ для якої заборонено, виводимо на дисплей повідомлення про помилку, не перемикаємо реле та направляємо повідомлення відповідного змісту в телеграм.
У телеграм приходять повідомлення трьох типів, як і описано вище:
Якщо у вас був цікавий досвід чи є цікаві ідеї як ще можна цікаво зібрати це все до купи – буду вдячний за інформацію про це в коментарях 😉