言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

Arduino に LED を繋げる

P1020984

世の中にはマイコンに何百 mA もかけて平気な方もいらっしゃいますが、普通は出力を取り出して何かをさせる時色々な方法でマイコンに大電流を流さないようにします。という事で Arduino に LED を真面目に繋いでみます。以下は例によって見よう見まねで書いているだけなので間違っていたら教えて下さい。

LED と直列に繋げる抵抗値を求める。

まず私のように小学生でオームの法則を習っていただけの人には、そもそも LED の振る舞いが理解出来ません。抵抗や電球のような物は電圧を高くすればするほど電流も高くなり、それに応じて光や熱を発します。しかし LED というのはそうではなくて、かけられる電圧がだいたい決まっていて、それ以上かけると電流がむちゃくちゃ沢山流れてしまい壊れてしまうという性質があります。

実際にどのくらいの電圧をかけるとどのくらい電流が流れるのかは面白い問題ですが、とりあえず回路を設計する時には LED にかかる電圧は一定と考え、欲しい明るさ(= 電流) に応じて直列に抵抗を入れます。実際には電圧が一定というわけは無いのですが、だいたいそう考えて OK らしいです。

例えばたまたまここにある LED は順方向電圧が 3.5 V で 20mA ほど流すと良いとあります。Arduino の電源は 5V なので、直列に入れる抵抗にかかる電圧は 5V - 3.5V = 1.5V になります。説明書通り 20mA 流すとすると 1.5V ÷ 20mA = 75Ω の抵抗があれば丁度良いという事になります。

P1020986

トランジスタで増幅して LED に繋げる

さて、あとはこの LED をマイコンに繋げるだけですが、マイコンの出力端子というのはあまり大きな電流が流れるようには出来ていません。この場合は Arduino の出力端子には 40mA まで流すことが出来るので全然 OK なのですが、まあ練習のためにトランジスタで増幅して LED に繋いでみます。

まずトランジスタの選び方ですが、これくらい小電力のスイッチに使うくらいならラジオ工作に使うような物で大丈夫です。買う時に注意しないといけないのはトランジスタには NPN と PNP があって、普通は NPN を使います。たまたま手元にあった 2N3904 のデータシートを確認してみます。

  • VCEO: 40 V コレクタ-エミッタ間電圧
  • IC: 200 mA 流せる電流
  • hFE: 30 から 300 くらい? (増幅率)

電流や電圧は大丈夫そうです。増幅率 hFE は条件によって色々書いてあって、ややこしいのでまあだいたい 50 という事にします。コレクタ-エミッタ間に 20mA 流したいのでベース-エミッタ間は 0.4mA 以上あれば良いという事になります。と言う事で、Arduino の端子には 5V ÷ 0.4mA で 12.5KΩ の抵抗があれば丁度良いという事になりました。

実際は桁さえ間違えなければだいたい動くというアバウトな物なので、LED に 100Ω、Arduino の出力に 10KΩの抵抗を取り付け、ちゃんと動く事を確認しました。テスタで測るとそれなりに丁度良い電流になっているようです。これで生まれて始めて自分でトランジスタ回路を設計しました!