singoled
こんにちはコハペペです。今回はプログラムからちょっと外れて、LEDをマイコンで点滅させるときの抵抗の必要性についてです。青色LEDの時は抵抗は無くてもまあいいのですが、赤や黄色、緑の場合には、マイコンとLEDの間に抵抗が必要なんです。
理由は、LEDの色によって、耐えられる電圧が違うからです(正確には順方向電圧といいます)。色と耐圧は以下のような感じです。
  • 赤、黄、緑(黄緑):だいたい2.0V
  • 緑(高輝度):だいたい3.0V
  • 青、白、電球色:だいたい3.1V
赤、黄色、緑は耐えられる電圧が低く、青は高い傾向があります。マイコンの電源電圧は3.3V(正確には電源電圧より若干低い電圧がピンに出力されます)なので、ここに2.0Vの赤色LEDをつなぐと、電圧の差があるために、電流がたくさん流れてLEDが切れてしまうか、マイコンの出力ピンが壊れてしまう可能性があります。そこで、電圧の差を抵抗という部品に肩代わりさせて、LEDを守ってあげます。
赤、黄、緑の場合には、電源電圧3.3Vとの差の1.3Vを抵抗が肩代わりしてくれればLEDが壊れなくてすみます。同様に高輝度緑の場合には0.3V程度、青・白・電球色の場合には0.2V程度肩代わりしてくれれば壊れません。
LEDは5mA~10mA程度流せば十分に光るので、電位差の分だけ肩代わりして、くれてだいたい7mA流れるような抵抗が理想的となります。

整理すると
  • 赤、黄、緑(黄緑):だいたい1.3V肩代わりして、だいたい7mA電流が流れて欲しい
  • 緑(高輝度):だいたい0.3V肩代わりして、だいたい7mA電流が流れて欲しい
  • 青、白、電球色:だいたい0.2V肩代わりして、だいたい7mA電流が流れて欲しい
teikouledzu
となります。(「だいたい」が多いですが、コハペペ自体がだいたいなので、だいたいで計算しています)

抵抗値の求め方は、肩代わりする電圧を、流したい電流で割るだけです。
o-munohousokuled

計算すると
  • 赤、黄、緑(黄緑):だいたい200Ω
  • 緑(高輝度):だいたい40Ω
  • 青、白、電球色:だいたい30Ω
だいたいなので、赤、黄色、緑(黄緑)の場合には数100Ω、高輝度緑は100Ω程度、青・白・電球色は無くてもいいかなぁな感じに抵抗を入れればOKです。(青・白・電球色も本来ならば保護のために100Ω程度の抵抗を入れた方がいいのですが、遊びなのでブログの記事などでは省略しています。)

最近はLEDの高輝度化が進み、ごくわずかの電流で十分に明るくなってきました。mbedマイコンの書き込み機のmbedねこちゃんも、緑色の超高輝度LEDを電源の有無や書き込みのステータス表示用に使っています。そのLEDの抵抗には10kΩという結構大きい値を使っています。逆算すると30uAしか流れていません。最初は1mAくらいの抵抗にしていたのですが、まぶしすぎて10kΩに落ち着きました。
mbednekojpg

いかがでしたでしょうか。マイコンで、赤、黄色、緑のLEDを光らせる時には、抵抗を間に入れてLEDを守ってあげましょう。