А как вам вот такая вот идея?
Цельнотянуто из внутренностей промышленного валкодера. См. прилагаемый рисунок.
Цилиндр из прозрачной пленки.
При диаметре цилиндра 8 см, можем обеспечить 512 отсчетов (9 разрядов) на один оборот и ширину одной полоски - 0.5 мм - вполне разрешимо для обычной мышиной (из старой мышки с шариком) оптопары.
Поставить 9 таких оптопар - подцепить их через буфер на цифровые входы микроконтроллера - и вуаля - "точный валкодер своими руками".
Если нужно больше 360 градусов - считаем обороты внутри самого МК - максимальное количество оборотов будет зависеть только от изощренности программиста.
А точность определения поворота руля будет неизменной.
Нужно точнее - пожалуйста - ставим 10 оптопар и печатаем "цилиндр" на 1024 отсчета. 0.25 мм тоже можно разрешить при помощи той же мышиной оптопары.
Или если 512 отсчетов хватает и нужна компактность - то цилиндр будет 4 см диаметром при ширине отсчета 0.25 мм.
Правда требования к точности сборки возрастают.
512 отсчетов на оборот - это 1,4 отсчета на градус.
1024 - соответственно 2.8 отсчета на градус.
В джойстик такую "дурынду" не запихнешь - а вот в руль - вполне.
Плюсы:
- не люфтит
- почти "вечная" конструкция
- не влияют электромагнитные поля (можно использовать в конструкции руля любые металлы)
- не нужен АЦП, и соответственно нет шумов.
- полная линейность.
Минусы:
- при оборотах больше одного, нужно калибровать контроллер каждый раз при включении "от упора и до упора".
- камеру с оптопарами нужно тщательно изолировать от света.
- довольно "нестандартный" способ оцифровки угла - с точки зрения МК, этой оцифровки нет вообще - штатная прошивка MJoy8 или MJoy16 не подойдет.
P.S. Рисунок показан для шести разрядов.
P.P.S. Можно еще проще поступить - купить этот самый промышленный валкодер. Правда дороговато и сложно найти в продаже.