Наш магазин на eBay Наш магазин на AliExpress Наш канал в telegram

Считыватель магнитной полосы пластиковых карт на PIC16F628A

Итак, снова о пластиковых картах. В настоящее время существует очень много различных фирм, изготавливающих пластиковые карты и каждый желающий может спокойно себе такую изготовить. Информационная ёмкость карты сильно ограничена, но вполне достаточна, чтобы записать на неё, например, ваши имя/фамилию, логин, пароль или какой-нить номер. Для чего, спросите вы. Ну, как это, для чего, — для того, для чего пластиковые карты и придумали вообще — для использования в системах аутентификации. Можно использовать карту в качестве ключа для специального замка, для аутентификации при входе в Windows, для аутентификации в системе «умный дом», да много для чего. Составной частью любой такой системы аутентификации будет картридер, т.е. считыватель карт по нашему. О нём и пойдёт речь.

В настоящее время в продаже можно найти массу всяких дешёвых китайских считывателей магнитной полосы, но поскольку покупать такие вещи настоящим радиохламерам должно быть неинтересно и неспортивно, то мы решили рассказать как собрать подобный считыватель самим, на коленке.

считывающая головка от магнитофона

Итак, нам понадобятся: считывающая головка от магнитофона (как на рисунке слева), тонкий лист текстолита, двухканальный операционник, контроллер PIC16F628A, ну и всякая рассыпуха, типа резисторов и конденсаторов.

Каркас для считывателя магнитной полосы

Начнём мы с изготовления каркаса. Для каркаса нужно вырезать из текстолита 1 кусок размерами 70х50 мм, 1-2 куска размерами 70х30 мм и ещё несколько кусков размерами 20х20 мм (столько, чтобы общая толщина сложенных друг на друга кусков, кроме первого, была примерно равна высоте считывающей головки).

Далее все куски надо сложить друг на друга, выровняв по двум сторонам. Должен получиться примерно такой слоёный пирог, как на рисунке справа. Теперь всю эту конструкцию нужно скрепить, — склеить или просверлить по углам дырки и стянуть винтами, или ещё как-нибудь (лучше всё же стянуть винтами, хотя бы на первое время, так будет удобнее добавлять/убавлять слои для подгона высоты).

Держатель головки считывателя магнитной полосы

Далее выпиливаем из текстолита полоску, по ширине равную ширине считывающей головки и длиной около 40 мм. Это будет держатель головки. На один конец припаиваем головку с проводами, от другого конца до головки делаем прорезь, должно получиться как на рисунке слева.

Считыватель магнитной полосы в сборе

Осталось только соединить держатель головки и каркас. В верхней части каркаса, примерно посередине нужно закрепить скобу (гвоздь, проволоку), и с обоих сторон от этой скобы просверлить по отверстию, диаметр которого совпадает с шириной прорези в держателе головки. Далее нужно винтами, вставленными в просверленные отверстия закрепить держатель на каркасе. Должно получиться как на рисунке справа. Толщина винтов опять же должна совпадать с диаметром отверстий и шириной прорези, чтобы держатель не болтался. Он должен иметь возможность перемещаться только вдоль оси, соединяющей центры отверстий. Это нужно для возможности позиционирования головки на дорожке магнитной полосы. Чуть подкручивая винты можно регулировать степень прижимания головки к поверхности каркаса (опирающийся на скобу держатель будет изгибаться чуть сильнее или чуть меньше).

Ну вот, каркас готов, — можно переходить к схеме и печатной плате.

Схема считывателя магнитной полосы

Схема нашего кардридера приведена на рисунке слева.

  1. R1=R2=R9=1 кОм
  2. R3=R8=1,5 кОм
  3. R4=100 кОм
  4. R5=10 кОм
  5. R6=4,7 кОм
  6. R7=470 кОм
  7. С1=С2=1 мкФ
  8. С3=1 нФ
  9. С4=0,1 мкФ

Как видите, данный девайс можно условно разделить на две части: аналоговую и цифровую. Аналоговая часть состоит из считывающей головки и двухкаскадного усилителя, выполненного на сдвоенном операционнике LM358. Цифровая часть состоит из контроллера и преобразователя интерфейсов на микросхеме MAX232, позволяющего передать информацию от контроллера на компьютер или на другой контроллер по интерфейсу RS-232. Чтобы сильно не загружать схему, — обвязка MAX232 не нарисована, её можно посмотреть в даташите или вот здесь.

Задача контроллера — отсчитать промежутки времени между изменениями уровня сигнала с головки (другими словами — измерить время между фронтами) и передать их на компьютер. Для этих целей используется встроенный в контроллер компаратор, на один вход которого подаётся сигнал с усилителя, а на другой — опорный уровень с делителя на резисторах. Контроллер засекает время между прерываниями от компаратора. Далее программа на компьютере восстанавливает из этих временных интервалов исходный двоичный сигнал, а потом декодирует его.

Полностью собранный девайс выглядит вот так:

самодельный картридер для пластиковых карт с магнитной полосой

Как видите, контроллер пришлось вынести на отдельную плату от аналоговой части и преобразователя интерфейсов. Это позволило развернуть контроллер и сделать электронную часть в целом менее широкой (менее 20 мм, чтоб сбоку от держателя головки помещалась). Платы размещаются одна над другой и сопряжены с помощью 5-ти штырькового разъёма (на фотке не так, но это просто у меня разъёма не было).

Подробно про приём и декодирования F/2F частотно кодированных сигналов можно прочитать вот здесь (мы имеем дело как раз с такими сигналами и реализуем как раз такой алгоритм, как в той статье), а про то, где и в каком формате на карте обычно записывают данные — вот тут.

Скачать печатную плату (DipTrace 2.0)

Скачать исходники программы для контроллера (asm)

Скачать исходники программы для компьютера (C++ Builder)

Программа для компьютера декодирует записанные в log-файл с помощью программы RH_Com интервалы между импульсами (в hex-формате). Данная программа дана просто для примера, в ней реализовано декодирование только пятибитной кодировки, отсутствует контроль правильности считывания по чётности и LRC.

Комментарии 31

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