Материалы
Для реализации проекта понадобится печатная плата с оптическим датчиком, Arduino (я применил тут Arduino Uno), а так же — диск энкодера.
Плата с оптическим датчиком
Схема Arduino Uno
Диск энкодера
Шаг 1. Принципы работы энкодера
Работа энкодера
Преобразование однодорожечного кода Грея в двоичный код
Таблица преобразования кода Грея в двоичный код
Когда диск энкодера вращается, оптический датчик реагирует на прохождение мимо него светлых и тёмных мест дорожки с кодом, а программа, работающая на Arduino, выполняет нахождение точной позиции диска.
Вот файлы с программным кодом:
Шаг 2. Принципиальная схема устройства
Принципиальная схема устройства
Микроконтроллер Arduino подключён к плате с оптическим датчиком 4 проводами. Речь идёт о контактах
GND
, +5V
, SDA
, SCL
.Шаг 3. Диск энкодера
Диск энкодера
Реальный диск энкодера, используемый в этом проекте, выглядит именно так.
Шаг 4. Подробнее о диске энкодера
На следующих рисунках выделена зона диска энкодера, которую анализирует оптический датчик.
Область диска энкодера, которую анализирует датчик
Область диска энкодера, которую анализирует датчик
Шаг 5. Создание диска энкодера
В основе диска энкодера лежит обычный CD-диск
Подготовка изображения для нанесения на диск
Разметка изображения
Чёрные и белые области разметки, на которые реагирует оптический датчик
Размеченный диск
Приведённые здесь изображения можно распечатать на принтере и приклеить к диску. Того же эффекта можно достичь, вручную нанеся разметку на диск.
Я пользовался 38-миллиметровой клейкой лентой разных цветов. Сначала я наклеил два разноцветных куска ленты на диск, постаравшись, чтобы края лент сошлись бы точно в центре диска. Потом, следуя разметочным линиям, вырезал участки лент. Можно, вырезав участки ленты одного цвета, приклеить их поверх соответствующих участков ленты другого цвета.
Шаг 6. Проверка параметров элементов, формирующих одношаговый код Грея, и оптического датчика
Размеры элементов и диска
Элементы оптического датчика
Шаг 7. Сопоставление кода Грея и элементов оптического датчика
Код, который нужно прочитать датчику
Код Грея, нанесённый на диск, считывается элементами датчика, угловое расстояние между которыми составляет 30 градусов. Разрешение энкодера составляет 6 градусов, то есть — 60 шагов (360/60 = 6 градусов). В ходе работы устройства получается последовательность [13, 3, 6, 2, 6, 13, 3, 6, 2, 6]. Шаг 13 соответствует 78 градусам.
Шаг 8. Варианты применения абсолютного энкодера
Я использовал абсолютный энкодер для изготовления часов.
Часы
Большие часы
Вот — несколько снимков, демонстрирующих процесс изготовления часов.
Планируете ли вы сделать какой-нибудь проект на основе абсолютного поворотного энкодера?
Комментарии (17)
Astro_Graf
03.12.2021 21:02+1Спасибо! Очень круто! Искал как-то, но толкового материала не нашел, а тут все предельно ясно.
sergej_pipets
04.12.2021 00:17+1Идея интересная. Особенно когда требуется достаточно высокая точность определения положения при недостатке места по ширине кодовой полосы.
sterr
04.12.2021 00:24Существуют ли варианты с бОльшим количеством шагов? Например 360,720?
GennPen
04.12.2021 01:47+1На сколько понял в зависимости от кол-ва детекторов. Все будет упираться на сколько точно они будут срабатывать.
Dinxor
04.12.2021 08:44+1Для высокого разрешения больше подходит классический энкодер на несколько дорожек. У кода Грея тут преимущество перед обычным двоичным кодом - секторы младшего разряда получаются вдвое шире. Промышленные энкодеры имеют разрешение в тысячи шагов.
nvidkid
06.12.2021 12:27Код Грея вообще полезная вещь. Меня однажды выручил в борьбе с "гонкой фронтов" в электрической схеме
ToRcH2565
Хабр почти торт.
Статья отличная, но как всегда чего то не хватило :)
Где подробности расчетов?) Откуда взяты значения углов? Как расчитать на иное кол-во шагов? Скрин из экселя это тоже огонь, но понятности что и к чему это не добавило ;)
Так же вызвали вопросы ваш поодсчет кол-ва шагов и последовательности.... у нас 5 разных значений повторяются 10 раз на круг? Тогда чегойта энкодер абсолютный?)
unsignedchar
Нужно по ссылкам пощелкать. Там есть немного матана, но по английски.
iShrimp
Это расстояния между точками, в которых меняется цвет.
Алгоритм их вычисления довольно нетривиален, с ним можно ознакомиться по приведённой автором ссылке.
Вообще, код Грея специально сконструирован так, чтобы он позволял определять абсолютное положение энкодера и был устойчив к дрожанию или неточному изготовлению шкалы. Это достигается благодаря тому, что каждый шаг энкодера меняет только один бит в считываемом двоичном коде.
Обычно это делается с помощью N дорожек, окрашенных наполовину чёрным и белым, и N датчиков, по одному на каждую дорожку. Здесь же весь код хитрым способом умещён в одну дорожку, а датчики стоят по окружности.
ToRcH2565
Спасибо за пояснения, про код Грея был не в курсе.
Видимо замечать ссылки - не мое, вот именно этого мне и не хватило для полного восторга от статьи :)