Рубрики
Проекты на Raspberry Pi

Система контроля доступа на Raspberry Pi и радиочастотной идентификации (RFID)

В данной статье мы рассмотрим создание системы контроля доступа на основе платы Raspberry Pi и радиочастотной идентификации (Radio Frequency Identification and Detection, RFID). Подобные системы получают с каждым годом все большее распространение в современном мире. На нашем сайте ранее мы уже рассматривали следующие проекты с использованием радиочастотной идентификации (RFID):

Необходимые компоненты

  1. Плата Raspberry Pi (с установленной SD картой) (купить на AliExpress).
  2. Модуль чтения RFID меток EM-18 и карты (метки) к нему (купить на AliExpress).
  3. Кнопка.
  4. Зуммер (Buzzer) (купить на AliExpress).
  5. ЖК дисплей 16×2 (купить на AliExpress).
  6. Потенциометр 10 кОм (купить на AliExpress).
  7. Резисторы 10 кОм и 1 кОм (купить на AliExpress).
  8. Светодиод (купить на AliExpress).
  9. Источник питания с напряжением 5 В.
  10. Ethernet кабель.
  11. Макетная плата.
  12. Соединительные провода.

Модуль чтения RFID меток и метки к нему

Система радиочастотной идентификации (RFID) состоит из двух компонентов — модуля чтения RFID меток и RFID карт/меток. Когда мы помещаем RFID метку рядом с модулем для их считывания, он начинает последовательно считывать информацию с метки (карты). RFID метка содержит вшитый в нее код из 12 символов.

В этом проекте мы будем использовать один из наиболее простых и распространенных сейчас модулей чтения RFID меток — EM-18. На нашем сайте вы можете посмотреть все проекты с его использованием. Модуль EM-18 работает на скорости 9600 бод и использует электромагнит для передачи данных от себя меткам и от меток себе.

Принцип работы проекта

Плата Raspberry Pi управляет всеми процессами в нашем проекте. Модуль чтения RFID меток считывает идентификатор (ID) RFID метки/карты и передает его плате Raspberry Pi через UART (последовательный порт), плата проверяет идентификатор карты на корректность и высвечивает результат проверки на экране ЖК дисплея.

Структурная схема взаимодействия элементов проекта показана на следующем рисунке.

Когда пользователь прикладывает свою RFID карту/метку к модулю EM-18, модуль EM-18 считывает ее идентификатор и передает его плате Raspberry Pi, которая сравнивает его с заранее введенными идентификаторами. Если результат проверки положительный, то плата Raspberry Pi увеличивает счетчик посетителей на 1. Если же карты/метки нет в числе разрешенных, то Raspberry Pi показывает сообщение на экране ЖК дисплея ‘Invalid Card’ (неправильная карта) и включает зуммер. Также в проект добавлена кнопка – при ее нажатии на ЖК дисплее показывается общее количество пользователей, которое успешно прошло через систему. Для тестирования работы схемы мы будем использовать 4 RFID метки, из которых 3 будут корректными (разрешенными), а одна метка будет неразрешенной.

Схема проекта

Схема системы контроля доступа на Raspberry Pi и радиочастотной идентификации (RFID) представлена на следующем рисунке.

Схема содержит плату Raspberry Pi, модуль чтения RFID меток, зуммер, светодиод и ЖК дисплей. Плата Raspberry Pi управляет всеми процессами в схеме: считывание данных с модуля чтения RFID меток, сравнение этих данных с заранее введенными (predefined) данными, управление зуммером и управление отображением информации на ЖК дисплее.

ЖК дисплей подключен к плате Raspberry Pi в 4-битном режиме, его контакты RS, RW и EN непосредственно подключены к контактам GPIO 11, gnd и 10 платы Raspberry Pi. Контакты данных ЖК дисплея подключены к контактам GPIO 6, 5, 4 и 1 платы. Потенциометр 10 кОм используется для установки контрастности ЖК дисплея. Зуммер подключен к контакту GPIO7 платы Raspberry Pi. Три светодиода используются для индикации пользователей с корректными RFID метками, а один светодиод используется для индикации того, что система готова к сканированию RFID метки/карты. Кнопка подключена к контакту GPIO12 платы, при ее нажатии на ЖК дисплее отображается количество прошедших пользователей. Модуль чтения RFID меток подключен к порту последовательной связи платы Raspberry Pi (контакт GPIO16).

Установка библиотеки wiringPi в Raspberry Pi

Если мы пишем программу для Raspberry Pi на Python, то мы используем в ней команду вида «import RPi.GPIO as IO» для того чтобы иметь возможность работы с контактами ввода/вывода (GPIO Pins). Поскольку в этом проекте мы будем писать программу на языке C, то аналогичным образом нам необходимо подключить библиотеку wiringPi чтобы работать с контактами ввода/вывода (GPIO Pins) на языке C. Эту библиотеку можно установить вводя последовательно команды (одну за другой), приведенные ниже. Вы можете вводить эти команды непосредственно в терминале или с помощью SSH клиента, например, Putty.

sudo apt-get install git-core
sudo apt-get update
sudo apt-get upgrade
git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
cd wiringPi
./build

Проверить правильность установки библиотеки wiringPi можно с помощью следующих команд:

gpio -v
gpio readall

Объяснение программы для Raspberry Pi

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Первым делом в программе нам необходимо подключить используемые библиотеки и определить (задать) используемые контакты.

После этого объявим ряд переменных и массивов, которые нам понадобятся далее в программе.

Далее запрограммируем ряд функций, которые нам понадобятся в программе. Функция void lcdcmd будет использоваться для передачи команд на ЖК дисплей.

Функция void write будет использоваться для передачи данных ЖК дисплею.

Функция void clear() используется для очистки экрана ЖК дисплея,  функция setCursor – для установки позиции курсора, а функция void print – для передачи строки на ЖК дисплей.

Функция void begin используется для инициализации ЖК дисплея в 4-битном режиме.

Функция void buzzer() используется для включения зуммера, функция void wait() – для задержки перед считыванием очередной карты/метки, функция serialbegin – для инициализации последовательной связи.

В функции void setup() мы инициализируем все используемые контакты ввода/вывода, ЖК дисплей и UART (последовательный порт).

Функция void get_card() используется для получения данных с модуля считывания RFID меток. В функции void main() мы высвечиваем необходимые сообщения на экране ЖК дисплея и сравниваем считанные метки с заранее определенными значениями.

И, наконец, функция void check_button() используется для отображения общего числа посетителей, которые прошли через систему

Исходный код программы на C

Код программы без комментариев, но практически все фрагменты программы достаточно подробно объяснены в предыдущем пункте статьи.

Видео, демонстрирующее работу проекта

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *