Радиочастотная идентификация (Radio Frequency Identification, RFID) находит широкое применение в современном мире в супермаркетах, системах безопасности, системах контроля доступа, системах сбора данных и т.д. В данной статье мы рассмотрим подключение модуля чтения RFID меток EM-18 к плате STM32F103C8, известной также под названием STM32 Blue Pill ("синяя таблетка").
Ранее на нашем сайте мы рассматривали подключения модуля EM-18 к следующим микроконтроллерам (платам):
Также на нашем сайте вы можете посмотреть все проекты с использованием радиочастотной идентификации.
Необходимые компоненты
- Плата разработки STM32F103C8 (STM32 Blue Pill) (купить на AliExpress).
- Модуль чтения RFID меток EM-18 (купить на AliExpress).
- RFID метки (карты).
- ЖК дисплей 16x2 (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
RFID метки (карты)
RFID метки (карты) содержат внутри себя микрочип и рамочную антенну, благодаря чему они могут взаимодействовать с модулями чтения этих меток. В настоящее время выпускаются RFID метки различных форм и размеров и использующие различные диапазоны частот. В данном проекте мы будем использовать пассивные RFID метки (карты), работающие на частоте 125 кГц и содержащие уникальный идентификатор (ID).
Вы можете увидеть микрочип и антенну внутри такой метки если поместите ее под источник яркого света как показано на следующем рисунке.
Существует два основных вида RFID меток: пассивные и активные.
Пассивные RFID метки получают питание от магнитного поля, создаваемого модулем чтения подобных меток (например, EM-18).
Активные RFID метки используют отдельный источник питания и могут содержать до 1 Мбайта встроенной памяти.
Модуль чтения RFID меток EM-18
Каждая RFID метка (карта) содержит уникальный идентификатор (ID), этот идентификатор может быть считан с помощью модуль чтения RFID меток. Модуль EM-18 работает на частоте 125 кГц и содержит встроенную антенну. Диапазон его действия составляет 8-12 см. Запитывается он от напряжения 5V. Модуль EM-18 содержит последовательный порт, работающий со следующими параметрами: скорость – 9600 бод, 8 бит данных, 1 стоповый бит.
Выходные данные модуля EM-18 представлены 12-значным форматом ASCII. Первые 10 цифр – это номер карты (метки), а последние 2 цифры – результат операции XOR (исключающее "или") от номера карты, они используются для проверки ошибок.
К примеру, модуль чтения считал число 0200107D0D62 с карты. В этом случае:
02 – преамбула,
00107D0D = 1080589 в десятичном формате.
62 – результат операции XOR (02 XOR 00 XOR 10 XOR 7D XOR 0D).
Следовательно, номер карты – 0001080589.
Распиновка модуля EM-18
Расположение контактов модуля EM-18 показано на следующем рисунке.
Модуль чтения RFID меток EM-18 содержит 9 контактов, 2 из них не подключаются, поэтому нам необходимо принимать во внимание только 7 его контактов. Их назначение показано в следующей таблице.
Номер контакта | Наименование контакта | Назначение контакта |
1 | VCC | питание |
2 | GND | общий провод (земля) |
3 | BUZZ | соединяется с зуммером |
4 | NC | нет соединения |
5 | NC | нет соединения |
6 | SEL | SEL=1 (RS232) SEL=0 (WEIGAND) |
7 | TX | передающий контакт интерфейса RS232 |
8 | DATA1 | WEIGAND interface DATA HIGH pin |
9 | DATA0 | WEIGAND interface DATA LOW pin |
Технические характеристики модуля чтения RFID меток EM-18:
- расстояние считывания меток: 10 см;
- диапазон рабочих температур: от 0ºC до +80ºC;
- скорость передачи данных: 9600 бод;
- потребление тока: <50mA;
- рабочая частота: 125 кГц;
- рабочее напряжение: 5v.
Схема проекта
Схема подключения RFID модуля EM-18 к плате STM32F103C8 (Blue Pill) представлена на следующем рисунке.
Соединения между платой STM32F103C8 и ЖК дисплеем представлены в следующей таблице.
№ контакта ЖК дисплея | Обозначение контакта ЖК дисплея | Контакт платы STM32 |
1 | Ground (Gnd) | Ground (G) |
2 | VCC | 5V |
3 | VEE | средний контакт потенциометра |
4 | Register Select (RS) | PB11 |
5 | Read/Write (RW) | Ground (G) |
6 | Enable (EN) | PB10 |
7 | Data Bit 0 (DB0) | No Connection (NC) |
8 | Data Bit 1 (DB1) | No Connection (NC) |
9 | Data Bit 2 (DB2) | No Connection (NC) |
10 | Data Bit 3 (DB3) | No Connection (NC) |
11 | Data Bit 4 (DB4) | PB0 |
12 | Data Bit 5 (DB5) | PB1 |
13 | Data Bit 6 (DB6) | PC13 |
14 | Data Bit 7 (DB7) | PC14 |
15 | LED Positive | 5V |
16 | LED Negative | Ground (G) |
Соединения между платой STM32F103C8 и RFID модулем EM-18 представлены в следующей таблице.
Модуль EM-18 | Плата STM32F103C8 |
VCC | +5V |
GND | GND |
TX | PA10 |
Внешний вид собранной конструкции проекта показан на следующем рисунке.
Объяснение программы для платы STM32
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Первым делом в программе подключим библиотеку для работы с ЖК дисплеем и укажем контакты платы, к которым подключен дисплей. Затем создадим объект для работы с ЖК дисплеем. Более подробно о подключении ЖК дисплея 16х2 к плате STM32 можно прочитать в этой статье.
1 2 3 |
#include <LiquidCrystal.h> const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); |
Далее в функции void setup() укажем тип ЖК дисплея (16х2) и инициализируем последовательную связь со скоростью 9600 бод на контакте PA10 (это контакт последовательной связи RX1 платы STM32F103C8), к которому подключен контакт TX модуля EM-18.
1 2 3 |
lcd.begin(16, 2); Serial1.begin(9600); pinMode(PA10,INPUT); |
Затем покажем приветственное сообщение на экране дисплея и после задержки в 5 секунд очистим его экран.
1 2 3 4 5 6 7 8 |
lcd.print("CIRCUIT DIGEST"); //Prints at LCD display lcd.setCursor(0, 1); //Set courser to second line lcd.print("RFID WITH STM32"); //Prints at LCD display delay(5000); //Delay for 5 Seconds lcd.clear(); //Clears LCD display lcd.setCursor(0,0); //Sets cursor at First Line lcd.print("RFID TAG NO:"); //Prints at LCD display lcd.setCursor(0,1); //Sets cursor at Second line |
Далее переходим к функции void loop(). В ней мы будем считывать по одному символу все 12 символов, получаемые по последовательному порту от модуля EM-18, и отображать их на экране ЖК дисплея.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ while(Serial1.available() && count < 12) { RFID[count] = Serial1.read(); count++; lcd.print(RFID[count]); if (count==12) { lcd.print(" "); count = 0; lcd.setCursor(0, 1); } } } |
Для проверки работы проекта загрузите код программы в плату STM32. После этого поместите RFID метку поверх модуля чтения и вы увидите номер этой метки на экране ЖК дисплея 16х2.
Исходный код программы (скетча)
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 |
//Interfacing EM-18 RFID READER MODULE with STM32F103C8 //Circuit Digest #include <LiquidCrystal.h> //Library for using LCD display functions const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; //mention the pin names to with LCD is connected to STM32F103C8 LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //Initialize the LCD display int count = 0; char RFID[12]; //Arrary for storing 12 characters of ID void setup() { lcd.begin(16, 2); // setting LCD as 16x2 type Serial1.begin(9600); //begins serial communication at 9600 baud rate pinMode(PA10,INPUT); //Set PA10 as input pin from EM-18 lcd.print("CIRCUIT DIGEST"); //Prints at LCD display lcd.setCursor(0, 1); //Set courser to second line lcd.print("RFID WITH STM32"); //Prints at LCD display delay(5000); //Delay for 5 Seconds lcd.clear(); //Clears LCD display lcd.setCursor(0,0); //Sets cursor at First Line lcd.print("RFID TAG NO:"); //Prints at LCD display lcd.setCursor(0,1); //Sets cursor at Second line } void loop() { while(Serial1.available() && count < 12) // While loop to read 12 characters and store them in input array { RFID[count] = Serial1.read(); //storing 12 characters one by one count++; lcd.print(RFID[count]); //showing 12 characters on LCD one by one if (count==12) { lcd.print(" "); count = 0; // once 12 characters are read get to start and wait for second ID lcd.setCursor(0, 1); //move courser to start. } } } |
Добрый день, подскажите, пожалуйста, на что вы крепите ЕМ-18 и где приобрести
Добрый вечер. Проект учебный, поэтому мы его не закрепляли. Приобрести можно на Aliexpress.ru, ссылка в статье есть. Не уверен, что по моей ссылке сейчас лучшая цена на него, но в любом случае вы сами, я уверен, сможете через поиск найти на Aliexpress лучшее по цене предложение на данный модуль