Чтение радиочастотных меток с помощью Arduino Uno


В этой статье мы будем проектировать систему на плате Arduino Uno для чтения идентификаторов (ID) карт с радиочастотной идентификацией (RFID, сокр. от Radio Frequency Identification). Каждая такая карта имеет уникальный идентификатор "зашитый" внутрь ее. Подобные системы широко распространены в современном мире – в офисах, торговых центрах и других местах, в которых только человек с авторизованной картой сможет пройти внутрь комнаты. Например, в торговых центрах радиочастотными метками снабжают товары, продающиеся в нем, с целью защиты от воров – если вор пытается незаконно вынести товар из торгового центра, то при его проходе через специальную рамку звучит сигнал тревоги. По размеру радиочастотная метка очень мала и сравнима с песчинкой. По стоимости они также достаточно дешевы и поэтому применимы в массовых масштабах.

Чтение радиочастотных меток с помощью Arduino Uno: внешний вид

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

  1. Плата Arduino Uno (купить на AliExpress).
  2. Модуль чтения радиочастотных меток EM-18 (купить на AliExpress).
  3. ЖК дисплей 16х2 JHD_162ALCD (купить на AliExpress).
  4. Конденсатор 100 мкФ (купить на AliExpress).
  5. Резистор 1 кОм (2 шт.) (купить на AliExpress).
  6. Кнопка (2 шт.).
  7. Светодиод (купить на AliExpress).
  8. Источник питания с напряжением 5 В.

Работа схемы

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

Схема для чтения радиочастотных меток с помощью Arduino UnoЖидкокристаллический (ЖК) дисплей 16x2 использует 16 контактов для своей работы в случае если нужен черный цвет. Если черный цвет не нужен, то достаточно 14 контактов. В этом случае контакты черного цвета можно либо запитать, либо оставить их как есть. То есть из 14 контактов ЖК дисплея мы имеем 8 контактов для данных (7-14 или D0-D7), 2 контакта для подачи питания (1&2 или VSS&VDD или GND&+5v), 3-й контакт для управления контрастностью (VEE) – определяет насколько "толстыми" будут выглядеть символы на экране, и 3 управляющих контакта (RS&RW&E).

На представленной схеме мы использовали только 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

Теперь, чтобы установить последовательное соединение между модулем 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 можно прочитать в следующих статьях:

Далее представлен полный текст программы.

#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); // передвигаем курсор в начало строки
  }
 }
}

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

(1 голосов, оценка: 5,00 из 5)
Загрузка...
1 154 просмотров

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

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