Подключаем цифровой штангенциркуль к компьютеру

Этот штангенциркуль я купил себе давным давно на ебее. Ну работал я им как все нормальные люди, а потом случайно наткнулся на 4-х пиновый разъем спрятанный под крышечкой. Ну и разумеется у меня возникло желание узнать для чего всё это надо. Как в последствии оказалось через этот интерфейс штангенциркуль непрерывно посылает результаты своих измерений. Вооружившись паяльником и осциллографом я стал раскуривать протокол по которому наш девайс шлёт данные. И вот что из этого получилось.

Интерфейс у него состоит из 4-х проводников. Питание (1.5в), клок, данные, земля. Разумеется нам надо три последних, ибо полтора вольта питания нам ни к чему. Изобретать свой разъем мне было лениво, и я взял паяльник и просто подпаялся к контактным площадкам.  Распиновка разъема моего штангенциркуля такая:

Если у вас немного другой штангенциркуль, то лучше самому проверить осциллографом где какой сигнал. А то мало ли чего там китайцы намудрили, я например встречал в сети другие распиновки. Ну а если нет осциллографа то методом научного тыка. Землю легко найти просто прозвонив по очереди каждый из четырёх контактов и минусовой контакт к которому подключается батарейка. И когда будете паять проводки то лучше вытащить её на всякий случай. Ну вот казалось бы теперь остается только подключить его к контроллеру, и с аппаратной частью на этом всё. Ан нет! Есть проблемка с логическими уровнями. Максимум что может выдать штангенциркуль с его крохотной батареечкой это полтора вольта. До логической единицы явно не дотягивает. Поэтому я решил усилить логическую единицу до пяти вольт при помощи несложной схемки на двух транзисторах:

Конечно данная схема инвертирует сигнал, но нас это мало волнует т.к. прошивку мы пишем сами и учесть в ней инверсию сигнала совсем не сложно. Использовать мегу32 для такого проекта слишком жирно. Хватит и обычной тини2313 с тактированием от кварца. Если затактировать от встроенного RC генератора, то могут возникнуть проблемы с передачей данных через UART. При изменении температуры или напряжения питания, частота этого генератора будет плавать и соответственно данные будут передаваться в компьютер с ошибками. В моей версии я использовал обычный COM порт. При желании можно выкинуть весь преобразователь RS-232 <-> UART на микросхеме max232 и поставить вместо него USB <-> UART. Например, вот такой у меня уже давно работает в отладчике JTAG ICE. Теперь с аппаратной частью покончено и настало время поговорить о протоколе по которому штангенциркуль выдает данные. По началу он взорвал мне мозг, а потом оказалось что всё очень просто. Для начала посмотрим на осциллограмму:

Не трудно догадаться что верхний сигнал это данные, а нижний тактовый сигнал.  Паузы через каждые 4 бита ввели меня в заблуждение, я аццки затупил и не догадался что это самый обычный SPI!  И в результате сам того не осознавая замутил программную реализацию этого интерфейса :-)  Такие посылки данных штангенциркуль выдает 4 раза в секунду. Каждая посылка состоит из 3 байт. Сначала передается младший байт. Внутри байта порядок следования бит тоже начинается с младшего. Первым приходит младший бит а затем страшие.  Первые два байта содержат непосредственно данные об измерениях в сотых долях миллиметра. Третий байт содержит бит-признак отрицательного числа. На осциллограмме штангенциркуль передает число 6,75 мм. Как получить это число: Для начала вспомним, что считанные данные нужно инвертировать . В результате  из считанного 00111010 10111111 11111111 получаем 11000101 01000000 00000000. Старший байт сразу можно отбросить, так как его  4-й бит сброшен, а значит результат измерений положительный. Вспоминаем, что порядок байт и бит внутри них обратный. Переворачиваем и получаем 00000010 10100011. Теперь переводим это в десятичную систему счисления и получаем число 675. Делим его на сто и получаем результат в миллиметрах. По идее можно уже в виде этих трех байт передавать результаты в комп, и заставить его расшифровывать их, но я пошел дальше и сделал вывод в нормальном виде. Результаты измерений можно просматривать в любой терминальной программе хоть в Hyper Terminal. Нужно только поставить правильный номер COM порта и выбрать скорость 9600. Стоит отметить что выдача результатов измерения происходит не постоянно, а только когда результат нового измерения отличается от предыдущего. Для более удобного просмотра результатов измерений был написан небольшой софт. По идее, он готов показать всё что приходит в порт. Сам порт нужно предварительно выбрать в окне настроек которое вызывается щелчком по главному окну программы:

Ну а для тех кому мало картинок и фотографий то вот еще небольшой ролик показывающий как оно работает:

А зачем это вообще нужно? Хм… хороший вопрос ! Я делал это just for fun, ну а на практике такое может пригодится например в самодельных станках с ЧПУ, ну или еще где-нибудь где нужно цифровое измерение чего либо. Варианты применения, вопросы и предложения принимаются в комментариях.

Скачать исходник прошивки+программу

Подключаем цифровой штангенциркуль к компьютеру: 46 комментариев

            1. Тут не Алексократ, а движок сайта позволяет подобное делать. Движки — ВордПресовские. Кстати, Медвед обнови движок, а то задолбал ругаться, что обновления требуются.

  1. С цифрового дисплея быстрее и точнее считывать информацию.

    С обычными делениями нужно порядка 2-3 сек. и более. А с дисплея 0,2 сек.
    Точность ты сразу видешь размер и тебе не надо что-то складывать и вычитать.
    Так что цифровой дисплей это хорошо.

    Применение:
    к примеру: автоматическая линия по контролю качества деталей. Задаётся дипазон в котором деталь годная и если размер в детали не попадает в годную, то и идет сигнал на на сброс детали в брак.

    ещё вариант: при контроле размеров необходимо собирать и обрабатывать статистику, чтобы понимать сколько брака, какие отклонения размеров. Это позволит быстро обрабатывать данные и принимать меры если надо.

    Также в автомобильной промышленности наверно вы знаете идут комплекты на машину скажем комплект 1, 2, 3, 4 и т.д. в каждом комплекте детали подобраны таким образом, чтобы зазоры были минимальны. Следовательно это новшество позволит быстро сортировать детали по нужным комплектам.

    И ещё море других вариантов.

    Brain on.

  2. На счет практического применения — то тот кто связан с производством такое применение измерительных средств оценит по достоинству (взяв за основу данную разработку — вполне реально соорудить пост для работника ОТК)
    Остальное — свобода фантазии и рукоприкладства.

  3. Хочу штангель с блюе тусом. Обмеряешь, к примеру какую-то железяку, а данные автоматом заносятся в таблицу. Надо только продумать удобный пользовательский интерфеец.

  4. Или ещё — можно сделать плагин для КАДов, который будет хватать данные со штангеля и подставлять куда надо. Или просто фоновое приложение, которое будет эти данные копировать в виндоый буфер. Это же сколько косяков удастся избежать, которые часто бывают из-за обычных опечаток.

  5. Многоуважаемый Медвед, выложи, пожайлуста, сюда точную фамилию твоего штангеля. Я давно думал купить подобную щтуковину, но теперь согласен только на такой, как у тебя. Ибо неизвестно, есть ли у других какой-то интерфейс для вывода данных. И, если даже он есть, то он может оказаться непохожим на твой, и тогда придётся самому его расколдовывать.

  6. Частота передачи значения на самом деле ограничена 4 раза по 3 байта (96 бита/с) или все таки максимальная частота передачи измерения может быть выше (если скорость интерфейса 9600 бит/с)?

    P.S. Допустим значения длины меняются 400 раз в секунду с минимальным шагом в 10 мкм

    1. Ни каких точных цифр не скажу так как не знаю. Знаю что результат измерения он выплёвывает не далеко мгновенно но довольно быстро (по человеческим меркам).

  7. Нувот! Разжился таки наконец этим замечательным девайсом. Теперь встала во весь рост задача подключения к кампутеру. Но хочется, чтобы он при этом оставался автономным. Т. е., никаких верёвок, только дистанционно. Теперь проблема — как реализовать. Вот думаю, нужен ли тут Bluetooth, или всё гораздо проще? Ведь штангель должен только передавать, причём довольно медленно и только нули и единицы. Может быть, просто сделать примитивный генератор на 1 транзюке и передавать 1цы на одной частоте, а нули на другой? Ну, или как-то ещё, не заморачиваясь ни на какие протоколы и не покупая никаких Bluetooth-модулей. Ведь передавать-то надо всего ничего — 4 байта за раз и, к тому же — на расстояние не больше 2..3 метра.

    1. Ну блютус это уж слишком круто. на худой конец пару дешевых радиомодулей или сам можешь попробовать запилить! Гугли «однокомандную аппаратуру радиоуправления».

  8. У одной харьковской фирмы (не буду рекламировать) есть готовое решение по передаче результатов измерений по проводам и различным беспроводным интерфейсам в т.ч. Bluetooth, Wi-fi и на частоте 400МГц. Как-то юзал ШЦЦ, подключался подобно описанию из статьи т.е. через преобразователь (с USB в COM). ПО дает возможность передавать результаты однократного измерения, или через определенный интервал времени. Также прога загоняет результаты в Excel формируя протокол измерений.

  9. Сделал все, как написано и нарисовано. Не работает, светодиод мигает(при перемещении штангеля), а в проге одни нули, что сделать? Очень нужен данный девайс.

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