Рубрики
Схемы на AVR

Система радиочастотной идентификации (RFID) на микроконтроллере AVR ATmega32

Мы знаем, что сейчас в офисах, торговых центрах и многих других местах требуется авторизация людей, которые входят/выходят из этих мест. Часто для этих целей используется радиочастотная идентификация (RFID — Radio Frequency Identification). В частности, радиочастотная идентификация используется в торговых центрах для защиты от воров – все товары в них снабжены специальными радиочастотными метками и если кто то пытается вынести из торгового центра товар с такой меткой, то сразу включается сигнализация. Радиочастотные метки представляют собой очень маленькие устройства – их размер сравним с песчинками. Системы радиочастотной идентификации просты в разработке и дешевы в производстве, что и обусловило их широкое распространение по всему миру.

В этой статье будет рассмотрена система сбора данных на основе радиочастотной идентификации на микроконтроллере ATmega32 (семейство AVR), предназначенная для целей охраны. Система открывает ворота и пропускает только тех людей, у которых есть авторизованная (разрешенная) радиочастотная метка. Идентификатор этой метки записывается в память микроконтроллера ATmega32 и на основе этих данных микроконтроллер уже принимает решение кого пропускать, а кого не пропускать через ворота.

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

Аппаратное обеспечение

  1. Микроконтроллер ATmega32 (купить на AliExpress).
  2. Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
  3. JHD_162ALCD (16×2 ЖК дисплей) (купить на AliExpress).
  4. Конденсатор 100 мкФ (соединенный через источник питания) (купить на AliExpress).
  5. Кнопка.
  6. Резистор 10 кОм (купить на AliExpress).
  7. Конденсатор 100 нФ (купить на AliExpress).
  8. Светодиод (2 шт.) (купить на AliExpress).
  9. EM-18 (модуль чтения радиочастотных меток, RFID) (купить на AliExpress). Модуль не поддерживает карты Hid Proxcard и Indala.
  10. Драйвер двигателей L293D (купить на AliExpress).
  11. Электромотор постоянного тока на напряжение 5В.
  12. Источник питания с напряжением 5 Вольт.

Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158

Программное обеспечение

  1. Atmel Studio версии 6.1 (или выше).
  2. Progisp или flash magic (необязательно).

Работа схемы

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

В представленной схеме PORTA микроконтроллера ATmega32 соединен с портом данным жидкокристаллического (ЖК) дисплея. При этом следует помнить о том, что необходимо деактивировать JTAG интерфейс микроконтроллера на порту PORTC при помощи изменения фьюзов (fuse bytes) чтобы использовать PORTC как обычный порт ввода/вывода. В ЖК дисплее (если мы не хотим использовать черный цвет) можно задействовать только 14 его контактов: 8 контактов для передачи данных (7-14 или D0-D7), 2 контакта для подачи питания (1&2 или VSS&VDD или gnd&+5v), 3-й контакт для управления контарстностью, 3 контакта для управления (RS&RW&E).

В представленной схеме мы использовали только 2 контакта управления ЖК дисплея для лучшего понимания работы схемы. Бит контраста и READ/WRITE используются нечасто, поэтому они могут быть замкнуты на землю. Это обеспечивает ЖК дисплею максимальную контрастность и переводит его в режим чтения. Теперь нам всего лишь нужно контролировать контакты ENABLE и RS чтобы передавать на ЖК дисплей символы и данные. Также на нашем сайте вы можете прочитать более подробную статью о подключении ЖК дисплея к микроконтроллеру ATmega32.

В схеме необходимо сделать следующие соединения с ЖК дисплеем:
PIN1 или VSS — земля
PIN2 или VDD или VCC — +5v питание
PIN3 или VEE — земля (обеспечивает максимальный контраст ЖК дисплею)
PIN4 или RS (Register Selection) – контакт PD6 микроконтроллера
PIN5 или RW (Read/Write) — земля (переводит ЖК дисплей в режим чтения что упрощает взаимодействие с ним для начинающих)
PIN6 или E (Enable) — контакт PD5 микроконтроллера
PIN7 или D0 — контакт PA0 микроконтроллера
PIN8 или D1 — контакт PA1 микроконтроллера
PIN9 или D2 — контакт PA2 микроконтроллера
PIN10 или D3 — контакт PA3 микроконтроллера
PIN11 или D4 — контакт PA4 микроконтроллера
PIN12 или D5 — контакт PA5 микроконтроллера
PIN13 или D6 — контакт PA6 микроконтроллера
PIN14 или D7 — контакт PA7 микроконтроллера

В схеме мы использовали 8-битную связь (D0-D7) ЖК дисплея с микроконтроллером, хотя можно было ограничиться и 4-битной – но в этом случае код программы стал бы немного сложнее.

Таким образом, мы использовали 10 контактов ЖК дисплея, 8 из которых будут использоваться для передачи данных и 2 для управления.

Принципы работы последовательного порта микроконтроллера AVR ATmega32

Чтобы двигаться дальше нам необходимо остановиться на принципах работы последовательного порта микроконтроллера потому что модуль чтения радиочастотных меток будет посылать данные микроконтроллеру именно по этому порту. Можно задействовать и другой режим связи модуля чтения радиочастотных меток с микроконтроллером (RFID), но в целях упрощения мы в данной статье остановимся на их связи через порт RS232. Таким образом, контакт RS232 модуля RFID необходимо соединить с контактом RXD микроконтроллера ATmega32.

Данные, передаваемые модулем RFID, выглядят следующим образом:

Чтобы осуществить успешный их прием и обработку, необходимо выполнить следующие действия:

  1. Контакт RXD микроконтроллера должен быть доступен (активирован).
  2. Поскольку мы используем последовательную передачу данных, то мы должны знать момент окончания приема всего байта данных. То есть мы должны приостановить работу программы до тех пор, пока мы не примем весь байт. Это достигается при помощи использования соответствующего прерывания.
  3. Модуль RFID передает данные микроконтроллеру в 8 битном режиме, поэтому одновременно будут передаваться два символа, как показано на следующем рисунке.
  4. Биты четности не используются, но однако один стоповый бит посылается модулем RFID.

Регистры, используемые для управления последовательным портом микроконтроллера, представлены на следующем рисунке.

Кратко поясним данный рисунок.

RED (красный, RXEN): этот бит представляет особенности принимаемых данных. Он должен быть установлен для данных, которые передаются от модуля RFID к микроконтроллеру. Он также производит активацию (запускает в работу) контакт RXD микроконтроллера.

BROWN (коричневый, RXCIE): этот бит должен быть установлен для обработки прерывания после окончания успешного приема данных. Активируя этот бит мы знаем что произвели успешный прием 8 бит.

PINK (розовый, URSEL): этот бит должен быть установлен перед активацией других битов UCSRC. После его установки, другие биты UCSRC, URSEL должны быть деактивированы или установлены в 0.

YELLOW (желтый, UCSZ0,UCSZ1,UCSZ2): эти три бита используются для выбора номеров битов данных, которые мы передаем или принимаем при односторонней передаче. Поскольку данные от модуля RFID передаются в 8 битном формате мы должны установить биты UCSZ0 и UCSZ1 в единицу, а бит UCSZ2 – в ноль.

ORANGE (оранжевый, UMSEL): этот бит определяет используется ли асинхронный режим передачи между устройствами (используются различные часы) или синхронный (используются одни и те же часы). Поскольку модуль RFID и микроконтроллер ATmega32 используют разные часы, то этот бит должен быть установлен в ноль.

GREEN (зеленый, UPM1, UPM0): эти два бита корректируются на основе бита четности, который мы используем в процессе связи.

Поскольку модуль RFID передает данные без использования четности, то биты UPM1, UPM0 должны быть установлены в ноль либо не трогать их вообще поскольку по умолчанию все биты во всех регистрах устанавливаются в ноль при инициализации микроконтроллера.

BLUE (синий, USBS): этот бит используется для выбора числа стоповых битов которые мы используем в процессе связи.

Поскольку модуль RFID передает данные с одним стоповым битом, мы должны установить бит USBS в ноль.

После установки всех рассмотренных битов мы должны установить техническую (в бодах) скорость передачи по последовательному порту. Модуль RFID передает данные по этому порту со скоростью 9600 бод/с, поэтому такую же скорость мы должны выставить и у последовательного порта микроконтроллера при помощи установки соответствующего значения UBRRH.

Значение байта UBRRH должно выбираться из необходимой скорости передачи данных и используемой частоты работы микроконтроллера. Исходя из нижеприведенной таблицы мы видим, что нам необходимо записать в этот байт значение ‘6’.

Теперь, как показано на рисунке ниже, два контакта микроконтроллера необходимо соединить с драйвером электромотора L293D, который используется для управления скоростью и направлением вращения маломощных электродвигателей постоянного тока.

Этот драйвер содержит два моста, поэтому он может управлять двумя электромоторами.

Управление направлением вращения осуществляется при помощи уровней напряжений на INPUT1 и INPUT2.

Как видно из представленной таблицы, для вращения по часовой стрелке на контакте 2A должно быть высокое напряжение, а на контакте 1A – низкое. Аналогично для вращения против часовой стрелки на контакте 1A должно быть высокое напряжение, а на контакте 2A – низкое.

Когда карта авторизации подносится к модулю RFID, электромотор программируется на вращение по часовой стрелке чтобы на секунду открыть ворота, а затем по истечении этой секунды снова их закрыть. Более подробно эти моменты объяснены в комментариях к коду программы.

Исходный код программы на языке C (Си) с пояснениями

Программа для рассматриваемой схемы представлена следующим фрагментом кода на языке C (Си). Комментарии к коду программу поясняют принцип работы отдельных команд.

Теперь текст программы без комментариев

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

3 ответа к “Система радиочастотной идентификации (RFID) на микроконтроллере AVR ATmega32”

Модуль не поддерживает карты Hid Proxcard и Indala, хотя они низкочастотные 125Khz! Укажите это в тексте статьи

К сожалению сейчас в этой статье не та схема, которая нужна, но я надеюсь в скором будущем исправлю эту опечатку

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

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