ダイオードとは?仕組み、種類、極性、使い方
ダイオードとは何か、どう動くのかを解説します。アノード、カソード、帯の印、0.7 Vの順方向電圧、1N4007・1N4148・1N5819の違い、フライバック、ブリッジ整流、ツェナー、テスト方法まで紹介します。
ダイオードとは?ひと言でいうと、電流を一方向にだけ流す2端子の半導体部品です。水道管の逆止弁のようなものと考えてください。電流はアノードからカソードへは簡単に流れ、逆方向にはほぼ完全に遮られます。この単純な性質のおかげで、ダイオードはコンセントの交流を直流に変え、電池を逆に接続しても回路を守り、リレーやモーターが出す危険な電圧スパイクを吸収し、電圧を一定のレベルにクランプします。
ダイオードは気づかないうちに毎日目にしています。スマホの充電器の中、Arduino UnoのDCジャックのところ、リレーモジュールの上、そして机の上のすべてのLEDです。そう、LEDは光を出すダイオードです。この記事では、ダイオードの内部で何が起きているか、アノードとカソードの見分け方、0.7 Vの順方向電圧がどこから来るか、1N4007、1N4148、1N5819の違いを学びます。さらに逆接続保護、フライバックダイオード、ブリッジ整流回路、ツェナーダイオード、テスターでのダイオードのテストも扱います。最後に、ダイオードの向きと種類を自動で判定する小さなArduinoのテスターを作ります。

ダイオードとは?どう動くのか
ダイオードの内部では、2種類の半導体の層が接しています。電子が余っているN型シリコンと、電子が足りない(正孔が余っている)P型シリコンです。接合部には電荷のキャリアが打ち消し合う薄い空乏層ができ、この層が電流に対する壁のように働きます。アノード(P側)にプラス、カソード(N側)にマイナスの電圧をかける、つまり順方向バイアスをかけると壁が薄くなり、シリコンでは電圧が約0.6〜0.7 Vを超えると電流が急に増え始めます。逆方向バイアスをかけると壁は厚くなり、マイクロアンペアやナノアンペア程度のごくわずかな漏れ電流しか流れません。逆電圧がダイオードの定格を超えると降伏が起きます。普通のダイオードはここで壊れますが、ツェナーダイオードはまさにこの領域で動くように作られています。下の表は、ダイオードを選ぶときに確認すべきデータシートの基本的な値です。
| パラメーター | 意味 | 1N4007の例 |
|---|---|---|
| VF(順方向電圧) | 導通中にダイオードで落ちる電圧 | 最大1.1 V(1 A時) |
| IF(AV)(平均順方向電流) | 連続して流せる平均電流 | 1 A |
| VRRM(ピーク繰り返し逆電圧) | 繰り返し耐えられる最大の逆電圧。これを超えると降伏が起きる | 1000 V |
| IFSM(サージ電流) | 単発の短い電流パルスに耐える能力 | 30 A(8.3 msの単発パルス) |
| IR(逆方向漏れ電流) | 逆方向バイアス時に流れる小さな電流 | 最大5 µA(25 °C) |
| trr(逆回復時間) | 導通状態から遮断状態に切り替わるとき、電流が消えるまでの時間 | 遅い、マイクロ秒単位 |
アノード、カソード、帯:ダイオードの極性の見分け方
ダイオードにはアノード(A)とカソード(K)の2本の足があります。回路図では、前に縦棒がある三角形で描かれます。三角形は電流が流れる方向(アノードからカソード)を矢印のように指し、縦棒がカソードです。実物のダイオードでは、この縦棒が本体に塗られています。黒い1N4007の灰色や白の帯、ガラスの1N4148の黒い帯がカソード側の印です。覚え方は簡単です。記号の縦棒と本体の帯は同じ側です。回路の中で帯のある側がより高い電圧にあればダイオードは遮断していて、帯のない側がより高ければ導通しています。
- アキシャルリードのダイオード(1N4007、1N5819):本体に1本ある帯がカソードです。印字を読んで型番を確かめることもできます。
- 小さなガラスのダイオード(1N4148、ツェナー):黒い帯がカソードです。印字がとても小さいので、ルーペで読むかテスターで測ってください。
- 表面実装(SMD)ダイオード:パッケージの片側の縁にある線がカソードの印です。Arduinoのボードにある「M7」と書かれたダイオードは、1N4007のSMD版です。
- LED:長い足がアノード、短い足がカソードです。LEDの縁の平らな部分もカソード側の印です。
- ブリッジダイオード:4本のピンに~(交流入力)、+、−の印があります。
- 印が消えている場合:テスターのダイオードモードなら数秒で向きがわかります。手順は下で説明します。
順方向電圧:シリコンは0.7 V、ショットキーは0.3 V
ダイオードが導通すると、ほぼ一定の小さな電圧が落ちます。これを順方向電圧(VF)と呼びます。シリコンダイオードでよく覚えられている値は0.7 Vですが、固定の値ではありません。1N4007は数ミリアンペアで約0.55 V、1 Aでは0.9〜1.0 V落ちます。温度が上がると順方向電圧は1 °Cあたり約2 mV下がります。あとでこれを利用してダイオードを温度センサーにします。順方向電圧は熱を意味します。ダイオードで消費される電力はP = VF × Iです。1 Aを流す1N4007は約1 Wの熱を出し、触れないほど熱くなります。同じ電流でも1N5819ショットキーダイオードは最大0.6 Vしか落ちないので、熱はほぼ半分になります。
ダイオードの種類
| 種類 | 順方向電圧 | 特徴 | 例 | 使われる場所 |
|---|---|---|---|---|
| 整流用ダイオード | 0.6〜1.1 V | 高い逆電圧に耐え、1 A以上を流せる。遅い | 1N4007、1N5408(3 A) | ACアダプター、整流、逆接続保護 |
| 小信号(スイッチング)ダイオード | 0.6〜1.0 V | 非常に速く切り替わる、低電流 | 1N4148 | 信号経路、ロジック回路、キーパッド、小型リレー |
| ショットキーダイオード | 0.15〜0.6 V | 順方向電圧が低く非常に速い。漏れ電流は大きめ | 1N5819、SS34、BAT54 | 電池回路、電源経路の選択、PWMで駆動するモーター |
| ツェナーダイオード | 逆方向でVz(順方向は約0.7 V) | 決まった電圧(Vz)で逆方向に導通する | 1N4733A(5.1 V)、1N4728A(3.3 V) | 電圧のクランプと基準電圧 |
| LED | 1.8〜3.4 V(色による) | 導通中に光る | 5 mm LED、WS2812Bの中のLED | 表示灯、照明、ディスプレイ |
| フォトダイオード | — | 光が当たると電流を生む | BPW34、赤外線受信モジュール | 光と赤外線の検出 |
| TVSダイオード | 逆方向の降伏電圧 | 急な電圧スパイクを非常に速く吸収する | SMBJシリーズ、P6KEシリーズ | ESDとサージからの保護 |
| ゲルマニウムダイオード | 0.2〜0.3 V | 順方向電圧が低い、古い技術 | 1N34A | 古いラジオの回路、信号の検波 |
LEDもダイオード
名前のとおり、LED(Light Emitting Diode、発光ダイオード)は光を出すダイオードです。普通のダイオードと同じく、電流はアノードからカソードへしか流れません。違いは、PN接合で電子と正孔が再結合するときに出るエネルギーが、熱ではなく光として出てくることです。色は半導体の材料で決まり、青に近い色ほど順方向電圧が高くなります。赤のLEDは約2 V、青と白のLEDは約3 Vが必要です。色ごとの値はLEDの電圧ツールで確認できます。

ダイオードとLEDの大きな違いの1つは逆電圧の定格です。1N4007は1000 Vに耐えますが、一般的なLEDのデータシートでは逆方向に約5 Vまでしか許されていません。そのためLEDを整流に使ってはいけません。2つ目のルールは、LEDの電流は必ず直列抵抗で制限することです。順方向電圧を超えると電流が急激に増えるからです。5 Vで赤のLEDを点けるなら、抵抗は(5 − 2) / 0.015 ≈ 200 Ωとなり、標準値の220 Ωを使います。計算はLED抵抗計算ツールでできます。LEDの配線や色の選び方について詳しくはLEDとは?を読んでください。
1N4007、1N4148、1N5819:いつどれを使う?
| 特性 | 1N4007 | 1N4148 | 1N5819 |
|---|---|---|---|
| 種類 | シリコン整流用 | シリコン小信号用 | ショットキー |
| パッケージ | DO-41、黒い本体 | DO-35、ガラスの本体 | DO-41、黒い本体 |
| 最大逆電圧(VRRM) | 1000 V | 100 V | 40 V |
| 平均順方向電流 | 1 A | 150〜200 mA(メーカーによる) | 1 A |
| 順方向電圧(VF) | ≤ 1.1 V(1 A時) | ≤ 1 V(10 mA時) | ≤ 0.6 V(1 A時)、低電流では約0.3 V |
| 逆回復(trr) | 遅い(マイクロ秒) | 4 ns | ほぼなし |
| 逆方向漏れ電流(25 °C) | ≤ 5 µA | ≤ 25 nA(20 V時) | ≤ 0.5 mA(40 V時) |
| 主な用途 | 整流、逆接続保護、リレーのフライバック | 信号、ロジック、キーパッド、小型リレーのフライバック | 電池とUSBの電源経路、PWMモーターのフライバック |
1N4001〜1N4007のシリーズは逆電圧の定格だけが違います(1N4001は50 V、1N4007は1000 V)。価格はほぼ同じなので、多くの人は何にでも1N4007を使います。1N4148は低電流ですが非常に速いダイオードです。数百ミリアンペアを連続して流すことはできませんが、信号やロジックの回路では右に出るものがありません。順方向電圧が低い1N5819は、電池やUSBで動く回路で貴重な電圧を節約します。欠点は40 Vという低い定格と、温度とともに増える漏れ電流だけです。3 Aまでの電流には1N5408(シリコン)か、SS34や1N5822(ショットキー)のシリーズに移ります。PWMで駆動するモーターでは、遅い1N4007より高速なUF4007(75 ns)やショットキーのほうが発熱が少なくなります。
逆接続保護:電池を逆に付けても回路を守る
電池ボックスを逆に配線したり、違うアダプターを挿したりするのは、回路を壊す最もよくある原因の1つです。最も簡単な対策は、電源の入口に直列にダイオードを入れることです。極性が正しければダイオードは導通し、逆なら電流が流れず回路は無事です。Arduino Uno R3はすでにこの対策をしています。DCジャックの入力に、1N4007のSMD版である「M7」と書かれたダイオードがあります。そのため、9 VのアダプターでボードをつなぐとVINピンでは約8.3 Vが測れます。直列ダイオードの代償はこの電圧の損失です。5 VのUSB電源を1N4007に通すと約4.3 V、1N5819に通すと約4.7 Vが残ります。
| 方法 | 電圧の損失 | 長所 | 短所 |
|---|---|---|---|
| 直列のシリコンダイオード(1N4007) | 0.7〜1 V | 非常に安い、1000 Vに耐える | 損失と発熱が大きい |
| 直列のショットキーダイオード(1N5819) | 0.3〜0.6 V | 安い、損失が少ない | 漏れ電流が大きい、40 Vが上限 |
| PチャネルMOSFET | 数mV〜数十mV | ほぼ損失なし、大電流 | 回路が少し複雑 |
| 並列ダイオード + ヒューズ | なし | 通常動作では損失なし | 逆接続するとヒューズが切れ、交換が必要 |
ダイオードは2つの電源をまとめるのにも使われます。これをダイオードORと呼びます。それぞれの電源を専用のショットキーダイオードを通して同じ点につなぐと、電圧が高いほうが負荷に給電し、電源同士が互いに電流を押し込むことはありません。Raspberry Pi Picoでは、USBからのVBUSがすでにショットキーダイオードを通してVSYSのラインにつながっています。PicoをUSBと電池の両方で動かしたい場合は、電池を2つ目のショットキーダイオード(カソードをVSYS側)を通してVSYSにつなぐだけで、電池がUSBポートに逆流することはありません。純正のArduino NanoもUSBの線にショットキーダイオード(MBR0520)を持っているので、USBで給電したNanoの5Vピンで5 Vより少し低い値が出るのは正常です。
フライバックダイオード:リレーやモーターのスパイクから守る
リレーのコイル、モーター、ソレノイド、ファンのような誘導性負荷は、電流が急に減ることに抵抗します。トランジスタがオフになった瞬間、コイルにたまった磁気エネルギーが出口を探し、V = L × di/dtに従って数百ボルトに達することもある逆電圧のスパイクを生みます。このスパイクはトランジスタを破壊し、Arduinoをリセットさせたり、ピンを傷めたりします。対策は、コイルに逆向きに並列接続するフライバックダイオード(還流ダイオードとも呼びます)です。通常の動作中は逆方向バイアスになっていて何もしません。電流が切れたときにコイルの電流が循環する経路を作り、スパイクを電源電圧より約0.7 V高い程度に抑えます。

- コイルのどちらの端子が電源のプラスに、どちらがトランジスタのコレクタ(またはMOSFETのドレイン)につながるかを確かめます。
- ダイオードの帯のあるカソード側を、電源のプラスにつながるコイルの端子にはんだ付けします。
- アノードを、トランジスタにつながるコイルの端子に接続します。ダイオードはコイルと並列に、ただし逆向きに入れなければなりません。
- ダイオードを選びます。5 Vや12 Vのリレーなら1N4007か1N4148で十分です。PWMで速度を変えるモーターには、高速なショットキー(1N5819)かUF4007を使います。ダイオードの電流定格はコイルの電流より大きくなければなりません。
- ダイオードはできるだけコイルの近くに置きます。配線が長いと、スパイクの一部が回路に広がります。
- 電源を入れる前にもう一度向きを確認します。逆に付けたフライバックダイオードは、トランジスタがオンになった瞬間に電源をショートさせます。
ブリッジ整流回路:交流を直流に変える
商用電源やトランスの出力の電圧は交流(AC)です。周波数はヨーロッパで50 Hz(北米では60 Hz、日本では東日本が50 Hz・西日本が60 Hz)なので、1秒に50回の完全な周期を描き、1秒に100回向きが変わります。しかしArduinoには、向きが変わらない直流(DC)が必要です。ダイオード1個では正弦波のプラスの半分しか通りません。これを半波整流と呼びます。4個のダイオードをひし形につないだブリッジ整流回路では、各半周期で2個のダイオードが導通し、マイナスの半分もプラスに折り返します。これを全波整流と呼びます。出力に大きな電解コンデンサを付けると、この脈打つ電圧がピーク値に近いなめらかな直流になります。
計算方法は次のとおりです。トランスに書かれた値は実効値で、ピークはその√2倍です。9 V ACのトランスのピークは9 × 1.414 ≈ 12.7 Vです。ブリッジでは電流が常に2個のダイオードを通るので約1.6 Vが失われ、コンデンサは約11 Vまで充電されます。負荷が電流を引くと、コンデンサはピークとピークの間に放電します。このリップルはおよそVr = I / (2 × f × C)です。0.5 Aの負荷と2200 µFのコンデンサなら、Vr = 0.5 / (2 × 50 × 0.0022) ≈ 2.3 Vなので、電圧は約8.8〜11 Vの間で揺れます。7805のようなレギュレーターを使えば、これをきれいな5 Vにできます。コンデンサの仕組みはコンデンサとは?で、レギュレーターは7805電圧レギュレーターで解説しています。
| 整流方式 | ダイオードの数 | リップルの周波数(50 Hzの商用電源) | 備考 |
|---|---|---|---|
| 半波 | 1 | 50 Hz | 最も簡単。同じコンデンサだとリップルは2倍 |
| センタータップ全波 | 2 | 100 Hz | センタータップ付きのトランスが必要。一度に1個のダイオードが導通する |
| ブリッジ(全波) | 4個、または既製のブリッジダイオード | 100 Hz | 最も一般的。一度に2個のダイオードが導通し、損失は約1.4〜2 V |
ツェナーダイオードで電圧をクランプする
ツェナーダイオードは、逆電圧が特定の値に達すると制御された形で導通し始めるように作られています。この値をツェナー電圧(Vz)と呼び、2.4 Vから200 Vまで多くの標準値があります。最もよく使われるのは3.3 V、5.1 V、12 Vです。ツェナーは逆向きに接続します。カソードをプラスに、アノードをGNDにつなぎます。Vz未満ではほとんど電流が流れず、電圧がVzに達するとダイオードが余分な電流をGNDに逃がし、電圧をその値に保ちます。順方向では普通のダイオードと同じく約0.7 V落ちます。ツェナーを単独で使うことはありません。電流を制限する直列抵抗が必須で、ないと最初の1秒で焼けてしまいます。
直列抵抗はR = (Vin − Vz) / (Iz + Iload)で計算します。たとえば12 Vから5.1 Vを安定して取り出し、5 mAを消費する回路に使い、ツェナーには10 mAを流すとします。R = (12 − 5.1) / (0.010 + 0.005) = 460 Ωなので、標準値の470 Ωを選びます。負荷を外すと、すべての電流がツェナーに流れます。6.9 V / 470 Ω ≈ 14.7 mAで、ツェナーは5.1 × 0.0147 ≈ 75 mWを消費しますが、0.5 Wのツェナーなら余裕です。抵抗の消費電力は6.9² / 470 ≈ 0.1 Wなので、1/4 Wの抵抗で十分です。電圧と抵抗の計算はオームの法則計算ツールで確認できます。
- 電力の上限:1N47xxシリーズ(たとえば5.1 Vの1N4733A)の定格は1 W、BZX55と1N52xxシリーズは0.5 Wです。ツェナーの消費電力はP = Vz × Izで、定格の半分以下に抑えるのがベストです。
- 入力の保護:12 Vの信号を5 VのArduinoの入力につなぐには、10 kΩの直列抵抗と、ピンからGNDへの5.1 Vのツェナーを使えます。ピンの電圧は5.1 Vを超えません。
- 漏れ電流に注意:低電圧のツェナーはVz未満でも電流が漏れます。データシートによると、1N4728A(3.3 V)は1 Vでも最大100 µA漏れることがあります。高インピーダンスのアナログ測定回路では、この漏れ電流が値を狂わせます。
- レギュレーターではない:ツェナーは数十ミリアンペアまでの基準電圧や保護の用途向けです。Arduinoやモーターに給電するには、7805のようなリニアレギュレーターか、LM2596のような降圧モジュールを使ってください。
- 正確な基準電圧が必要なら:5.1 Vや5.6 V前後のツェナーは温度による変化が最も小さくなります。より安定した基準電圧には、TL431のような可変基準電圧ICが好まれます。
テスターでダイオードをテストする
- ダイオードを回路から外すか、少なくとも片方の足のはんだを外します。回路のほかの部品が測定を狂わせることがあります。
- ダイヤルをダイオードの記号がある位置に合わせます。多くのテスターでは導通(ブザー)テストと同じ位置にあります。
- 赤のテスト棒をアノードに、黒のテスト棒を帯のあるカソードに当てます。正常なシリコンダイオードなら0.5〜0.7の値を示します。これは約1 mAのテスト電流での順方向電圧です(550のようにミリボルトで表示するテスターもあります)。
- テスト棒を入れ替えます。正常なダイオードはこの向きでは導通せず、画面にはOLか、左端に1だけが表示されます。
- 両方向でゼロに近い値が出てブザーが鳴れば、ダイオードはショートしています。両方向でOLなら、ダイオードはオープン、つまり内部で断線しています。どちらの場合も交換してください。
| 測る部品 | 順方向(赤のテスト棒をアノード) | 逆方向 |
|---|---|---|
| 1N4007(シリコン整流用) | 0.50〜0.60 V | OL |
| 1N4148(小信号用) | 0.60〜0.70 V | OL |
| 1N5819(ショットキー) | 0.15〜0.30 V | OL(温まっていると非常に大きな値が出ることがある) |
| 5.1 Vツェナー(1N4733A) | 0.65〜0.75 V | OL(テスターのテスト電圧は5.1 Vに届かない) |
| 赤のLED | 1.6〜1.9 V、LEDがかすかに光る | OL |
| 青・白のLED | 2.5〜3.0 VまたはOL(テスト電圧が足りないことがある) | OL |
| ショートしたダイオード | 0.00〜0.05 Vでブザーが鳴る | 0.00〜0.05 Vでブザーが鳴る |
| オープンのダイオード | OL | OL |
Arduinoでダイオードテスターを作る
テスターを持っていない場合や、もう一歩進みたい場合は、Arduino Unoを簡単なダイオードテスターにできます。考え方はテスターと同じです。部品に小さな電流を一方向ずつ順番に流し、両端の電圧を測ります。2本のデジタルピンが1 kΩの抵抗を通して部品の両端に給電し、2本のアナログピンがそれぞれの端の電圧を読みます。電流は約2 mAに制限されるので、ダイオードやLEDはもちろん、逆向きに挿した部品も壊れません。
| 接続 | Arduino Uno | 説明 |
|---|---|---|
| 抵抗1(1 kΩ) | D2とA0の間 | A0側に給電する |
| 抵抗2(1 kΩ) | D3とA1の間 | A1側に給電する |
| テストする部品の片方の足 | A0 | 向きは問わない |
| テストする部品のもう片方の足 | A1 | アノードがどちら側かはコードが判定する |
1// Arduino ile diyot test cihazı / Diode tester with Arduino
2// D2 -> 1 kΩ -> A0 -> [test edilen parça / part under test] -> A1 -> 1 kΩ -> D3
3const int PIN_A = 2; // A0 tarafını besler / drives the A0 side
4const int PIN_B = 3; // A1 tarafını besler / drives the A1 side
5const float VREF = 5.0; // 5V pininde ölçtüğün değer / the value you measure on the 5V pin
6
7// highPin'i HIGH, lowPin'i LOW yapar ve parça üzerindeki gerilimi döndürür
8// Drives highPin HIGH, lowPin LOW and returns the voltage across the part
9float measure(int highPin, int lowPin, int highAdc, int lowAdc) {
10 digitalWrite(highPin, HIGH);
11 digitalWrite(lowPin, LOW);
12 delay(5);
13 long sum = 0;
14 for (int i = 0; i < 16; i++) {
15 sum += analogRead(highAdc) - analogRead(lowAdc);
16 }
17 digitalWrite(highPin, LOW); // ölçüm bitti, akımı kes / done, cut the current
18 return sum / 16.0 * VREF / 1023.0;
19}
20
21// İleri gerilime göre türü tahmin eder / Guesses the type from the forward voltage
22const char* identify(float vf) {
23 if (vf < 0.40) return "Schottky";
24 if (vf < 1.00) return "silisyum diyot / silicon diode";
25 return "LED";
26}
27
28void setup() {
29 pinMode(PIN_A, OUTPUT);
30 pinMode(PIN_B, OUTPUT);
31 digitalWrite(PIN_A, LOW);
32 digitalWrite(PIN_B, LOW);
33 Serial.begin(9600);
34}
35
36void loop() {
37 float vAB = measure(PIN_A, PIN_B, A0, A1); // A0 tarafı artı / A0 side positive
38 float vBA = measure(PIN_B, PIN_A, A1, A0); // A1 tarafı artı / A1 side positive
39 bool ab = vAB < 4.0; // A0 -> A1 yönünde iletim / conducts from A0 to A1
40 bool ba = vBA < 4.0; // A1 -> A0 yönünde iletim / conducts from A1 to A0
41
42 if (ab && ba) {
43 if (vAB < 0.1 && vBA < 0.1) {
44 Serial.println("Kısa devre / short circuit");
45 } else {
46 Serial.println("İki yönde iletim: direnç ya da düşük gerilimli zener / conducts both ways: resistor or low-voltage zener");
47 }
48 } else if (ab || ba) {
49 float vf = ab ? vAB : vBA;
50 Serial.print(ab ? "Anot A0 tarafında / anode on A0 side" : "Anot A1 tarafında / anode on A1 side");
51 Serial.print(" Vf = ");
52 Serial.print(vf, 3);
53 Serial.print(" V -> ");
54 Serial.println(identify(vf));
55 } else {
56 Serial.println("İletim yok: açık devre ya da parça yok / no conduction: open circuit or no part");
57 }
58 delay(2000);
59}コードはまずD2をHIGH、D3をLOWにしてA0とA1の差を測り、次に逆方向で同じことを繰り返します。一方向でだけ低い電圧が読めれば部品はダイオードで、その向きからアノードの位置がわかります。0.40 V未満ならショットキー、1 Vまでならシリコン、それより高ければLEDに分類します。両方向でゼロに近ければショート、両方向で約5 Vなら導通なしです。結果は9600ボーのシリアルモニタに表示されます。より正確に測りたい場合は、テスターで5Vピンを測ってVREFを更新してください。1N4148を挿すと、Vf = 0.640 V前後の値と「silicon diode」(シリコンダイオード)という結果が表示されます。
ESP32:ショットキーダイオードでアナログ入力を守る
ESP32のピンが耐えられるのは3.3 Vまでで、絶対的な上限は約3.6 Vです。12 Vの電池を測るには、まず分圧回路で電圧を下げます。電池のプラスを100 kΩを通してGPIO 34に、GPIO 34を22 kΩを通してGNDにつなぎます。この比率なら、12.6 Vはピンで約2.27 Vになります。では、電池の充電中やモーターの動作中に出るスパイクはどうでしょうか。ここでは2個の小さなショットキーダイオードが安全網になります。1つはピンから3V3へ(カソードを3V3側)、もう1つはGNDからピンへ(カソードをピン側)つなぎます。ピンの電圧が3.3 Vより約0.3 V以上高くなったりゼロを下回ったりすると、余分な分はダイオードを通って流れ、100 kΩの抵抗がその電流を小さく抑えます。
1// ESP32 ile 12 V akü gerilimi ölçme, diyot korumalı giriş / 12 V battery voltage with ESP32, diode-protected input
2// Akü + -> 100 kΩ -> GPIO 34 -> 22 kΩ -> GND / battery + -> 100 kΩ -> GPIO 34 -> 22 kΩ -> GND
3// Schottky 1: anot GPIO 34, katot 3V3 / anode GPIO 34, cathode 3V3
4// Schottky 2: anot GND, katot GPIO 34 / anode GND, cathode GPIO 34
5const int SENSE_PIN = 34; // yalnızca giriş, ADC1 / input only, ADC1
6const float RATIO = (100.0 + 22.0) / 22.0; // bölücü oranı yaklaşık 5,55 / divider ratio about 5.55
7
8void setup() {
9 Serial.begin(115200);
10}
11
12void loop() {
13 uint32_t sum = 0;
14 for (int i = 0; i < 32; i++) {
15 sum += analogReadMilliVolts(SENSE_PIN); // kalibre edilmiş mV / calibrated millivolts
16 delay(2);
17 }
18 float pinV = sum / 32.0 / 1000.0; // pindeki gerilim / voltage on the pin
19 float batteryV = pinV * RATIO; // akü gerilimi / battery voltage
20 Serial.printf("Pin: %.3f V Akü / battery: %.2f V\n", pinV, batteryV);
21 if (batteryV < 11.8) {
22 Serial.println("Akü zayıf / battery low");
23 }
24 delay(1000);
25}Raspberry Pi Pico:ダイオードで温度を測る(MicroPython)
ダイオードの順方向電圧は1 °Cごとに約2 mV下がることを覚えていますか?Raspberry Pi Picoの内蔵温度センサーはまさにこの原理で動いています。RP2040のデータシートによると、チップ内のセンサーはバイアスをかけたバイポーラダイオードの電圧を測ります。この電圧は27 °Cで標準0.706 Vで、1度ごとに1.721 mV下がります。外付けの1N4148でも同じことができます。3V3ピンを10 kΩの抵抗を通してGP26とダイオードのアノードにつなぎ、カソードをGNDにつなぎます。ダイオードには約0.27 mAが流れ、GP26の電圧が温度とともに変わります。
1# Pico: diyotla sıcaklık ölçümü / Temperature measurement with a diode
2# 3V3 -> 10 kΩ -> GP26 + 1N4148 anodu / anode, katot / cathode -> GND
3from machine import ADC
4import time
5
6chip = ADC(4) # yonga içindeki sıcaklık diyodu / on-chip temperature diode
7diode = ADC(26) # GP26 (ADC0): harici 1N4148 / external 1N4148
8CONV = 3.3 / 65535 # read_u16 değerini volta çevirir / converts read_u16 to volts
9
10# Kalibrasyon: oda sıcaklığındaki değerlerini yaz / Calibration: enter your room-temperature values
11T0 = 22.0 # termometredeki sıcaklık (°C) / thermometer reading (°C)
12V0 = 0.600 # o sıcaklıkta diyot gerilimi (V) / diode voltage at that temperature (V)
13SLOPE = -0.002 # 1N4148 için yaklaşık -2 mV/°C / about -2 mV/°C for a 1N4148
14
15def average_voltage(adc, n=64):
16 total = 0
17 for _ in range(n):
18 total += adc.read_u16()
19 return total / n * CONV
20
21while True:
22 v_chip = average_voltage(chip)
23 t_chip = 27 - (v_chip - 0.706) / 0.001721 # RP2040 veri sayfası formülü / RP2040 datasheet formula
24 v_diode = average_voltage(diode)
25 t_diode = T0 + (v_diode - V0) / SLOPE
26 print("Yonga / chip: {:.1f} °C Diyot / diode: {:.3f} V -> {:.1f} °C".format(t_chip, v_diode, t_diode))
27 time.sleep(1)コードを初めて動かすときは、温度計で室温を読み、画面に出たダイオードの電圧をV0に、温度計の値をT0に入力します。ダイオードの電圧は1個ずつ少しずつ違うので、この1点でのキャリブレーションは欠かせません。次にダイオードを指でつまんでみてください。数秒で電圧が下がり、温度が上がるのがわかります。チップ内のセンサーはボード自身の熱の影響も受けるので、どちらも精密な温度計ではありません。どちらも原理を示す教育用の実験です。本格的な測定にはDS18B20のようなデジタルセンサーを使ってください。
ダイオードを使ったプロジェクトのアイデア
- LCD付きダイオードテスター:上のコードをI2C LCDディスプレイと組み合わせれば、部品を挿すとすぐに種類と順方向電圧が表示されます。
- 電池バックアップ付き電源:USBと電池パックを2個のショットキーダイオードでまとめ、USBを抜いてもArduinoが電池で途切れずに動き続けるようにします。
- ゴーストの出ないキーパッド:自作のボタンマトリクスの各キーに1N4148を付け、複数のキーを同時に押しても違うキーが検出されないようにします。マトリクススキャンの仕組みはキーパッドの使い方で解説しています。
- チャーリープレクシングでLEDを点ける:LEDが一方向にしか導通しないことを利用して、3本のピンで6個のLED、4本のピンで12個のLEDを制御します。
- 自動水やり:ポンプをリレーで動かし、フライバックダイオードで保護します。水分の測定については土壌水分センサーを参照してください。
- 太陽光での充電:パネルと電池の間に逆流防止用のショットキーダイオードを入れ、夜に電池がパネルへ放電しないようにします。
よくある間違いと解決法
| 症状 | 考えられる原因 | 解決法 |
|---|---|---|
| 回路がまったく動かない | 直列の保護ダイオードが逆に付いている | 向きを変える。帯のあるカソードを負荷側に、帯のないアノードを電源のプラス側にする |
| リレーやモーターがオフになるたびにArduinoがリセットされる | フライバックダイオードがない | コイルに1N4007か1N4148をカソードをプラス側にして並列に付ける |
| トランジスタがオンになると電源が落ち、ダイオードが熱くなる | フライバックダイオードが逆向きで電源をショートさせている | ダイオードの向きを変える。カソードを電源のプラスに |
| 直列ダイオードのあとでモジュールの動きがおかしい | 0.7〜1 Vの順方向電圧の損失 | ショットキー(1N5819)かPチャネルMOSFETを使う |
| ダイオードがとても熱くなる | 電流定格を超えている、または高周波PWMに遅いダイオードを使っている | 3 Aの1N5408、またはショットキーかUF4007を選ぶ |
| ツェナーがすぐに壊れる | 直列抵抗がない、または小さすぎる | R = (Vin − Vz) / Iで計算し、ツェナーの電力を確認する |
| 保護ダイオードを付けるとアナログ値がずれる | ダイオードやツェナーの漏れ電流 | 小信号用のショットキー(BAT54)を使い、分圧回路の抵抗値を下げる |
ダイオードは、電子工作で最も単純に見えて最もよく働く部品の1つです。電流を一方向に導き、回路を守り、交流を直流に変え、LEDとしては光も出します。帯で極性を読み取り、順方向電圧の損失を見込み、誘導性負荷にはフライバックダイオードを付けることを習慣にすれば、プロジェクトで焼く部品はずっと少なくなります。BlueGraysアプリには、LED、リレー、モーター、水やりのプロジェクトが、ステップごとの回路図とすぐ使えるコード付きで揃っています。実際の回路でダイオードがどこに入るかを自分の目で確かめてください。
よくある質問
ダイオードは何をする部品?
ダイオードは電流をアノードからカソードへの一方向にだけ流します。そのため、交流を直流に変える(整流)、電池の逆接続から回路を守る、リレーやモーターの電圧スパイクを抑える、ツェナー型なら電圧を決まった値にクランプする、といった用途に使えます。LEDも光を出すダイオードです。
ダイオードのどちら側がプラス?
ダイオードのプラス側はアノード、マイナス側はカソードです。カソードは本体の帯(バンド)で示され、回路図の記号では縦棒がカソードを表します。ダイオードが導通するには、アノードがカソードより約0.7 V高い必要があります。LEDでは長い足がアノードです。
ダイオードとLEDの違いは?
どちらも電流を一方向にしか流しません。LEDは導通中に光る特別なダイオードです。順方向電圧は色によって1.8〜3.4 Vで、逆方向には約5 Vまでしか耐えられません。そのためLEDは整流には使わず、必ず直列抵抗と一緒に接続します。
ツェナーダイオードと普通のダイオードの違いは?
普通のダイオードは逆方向の電流を遮り、電圧の定格を超えると壊れます。ツェナーダイオードは特定の電圧(たとえば5.1 V)で壊れずに意図的に逆方向に導通するので、電圧をその値にクランプします。ツェナーはカソードをプラスにして逆向きに、必ず直列抵抗と一緒に接続します。
ダイオードが正常かどうかを確かめるには?
テスターをダイオードモードにし、赤のテスト棒をアノードに、黒のテスト棒をカソードに当てます。正常なシリコンダイオードなら0.5〜0.7 Vを示し、テスト棒を入れ替えるとOLが表示されます。両方向でゼロに近ければショート、両方向でOLならオープンのダイオードです。
1N4007の電流と電圧の定格は?
1N4007は、平均順方向電流1 Aを流せ、1000 Vの繰り返し逆電圧に耐えるシリコン整流用ダイオードです。順方向電圧は1 Aで最大1.1 V、30 Aの単発サージにも耐えます。より大きな電流には3 Aの1N5408を使います。
この記事を読んだ後に作れるプロジェクト
全プロジェクトを見る
LEDの点滅
電子工作の第一歩は、1個のLEDを点けたり消したりすることです。Arduinoで短い間隔で点灯と消灯を繰り返すと、LEDが素早く点滅します。ボードが光を制御する仕組みを最もシンプルな形で確かめ、これから取り組むプロジェクトの基礎を身につけます。

ESP32でLEDを点滅
ESP32のGPIO出力の基本を学びます。デジタルピンからLEDを点灯・消灯させて、点滅させます。Arduino UNOの定番のLED点滅プロジェクトのESP32版です。Arduino環境で使う基本的な点滅コマンドは同じですが、ESP32のピン配置と3.3 VのGPIO電圧レベルはArduino UNOとは異なります。

Raspberry Pi Picoで外付けLEDを点灯(ブレッドボード)
Picoの内蔵LEDの次は、ブレッドボードに外付けLEDを接続し、GP14ピンで制御します。このプロジェクトでは、Picoの汎用GPIOピンを出力として使う方法、LEDの極性(長い足=アノード/+、短い足=カソード/−)、電流制限抵抗(220Ω)が必要な理由を学びます。抵抗を入れないと、LEDに過大な電流が流れて壊れることがあります。回路はとても簡単です。Pico GP14 → 220Ω抵抗 → LED(+)→ LED(−)→ Pico GND。Wokwiでシミュレーションできます。

ボタンを押している間だけ220V電球を点灯
ボタンを押している間は実際の220ボルトの電球が点灯し、離すとすぐに消灯します。Arduinoの小さな信号では電球を直接点灯できないため、電気で動くスイッチであるリレーを間に入れ、電球の回路を開閉します。ボードで家庭の照明を操作するための第一歩です。家庭用電源を扱う際は十分に注意し、不安がある場合は詳しい人に手伝ってもらってください。

リモコンで220V電球を点灯・消灯
ソファに座ったまま、テレビのリモコンで家庭の電球を点灯・消灯します。Arduinoがリモコンから届く目に見えない光の信号を読み取り、電源ボタンを押すとリレーを動かして電球を点灯させ、消音ボタンを押すと消灯させます。家庭用電源を扱うため、配線は大人と一緒に、必ずプラグを抜いた状態で行ってください。

スマート水やりステーション
旅行中も植物が枯れないよう、自動で水やりをするシステムです。土壌水分センサーで土の湿り具合を測定し、乾燥するとArduinoが給水ポンプを数秒間動かして、青いライトを点灯させます。水分が適切なときは緑のライトが点灯します。土がひどく乾燥すると、赤いライトが点滅し、ブザーが鳴って知らせます。

L298Nで作るBluetooth操作の車
スマートフォンをリモコンにして、自作のロボットカーを操作できます。ArduinoはBluetoothモジュールを通じてスマートフォンのリモコンアプリから指令を受け取り、モータードライバーで車輪を回します。前進、後退、左右や斜めへの移動ができ、速度もスマートフォンから調整できます。停止ボタンを押すと、短いブレーキ動作でモーターがすぐに止まります。

ステッピングモーターの使い方
時計の針のように、必要な分だけ正確に少しずつ回転するモーターです。Arduinoがドライバーボードを介して小さなステッピングモーターを一方向に1回転させ、1秒待ってから逆方向に1回転させます。ドア、カーテン、回転台など、正確な回転が必要なプロジェクトの基礎を学べます。
ほかの記事
BlueGraysアプリ
この回路をスマホでステップごとに作る
回路図、コード、部品リストを1つの画面で確認できます。Arduino、ESP32、Picoのプロジェクトを200件以上用意しています。

