В этой статье мы будем проектировать систему на плате Arduino Uno для чтения идентификаторов (ID) карт с радиочастотной идентификацией (RFID, сокр. от Radio Frequency Identification). Каждая такая карта имеет уникальный идентификатор «зашитый» внутрь ее. Подобные системы широко распространены в современном мире – в офисах, торговых центрах и других местах, в которых только человек с авторизованной картой сможет пройти внутрь комнаты. Например, в торговых центрах радиочастотными метками снабжают товары, продающиеся в нем, с целью защиты от воров – если вор пытается незаконно вынести товар из торгового центра, то при его проходе через специальную рамку звучит сигнал тревоги. По размеру радиочастотная метка очень мала и сравнима с песчинкой. По стоимости они также достаточно дешевы и поэтому применимы в массовых масштабах.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Модуль чтения радиочастотных меток EM-18 (купить на AliExpress).
- ЖК дисплей 16х2 JHD_162ALCD (купить на AliExpress).
- Конденсатор 100 мкФ (купить на AliExpress).
- Резистор 1 кОм (2 шт.) (купить на AliExpress).
- Кнопка (2 шт.).
- Светодиод (купить на AliExpress).
- Источник питания с напряжением 5 В.
Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158
Работа схемы
Схема устройства представлена на следующем рисунке.
На представленной схеме мы использовали только 2 управляющих контактах ЖК дисплея – это позволяет лучше понять логику работы схемы начинающим. Контакт для управления контрастностью и READ/WRITE сравнительно редко используются и в нашем случае их можно замкнуть на землю. Поэтому нам нужно только управлять состоянием контактов ENABLE и RS чтобы передавать символы и данные на ЖК дисплей.
В схеме необходимо сделать следующие соединения с ЖК дисплеем:
PIN1 или VSS – на землю
PIN2 или VDD или VCC – к источнику питания +5 В
PIN3 или VEE – на землю (обеспечивает наилучшую контрастность – лучше для начинающих)
PIN4 или RS (выбор регистра) – к контакту PIN8 ARDUINO UNO
PIN5 или RW (Read/Write) – на землю (переводит ЖК дисплей в режим чтения, что упрощает взаимодействие с ним для начинающих)
PIN6 или E (Enable — доступность) к контакту PIN9 ARDUINO UNO
PIN11 или D4 – к контакту PIN10 ARDUINO UNO
PIN12 или D5 – к контакту PIN11 ARDUINO UNO
PIN13 или D6 – к контакту PIN12 ARDUINO UNO
PIN14 или D7 – к контакту PIN13 ARDUINO UNO
Исходный код программы
Прежде чем переходить непосредственно к программе необходимо понять общие принципы последовательной связи с Arduino. Модуль чтения радиочастотных меток EM-18 будет передавать данные микроконтроллеру Arduino по последовательному каналу связи – можно было бы использовать и другие способы передачи, но в нашем случае это будет самый простой способ. Таким образом, контакт RS232 модуля EM-18 подключен к приемному контакту (RXD pin) последовательного канала связи платы Arduino Uno.
Данные, передаваемые модулем чтения радиочастотных меток EM-18, будут выглядеть следующим образом:
Теперь, чтобы установить последовательное соединение между модулем EM-18 и платой Arduino, мы должны инициализировать возможности последовательного порта в Arduino. Это можно легко сделать с помощью следующих команд:
Serial.begin(9600);
data = Serial.read();
То есть передавать и принимать данные по последовательному каналу связи мы будем со скоростью 9600 бод/с. Чтобы запрограммировать это в Arduino мы используем функцию «Serial.begin(9600);«, где число «9600» как раз и является необходимой нам скоростью передачи (в бодах). Для конфигурирования последовательного канала связи на другую скорость передачи в функцию Serial.begin необходимо передать другое число.
Когда данные будут приняты последовательным портом платы Arduino их можно передать в основную часть программы с помощью команды “data = Serial.read();”. С помощью этой команды данные из буфера последовательного порта будут записаны в переменную ‘data’ целого типа (integer).
Теперь, как только карта с радиочастотной меткой окажется вблизи нашего модуля чтения этих меток, модуль EM-18 последовательно считывает идентификатор карты и передает его по последовательному каналу связи в плату Arduino, а программа Arduino показывает значение этого идентификатора на ЖК дисплее.
Более подробно о применении модуля чтения радиочастотных меток EM-18 можно прочитать в следующих статьях:
- система радиочастотной идентификации (RFID) на микроконтроллере AVR ATmega32;
- машина для голосования на радиочастотной идентификации и микроконтроллере AVR ATmega32.
Далее представлен полный текст программы.
#include <LiquidCrystal.h> // подключаем библиотеку для работы с ЖК дисплеем
LiquidCrystal lcd(8, 9, 10, 11, 12, 13); // номера контактов Arduino, к которым подключен ЖК дисплей своими контактами RS,EN,D4,D5,D6,D7
int count = 0; // переменная целого типа для хранения идентификатора (ID) карты
char input[12]; // символьный массив для хранения 12 символов идентификатора карты
void setup()
{
lcd.begin(16, 2); // устанавливаем число столбцов и строк ЖК дисплея
Serial.begin(9600); // инициализируем последовательную связь на скорости 9600 бод/с
pinMode(0,INPUT); // приемный контакт устанавливаем в режим ввода данных
lcd.print(«CIRCUITDIGEST»); // показываем на ЖК дисплее строку «CIRCUITDIGEST»
lcd.setCursor(0, 1); // переводим курсор на 2-ю строку
}
void loop()
{
while(Serial.available() && count < 12) // считываем 12 символов и сохраняем их в символьном массиве
{
input[count] = Serial.read(); // последовательно сохраняем все 12 символов
count++;
lcd.print(input[count]); // последовательно показываем 12 символов на экране ЖК дисплея
if (count==12)
{
lcd.print(» «);
count = 0; // после того как показали 12 символов на экране ЖК дисплея обнуляем счетчик и готовимся к приему следующего идентификатора
lcd.setCursor(0, 1); // передвигаем курсор в начало строки
}
}
}