LEDの自然な光らせ方

LEDは電子工作界の基本中の基本として扱われるけど、このLEDをきれいに光らせるとなると実は難易度が高い。単純になにも考えずオンとオフにするだけなら簡単だけど、見やすくするべくゆっくりと光りだしてゆっくりと消えていくという動作をしたいというのは基本的な願望だが、意外と難しくて初心者に教えるのは出来ればごめんこうむりたい。単純に線形に電圧を増やした場合、LEDの光もまた線形に増加するけど、人間の感覚は刺激に対して対数的に感じる*1ので、線形に増加しているようには見えない。この場合、指数関数を使うのがいい。マイコンの場合計算すると遅くなるので、あらかじめ指数関数の値を配列として持っておくと便利。
同様にGUIを作るとき、アニメーションは重要。アニメーションにおいても同じで基本的な動かし方は線形ではなく指数的になる。この記事にちょうど基本中の基本の動かし方がまとまっている。
Keijiro's Dev Log — 指数関数を使ったお手軽イーズ・アウト
実体験としてどちらもやってきて、ある程度試行錯誤してきた。極めるというほどではないけども。今から振り返ってみると、どちらも人の感覚特性に対してデジタルなモノを合わせる作業である。僕がやっていると思しきメディアデザインとか呼ばれる分野では、これはインフラであるべきで、その上に本質を載せるわけだけど、意外とインフラ作るのは難しいし、極めるのも大変というのはLEDの「自然な光らせ方」だったり動きの「自然さ」ということを実現する難しさを考えて頂けると分かりやすいかと思う。
実践的な事を言えば最低レベルは指数関数。線形は絶対にダメてところ。