Каждый раз, когда я выхожу из дома и запираю дверь обычным замком, я чувствую себя таким устаревшим. Мне хотелось заменить его чем-то интересным и современным с точки зрения технологий и применения. Чем-то, что могло бы обеспечить «лучшую безопасность» и «простоту использования». Поэтому я решил создать «дверной замок на основе RFID технологии». Это замок, который можно использовать в каждом доме или помещении. На основе этого проекта можно усовершенствовать обычный замок. RFID-метки в данном проекте служат ключом для открытия двери.

Эта система оснащена RFID-сканером, который сканирует вашу RFID-метку и если она зарегистрирована в базе данных системы, то дверь открывается. Проект также имеет систему сигнализации для защиты от попыток входа с использованием незарегистрированных RFID-меток. Предусмотрена отправка уведомлений по электронной почте обо всех входах (разрешенных и запрещенных). Эта система использует оптимальное сочетание аппаратного и программного обеспечения и может считаться лучшим примером применения современных технологий для модернизации нашего образа жизни. Вы постоянно находитесь под защитой своей системы безопасности и чувствуете себя в безопасности на своей территории.
Ранее на нашем сайте мы рассматривали и другие проекты подобных замков:
- замок с электромагнитным управлением на основе Arduino и радиочастотной идентификации (RFID);
- дверной замок с распознаванием лиц на основе модуля ESP32-CAM;
- цифровой кодовый замок на Raspberry Pi;
- электронный замок на основе радиочастотных меток (RFID) и Arduino.
Необходимые компоненты
- Плата Raspberry Pi 3 B+ или выше (купить на AliExpress).
- Модуль RFID RC522 и RFID-метки к нему (купить на AliExpress).
- ЖК дисплей 16х2 (купить на AliExpress).
- Зуммер (купить на AliExpress).
- Зеленый и красный светодиоды 5 мм (купить на AliExpress).
- Сервомотор SG90 (купить на AliExpress).
- Блок питания 5 В.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
В проекте использовалось программное обеспечение:
-
IDE для Python от Thonny.
-
VNC Viewer.
Выбор аппаратного и программного обеспечения для проекта

Выбор аппаратного и программного обеспечения основывается на различных критериях, разные компоненты выбираются по разным причинам. Критерии выбора обсуждаются далее.
Raspberry Pi 3 B+
В качестве центрального процессора выбран Raspberry Pi благодаря его многофункциональности и доступности на рынке. При выборе оборудования учитывались возможности масштабируемости и дальнейшего развития проекта, и Raspberry Pi идеально для этого подходит.
RFID-модуль RC522
RFID-модуль RC522 легко доступен на рынке, обладает низким энергопотреблением и может быть легко внедрен в любой проект. Он выбран за свои многочисленные преимущества, включая низкое энергопотребление, быструю передачу данных, портативность, доступность и т. д. Он состоит из RFID-сканера и RFID-меток.
16 * 2 ЖК-дисплей
Для обеспечения текстовой помощи проекту необходим дисплей, и 16*2 ЖК-дисплей идеально подходит для этой цели благодаря своей портативности, низкому энергопотреблению, стоимости и т.д.
Зуммер
Для воспроизведения звука во время использования системы всегда устанавливается небольшой зуммер. Он обеспечивает отличное качество звука и низкое энергопотребление.
Светодиоды
Для этих целей были выбраны простые разноцветные светодиоды из-за их яркости, компактности и стоимости.
Сервомотор SG90
В этом проекте представлен небольшой прототип ворот, которые можно открывать с помощью любого маломощного сервомотора. Сервомотор SG90 легко доступен на рынке и очень прост в использовании, поэтому он идеально подходит для этого проекта.
Источник питания и провода
В соответствии с другими требованиями к оборудованию.
IDE для Python от Thonny
Thonny — это среда разработки с открытым исходным кодом, предустановленная на Raspberry Pi, поэтому она отлично подходит для этого проекта.
VNC Viewer
Для настройки Raspberry Pi в безмониторном режиме существует специальная версия VNC Viewer для Raspbian, имеющая открытый исходный код. Поэтому для данного проекта используется именно VNC Viewer.
Схема проекта
Схема дверного замка с RFID идентификацией на основе Raspberry Pi представлена на следующем рисунке.
Все компоненты соединены в соответствии с приведенной схемой. К основным компонентам также подключены некоторые дополнительные/вспомогательные компоненты. Соединение контактов выполнено на основе предоставленной информации.
-
Контакты ЖК-дисплея Контакты Pi 1 GND 2 5V 3 GND 4 37 5 GND 6 35 11 33 12 31 13 29 14 38 15 5V 16 GND
-
RFID-контакты Pi-контакты 3,3 В 3,3 В GND GND RST 22 MISO 21 MOSI 19 SCK 23 SDA 24 IRQ НЕТ
-
Контакты светодиода зеленого цвета на Raspberry Pi: Vcc 36, GND, GND (между Vcc светодиода и контактом 36 Raspberry Pi также установлен резистор).
-
Контакты светодиода Red Pi: Vcc 32, GND, GND (между Vcc светодиода и контактом 32 Raspberry Pi также установлен резистор).
-
Контакты Buzzer Pi: Vcc 26, GND, GND
-
Контакты SERVO Pi: Сигнал 18, GND, GND, Vcc 5V
RFID-сканер, зуммер, светодиоды, двигатель и дисплей подключены к Raspberry Pi в соответствии с указанными контактами. Raspberry Pi подключен к источнику питания. Пользователь сканирует свою карту, и система вызывает функцию в зависимости от разрешения или запрета доступа.
Полный код проекта
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
#Importing all the required libraries import RPi.GPIO as GPIO from RPLCD.gpio import CharLCD import MFRC522 import signal import time from time import sleep import smtplib import os #Setting up the SMTP s = smtplib.SMTP('smtp.gmail.com', 587) s.starttls() s.login("captiosus.system@gmail.com", "Captiosus@123") messagea = "Entry Detected- Permitted" messageb = "Entry Detected- Denied" subject = "Captiosus Alert" message1 = 'Subject:{}\n{}'.format(subject, messagea) message2 = 'Subject:{}\n{}'.format(subject, messageb) #Setting up GPIO pins GPIO.setmode(GPIO.BOARD) GPIO.setup(11, GPIO.OUT) pwm=GPIO.PWM(11, 50) GPIO.setup(33, GPIO.OUT) GPIO.setup(31, GPIO.OUT) GPIO.setup(29, GPIO.OUT) GPIO.setup(38, GPIO.OUT) lcd = CharLCD(numbering_mode=GPIO.BOARD, cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 38]) buzzer=26 led_n=32 led_r=36 GPIO.setup(buzzer,GPIO.OUT) GPIO.setup(led_n,GPIO.OUT) GPIO.setup(led_r,GPIO.OUT) #Creating a function for Not Recognised Event def notrecognised(): GPIO.output(led_n,GPIO.HIGH) GPIO.output(buzzer,GPIO.HIGH) os.system("espeak-ng 'Your entry is denied'") lcd.cursor_pos = (0, 2) lcd.write_string('Entry Denied') sleep(0.3) GPIO.output(buzzer,GPIO.LOW) sleep(0.3) GPIO.output(buzzer,GPIO.HIGH) sleep(0.3) GPIO.output(buzzer,GPIO.LOW) sleep(0.3) GPIO.output(buzzer,GPIO.HIGH) sleep(0.3) GPIO.output(buzzer,GPIO.LOW) sleep(0.3) GPIO.output(buzzer,GPIO.HIGH) sleep(0.3) GPIO.output(buzzer,GPIO.LOW) sleep(0.3) GPIO.output(buzzer,GPIO.HIGH) sleep(0.3) GPIO.output(buzzer,GPIO.LOW) sleep(0.3) GPIO.output(buzzer,GPIO.HIGH) sleep(0.3) GPIO.output(buzzer,GPIO.LOW) GPIO.output(led_n,GPIO.LOW) lcd.clear() #Creating a function for Recognised Event def recognised(): GPIO.output(led_r,GPIO.HIGH) GPIO.output(buzzer,GPIO.HIGH) os.system("espeak-ng 'You are welcome, please wear mask before you enter the room'") pwm.start(0) pwm.ChangeDutyCycle(10) lcd.cursor_pos = (0, 0) lcd.write_string('You are Welcome') sleep(0.5) GPIO.output(buzzer,GPIO.LOW) sleep(2.5) GPIO.output(led_r,GPIO.LOW) lcd.clear() pwm.ChangeDutyCycle(7.5) # neutral position sleep(1) continue_reading = True # Capture SIGINT for cleanup when the script is aborted def end_read(signal,frame): global continue_reading print ("Ctrl+C captured, ending read.") continue_reading = False GPIO.cleanup() # Hook the SIGINT signal.signal(signal.SIGINT, end_read) # Create an object of the class MFRC522 MIFAREReader = MFRC522.MFRC522() # Welcome message print ("Welcome to the MFRC522 data read example") print ("Press Ctrl-C to stop.") # This loop keeps checking for chips. If one is near it will get the UID and authenticate while continue_reading: # Scan for cards (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL) # If a card is found if status == MIFAREReader.MI_OK: print ("Card detected") # Get the UID of the card (status,uid) = MIFAREReader.MFRC522_Anticoll() # If we have the UID, continue if status == MIFAREReader.MI_OK: # Print UID print ("Card read UID: "+str(uid[0])+","+str(uid[1])+","+str(uid[2])+","+str(uid[3])+','+str(uid[4])) # This is the default key for authentication key = [0xFF,0xFF,0xFF,0xFF,0xFF,0xFF] # Select the scanned tag MIFAREReader.MFRC522_SelectTag(uid) #ENTER Your Card UID here (Registered database of RFIDs) my_uid = [178,2,40,49,169] #Check to see if card UID read matches your card UID if uid == my_uid: #Open the Doggy Door if matching UIDs print("Access Granted") recognised() s.sendmail("captiosus.system@gmail.com", "garvitindian@gmail.com", message1) s.sendmail("captiosus.system@gmail.com", "shrutivij15@gmail.com",message1) time.sleep(1) else: #Don't open if UIDs don't match print("Access Denied, YOU SHALL NOT PASS!") notrecognised() s.sendmail("captiosus.system@gmail.com", "garvitindian@gmail.com",message2) s.sendmail("captiosus.system@gmail.com", "shrutivij15@gmail.com",message2) time.sleep(1) |




