みなさん、こんにちは。エンジニアの皆さんは「オームの法則」を学校で習いましたよね? 「V = IR」 。あのシンプルな式。
でも、正直なところ 「式は覚えてるけど、実際の回路でどう使うかイメージできない」 って人、結構多いんじゃないですか?
実は先日、ある電子工作初心者の方が「LEDに抵抗をつけずに直接電源につないだら、一瞬で煙が出た」と嘆いていました。これ、オームの法則を「体感」できていれば絶対にやらないミスなんです。
今日は、ブラウザで動く無料ツール「オームの法則シミュレーター」を題材に、式の意味から実装、そして現場での落とし穴まで、コード付きで徹底解説します。
ざっくり本質 — 「水の流れ」で理解する
オームの法則を一言で表すならこうです。
「電圧は押す力、抵抗は邪魔する力、電流は実際に流れる量」
イメージしてみてください。
- 電圧(V) = 水道の蛇口をひねる強さ(水圧)
- 抵抗(R) = ホースをギュッと押さえる強さ(流れにくさ)
- 電流(I) = 実際にホースから出てくる水の量
蛇口を強くひねれば(電圧UP)、水はたくさん出る(電流UP)。
ホースを強く押さえれば(抵抗UP)、水は減る(電流DOWN)。
これがオームの法則の本質。シミュレーターでスライダーを動かすと、この関係がアニメーションで一目瞭然なんです。
数式で理解する — 3つの顔を持つ法則
さて、ここからは少しだけ数式に入ります。でも怖がらないでください。中学レベルの算数です。
オームの法則には3つの表現があります。測定できる値によって使い分けるんです。
V = I \times R
I = \frac{V}{R}, \quad R = \frac{V}{I}
そして、消費電力の公式もセットで覚えましょう。
P = VI = I^2 R = \frac{V^2}{R}
この $P$(電力、単位はW:ワット)が実務で最も重要。なぜなら、抵抗で消費された電力はすべて熱になるからです。
例えば、 $5V$ の電源に $10\Omega$ の抵抗をつなぐと、流れる電流は:
I = \frac{5V}{10\Omega} = 0.5A
消費電力は:
P = I^2 R = (0.5)^2 \times 10 = 2.5W
この $2.5W$ がジュール熱として抵抗から放出されます。小さな抵抗(例えば1/4W用)にこれを流すと、確実に煙が出ます。
コードで実装する ★最重要★
ここからが本題。シミュレーターの計算ロジックを、実際に動くJavaScriptコードで再現してみましょう。
このコードは、スライダーの値から電流・電力を計算し、直列・並列の合成抵抗も求めます。
/**
* オームの法則シミュレーター コアロジック
* 使い方: node またはブラウザのコンソールで実行
*/
class OhmsLawSimulator {
/**
* @param {number} voltage - 電源電圧 [V]
* @param {number[]} resistors - 抵抗値の配列 [Ω]
* @param {'series'|'parallel'} mode - 接続方式
*/
constructor(voltage, resistors, mode = 'series') {
this.voltage = voltage;
this.resistors = resistors;
this.mode = mode;
}
/** 合成抵抗を計算 */
calcTotalResistance() {
const R = this.resistors;
if (this.mode === 'series') {
// 直列: 単純な足し算
return R.reduce((sum, r) => sum + r, 0);
} else {
// 並列: 逆数の和の逆数
const invSum = R.reduce((sum, r) => sum + 1 / r, 0);
return 1 / invSum;
}
}
/** 全電流を計算(オームの法則) */
calcTotalCurrent() {
const R_total = this.calcTotalResistance();
return this.voltage / R_total;
}
/** 各抵抗の電圧降下を計算 */
calcVoltageDrops() {
const I_total = this.calcTotalCurrent();
if (this.mode === 'series') {
// 直列: 電流は共通、V = IR で各抵抗の電圧降下
return this.resistors.map(r => I_total * r);
} else {
// 並列: 電圧は共通(電源電圧と同じ)
return this.resistors.map(() => this.voltage);
}
}
/** 各抵抗の消費電力を計算 */
calcPowerDissipations() {
const I_total = this.calcTotalCurrent();
if (this.mode === 'series') {
// 直列: P = I^2 * R
return this.resistors.map(r => I_total ** 2 * r);
} else {
// 並列: 各抵抗に流れる電流は V/R
return this.resistors.map(r => (this.voltage ** 2) / r);
}
}
/** 全結果を表示 */
displayResults() {
const R_total = this.calcTotalResistance();
const I_total = this.calcTotalCurrent();
const V_drops = this.calcVoltageDrops();
const P_diss = this.calcPowerDissipations();
console.log(`=== オームの法則 計算結果 ===`);
console.log(`接続方式: ${this.mode === 'series' ? '直列' : '並列'}`);
console.log(`電源電圧: ${this.voltage} V`);
console.log(`各抵抗値: [${this.resistors.join(', ')}] Ω`);
console.log(`合成抵抗: ${R_total.toFixed(3)} Ω`);
console.log(`全電流: ${I_total.toFixed(3)} A`);
console.log(`---`);
this.resistors.forEach((r, i) => {
console.log(`抵抗R${i+1} (${r}Ω): 電圧降下=${V_drops[i].toFixed(3)}V, 消費電力=${P_diss[i].toFixed(3)}W`);
});
console.log(`総消費電力: ${P_diss.reduce((a,b) => a+b, 0).toFixed(3)} W`);
}
}
// ===== 実行例 =====
// 例1: 直列回路(電源12V, 抵抗10Ωと20Ω)
const circuit1 = new OhmsLawSimulator(12, [10, 20], 'series');
circuit1.displayResults();
console.log('\n'); // 空行
// 例2: 並列回路(電源12V, 抵抗10Ωと20Ω)
const circuit2 = new OhmsLawSimulator(12, [10, 20], 'parallel');
circuit2.displayResults();
このコード、Node.jsが入っていればコピペで即実行できます。
「直列」と「並列」で結果がどう変わるか、実際に動かしてみてください。
数値例で確かめる
では、具体的な数値で計算してみましょう。
条件: 電源電圧 $V = 12V$(車のバッテリー相当)、抵抗 $R_1 = 10\Omega$、$R_2 = 20\Omega$
直列の場合
合成抵抗:
R_{total} = 10 + 20 = 30\Omega
全電流:
I = \frac{12V}{30\Omega} = 0.4A
電圧降下(各抵抗にかかる電圧):
- $R_1$: $V_1 = 0.4A \times 10\Omega = 4V$
- $R_2$: $V_2 = 0.4A \times 20\Omega = 8V$
- 確認: $4V + 8V = 12V$ ✓
消費電力:
- $R_1$: $P_1 = (0.4)^2 \times 10 = 1.6W$
- $R_2$: $P_2 = (0.4)^2 \times 20 = 3.2W$
- 合計: $4.8W$
並列の場合
合成抵抗:
\frac{1}{R_{total}} = \frac{1}{10} + \frac{1}{20} = 0.1 + 0.05 = 0.15
R_{total} = \frac{1}{0.15} \approx 6.667\Omega
全電流:
I = \frac{12V}{6.667\Omega} \approx 1.8A
各抵抗の電流:
- $R_1$: $I_1 = \frac{12V}{10\Omega} = 1.2A$
- $R_2$: $I_2 = \frac{12V}{20\Omega} = 0.6A$
- 確認: $1.2A + 0.6A = 1.8A$ ✓
消費電力:
- $R_1$: $P_1 = \frac{12^2}{10} = 14.4W$ ← 注意!
- $R_2$: $P_2 = \frac{12^2}{20} = 7.2W$
- 合計: $21.6W$
ここで重要な発見があります。
直列では $R_1$ の消費電力は $1.6W$ だったのに、並列では $14.4W$ に跳ね上がっています。
もし $R_1$ が1/4W(0.25W)の抵抗だったら? 一瞬で煙がでます。
これが、冒頭で「抵抗を小さくしすぎると煙が出る」と言った理由です。
シミュレーターで遊ぶ — 3つの実験
それでは、実際にオームの法則シミュレーターを開いて、一緒に実験してみましょう。
実験1: 「抵抗を大きくするとどうなるか」
- 電圧V: 10V に固定
- 抵抗R: スライダーをゆっくり右に動かす(1Ω → 100Ω)
観察されること:
- 電流Iの値が 10A → 0.1A に減少
- アニメーションの電子の流れが 速い → 遅い に変化
- 電球の明るさが 明るい → 暗い に変化
なぜ?
オームの法則 $I = V/R$ より、Vが一定ならRが大きいほどIは小さくなります。抵抗は「電流のブレーキ」 なんです。
実験2: 「直列 vs 並列 — どっちが明るい?」
- 接続方式: 「直列」モードに
- 抵抗R1: 10Ω、抵抗R2: 10Ω(同じ値)
- 電流Iと電球の明るさを確認
- 次に「並列」モードに切り替え
結果の違い:
- 直列: 合成抵抗 $20\Omega$ → 電流 $0.5A$(電源10Vの場合)
- 並列: 合成抵抗 $5\Omega$ → 電流 $2.0A$(同じ電源)
並列の方が4倍も明るいんです。これ、家庭のコンセントが並列な理由の一つ。全部の機器に同じ電圧(100V)をかけられるからです。
実験3: 「消費電力の恐ろしさを体感」
- 電圧V: 12V
- 抵抗R: 2Ω(かなり小さい値)
- 消費電力Pの表示をチェック
結果: $P = 12^2 / 2 = 72W$
現実の話: 一般的なチップ抵抗(0603サイズ)の定格は0.1W程度。72Wもの電力をかけたら、一瞬で発火します。シミュレーターで安全に「やらかし体験」ができるんです。
現場でハマるポイント — 3つの落とし穴
落とし穴1: 「電圧を上げれば電流は比例する」と思い込む
正しくは: 抵抗が一定なら、の話。
現実の回路、特に半導体(LEDやトランジスタ) は、電圧を上げると内部抵抗が急激に下がることがあります。これをアバランシェ降伏と言います。
例えばLEDに3V以上かけると、内部抵抗がほぼ0Ωに。すると $I = V/R$ のRが極小になり、理論上は無限大の電流が流れます。実際は配線抵抗で制限されますが、それでもLEDは一瞬で壊れます。
対策: 必ず電流制限抵抗を直列に入れる。これが電子工作の基本中の基本。
落とし穴2: 並列合成抵抗の計算ミス
よくある間違い: 「2Ωと100Ωの並列だから、だいたい半分の51Ωくらいでしょ」
正解: $1/(1/2 + 1/100) = 1/(0.5 + 0.01) = 1/0.51 \approx 1.96\Omega$
ほぼ小さい方の抵抗値に引っ張られます。これは直感に反するので、初心者がよく間違えるポイント。
覚え方: 並列は「小さい抵抗が支配的」。電流は抵抗の小さい方にたくさん流れるからです。
落とし穴3: シミュレーターは「理想電源」を仮定している
シミュレーター上の電源は内部抵抗が0Ωの理想電圧源です。
でも現実の電池には内部抵抗があります。例えば単三乾電池の内部抵抗は約0.5Ω。
モーターを始動するとき、車のヘッドライトが一瞬暗くなるのは、内部抵抗による電圧降下のせい。
実務では: 電源の内部抵抗も考慮した設計が必要。シミュレーターで「理想値」を学んだら、次は実際の部品のデータシートを見る習慣をつけましょう。
まとめ — 今日から使える3つの知識
-
オームの法則は「水の流れ」でイメージする
電圧=押す力、抵抗=邪魔、電流=流れる量。これで直感が効く。 -
消費電力 $P = I^2R$ が最も危険
抵抗を小さくすると、消費電力は「二乗」で増える。部品の定格を必ず確認。 -
直列と並列では性質が真逆
直列=電流一定・電圧分配、並列=電圧一定・電流分配。合成抵抗の計算は暗記必須。
そして何より、実際に手を動かして学ぶのが一番の近道です。
▶ オームの法則シミュレーター — ブラウザで即動作、登録不要
このツールでスライダーを動かしながら、今日学んだことを1つずつ確認してみてください。「あ、本当にそうなるんだ」 という発見が、きっとあなたの理解を確実なものにします。
NovaSolverでは1,600以上の工学シミュレーターを無料公開中 👉 一覧はこちら
P.S. 冒頭の「LEDを壊した初心者」の話、実は昔の私です。あの煙の匂いと「しまった」という後悔は今でも忘れられません。でも、あの失敗があったからこそ、オームの法則を「体感」できた。皆さんはシミュレーターで安全に学んでくださいね。