20個のLEDを並べたやつを制御しようと色々考えていた。単純な方法は20pin分をそのままLEDに割り当てる方法だがこれはあまりにも考えがなさすぎる。4x5のマトリックスで作ったものは上手くいった。が、さらに少ないピン数でLEDを制御する方法があった。
Charlieplexing(wikipedia)
20個のLEDを制御するためには5本の制御線があればよい。A,B,C,D,Eの5本からLEDに向けて2本を選ぶと
、その組み合わせは以下のとおり。中学二年の確率でならう範囲。
AB AC AD AE
BC BD BE
CD CE
DE
極性を逆にするので
BA CA DA EA
CB DB EB
DC EC
ED
合計20通り。
配線はこのような感じ。

A,B,C,D,Eの端子はArduinoの12,11,10,9,8ピンに割り当てる。それぞれのピンから220Ωを通してLEDに接続する。
高輝度10ポイント赤色バーLEDアレイOSX10201-R(秋月電子)
A-Star 32U4 Mini ULV(スイッチサイエンス)

コードは以下:
https://gist.github.com/houmei/adcd5fbe0a910a5852b2
Charliepliexingでは同時に発光するLEDは1個なので、ダイナミック点灯をさせると数が多ければ多いほど暗くなる。また、配線が面倒くさい。
A-Star 32U4 Mini ULVは0.5Vから動作するDC-DCコンバータ内蔵のArduino Micro互換マイコンモジュール。ここでは単三電池2本の3Vで動作させた。連続運転で20Hぐらいは問題なかった。(それ以降はリセットが時々かかるような動作になる)
これでピン数が少ないマイコンでもたくさんのLEDが制御できるね。
参考:
Charlieplexing 7SEG LED by ikkeiモジュールとドライブモジュール(メモたんく)
セカンド・オピニオン 363 MCUで遊ぼう(11)
さらに応用例:
Charlieplexingと8x8ドットマトリックスLEDへの適用(ikkei)
8x8マトリクスLED Charlieplexing(Yoshiのブログ)
Charlieplexing(wikipedia)
20個のLEDを制御するためには5本の制御線があればよい。A,B,C,D,Eの5本からLEDに向けて2本を選ぶと
、その組み合わせは以下のとおり。中学二年の確率でならう範囲。
AB AC AD AE
BC BD BE
CD CE
DE
極性を逆にするので
BA CA DA EA
CB DB EB
DC EC
ED
合計20通り。
配線はこのような感じ。

A,B,C,D,Eの端子はArduinoの12,11,10,9,8ピンに割り当てる。それぞれのピンから220Ωを通してLEDに接続する。
高輝度10ポイント赤色バーLEDアレイOSX10201-R(秋月電子)
A-Star 32U4 Mini ULV(スイッチサイエンス)

コードは以下:
https://gist.github.com/houmei/adcd5fbe0a910a5852b2
Charliepliexingでは同時に発光するLEDは1個なので、ダイナミック点灯をさせると数が多ければ多いほど暗くなる。また、配線が面倒くさい。
A-Star 32U4 Mini ULVは0.5Vから動作するDC-DCコンバータ内蔵のArduino Micro互換マイコンモジュール。ここでは単三電池2本の3Vで動作させた。連続運転で20Hぐらいは問題なかった。(それ以降はリセットが時々かかるような動作になる)
これでピン数が少ないマイコンでもたくさんのLEDが制御できるね。
参考:
Charlieplexing 7SEG LED by ikkeiモジュールとドライブモジュール(メモたんく)
セカンド・オピニオン 363 MCUで遊ぼう(11)
さらに応用例:
Charlieplexingと8x8ドットマトリックスLEDへの適用(ikkei)
8x8マトリクスLED Charlieplexing(Yoshiのブログ)