Применять шаговый двигатель в качестве генератора не пробовал только ленивый, а как насчёт его применения в роли энкодера? Легко - утверждает автор Arduino Project Hub под ником Andrewf1. Лицензия - GPL версии 3 или больше по вашему выбору.
Подключать такой импровизированный энкодер прямо к входам Arduino нельзя - напряжение до 50 В выведет микроконтроллер из строя. Нужно несложное согласующее устройство:
При вращении вала двигателя на двух выходах согласующего устройства появляются примоугольные импульсы:

По частоте этих импульсов, а также сдвигу их друг относительно друга программа определяет скорость и направление вращения импровизированного энкодера. При очень малой скорости возможен пропуск шагов. С другой стороны, такой энкодер, в отличие от контактных и оптических, не требует чистки от пыли.
Чтобы показать возможности устройства, мастер также подключает к Arduino второй шаговый двигатель с драйвером A4988, используемый по прямому назначению, а также адресное светодиодное кольцо Neopixel. Вы вращаете вал двигателя, применяемого в качестве энкодера, а второй двигатель или светящаяся точка на светодиодном кольце повторяют вращение по направлению и скорости.
Согласующее устройство позволяет использовать существующую библиотеку для обычных энкодеров без изменений. Другая библиотека предназначена для работы со светодиодным кольцом, она же подходит к лентам и другим устройствам на основе адресных светодиодов. Ссылки на скетчи с примерами - битые, но они и не обязательны, поскольку, благодаря первой библиотеке, для программиста работа с шаговым двигателем в качестве энкодера не отличается от работы с обычным энкодером. Предлагаемое согласующее устройство может быть применено в составе любых конструкций, где требуются энкодеры.
Источник (Source)