※抵抗の値に誤りがあったので図を修正
ロータリーエンコーダ実験の続き。
ロータリーエンコーダを扱うには2本のGPIOが必要だが、アナログ入力1本でもできるんじゃないかとやってみた。ロータリーエンコーダの端子A,B,Cのうち、導通状態になるのはA-C,B-C,およびA,BとC。これらの組み合わせで図のようにRa,Rb,Rcを組み合わせると次のようになる。
解放: V
A-C: Ra/(Ra+Rc)V
B-C: Rb/(Rb+Rc)V
A,B-C: (Ra//Rb)/((Ra//Rb)+Rc)V ※Ra//Rbは並列つなぎの値

Rcは1kでAinをプルアップ、Ra=10k,Rb=4.7k。
これらをArduino UnoのADC分解能1023〜0に当てはめると
解放:1023
A-C:930.9
B-C:844.4
A,B-C:780.0
これを4bit分の分解能にすると(÷64)
解放:15
A-C:14
B-C:13
A,B-C:12
まあこうなるように抵抗値を決めたわけだが。
Arduino Uno/Arduino IDE 1.0.6でテストした。
https://gist.github.com/houmei/3625551d7013cbd2bff2159a96ebc4b3
時計回り: 15→14→12→13→15→...
反時計回り: 15→13→12→14→15→...

実験の結果、チャタリングが発生してないように見えるのだがどうだろうね?この辺はもうちょっと調べる。
Arduino Leonardo(ATMega 32U4)系だとアナログ入力はA0〜A11までの12本が使えるのでたくさん繋げそうなんだがそんなにロータリーエンコーダは持っていないのであった。以下で手配。
ロータリーエンコーダ実験の続き。
ロータリーエンコーダを扱うには2本のGPIOが必要だが、アナログ入力1本でもできるんじゃないかとやってみた。ロータリーエンコーダの端子A,B,Cのうち、導通状態になるのはA-C,B-C,およびA,BとC。これらの組み合わせで図のようにRa,Rb,Rcを組み合わせると次のようになる。
解放: V
A-C: Ra/(Ra+Rc)V
B-C: Rb/(Rb+Rc)V
A,B-C: (Ra//Rb)/((Ra//Rb)+Rc)V ※Ra//Rbは並列つなぎの値

Rcは1kでAinをプルアップ、Ra=10k,Rb=4.7k。
これらをArduino UnoのADC分解能1023〜0に当てはめると
解放:1023
A-C:930.9
B-C:844.4
A,B-C:780.0
これを4bit分の分解能にすると(÷64)
解放:15
A-C:14
B-C:13
A,B-C:12
まあこうなるように抵抗値を決めたわけだが。
Arduino Uno/Arduino IDE 1.0.6でテストした。
https://gist.github.com/houmei/3625551d7013cbd2bff2159a96ebc4b3
時計回り: 15→14→12→13→15→...
反時計回り: 15→13→12→14→15→...

実験の結果、チャタリングが発生してないように見えるのだがどうだろうね?この辺はもうちょっと調べる。
Arduino Leonardo(ATMega 32U4)系だとアナログ入力はA0〜A11までの12本が使えるのでたくさん繋げそうなんだがそんなにロータリーエンコーダは持っていないのであった。以下で手配。
![]() | SODIAL(R)10個入り12ミリメートルキースイッチロータリーエンコーダスイッチ SODIAL(R) 売り上げランキング : 30350 Amazonで詳しく見る by G-Tools |
