В этом материале речь пойдёт о физической реализации абсолютного поворотного энкодера. Разрешение этого энкодера составляет 6 градусов, то есть — 60 шагов. Этого достаточно для того чтобы сделать на его основе часы. Здесь используется одношаговый код Грея.



Материалы


Для реализации проекта понадобится печатная плата с оптическим датчиком, Arduino (я применил тут Arduino Uno), а так же — диск энкодера.


Плата с оптическим датчиком


Схема Arduino Uno


Диск энкодера

Шаг 1. Принципы работы энкодера



Работа энкодера

image

Преобразование однодорожечного кода Грея в двоичный код


Таблица преобразования кода Грея в двоичный код

Когда диск энкодера вращается, оптический датчик реагирует на прохождение мимо него светлых и тёмных мест дорожки с кодом, а программа, работающая на 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)


  1. ToRcH2565
    03.12.2021 19:27
    +4

    Хабр почти торт.

    Статья отличная, но как всегда чего то не хватило :)

    Где подробности расчетов?) Откуда взяты значения углов? Как расчитать на иное кол-во шагов? Скрин из экселя это тоже огонь, но понятности что и к чему это не добавило ;)

    Так же вызвали вопросы ваш поодсчет кол-ва шагов и последовательности.... у нас 5 разных значений повторяются 10 раз на круг? Тогда чегойта энкодер абсолютный?)

     Разрешение энкодера составляет 6 градусов, то есть — 60 шагов (360/60 = 6 градусов). В ходе работы устройства получается последовательность [13, 3, 6, 2, 6, 13, 3, 6, 2, 6]. Шаг 13 соответствует 78 градусам.


    1. unsignedchar
      03.12.2021 19:39
      +1

      Где подробности расчетов?

      Нужно по ссылкам пощелкать. Там есть немного матана, но по английски.


    1. iShrimp
      03.12.2021 20:38
      +3

      [13, 3, 6, 2, 6, 13, 3, 6, 2, 6]

      Это расстояния между точками, в которых меняется цвет.

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

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

      Обычно это делается с помощью N дорожек, окрашенных наполовину чёрным и белым, и N датчиков, по одному на каждую дорожку. Здесь же весь код хитрым способом умещён в одну дорожку, а датчики стоят по окружности.


      1. ToRcH2565
        04.12.2021 02:39
        +1

        Спасибо за пояснения, про код Грея был не в курсе.

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

        Видимо замечать ссылки - не мое, вот именно этого мне и не хватило для полного восторга от статьи :)


  1. www1999durova
    03.12.2021 21:02

    просто обалдеть


  1. Astro_Graf
    03.12.2021 21:02
    +1

    Спасибо! Очень круто! Искал как-то, но толкового материала не нашел, а тут все предельно ясно.


  1. QDeathNick
    03.12.2021 21:06

    Часы "2 оттенка серого"


  1. VT100
    03.12.2021 21:21

    Мило! Жаль, что часики только на видео.


  1. Dinxor
    03.12.2021 22:49
    +1

    Для рисования подобных энкодеров есть удобный плагин для Inkscape


  1. sergej_pipets
    04.12.2021 00:17
    +1

    Идея интересная. Особенно когда требуется достаточно высокая точность определения положения при недостатке места по ширине кодовой полосы.


  1. sterr
    04.12.2021 00:24

    Существуют ли варианты с бОльшим количеством шагов? Например 360,720?


    1. GennPen
      04.12.2021 01:47
      +1

      На сколько понял в зависимости от кол-ва детекторов. Все будет упираться на сколько точно они будут срабатывать.


    1. Dinxor
      04.12.2021 08:44
      +1

      Для высокого разрешения больше подходит классический энкодер на несколько дорожек. У кода Грея тут преимущество перед обычным двоичным кодом - секторы младшего разряда получаются вдвое шире. Промышленные энкодеры имеют разрешение в тысячи шагов.


      1. GennPen
        04.12.2021 10:55

        А если совместить код Грея с энкодером? Получается как в видео с ключевыми кадрами.


        1. Dinxor
          04.12.2021 12:14
          +1

          В смысле совместить? Я имел в виду энкодер как описано здесь


      1. MaxEkb77
        06.12.2021 12:27

        да чаще уже за пару миллионов импульсов уходит :)


  1. nvidkid
    06.12.2021 12:27

    Код Грея вообще полезная вещь. Меня однажды выручил в борьбе с "гонкой фронтов" в электрической схеме