‘Космическая’ дверь на ридере бесконтактных карт RD-03AB и Arduino

Практически во всех фильмах про наше недалёкое будущее есть двери, которые открываются с помощью всяких там карт, и при этом на дисплее-терминале этой двери крутится какая-то неведомая ерунда, которая при контакте с неверным пропуском выводит кроваво-красную угрожающую надпись ‘Access denied’, а если хакеры были успешными — что-нибудь вида ‘Access granted’.

unoccr_doomdoor

А не сделать ли подобие такого ‘космического’ терминала на Arduino? А почему бы и нет 🙂 Для создания этого девайса был использован ридер бесконтактных карт RD-03AB, китайская плата Arduino Uno и плата расширения TFT + SD-Card от mcufriend.com, купленные за $12 на алиэкспрессе. В принципе, для демонстрации работы ридера достаточно только самой платы Arduino Uno, но с индикатором красивее 🙂 Пропуск-непропуск карты было решено сделать простейшим образом: на SD-карте хранятся bmp-изображения лиц людей, которым принадлежат пропуска, а имя bmp-файла соответствует UID карты владельца. Если файл с соответствующим UID-ом есть на карте — дверь открываем, нет — не открываем. Всё просто 🙂

Скачать проект можно здесь.

Помимо железа, для сборки проекта понадобятся 2 сторонние библиотеки: Adafruit_GFX_Library (графика) и/или Mcufriend_kbv(графика для плат расширения Arduino от mcufriend.com на ILI9488), SdFat (чтение файлов с длинными именами с SD карты) и библиотека для ридера RD-03AB. Впрочем, всё есть в скачиваемом архиве, бегать по сайтам необязательно.

Прежде всего надо припаять штырьки к площадкам последовательного интерфейса на плате Arduino.

unoccr_r3top

Лучше всего это сделать угловыми штырьками с обратной стороны платы, чтобы не мешать подключению платы расширения с индикатором и SD-картой.

unoccr_r3bot

Ридер RD-03AB соединяется с платой Arduino Uno соединяется 4х проводным шлейфом: больше никаких дополнительных проводов к ридеру подсоединять не требуется.unoccr_connect

Демонстрационная программа расчитана на работу с индикатором 320×480 на ИМС ILI9488, вот как на фото.unoccr_shield

Другие типы индикаторов не поддерживаются (проверяется ID чипа), но не потому, что переделка требует немыслимых усилий: наоборот, изменения для работы с другим индикатором вносятся в два счёта, а написать универсальное красивое демо — непросто. Если Вы оказались обладателем другого типа индикаторов — замените пару строк, выводящих bmp на экран, и поменяйте размеры bmp чтобы он помещался на дисплее.

ВНИМАНИЕ! При программировании Arduino Uno надо отсоединять ридер, т.к. для прошивки платы используется тот же последовательный интерфейс, что и для управления ридером. Разумеется, если на плате Arduino есть несколько последовательных интерфейсов (например, mega2560), то ридер можно подключить к свободному интерфейсу: тогда отключать ничего не потребуется.

Сразу после сброса на экране появятся данные инициализации ридера.
unoccr_strt

После небольшой задержки, чтобы пользователь успел прочитать, начинается рабочий цикл программы. В качестве заставки периодически выводится bill.bmp; в остальное время работает скринсейвер, который выводит разноцветные прямоугольники.

unoccr_bill

Если к ридеру поднести карту, к которой нет соответствующего bmp-файла, то на экран будет выведен файл ‘unknown.bmp‘, а на ридер послана команда ‘lock’.
unoccr_lock

Если bmp-файл с именем, соответствующим UID карты нашёлся — на ридер будет послана команда ‘unlock’, а на экране будет выведено изображение из соответствующего bmp-файла.
unoccr_unlock