はじめに:面倒なのは計算じゃなくて「売っている値に落とす」ほう
LED に流す電流を決めて抵抗値を出す。オームの法則ひとつなので、計算そのものは3秒で終わります。
面倒なのはその先でした。計算で出た 345Ω という抵抗は、どこにも売っていません。
手元の抵抗セットから使える値を探して、その値に変えたら電流はいくつになるのか計算し直して、定格を超えていないか確かめる。この「理論値を現実の部品に着地させる」ところが、毎回いちばん時間を食っていました。電卓は答えを1個しか出してくれないので、値を変えるたびに最初から叩き直しになります。
というわけで、よく使う計算をブラウザの中で完結させるツールを4本作りました。理論値だけで終わらせず、E12 / E24 系列で実際に買える値と、そのときの実電流・誤差まで一気に出すのが主眼です。
この記事では、4本の紹介と、作ってみて面白かった実装の中身(E系列の丸め方と、浮動小数点で踏んだ罠)を書きます。
📝 この記事でわかること:
- 4つの計算ツールで何ができるか(記事内で実際に動かせます)
- 「E系列の実部品を提案する」機能の考え方
- Hugo の shortcode + 依存ライブラリゼロの JS でツールを量産する構成
- E系列の丸めを「差」ではなく「比」でやる理由
🧮 作ったもの:4つの計算ツール
電子工作 計算ツール にまとめてあります。どれも入力するとその場で結果が変わり、値はサーバに送らずブラウザの中だけで計算しています。
| ツール | 入れるもの | 出るもの |
|---|---|---|
| LED 電流制限抵抗 | Vcc・Vf・流したい電流 | 抵抗の理論値、E系列の直近上位、実電流、消費電力、推奨定格 |
| 分圧回路 | Vin・R1・R2 | Vout、電流、消費電力、同じ比になる E系列の抵抗ペアと誤差 |
| 555タイマー | R1・R2・C(非安定/単安定) | 発振周波数、周期、デューティ比、High/Low 時間、パルス幅 |
| RCフィルタ | R・C(または fc から逆算) | カットオフ周波数、時定数、応答時間 |
百聞は一見にしかずなので、LED の抵抗計算をここに置いておきます。計算しているのは、電源・抵抗・LED を1周つないだだけのこの回路です。
電源電圧を LED と抵抗で分け合う。図は ArduinoでLEDを光らせる より
電源の 9V のうち LED が 2.1V を食い、残りの 6.9V が抵抗にかかります。直列なので電流はどこでも同じ 21mA。だから「流したい電流」を決めれば抵抗値が決まる、という順序になります。値をいじると結果がその場で変わります。
LED は抵抗ではなくダイオードなので、かける電圧を少し上げただけで電流が一気に増えます。だから「何ボルトかければいいか」で考えると壊す。発想を逆にして、先に電流を決めて、その電流が流れるように抵抗で調整するのが電流制限抵抗です。電源電圧のうち LED が食う Vf を引いた残りがまるごと抵抗にかかるので、あとはオームの法則をそのまま当てはめるだけになります。
R = \frac{V_{CC} - V_F}{I_F}初期値は 5V 電源・Vf = 2V の赤色 LED に 10mA です。理論値 300Ω に対して E12 系列の直近上位が 330Ω、そのとき実際に流れるのは 9.091mA、抵抗の発熱は 27.27mW ——という具合に、買い物と実装の判断に必要な数字がまとめて出ます。
理論値が 300Ω のとき、E12 系列の候補は下が 270Ω、上が 330Ω です。このツールは必ず大きいほうを選びます。抵抗を大きくすれば電流は設計値より減る、つまり LED を壊さない側に外れるからです。逆に 270Ω を選ぶと電流は設計値より増えます(それが定格内なら問題ありませんが、意識して選ぶべきところです)。
💡 計算がずれるとしたら、抵抗ではなく Vf のほう
出た抵抗値どおりに組んでも、実測の電流が計算と合わないことがあります。原因はたいてい抵抗ではなく Vf の側です。Vf は定数ではなく、条件で動く値だからです。
- データシートの Vf には測定条件がついている — 「Vf = 2.1V」には「If = 20mA のとき」という但し書きが必ずあります。5mA しか流さなければ Vf は 0.1〜0.2V ほど下がり、抵抗にかかる電圧が計算より大きくなるので、実際の電流は設計値より増える方向にずれます
- 同じ型番でも個体差がある — LED は明るさや Vf で選別(ビニング)される部品で、データシートには min / typ / max が載っています
- 温めると Vf は下がる — 温度係数はおおむね −2mV/℃。連続点灯で LED 自身が温まると Vf が下がり、電流が増え、さらに温まる向きに働きます
だから Vcc − Vf の差は大きめに取っておくほうが安定します。差が 1V 以上あれば Vf が 0.2V 動いても電流の変化は2割程度ですが、差が 0.3V しかないと同じ 0.2V で電流が倍以上変わります。
| 色 | Vf の目安 | 補足 |
|---|---|---|
| 赤・黄・橙 | 約 1.8〜2.2V | 3.3V 電源でも余裕がある |
| 緑 | 約 2.1〜3.4V | 黄緑系は低め、純緑系は高め |
| 青・白・紫 | 約 3.0〜3.4V | 3.3V 電源だとほぼ余裕なし |
3.3V で白色 LED を光らせる構成が扱いにくいのは、この比の問題です。ツールも Vcc と Vf の差が 0.5V を切ると注意を出します。
並列につないだ LED を1本の抵抗でまとめて受けると、Vf の低い個体に電流が集中して、その1個だけが明るく光り、先に劣化します。並列にするなら LED ごとに抵抗を1本ずつが原則です。マイコンのピンで直接光らせるときは、1ピンあたり・ポート全体・IC 全体の合計電流の上限も確認してください。
🔍 いちばん作りたかったのは「E系列の実部品を出す」ところ
市販の抵抗は連続した値では作られていません。E12 系列なら 1.0 / 1.2 / 1.5 / 1.8 / 2.2 / 2.7 / 3.3 / 3.9 / 4.7 / 5.6 / 6.8 / 8.2 の12段階に10の冪を掛けた値だけ、E24 系列でもその倍の細かさしかありません。
だから電子工作の設計は、いつも「理論値を出す」→「売っている値に丸める」→「丸めた結果どうなるか確かめ直す」の3ステップになります。この3ステップ目を人間がやらされるのが不満だったので、ツール側にやらせました。
分圧回路のツールがいちばんわかりやすいので、こちらも置いておきます。計算しているのは、抵抗2本を縦に積んで真ん中から取り出すだけのこの回路です。
上が R1、下が R2。中点の Vout には何もつながない(開放)状態が、ツールの計算している回路です。
分圧回路は「同じ電流が R1 と R2 を直列に流れているだけ」の回路です。直列なので電流はどこでも I = Vin ÷ (R1 + R2) で、その同じ電流が R2 を通るときの電圧降下 I × R2 が、そのまま Vout になります。
V_{out} = V_{in} \times \frac{R_2}{R_1 + R_2}式に出てくるのは Vin と「R2 が全体に占める割合」だけです。つまり抵抗の絶対値ではなく比だけで出力電圧が決まります。10kΩ と 10kΩ でも 1MΩ と 1MΩ でも Vout は同じ半分で、違うのは流れる電流(=消費電力とノイズ耐性)だけ。分圧のいちばん大事な性質がここです。
5V を 3.3V に落としたい、という定番の問題
分圧で 5V から 3.3V を作る場合、必要な比は 3.3 ÷ 5 = 0.66 です。上のツールで R1 = 10kΩ、R2 = 19.4kΩ(理想値)と入れてみると、E系列でどう組めるかが出ます。
| 系列 | 提案されるペア | そのときの Vout | 理想比とのずれ |
|---|---|---|---|
| E12 | 12kΩ + 22kΩ | 3.235 V | −1.94 % |
| E24 | 47kΩ + 91kΩ | 3.297 V | −0.07 % |
E12 の在庫だけで組むと約2%ずれます。E24 まで許すと 0.07% まで詰められる。この差を見てから「E24 を買い足す価値があるか」を判断できるのが、作ってよかったと思っている部分です。ちなみに 2% のずれは、抵抗そのものの製造誤差(E12 は ±10%、E24 は ±5%)に比べればずっと小さいので、たいていの用途では E12 で十分という判断にもなります。
🚫 分圧が使えない2つの場面
分圧の出力に何かをつなぐと、その負荷抵抗が R2 と並列に入ります。合成抵抗が下がるぶん Vout も下がるので、目安として後段の入力インピーダンスが R2 の10倍以上ないと計算値から外れていきます。これが具体的に牙をむくのが次の2つで、どちらも定番の失敗です。
① 電源の降圧に使う。 「5V しかないから分圧で 3.3V を作ってセンサに供給しよう」は動きません。負荷が 10mA 食えばその 10mA は R1 を通って来るしかなく、R1 での電圧降下がそのぶん増えて Vout が沈みます。しかも消費電流が変動すれば Vout も一緒に揺れます。降圧には三端子レギュレータや DC-DC コンバータを使ってください。分圧の出番は「信号を測る」ときだけです。
② 速い信号のレベル変換に使う。 分圧の抵抗と、配線や次段の入力容量が、そのまま RC ローパスフィルタを作ってしまいます。R1 = R2 = 10kΩ(信号から見れば並列で 5kΩ)に対して負荷容量が 20pF あれば時定数は 0.1µs、10% から 90% まで立ち上がるのに約 0.22µs かかります。UART の 9600bps なら1ビットが 100µs もあるので問題ありませんが、1MHz の方形波は High が 0.5µs しかないので立ち上がりきる前に次が来ます。SPI や I2C では素直にレベル変換 IC を使ってください(I2C はオープンドレインで両側がプルアップされているため、そもそも抵抗分圧では組めません)。
どのくらい鈍るかは、次の RC フィルタのツールで確かめられます。R には R1 と R2 の並列値を、C には推定した負荷容量を入れてみてください。
〰️ RCフィルタ:fc を出すより、fc から逆算するほうが多い
抵抗1本とコンデンサ1本だけの1次フィルタです。カットオフ周波数は R と C だけで決まります。
f_c = \frac{1}{2\pi R C}この式が分圧とまったく同じ構造から出てくるのが気持ちのいいところです。R と C の直列に電圧をかけて途中を覗いているだけで、下側の部品が抵抗ではなくコンデンサになっただけ。コンデンサのインピーダンス Zc = 1/(2πfC) が周波数で変わるせいで、分圧比が周波数で変わる——それがフィルタの正体です。カットオフは「R と Zc がちょうど等しくなる周波数」として定義されるので、R = 1/(2πfC) を f について解けば上の式になります。C 側から取れば LPF、R 側から取れば HPF ですが、式に並び順は出てこないので fc はどちらでも同じ値です。
左が LPF、右が HPF。並べてみると、違いは R と C の位置が入れ替わっていることだけだと分かります。部品も結線の形も同じで、どちらを下側に置くかで通す側が決まります。
同じ信号を両方に通すと、残るものがはっきり入れ替わります。下のツールの初期値そのまま(R = 10kΩ・C = 0.1µF、fc = 159 Hz)で計算するとこうなります。
① の入力は同じでも、C 側から覗けば ②、R 側から覗けば ③ になります。④ のとおり fc でバッサリ切れるわけではなく、fc から離れるほど徐々に効くのが1次 RC の特徴です。
逆算モードを付けたのは、実際の設計が「fc から入る」ことのほうが多いからです。手持ちのコンデンサは 0.1µF と 1µF くらいしかないので、先に C を決めて R を逆算する。この順序を電卓でやると式を変形してから叩き直しになるので、モードを切り替えるだけで済むようにしました。
fc は振幅がおよそ 0.707 倍(−3dB)になる周波数です。半分になる点でも、そこから上がバッサリ消える点でもありません。1次 RC フィルタの傾きは 1オクターブあたり −6dB(周波数10倍あたり −20dB)と非常にゆるやかで、fc の10倍の周波数でようやく 1/10 になる程度です。
ソフトの平均化では消せないノイズがある
「ノイズはあとから移動平均で均せばいい」——たいていは正しいのですが、ADC の前でしか対処できないノイズが1種類だけあります。折り返し(エイリアシング)です。
サンプリングには「サンプリング周波数の半分より高い成分は、低い周波数の偽物として現れる」という性質があります。毎秒100回で読んでいるところに 60Hz のハムが乗ると、それは 60Hz のままでは現れず |60 − 100| = 40Hz のゆっくりした揺れとして記録されます。厄介なのは、こうなった時点で本物の 40Hz の信号と見分けがつかないことです。移動平均をかけても FFT をかけても分離できません。ADC の前に入れる RC を「アンチエイリアシングフィルタ」と呼ぶのはこのためです。
ここで前述の「傾きがゆるやか」が効いてきます。fc をサンプリング周波数の半分ちょうどに置いても、そこはまだ 0.707 倍にしかなっていません。
| fc に対する周波数 | 1次RCでの減衰 |
|---|---|
| 1 倍(fc そのもの) | 0.71 倍 |
| 6 倍 | 約 0.16 倍 |
| 10 倍 | 約 0.10 倍 |
| 100 倍 | 約 0.01 倍 |
100Hz で読むなら fc は 10Hz 前後(ナイキストの 1/5)に置く、というのがひとつの目安です。ただし結果欄の時定数 τ を見れば分かるとおり、fc を下げるほど応答は鈍くなります。ノイズと追従性のトレードオフを、周波数と時間の両方の数字を見ながら決められるようにしたかったので、τ と 10→90% の応答時間も同時に出しています。
⏱️ 555タイマー:データシートの 1.44 は ln2 だった
同じ RC の充放電を、フィルタではなく発振に使うのが 555 です。ツールは非安定(発振)と単安定(ワンショット)をモードで切り替えます。非安定で計算しているのはこの結線です。
無安定マルチバイブレータ。図は NE555N(CMOS版555タイマーIC)の使い方 より
時間を決めているのは R1・R2・C1 の3つだけで、これがそのままツールの3つの入力欄です。回路図には C2 と C5 もありますが、C2 は CONT ピンのバイパス、C5 は電源のパスコンで、大きくしても遅くなりません。
初期値は NE555N の実験記事 で実際に組んだ定数(R1 = R2 = 10kΩ、C = 10µF)です。約 4.81Hz・デューティ比 66.67% になり、記事の実測 5.083Hz・66.62% と部品誤差の範囲で一致します。
1.44 の正体
555 の中では、C1 の電圧が 1/3 VCC と 2/3 VCC の間を往復しています。充電は R1 と R2 を通って、放電は R2 だけを通って行われます。
上がコンデンサ電圧、下が出力。上端 2/3 VCC で折り返して放電に、下端 1/3 VCC で折り返して充電に切り替わる。図は NE555N(CMOS版555タイマーIC)の使い方 より
上りの1本が tH、下りの1本が tL です。カーブが寝ているのは RC 充電が指数関数だからで、1/3 VCC から 2/3 VCC までにかかる時間を解くと、きれいに ln2(≈ 0.693)倍の RC が出てきます。
t_H = \ln 2 \times (R_1 + R_2) C \qquad t_L = \ln 2 \times R_2 C周期はこの2つの和なので T = ln2 × (R1 + 2R2)C、周波数はその逆数です。ここで 1 ÷ ln2 = 1.4427 が出てきます。データシートに載っている 1.44 は、ln2 の逆数を丸めた値でした。単安定モードの 1.1 も同じで、0V から 2/3 VCC まで充電する時間を解くと出てくる ln3(≈ 1.0986)の丸め値です。ツールは丸める前の ln2 / ln3 で計算しています(差は 0.2% 未満で、部品誤差 ±5〜20% に比べれば無視できます)。
充電経路が R1 + R2、放電経路が R2 だけということは、High の時間は必ず Low より長いということでもあります。この基本回路のデューティ比が 50% を下回れず、R1 = R2 でぴったり 2/3 ≈ 66.7% になるのはそのためです。
計算どおりにならない主犯はコンデンサ
組んでみたら周波数が2割ずれていた、という話の原因はたいてい R ではなく C です。抵抗は誤差 ±5% の品でも実測はもっと近いことが多いのに対して、コンデンサは種類によって、そもそも表示どおりの容量が出ないからです。
- 積層セラミックの DC バイアス特性 — X5R・X7R・Y5V などの高誘電率系は、直流電圧をかけると容量が減ります。定格 25V の部品に 5V かけただけで2〜3割落ちることも珍しくなく、しかもデータシートのグラフを見にいかないと分かりません。「タイミング用に 10µF の積セラを買ってきた」で周波数が上振れするのは、たいていこれです
- 電解コンデンサの誤差と漏れ電流 — 容量誤差 ±20% は普通で、漏れ電流は 555 から見ると「C と並列に抵抗がぶら下がっている」のと同じです。R も C も大きくして低い周波数を狙うほど目立ちます
- 素性がいいのはフィルムか C0G / NP0 — 誤差 ±5% 前後で DC バイアス依存がほぼありません。大容量が必要で電解を使わざるをえないときは、周波数は可変抵抗で追い込む前提にしておくのが現実的です
実測がずれたら、まず C を疑うのが早道です。R はテスターで測れますが C の実力値は測りにくいので、実測周波数をツールに当てはめて C を逆に求めれば、表示値からどれだけ離れているかが分かります。上の実験記事では計算 4.81Hz に対して実測 5.083Hz(+5.7%)で、これは C が表示より小さめだった側のずれ方でした。
📐 なぜ「差」ではなく「比」で丸めるのか
E系列に丸めるとき、いちばん近い値をどう選ぶか。素直に書くなら「差がいちばん小さいもの」ですが、これは正しくありません。
理論値がちょうど 3.0(の桁)だったとします。E12 の候補は下が 2.7、上が 3.3。
- 差で見ると:3.0 − 2.7 = 0.3、3.3 − 3.0 = 0.3 で引き分け
- 比で見ると:3.0 ÷ 2.7 = 1.111、3.3 ÷ 3.0 = 1.100 で 3.3 のほうが近い
E系列はそもそも対数目盛りで並んでいます。±10% という誤差の表し方自体が比なのだから、近さも比で測るのが筋です。実装では対数を取った距離で比べています。
// x に「比として」いちばん近い E系列の値を選ぶ
var best = s[0], bestErr = Infinity;
for (var i = 0; i < s.length; i++) {
var err = Math.abs(Math.log(m / s[i])); // 差ではなく対数距離
if (err < bestErr) { bestErr = err; best = s[i]; }
}
分圧ペアの探索も同じ考え方で、入力した比 R2 ÷ (R1 + R2) を保ったまま E系列の組み合わせを総当たりし、比の誤差が最小になるペアを選んでいます。
🏗️ 仕組み:外部ライブラリなし・1ツール=1ファイル
作りとしては、Hugo の shortcode ひとつと、素の JavaScript だけです。計算ツール本体は依存ライブラリがゼロで、数式の表示だけサイトにすでに入っている KaTeX を使い、無ければテキストにフォールバックします。
tool ショートコード 1行"] --> SC["shortcodes/tool.html
ビルド時に JS の実在を確認"] SC --> DIV["空の div を出力
data-ew-tool 属性つき"] SC --> JS["ew-tools.js + led-resistor.js
外部ファイルを defer で読み込み"] DIV --> UI["入力欄と結果表示を組み立て
入力のたびに compute を呼ぶ"] JS --> UI
共通ランタイムはページに1回、ツール定義はツールごとに1回しか読み込まれません。同じ記事にツールをいくつ置いても JS は重複しない仕組みです。この記事は4つのツールを全部埋め込んでいますが、読み込まれているのは共通ランタイム1本+ツール定義4本の5本だけです。
ツール1個を足すのに書くのは、定義ファイル1本だけです。共通ランタイムには手を入れません。
window.EWTools.register({
id: 'led-resistor',
title: 'LED 電流制限抵抗 計算ツール',
fields: [
{ name: 'vcc', label: '電源電圧 Vcc', value: 5, unit: 'V' },
{ name: 'vf', label: 'LED の順方向電圧 Vf', value: 2, unit: 'V' },
// units を書くと単位セレクトが出て、選ばれた倍率を掛けた値が compute に届く
{ name: 'iled', label: '流したい電流 If', value: 10,
units: [{ label: 'mA', mul: 1e-3 }, { label: 'A', mul: 1 }] }
],
outputs: [
// si: true で kΩ / mA / µW のように接頭辞へ自動整形される
{ name: 'r', label: '必要な抵抗(理論値)', unit: 'Ω', si: true, primary: true }
],
compute: function (v) {
return { r: (v.vcc - v.vf) / v.iled }; // 単位換算は済んでいるので素直に書ける
}
});
units に倍率を書いておくと、mA で入れようが A で入れようが compute には基本単位(V / Ω / F / A)で届きます。単位換算のコードを計算式に混ぜなくて済むのが、書いていていちばん楽なところでした。
記事に埋め込むのも1行です。この記事の上のほうで動いているツールも、この1行を書いただけです。
{{< tool "led-resistor" >}}
shortcode は、指定された ID に対応する JS ファイルが実在するかをビルド時に確認します。綴りを間違えるとビルドがエラーで止まるので、「本番に動かないツール枠が出る」ことが起きません。壊れるなら公開前に壊れてほしい、という考え方です。
🕳️ 浮動小数点にやられた2か所
E系列の実装で、二進浮動小数点の丸め誤差に2回やられました。どちらも「10 の冪」がらみです。
① 1000 の常用対数が 3 にならない
値がどの桁にあるかを知るために常用対数を取るのですが、これが素直にいきません。
Math.log(1000) / Math.LN10 // → 2.9999999999999996
Math.floor(2.9999999999999996) // → 2 (3 が欲しかった)
桁を1つ取り違えるので、1kΩ が「1000Ω の桁」ではなく「100Ω の桁」として扱われてしまいます。E系列の候補を並べる基準がずれるため、結果ごと狂います。対策は、床関数を取る前にごく小さい値を足しておくだけです。
var decade = Math.pow(10, Math.floor(Math.log(x) / Math.LN10 + 1e-9));
② 220Ω がぴったり 220 にならない
E系列の候補は「系列の数値 × 10の冪」で作ります。ところが、電子工作でいちばんよく見る値のひとつがきれいに出ません。
2.2 * 100 // → 220.00000000000003
8.2 * 100 // → 819.9999999999999
5.1 * 100 // → 509.99999999999994
表示だけなら有効数字で丸まるので気づきません。困るのは比較と誤差の計算のほうで、220Ω ちょうどを入力したのに「E系列との誤差 1.3×10⁻¹⁴ %」のような表示が出てしまいます。せっかくぴったりの値を選んだのに 0% と出ないのは、ツールとして格好がつきません。
対策は候補を作った時点で正規化しておくことです。
function clean(x) { return parseFloat(x.toPrecision(12)); }
有効数字12桁で文字列にしてから数値に戻すと、ゴミ桁だけがきれいに落ちます。あわせて、誤差が十分小さいときは 0 に丸めるようにしました。「合っているときは 0% と言い切る」ためだけの処理ですが、ツールの信用に直結する部分だと思っています。
✅ まとめ
- 電子工作の計算で本当に面倒なのは「理論値を売っている部品に落とす」ステップだった
- そこを自動化するために、4つの計算ツールに E12 / E24 系列の実抵抗と誤差を出す機能を入れた
- 5V → 3.3V の分圧なら E12 で −1.94%、E24 なら −0.07%。この数字を見てから部品を決められる
- 構成は Hugo の shortcode + 依存ライブラリゼロの JS。ツール追加は定義ファイル1本だけ
- E系列の丸めは「差」ではなく「比(対数距離)」で。±10% という誤差の表し方自体が比だから
- 555 のデータシートに載っている 1.44 は、ln2 の逆数を丸めた値だった。単安定の 1.1 は ln3
- RC フィルタは「fc を出す」より「fc から R や C を逆算する」ほうが実際の設計では多い。ADC の前に置くなら折り返しノイズも効いてくる
- 二進浮動小数点は 10 の冪と相性が悪い。
Math.log(1000)/Math.LN10は 3 にならないし、2.2 * 100は 220 にならない
ツールは /tools/ にまとめてあります。既存の記事のうち、計算が出てくるところにも順次埋め込んでいるので、読みながらその場で自分の部品の値を試せるはずです。
各ツールのページは使うためだけのページにしてあります。回路図と入力欄の対応、使い方の要点だけを置いて、式の由来と落とし穴はこの記事の側にまとめました。
「こういう計算もほしい」というものがあれば、定義ファイルを1本足すだけなので、気軽に増やせる状態にしてあります。
関連記事
- NE555N(CMOS版555タイマーIC)の使い方 — 555タイマーの動作原理とオシロでの実測。計算ツールの元ネタ
- 電子工作入門|ArduinoでLEDを光らせる — オームの法則で抵抗値を求める基本
- ArduinoのAD変換(ADC)徹底解説 — 分圧して測る話
- 【Arduino入門】PWMでRGBフルカラーLEDを制御 — 3色ぶんの電流制限抵抗を選ぶ話