В производстве и на конвейерных линиях часто возникает задача подсчета продукции или операций оборудования. Во многих случаях станки уже имеют комплекс аппаратных и программных средств, позволяющих получить данную информацию. Также существуют специализированные счетчики, адаптированные под конкретную задачу или оборудование. Но при наличии разнотипного оборудования затраты на программное сопряжение становятся существенными. Хотелось бы иметь простой универсальный счетчик, который легко адаптируется под разные задачи и передает события на сервер для дальнейшей аналитики. Об опыте разработке такого счетчика и пойдет речь в данной статье.
![](https://habrastorage.org/getpro/habr/upload_files/819/981/027/81998102726629a9ae26acb56de9c39d.jpg)
Оптические датчики и их особенности
Чаще всего при подсчете продукции или отслеживании механического перемещения внешним датчиком используются оптические датчики барьерного, рефлекторного или диффузионного типа.
![Рисунок 1. Типы датчиков (И - источник, П - приемник, О - объект). Рисунок 1. Типы датчиков (И - источник, П - приемник, О - объект).](https://habrastorage.org/getpro/habr/upload_files/436/dfa/d97/436dfad978b404334a4d5411f5c20b08.jpg)
Принцип работы барьерного датчика очень простой - имеются разнесенные в пространстве источник света и приемник, между ними проходят объекты, тем самым закрывая источник света от приемника. Полученный сигнал с фотоприемника коррелирует с прохождением объекта и практически не требует обработки. Однако системы с таким датчиком не лишены недостатков - обычно это несколько модулей, требуется прокладка кабелей и юстировка оптической системы. В случае рефлекторного и диффузионного типа датчиков установка проще, так как источник и приемник находятся в одном корпусе. Рефлекторный датчик принимает отраженный от объекта или специальной отражающей метки свет, а диффузионный - рассеянный, учитывая при этом его интенсивность. Но для датчиков этих типов полученный сигнал требует дальнейшей обработки. Вне зависимости от выбранного типа датчика, для счета обычно используется независимый микрокомпьютерный или микропроцессорный блок как отдельное устройство.
Первый прототип датчика
Так как нам хотелось бы иметь устройство в едином корпусе, максимально адаптируемое под разные задачи, было решено: во-первых, использовать датчик работающий на отражение, во-вторых, реализовать блок подсчета на встроенном компьютере.
За отправную точку было решено взять аналоговую часть универсального тахометра, который работает на отраженном свете. В этом случае на движущийся механизм (например, вал) крепится яркая светоотражающая метка, наводится луч света, и прибор показывает частоту вращения. Источником света может выступать как лазер, так и обычный светодиод. В первом прототипе нашего счетчика импульсов за источник света был взят светодиод, использовалась линза с фокусным расстоянием 35 мм. На одном операционном усилителе был собран компаратор, на другом буферный элемент. Также была собрана цепочка, обеспечивающая плавающий порог срабатывания компаратора.
Принципиальная схема
Испытания показали работоспособность в диапазоне 10-30 см с очень контрастными метками (использовали световозвращающий скотч). Но такой результат нас еще не устраивает, так так датчик на просвет работает на значительно больших расстояниях. Также система оказалась чувствительна к включению/выключению освещения в помещении, и при использовании подобного подхода от этого недостатка избавиться не получится.
Второй прототип датчика
В следующей версии для улучшения чувствительности и расстояния срабатывания датчика добавили гистерезис, настраиваемый с помощью подстроечного резистора. Остальные элементы были подобраны эмпирически в предыдущих опытах.
Принципиальная схема
Второй прототип работал лучше предыдущего - увеличилось расстояние срабатывания и снизились требования к отражающим характеристикам меток. Однако все еще имеется ряд проблем. Во-первых, на низкой скорости движения объектов был замечен пропуск импульсов. Это связано с тем, что схема плавающего порога успевала подстроиться под изменения. Во-вторых, при глянцевой поверхности объекта счетчик давал много ложных срабатываний, так как не хватало гистерезиса. Но поднимать гистерезис бесконечно нельзя, система просто перестанет реагировать на обычные метки. И в-третьих, что самое печальное, в некоторых случаях счетчик ловил пульсацию бюджетного освещения в производственных помещениях.
Третий прототип датчика
В результате проведенных опытов стало понятно, что нельзя обойтись без дополнительной настройки системы, которую можно осуществить только с помощью микроконтроллера. Также для исключения влияния помех от фонового освещения решили добавить модуляцию опорного сигнала и преобразование Фурье на приемнике. Корпус уже был разработан и изготовлен на предыдущих этапах, и нам хотелось вписаться в его габариты. Так выбор пал на практически единственный вариант - STM32G030J6M6 Cortex - M0+ c ADC 2.5Msps в корпусе SOIC-8. Отличное решение для непрерывной обработки данных от АЦП. Общение с микроконтроллером осуществляется по шине I2C.
Принципиальная схема
На операционном усилителе собран трансимпедансный усилитель тока фотодиода. Лазер модулируется дискретным сигналом от таймера, потому что в данном случае нет необходимости получать чистый синус. Для совместимости с предыдущими решениями был сделан дискретный вывод для использования аппаратного счетчика событий (1й пин разъема P1), а конфигурация осуществляется один раз при старте системы. Таким образом, сохраняется полная преемственность с уже написанным ПО.
В микроконтроллере реализованы генерация сигнала ШИМ, обработка оцифрованных данных и общение по I2C. За генерацию ШИМ отвечает таймер, синхронизированный с АЦП. Данные передаются в память по DMA и обрабатываются по половинам - пока заполняется первая половина буфера, вторая анализируется. Сам алгоритм обработки данных получится следующий:
![Рисунок 5. Алгоритм обработки данных Рисунок 5. Алгоритм обработки данных](https://habrastorage.org/getpro/habr/upload_files/03b/21f/d70/03b21fd706b288ac82caf2cb3d962d10.jpg)
Микрокомпьютер
С оптическим датчиком разобрались, теперь вернемся к самому устройству. Помимо датчика, нам также нужно реализовать подсчет импульсов и отправку данных на сервер для дальнейшей аналитики. Со всем этим справится одноплатный компьютер. Основные требования к нему следующие:
возможность запускать программу на Python 3,
место для пары сетевых библиотек,
интерфейсы Ethernet и Wi-Fi для связи с сервером,
питание по micro USB или PoE,
производительность - не критично,
время включения - не более 2 минут,
хранилище данных не требуется, так как мы хотим передавать их на сервер, и буфера в оперативной памяти будет достаточно.
Сначала мы использовали Orange Pi zero, однако, учитывая их немалые габариты и невозможность нормально сделать PoE, решено было поискать другие варианты. Так взгляд пал на одноплатный компьютер VoCore, характеристики которого полностью подходили под задачу. Изучив предложения на китайском рынке, был найден очень похожий вариант выпускаемый массово - процессор RT5350, 32Mb RAM, 8/16Mb Flash.
![Рисунок 6. Одноплатный компьютер VoCore. Рисунок 6. Одноплатный компьютер VoCore.](https://habrastorage.org/getpro/habr/upload_files/e37/ec8/1f0/e37ec81f08358b11a5040cf56935c8b0.jpg)
Он немного больше, чем оригинальный VoCore, зато под модулем остается место для размещения компонентов, а также у модуля есть удобный разъем для подключения к основной плате. Схематика незначительно отличается от оригинального VoCore, так что конфигурацию от VoCore можно легко адаптировать под китайского товарища.
Конструктив
![Рисунок 7. 3Д модель счетчика. Рисунок 7. 3Д модель счетчика.](https://habrastorage.org/getpro/habr/upload_files/b60/0fb/65e/b600fb65eb1a8e3cbb2172a82599dd0c.jpg)
Для удобство калибровки системы было решено дать одну степень свободы оптическому датчику, разместив его в отдельной поворотной голове.
![Рисунок 8. Поворотная часть корпуса. Рисунок 8. Поворотная часть корпуса.](https://habrastorage.org/getpro/habr/upload_files/9cb/4c7/606/9cb4c7606841b50b854e1fe7f348d4f6.jpg)
От люфта и случайного поворота защищает пружина и фрикционная шайба. Для большинства задач этого оказывалось достаточно. Материнская плата, модуль PoE и сам компьютер расположены максимально компактно в основной части корпуса.
![Рисунок 9. Основная часть корпуса. Рисунок 9. Основная часть корпуса.](https://habrastorage.org/getpro/habr/upload_files/8d4/038/0df/8d40380df762c4b05e55c226f7898261.jpg)
Так как партии пока относительно небольшие корпус изготавливается методом SLS печати.
Итак, в итоге у нас получилась следующая архитектура устройства:
вычислительный модуль (одноплатный компьютер),
основная плата, на которой расположены разъемы Ethernet, USB, I2C, светодиоды и кнопка,
плата питания (устройство может питаться как от microUSB так и от PoE).
Подсчет срабатываний
Теперь пара слов о том, как реализован подсчет срабатываний датчика. Независимо от типа датчика, алгоритм подсчета импульсов остается одинаковым. Выход датчика подключается к GPIO процессора. Количество импульсов подсчитывалось через GPIO interrupt. Для этого требуется настроить GPIO на вход и включить прерывания. Об этом хорошо написано, например, тут. Число срабатываний можно посмотреть командой cat /proc/interrupts | grep gpiolib. Если же требуется реагировать на каждое событие или записывать время его срабатывания, то уже придется написать простую программу. Данный подход хорошо себя зарекомендовал и является необходимым и достаточным источником данных для подобного класса датчиков. В случае датчика с микроконтроллером, нужно перед началом работы загрузить необходимые параметры по I2C.
Заключение
Итак, что мы имеем на выходе? Компактное устройство для подсчета импульсов с оптическим датчиком и готовой реализацией отправки данных на сервер по Ethernet или WiFi. Была реализована передача данных по MQTT. Адаптивная архитектура также позволяет легко подключать практически любой другой датчик по I2C или SPI через переходник. На данный момент имеются такие варианты счетчиков: лазерный с аналоговой обработкой сигналов, лазерный с цифровой обработкой сигналов, а также индукционный счетчик для подключения внешнего промышленного индукционного датчика. Разработанный корпус позволил осуществлять поворот оптического модуля, а также его замену на другой тип датчика. В ближайших планах хотим подключить тепловизионный датчик для мониторинга нагруженных узлов в производстве.