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

Hacker

Professional
Messages
1,044
Reaction score
813
Points
113
Предисловие
Основная цель всех дизайнов, которые вы найдете на этих страницах, - сделать их максимально простыми во время работы. Когда я впервые сделал считыватель магнитных полос, у меня к тому времени не было звуковой карты, поэтому мне пришлось разработать простой усилитель, чтобы поднять слабый сигнал магнитной головки до уровня, пригодного для использования компьютером. В настоящее время звуковые карты распространены даже в ноутбуках, поэтому усилитель больше не нужен, вам просто нужно подключить магнитную головку непосредственно к микрофонному входу звуковой карты (импедансы обоих устройств обычно одинаковы). Конечно, вам все равно понадобится механическое устройство для считывания карты, которое я могу описать на моей странице для чтения. Если вы хотите читать карты с магнитной полосой на компьютере без звуковой карты, вы все равно можете использовать мой оригинальный ридер.

Настройка
Как я уже сказал выше, если у вас есть компьютер со звуковой картой с микрофонным входом (все карты, которые я знаю, имеют такой вход), вам понадобится только магнитная головка для чтения карт с магнитной полосой. Головка должна быть выбрана так, чтобы размер дорожки соответствовал размеру магнитной полосы. Я обнаружил, что размер дорожки обычного монофонического кассетного плеера немного меньше, чем требуется, но он работает хорошо. Использование стереофонической аудиоголовки не рекомендуется, но, скорее всего, она будет работать, если вы используете только одну из двух дорожек. Я использую тонкий кабель с витой парой длиной 1,5 метра для подключения монофонической аудиоголовки к микрофонному разъему с помощью моно-разъема. Если один из выводов магнитной головки подключен к ее корпусу, вы должны подключить этот вывод к земле, которая является стороной гнезда ближе к кабелю (задняя часть). Моя первая страница для ридеров по конкретному дизайну.

Некоторые звуковые карты имеют стереоразъем для микрофонного входа, обеспечивающий постоянный ток около + 5 В в среднем разъеме (кольцо разъема), хотя я видел по крайней мере одну карту с выходом + 5 В на внешнем разъеме (наконечник разъема), см. здесь для подробностей. Если вы используете разъем моно-джек (наконечник и кольцо закорочены вместе), то этот постоянный ток подается на магнитную головку, и этого может быть достаточно, чтобы стереть магнитные полосы (это случилось со мной с одной звуковой картой, я стер случайно пару магнитных полосы при попытке их чтения), поэтому вы можете рассмотреть возможность добавления конденсатора (около 200 нФ должно быть достаточно) последовательно с головкой, чтобы избежать этого постоянного тока. Конечно, вы можете использовать стереоразъем и оставить кольцо (или наконечник) открытым, но в любом случае рекомендуется измерить напряжение перед подключением магнитной головки, чтобы быть уверенным, что при подключении головки не будет постоянного тока.

Чтобы читать данные с помощью моего программного обеспечения, вам понадобится Linux, работающий на вашем компьютере, со звуковой картой, настроенной для использования. Вам также понадобится компилятор C, утилита sox, микшер (aumix, kmix, gmix, xmixer, asmixer, ...) и оболочка C, не волнуйтесь, все эти утилиты включены в любой дистрибутив Linux. Программное обеспечение, которое я написал, состоит из сценария оболочки (не забудьте активировать разрешение на выполнение, загрузка удалит его) и программы на C который вам придется скомпилировать (см. инструкции в исходном коде). Конечно, вы можете разработать свою собственную программу для чтения данных с помощью Windows (например, sox доступен для этой платформы), но, пожалуйста, не просите меня это сделать. Если у вас нет и вы не хотите устанавливать Linux (вы не знаете, что вам не хватает ;-), у вас все еще есть выбор запустить Linux на компакт-диске и использовать мои программы, см. Мою страницу, где Linux работает без его установки. На самом деле у меня есть подготовленный ISO-образ Knoppix размером 700 МБ, в котором есть исходные коды и скомпилированные двоичные файлы. См. Инструкции на указанной странице.

Использование программного обеспечения
После того, как вы скомпилировали программу C, поместите ее в путь выполнения (может быть текущий каталог, если он у вас есть в переменной среды PATH) и подключите магнитную головку к микрофонному входу звуковой карты, тогда вам просто нужно запустить сценарий оболочки и смахните карту. Когда вы запускаете программу, она ожидает активности в потоке звуковых данных, то есть считывания карты. Когда активность прекращается, программа начинает декодировать биты, формировать байты и проверять четность и LRC. Проведение карты повышает уровень звука над шумом, и это действие, которое программа обнаруживает. После смахивания скрипт позволяет снова смахнуть (в случае неудачного считывания) или выйти.

Скрипт пытается установить настройки микшера звуковой карты на соответствующие значения с помощью программы aumix. Если эта утилита не установлена в вашей системе или сценарий не устанавливает правильные значения (названия каналов могут отличаться от карты к карте), вам придется настроить микшер вручную, используя ваш любимый микшер. Необходимые настройки - выбрать канал микрофона в качестве источника записи и установить его усиление на максимальный уровень. Также может потребоваться установить канал записи на максимальный уровень. В случае сомнений просто поднимите все каналы до максимального уровня. Если у вас есть динамик, подключенный к звуковой карте, и правильно настроенный микшер, вы будете слышать данные, как в модеме. Это очень интересно, потому что звук очень помогает расположить голову над дорожкой, чем выше звук, тем лучше. Это также позволит вам различать дорожки с высокой и низкой плотностью, первый тип имеет более резкий звук, чем второй, когда вы проводите по ним с одинаковой скоростью. Поскольку стандартные карты чередуют дорожки с высокой и низкой плотностью, это дополнительная помощь в размещении головы на дорожке.

Программа принимает следующие параметры, которые обычно вам не нужно использовать, кроме выбора трека:
  • -t <трек>: Тип дорожки для чтения, допустимые значения от 1 до 4, по умолчанию 2. Эта опция выбирает несколько параметров, соответствующих каждой дорожке, некоторые из которых могут быть изменены с помощью других опций. Значения от 1 до 3 соответствуют трем стандартным трекам, а значение 4 является экспериментальным и будет использоваться с нестандартными треками. Используя эту дорожку 4, программа не ищет сигнальные метки начала и конца и не проверяет четность и LRC. Он также декодирует биты немного иначе, чем стандарт: 0 - это то же самое, но 1 - это только одно короткое изменение направления потока, а не два коротких последовательных обращения, как в стандарте. Я нашел это нестандартное кодирование бит как минимум на одной карте (карте копировальной машины).
  • -c <clk_bits>: количество ведущих битов синхронизации, значение по умолчанию зависит от выбранной дорожки. Это количество начальных битов, которые должны быть равны 0 (или 1, если задана опция -i, см. Ниже), и их средняя длительность используется в качестве ссылки для декодирования остальных битов.
  • -p <peak_points>: минимальное количество последовательных точек данных, которые должен иметь пик данных, значение по умолчанию зависит от выбранной дорожки. Это сделано для того, чтобы избежать шумовых пиков, которые обычно малы, однако слишком большое значение может иметь нежелательный эффект, потому что при наличии большого количества шума хорошие пики данных могут не быть обнаружены.
  • -s <stop_points>: минимальное количество последовательных точек данных ниже порога шума (см. ниже), прежде чем программа прекратит прием данных и начнет декодирование битов. Значение по умолчанию - 500, что составляет около 10 миллисекунд. На некоторых нестандартных картах есть треки с несколькими записями, разделенными паузой без данных, возможно, вам придется изменить этот параметр, если вы обнаружите одну из этих карт с большой паузой.
  • -l <порог>: минимальный уровень сигнала, который считается данными, ниже этого значения мы считаем его шумом. По умолчанию в качестве меры уровня шума используются первые 100 миллисекунд данных (в которых мы еще не ожидаем проведения смахивания). Для шумных звуковых карт может быть лучше установить порог вручную, используя эту опцию. Не используйте эту опцию при первом запуске моей программы и обратите внимание на значение, помеченное как «среднее значение шума» на экране (см. Пример ниже), если оно не равно нулю, это означает, что есть постоянный ток, и его может быть достаточно, чтобы стереть карту, пытаясь ее прочитать. Поэтому лучше проверьте это перед чтением любой карты, и если вы обнаружите, что у вас есть постоянный ток, добавьте конденсатор последовательно с магнитной головкой, чтобы избежать этого (см. Выше). Обратите внимание, что у вас может быть постоянный ток даже в случае «среднего шума».
  • -m <s | p | z>: Метод распознавания битов, то есть их начала и конца, чтобы можно было установить их продолжительность и, следовательно, их характер. Сначала я разработал метод наклона (ов), затем я перешел к более новому алгоритму пика (p), который я считаю более надежным, и оставил старый метод по историческим причинам. Есть третий метод, алгоритм пересечения нуля (z), который мне пришлось реализовать для декодирования карт, записанных на моем мобильном телефоне. Я не знаю, почему разные усилители по-разному видят магнитные полосы. Если у вас возникли проблемы с чтением карт с помощью этой программы, сначала попробуйте определить, какой метод лучше работает с вашей звуковой картой. Пиковый метод (p) используется по умолчанию.
  • -d: Печатать необработанные данные в стандартный вывод (для использования карты в качестве цифрового осциллографа), которые можно использовать с инструментами анализа данных для просмотра происходящего, это помогает найти схему кодирования нестандартных дорожек. Если вы используете эту опцию, вам придется перенаправить вывод, чтобы сохранить данные.
  • -b: выводить декодированные биты на стандартный вывод. Используя эту опцию, вы можете подсчитать количество ведущих битов синхронизации. В следующий раз, когда вы читаете эту карту, вы можете использовать это число в качестве параметра битов синхронизации, но это имеет смысл только в том случае, если оно меньше значения по умолчанию или намного выше. Установка правильного количества битов синхронизации повышает вероятность успешного декодирования карты.
  • -n: не прекращать декодирование байтов после LRC. Программа предполагает, что LRC является последним байтом потока данных, но некоторые карты, такие как посадочные талоны, имеют две или три записи, разделенные битами синхронизации.
  • -i: инверсные биты синхронизации, они будут равны 1, а не 0. Я обнаружил это нестандартное поведение по крайней мере в одном типе карт - билетах в метро Мадрида.
  • -x: строгое обнаружение, по умолчанию пики данных не должны быть выше порога шума, этот уровень используется только для определения момента начала и окончания потока данных. Это сделано для того, чтобы избежать некоторых эффектов отсечения, которые иногда возникают, скрывая истинные пики данных ниже порогового значения, особенно если последнее высокое. Однако при наличии сильного шума может быть удобно использовать эту опцию, чтобы уменьшить вероятность принятия пиков шума за пики данных. В этих условиях также может помочь использование параметра -p (см. Выше).

После того, как вы прочитаете дорожку, на экране появятся байты и некоторые информативные данные о качестве чтения, вы можете использовать их, чтобы помочь расположить голову на дорожке (а также услышать звук), чем выше данные макс. и среднеквадратичные амплитуды, тем лучше. Я обнаружил, что оптимальное время пролистывания составляет около 0,2 секунды для треков с низкой плотностью записи стандартного размера и около 0,4 секунды для треков с высокой плотностью. Смахивание должно быть как можно более плавным и равномерным, иначе программа неправильно интерпретирует 0 как 1 и наоборот. Как только у вас появится ритм смахивания, вы будете читать треки при первом смахивании. В общем, вам следует ознакомиться с исходным кодом, чтобы понять, как он работает.

Некоторые результаты
Это аспект смахивания (необработанные данные) во времени для треков с высокой и низкой плотностью (щелкните изображения, чтобы увеличить):
datahigh.jpg
datalow.jpg


Это более пристальный взгляд на начало данных (ведущие биты тактирования):
clockhigh.jpg
clocklow.jpg


И это первые данные после битов синхронизации (start sentinel):
ssenhigh.jpg
ssenlow.jpg


Эти графики были созданы с помощью инструмента анализа данных под названием PAW от CERN, который вы можете скачать бесплатно (включая полное руководство) и доступен для многих платформ (включая Windows). Если вы попробуете, этот макрос будет полезен, так же как и функция, подобная FORTRAN (необходимая макросу) для декодирования редких карт.

В заключение, вот результат работы программы (с параметрами -b -t 1) после чтения стандартного трека IATA (посадочного талона Spanair):

Code:
Неверный параметр битов синхронизации или отсутствие тактовых импульсов, по умолчанию: 60
Неверный параметр продолжительности пика или его отсутствие, по умолчанию: 4
Неверный параметр длительности или без него, по умолчанию: 500
Параметр метода отсутствует, используется по умолчанию: пик
Чтение дорожки 1
Неверный параметр порогового уровня или его отсутствие , используя данные ...
Шум макс.
/ средняя / среднеквадратичная амплитуда: 0,003 / 0,000 / 0,001
Порог: 0,012
Время проведения: 0,267 с Макс. / средняя / среднеквадратичная амплитуда данных: 0,628 / -0,000 / 0,210 Бит
: 490, индивидуальная длительность: 0,545 мс
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000111101100000001000000100000011100111000011111000100101010110101100000010001101100010101101000000001000000110110110000001010010110001011001100000000101001010000100101001000000010000001000000100000010000001000000100000010000001000000100000010000001000000100000010000001000000100000011111100110000100000000000000000000000000000000000000000000000000000000000000000000000000000000
Start дозорных найдено
% W SPCJK 816 M 219 20E?
Конечный дозорный обнаружил, что
LRC в порядке.
 
Top