SMD抵抗のコードの読み方:103、4702、01C、4R7
SMD抵抗のコードの読み方を解説します。3桁と4桁のコード、EIA-96(01C)、小数点を表すR(4R7)、0603/0805/1206のサイズ、コンデンサのコード104、SMDトランジスタの表記まで紹介します。
SMD抵抗のコードは、表面実装(SMD)の抵抗にカラーコードの帯の代わりに印刷されている3〜4文字の短い表記で、抵抗値をオームで表します。ルールさえ覚えれば、読むのはとても簡単です。103 = 10 kΩ、4702 = 47 kΩ、4R7 = 4.7 Ω、01C = 10 kΩです。3桁のコードでは最初の2桁が値、最後の1桁が後ろに付けるゼロの数です。4桁のコードでは最初の3桁が値になります。文字のRは小数点の代わりで、2桁の数字と1文字のアルファベットでできたコードはEIA-96の表で読みます。
Arduino Nano、ESP32の開発ボード、センサーモジュール、レギュレーターの基板は、ほとんどがこうした小さな部品でできています。モジュールを修理したいとき、ボードのLEDにどの抵抗が電流を流しているかを調べたいとき、プルアップ抵抗の値を知りたいとき、自分でPCBを設計したいときには、これらのコードが読めなければなりません。このガイドでは、抵抗のほかに、SMDコンデンサのコード(104 = 100 nF)、0603、0805、1206のようなサイズのコード、SMDトランジスタやダイオードの短い表記、そして表記がまったくない部品をArduinoで測る方法も紹介します。

SMD抵抗とは?なぜカラーコードがないの?
SMD(Surface Mount Device、表面実装部品)は、リード線を穴に通さず、回路基板の表面にあるパッドに直接はんだ付けする部品のことです。SMD抵抗は、両端が金属めっきされた小さなセラミックのブロックで、上面の黒い保護膜が抵抗体の膜を守り、コードも載せています。0805の抵抗は2 × 1.25 mmしかないので、4本のカラーコードの帯を塗るのは現実的ではありません。代わりに、値が白い数字のコードで印刷されています。0402以下のサイズの抵抗にはその余地すらないので、表記はまったくありません。コードからわかるのは抵抗値だけだということを覚えておいてください。電力と電圧の上限は本体のサイズで決まり、誤差はたいていコードの種類から推測できます。
| コードの種類 | 例 | 読み方 | 値 | 主に使われる部品 |
|---|---|---|---|---|
| 3桁 | 103 | 10にゼロを3つ | 10 kΩ | 誤差5%、0603以上 |
| 4桁 | 4702 | 470にゼロを2つ | 47 kΩ | 誤差1%、0805以上 |
| Rあり | 4R7 | R = 小数点 | 4.7 Ω | 10 Ω未満の値 |
| EIA-96 | 01C | 表の100 × 100 | 10 kΩ | 誤差1%の0603抵抗 |
| ゼロ | 0、00、000 | ジャンパー | 0 Ω | パターン同士の接続、オプションの設定 |
3桁のSMD抵抗のコードの読み方
いちばんよく使われるのが3桁のコードです。最初の2桁が値の有効数字で、3桁目はその後ろに付けるゼロの数、つまり10の何乗かを表します。103なら10の後ろにゼロを3つ付けて、10,000 Ω = 10 kΩです。同じように、472 = 47にゼロ2つ = 4,700 Ω = 4.7 kΩ、221 = 220 Ω、334 = 330 kΩ、105 = 1,000,000 Ω = 1 MΩです。これらのコードは通常±5%の抵抗に使われ、値はE24系列から選ばれます。10、11、12、13、15、16、18、20、22、24、27、30、33、36、39、43、47、51、56、62、68、75、82、91と、その10倍の値です。読み取った値がこのリストになければ、コードを逆さまに読んでいるか、その部品が抵抗ではないかのどちらかです。
| コード | 値 | Arduinoのボードやモジュールでのよくある用途 |
|---|---|---|
| 100 | 10 Ω | 小さな直列抵抗、電流制限 |
| 220 | 22 Ω | USBのデータ線の直列抵抗 |
| 221 | 220 Ω | 5 VでのLEDの電流制限 |
| 331 | 330 Ω | LEDとトランジスタのベース抵抗 |
| 102 | 1 kΩ | 基板上の電源LEDと状態表示LED |
| 472 | 4.7 kΩ | I2Cと1-Wireのプルアップ抵抗 |
| 103 | 10 kΩ | リセットとボタンのプルアップ抵抗 |
| 473 | 47 kΩ | 分圧回路 |
| 104 | 100 kΩ | 電池の電圧を測る分圧回路 |
| 105 | 1 MΩ | ハイインピーダンスの入力 |
4桁のコードと文字R:4702、1002、4R7
4桁のコードは±1%の精密抵抗に使われます。考え方は同じですが、有効数字が3桁になります。最初の3桁が値、4桁目がゼロの数です。1002 = 100にゼロ2つ = 10,000 Ω = 10 kΩ、4702 = 47 kΩ、1001 = 1 kΩ、1000 = 100 Ω、2201 = 2.2 kΩ、1004 = 1 MΩです。有効数字が3桁あるので、49.9 kΩ(4992)や4.99 kΩ(4991)のようなE96系列の中間の値も表せます。つまり、まったく同じ10 kΩの抵抗でも、メーカーと精度によって103、1002、01Cのどれでも表記されることがあり、3つとも同じ値です。
10 Ω未満の値はゼロの数では書けないので、文字のRが小数点の代わりになります。4R7 = 4.7 Ω、2R2 = 2.2 Ω、1R0 = 1 Ω、R47 = 0.47 Ωです。4文字の表記も同じルールです。10R0 = 10 Ω、4R70 = 4.7 Ωです。とても小さな値は、たいてい電流の測定に使うシャント抵抗です。R100 = 0.1 Ω(INA219のような電流センサーモジュールで見かけます)、R010 = 0.01 Ω、つまり10 mΩです。回路図や部品表でも、kとMの文字で同じ考え方を使います。4k7 = 4.7 kΩ、2M2 = 2.2 MΩです。この表記が好まれるのは、印刷でかすれて小数点が消えると、4.7 kΩが47 kΩになってしまうおそれがあるからです。
EIA-96のコード(01C、68X、85B)の読み方
0603サイズの誤差1%の抵抗には、4桁が収まりません。こうした抵抗にはEIA-96と呼ばれる3文字の方式が使われます。最初の2桁(01〜96)はE96系列の中での値の番号で、最後の文字が乗数です。番号01の値は100、番号68は499、番号85は750です。つまり01C = 100 × 100 = 10 kΩ、68X = 499 × 0.1 = 49.9 Ω、85B = 750 × 10 = 7.5 kΩです。この場合、数字から値を計算することはできず、表で調べるしかありません。いちばん手早いのは、3桁と4桁のコード、Rの表記、EIA-96を読み取れる「SMDコード」ツールにコードを入力する方法です。
| 文字 | 乗数 | 例 |
|---|---|---|
| Z | × 0.001 | 01Z = 0.1 Ω |
| YまたはR | × 0.01 | 01Y = 1 Ω |
| XまたはS | × 0.1 | 68X = 49.9 Ω |
| A | × 1 | 01A = 100 Ω |
| BまたはH | × 10 | 85B = 7.5 kΩ |
| C | × 100 | 01C = 10 kΩ |
| D | × 1,000 | 51D = 332 kΩ |
| E | × 10,000 | 01E = 1 MΩ |
| F | × 100,000 | 01F = 10 MΩ |
| コード | 値 | コード | 値 |
|---|---|---|---|
| 01 | 100 | 51 | 332 |
| 05 | 110 | 55 | 365 |
| 09 | 121 | 59 | 402 |
| 13 | 133 | 63 | 442 |
| 18 | 150 | 66 | 475 |
| 22 | 165 | 68 | 499 |
| 26 | 182 | 73 | 562 |
| 30 | 200 | 77 | 619 |
| 34 | 221 | 85 | 750 |
| 42 | 267 | 96 | 976 |
下線、ゼロオーム、そのほかの特殊なケース
- 下線:メーカーによっては、誤差1%でE24系列の値を持つ抵抗の3桁のコードの下に線を引いています。線があっても値は変わりません。精密抵抗であることを示し、どちらの向きで読むかの目印にもなります。
- 0、00、000:ゼロオームのジャンパー抵抗です。PCBの2本のパターンをつないだり、オプションのオン・オフを切り替えたりするのに使います。0603と0805のサイズでは、一般に1〜2 Aを流せます。
- 表記のない抵抗:0402、0201、それより小さいサイズの部品にはコードがまったくありません。値は、測るかリールのラベルを見るしかありません。
- 集合抵抗(抵抗アレイ):1つの本体に4個の抵抗が並んだアレイには、コードが1つだけ付いています。103と表記されたアレイには、10 kΩの抵抗が4個入っています。Arduino Unoのようなボードでよく見かけます。
- 円筒形(MELF)抵抗:小さな円柱の形をしたSMD抵抗で、リード付き抵抗と同じようにカラーコードの帯が付いています。色は「カラーコード」ツールで読み解けます。
- SMDインダクタ:インダクタにも似たコードが使われますが、単位はマイクロヘンリーです。101 = 100 µH、4R7 = 4.7 µHです。「インダクタコード」ツールで読み取れます。
SMDのサイズ:0603、0805、1206の意味は?
サイズのコードが表すのは部品の値ではなく、物理的な寸法です。広く使われているインチ系では、最初の2桁が長さ、最後の2桁が幅を、100分の1インチ単位で表します。0805は0.08 × 0.05インチ、つまり約2.0 × 1.25 mmです。メートル系では、同じ部品を0.1ミリ単位で2012と書きます。本体が大きいほど、抵抗が扱える電力と電圧は大きくなります。手はんだでいちばん扱いやすいのは1206と0805です。0603はピンセットと細いこて先があれば楽に作業できますが、0402以下になるとルーペと根気が必要です。下の値は一般的なもので、正確な上限はメーカーによって少しずつ違います。
| インチ系コード | メートル系コード | サイズ(mm) | 一般的な電力 | 一般的な最大電圧 | 表記 |
|---|---|---|---|---|---|
| 0201 | 0603 | 0.6 × 0.3 | 1/20 W | 25 V | なし |
| 0402 | 1005 | 1.0 × 0.5 | 1/16 W | 50 V | 通常はなし |
| 0603 | 1608 | 1.6 × 0.8 | 1/10 W | 75 V | 3桁またはEIA-96 |
| 0805 | 2012 | 2.0 × 1.25 | 1/8 W | 150 V | 3桁または4桁 |
| 1206 | 3216 | 3.2 × 1.6 | 1/4 W | 200 V | 3桁または4桁 |
| 1210 | 3225 | 3.2 × 2.5 | 1/2 W | 200 V | 3桁または4桁 |
| 2010 | 5025 | 5.0 × 2.5 | 3/4 W | 200 V | 3桁または4桁 |
| 2512 | 6332 | 6.3 × 3.2 | 1 W | 200 V | 3桁か4桁、またはRあり |
定格電力は通常、周囲温度70 °Cでの値で、それより熱くなると下がります。そのため、上限の半分くらいで使うのがよい習慣です。抵抗で消費される電力は、P = V × IまたはP = I² × Rで計算します。例:5 Vから赤色LEDを20 mAで光らせるには(5 − 2) / 0.02 = 150 Ωが必要で、抵抗での電力は3 V × 0.02 A = 0.06 Wです。0603(0.1 W)でも耐えられますが、0805ならより余裕があります。同じLEDを12 Vで光らせると510 Ωが必要になり、電力は10 V × 0.02 A = 0.2 Wに増えます。1206では上限ぎりぎりなので、1210かそれより大きい本体を選びます。この計算の考え方はオームの法則とは?を見てください。
SMDコンデンサのコード:104 = 100 nF
コンデンサのコードは抵抗のコードと同じ考え方ですが、単位はピコファラド(pF)です。最初の2桁が値、3桁目がゼロの数です。104 = 10にゼロ4つ = 100,000 pF = 100 nF = 0.1 µFです。103 = 10 nF、102 = 1 nF、105 = 1 µF、106 = 10 µFです。単位を換算するときは、1 µF = 1,000 nF = 1,000,000 pFを覚えておいてください。3桁目が8か9なら、それはゼロの数ではなく乗数です。9 = × 0.1、8 = × 0.01なので、229 = 2.2 pF、479 = 4.7 pFです。値の後ろの文字は誤差を表します。J = ±5%、K = ±10%、M = ±20%です。文字が真ん中にある場合は、単位と小数点の両方を表します。4n7 = 4.7 nF、p47 = 0.47 pF、2u2 = 2.2 µFです。コードをすばやく換算するには「コンデンサコード」ツールを使ってください。
| コード | pF | nF/µF | 一般的な用途 |
|---|---|---|---|
| 220 | 22 pF | 0.022 nF | 16 MHzの水晶振動子の横のコンデンサ |
| 101 | 100 pF | 0.1 nF | フィルターとノイズ対策 |
| 102 | 1,000 pF | 1 nF | フィルター |
| 103 | 10,000 pF | 10 nF | ボタンやセンサーの信号線のノイズ除去 |
| 104 | 100,000 pF | 100 nF = 0.1 µF | すべてのICの電源ピンのパスコン |
| 474 | 470,000 pF | 470 nF | レギュレーターとフィルターの回路 |
| 105 | 1,000,000 pF | 1 µF | レギュレーターの出力 |
| 106 | 10,000,000 pF | 10 µF | AMS1117のようなレギュレーターの入力と出力 |
大切なことがあります。セラミックのSMDコンデンサ(MLCC、積層セラミックコンデンサ)のほとんどには、表記がまったくありません。茶色、ベージュ、灰色のこうした小さなブロックの値は、リールのラベルか、容量を測れるテスターでしか調べられません。上のAMS1117の基板で見た106と104は、コンデンサではなく基板に印刷されたものです。古い部品や一部のメーカーの部品には、アルファベット1文字と数字1桁でできた2文字のコードが付いていることがあります。文字がE24系列の値(A = 1.0、E = 1.5、J = 2.2、N = 3.3、S = 4.7、W = 6.8)、数字がpFでのゼロの数を表すので、S3 = 4.7 × 1,000 pF = 4.7 nFです。リールのラベルにあるX7R、X5R、C0G(NP0)は誘電体の種類です。C0Gは温度でほとんど変化しませんが、X7RとX5Rは加えるDC電圧が上がると容量の大部分を失うことがあります。

タンタルコンデンサは、たいてい黄色、オレンジ色、黒の長方形の本体です。pFのコード(106 = 10 µF、476 = 47 µF、107 = 100 µF)が付いていて、電圧を表す文字が付いていることもよくあります。J = 6.3 V、A = 10 V、C = 16 V、D = 20 V、E = 25 V、V = 35 Vです。メーカーによっては、文字の代わりに電圧をそのまま印刷しています。SMDのアルミ電解コンデンサは小さな金属の缶で、値はµFでそのまま印刷され、上面の黒い半月の印がマイナス(−)端子を示します。フィルムコンデンサや大きめのセラミックコンデンサの2A104Jのような表記は、3つの部分に分かれます。2A = 100 V、104 = 100 nF、J = ±5%です。ほかによく使われる電圧のコードは、1C = 16 V、1E = 25 V、1H = 50 V、2J = 630 Vです。コンデンサの種類についてはコンデンサとは?で詳しく紹介しています。
SMDトランジスタとダイオードのコード(1AM、J3Y、A7、M7)
SOT-23のような小さなパッケージには完全な型番が収まらないので、トランジスタやダイオードには2〜3文字のマーキングコードが付いています。これらのコードには統一された規格がありません。同じコードが2つのメーカーでまったく違う部品を表すこともあり、末尾の小さな文字はたいてい工場や製造日のコードです。部品を特定するときは、パッケージの種類、マーキングコード、回路の中での部品の役割という3つの手がかりを組み合わせて使います。バイポーラトランジスタでは、SOT-23のピンの順番はたいてい1 = ベース、2 = エミッタ、3 = コレクタです。2N7002のようなMOSFETでは1 = ゲート、2 = ソース、3 = ドレインです。ピン配置と互換品は「トランジスタ」ツールで、仕組みはトランジスタとは?で確認してください。
| コード | パッケージ | 部品 | 種類 |
|---|---|---|---|
| 1AM | SOT-23 | MMBT3904 | NPNトランジスタ(2N3904のSMD版) |
| 2A | SOT-23 | MMBT3906 | PNPトランジスタ(2N3906のSMD版) |
| 1P | SOT-23 | MMBT2222A | NPNトランジスタ |
| 1F | SOT-23 | BC847B | NPNトランジスタ(BC547Bの互換品) |
| 3F | SOT-23 | BC857B | PNPトランジスタ(BC557Bの互換品) |
| J3Y | SOT-23 | S8050 | NPNトランジスタ、モジュールでとてもよく使われる |
| 2TY | SOT-23 | S8550 | PNPトランジスタ |
| 702 | SOT-23 | 2N7002 | Nチャネルの小信号MOSFET |
| A7 | SOT-23 | BAV99 | 直列につながった2個入りのスイッチングダイオード |
| T4 | SOD-123 | 1N4148W | 高速スイッチングダイオード |
| M7 | SMA | 1N4007の互換品 | 1 A、1000 Vの整流ダイオード |
| SS14 | SMA | SS14 | 1 A、40 Vのショットキーダイオード |
表記がない、または読めない抵抗を測る:Arduinoで作る抵抗計
コードがすり減って読めない、部品が0402である、結果に自信がない、という場合にいちばん確実なのは測ることです。テスターで測るときは、できれば抵抗を回路から取り外すか、少なくとも片方の端を浮かせてください。回路の中の並列の経路のせいで、読み取った値が実際より小さくなります。テスターがなければ、Arduinoで簡単な抵抗計を作れます。回路は分圧回路です。値のわかっている基準抵抗(Rref)を測りたい抵抗(Rx)と直列につなぎ、中点の電圧をアナログピンで読み取ります。Arduinoのアナログ読み取りは電源電圧に対してレシオメトリックなので、式はとても簡単です。Rx = Rref × 読み取り値 / (1024 − 読み取り値)です。RxがRrefに近いほど結果は正確になります。10 kΩの基準抵抗なら、1 kΩから100 kΩの抵抗を約±2%で測れます。100 Ω前後の値には1 kΩ、メガオームには1 MΩの基準抵抗を使い、RREF定数を書き換えてください。基準抵抗の実際の値を一度テスターで測ってコードに入れると、精度がはっきり上がります。
| 接続 | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| Rrefの上端 | 5V | 3V3 | 3V3(OUT) |
| RrefとRxの接続点 | A0 | GPIO 34 | GP26(ADC0) |
| Rxの下端 | GND | GND | GND |
1// Basit ohmmetre: 5V - Rref - A0 - Rx - GND / Simple ohmmeter: 5V - Rref - A0 - Rx - GND
2const float RREF = 10000.0; // bilinen direnç, multimetreyle ölçtüğün değeri yaz / known resistor, enter its measured value
3const int OLCUM_PIN = A0;
4
5void setup() {
6 Serial.begin(9600);
7}
8
9void loop() {
10 long toplam = 0;
11 for (int i = 0; i < 16; i++) { // 16 okumanın ortalaması / average of 16 readings
12 toplam += analogRead(OLCUM_PIN);
13 delay(2);
14 }
15 float ham = toplam / 16.0;
16
17 if (ham > 1018) {
18 Serial.println(F("Acik devre / Open circuit"));
19 } else if (ham < 2) {
20 Serial.println(F("Kisa devre / Short circuit"));
21 } else {
22 float rx = RREF * ham / (1024.0 - ham); // Rx = Rref * ham / (1024 - ham)
23 Serial.print(F("Rx = "));
24 if (rx >= 1000) {
25 Serial.print(rx / 1000.0, 2);
26 Serial.println(F(" kOhm"));
27 } else {
28 Serial.print(rx, 1);
29 Serial.println(F(" Ohm"));
30 }
31 }
32 delay(1000);
33}Arduinoに任せる:シリアルモニタで使うSMDコード解読プログラム
下のプログラムは、この記事で紹介した抵抗のルールをすべて適用します。3桁と4桁のコード、Rの表記、EIA-96、0 Ωのジャンパーを読み取れます。シリアルモニタを9600ボー、改行コードを「LFのみ」(Newline)にして開き、4702や68Xのようなコードを入力してEnterキーを押してください。文字のRは小数点にもEIA-96の乗数にもなりうるので、プログラムはRを含むコードをまず小数点の表記として扱います(47R = 47 Ω)。SMDコードのツールも同じルールに従っています。E96の表はPROGMEMでフラッシュメモリに置いているので、Unoの2 KBのRAMを使い切ることはありません。コードはESP32でも変更なしでコンパイルでき、動作します。シリアルモニタを初めて使うなら、Arduinoのシリアルモニタを見てください。
1// SMD direnç kodu çözücü: Seri Monitör'e kodu yaz, değeri gör / SMD resistor code decoder: type a code in the Serial Monitor, see the value
2const uint16_t E96[96] PROGMEM = {
3 100, 102, 105, 107, 110, 113, 115, 118, 121, 124, 127, 130, 133, 137, 140, 143,
4 147, 150, 154, 158, 162, 165, 169, 174, 178, 182, 187, 191, 196, 200, 205, 210,
5 215, 221, 226, 232, 237, 243, 249, 255, 261, 267, 274, 280, 287, 294, 301, 309,
6 316, 324, 332, 340, 348, 357, 365, 374, 383, 392, 402, 412, 422, 432, 442, 453,
7 464, 475, 487, 499, 511, 523, 536, 549, 562, 576, 590, 604, 619, 634, 649, 665,
8 681, 698, 715, 732, 750, 768, 787, 806, 825, 845, 866, 887, 909, 931, 953, 976
9};
10
11// EIA-96 harf çarpanı; bilinmeyen harfte -1 / EIA-96 letter multiplier; -1 for an unknown letter
12float eiaCarpan(char c) {
13 switch (c) {
14 case 'Z': return 0.001;
15 case 'Y': case 'R': return 0.01;
16 case 'X': case 'S': return 0.1;
17 case 'A': return 1;
18 case 'B': case 'H': return 10;
19 case 'C': return 100;
20 case 'D': return 1000;
21 case 'E': return 10000;
22 case 'F': return 100000;
23 default: return -1;
24 }
25}
26
27// Kodu ohma çevirir, geçersizse -1 döner / Converts the code to ohms, returns -1 if invalid
28float smdCoz(String kod) {
29 kod.trim();
30 kod.toUpperCase();
31 int n = kod.length();
32 if (n == 0 || n > 5) return -1;
33
34 int r = kod.indexOf('R');
35 if (r >= 0) { // R ondalık virgüldür: 4R7, R47, 47R / R is the decimal point
36 if (kod.lastIndexOf('R') != r || n < 2) return -1;
37 for (int i = 0; i < n; i++) {
38 if (i != r && !isDigit(kod[i])) return -1;
39 }
40 kod.replace('R', '.');
41 return kod.toFloat(); // "4.7" -> 4.7, ".47" -> 0.47
42 }
43
44 if (n == 3 && isDigit(kod[0]) && isDigit(kod[1]) && isAlpha(kod[2])) { // EIA-96: 01C
45 int sira = kod.substring(0, 2).toInt();
46 float carpan = eiaCarpan(kod[2]);
47 if (sira < 1 || sira > 96 || carpan < 0) return -1;
48 return pgm_read_word(&E96[sira - 1]) * carpan;
49 }
50
51 for (int i = 0; i < n; i++) {
52 if (!isDigit(kod[i])) return -1;
53 }
54 if (n <= 2) return kod.toInt() == 0 ? 0 : -1; // 0 ya da 00: köprü direnci / 0 or 00: jumper
55 long taban = kod.substring(0, n - 1).toInt(); // 3 hane: 2 rakam, 4 hane: 3 rakam / significant digits
56 int sifir = kod[n - 1] - '0'; // son hane: sıfır sayısı / last digit: number of zeros
57 float deger = taban;
58 for (int i = 0; i < sifir; i++) deger *= 10;
59 return deger;
60}
61
62void ohmYaz(float r) {
63 if (r >= 1e6) { Serial.print(r / 1e6, 3); Serial.println(F(" MOhm")); }
64 else if (r >= 1e3) { Serial.print(r / 1e3, 3); Serial.println(F(" kOhm")); }
65 else { Serial.print(r, 3); Serial.println(F(" Ohm")); }
66}
67
68void setup() {
69 Serial.begin(9600);
70 Serial.println(F("SMD kodunu yaz (or. 103, 4702, 4R7, 01C) / Type an SMD code"));
71}
72
73void loop() {
74 if (Serial.available()) {
75 String kod = Serial.readStringUntil('\n');
76 kod.trim();
77 if (kod.length() == 0) return;
78 float r = smdCoz(kod);
79 Serial.print(kod);
80 Serial.print(F(" = "));
81 if (r < 0) Serial.println(F("gecersiz kod / invalid code"));
82 else ohmYaz(r);
83 }
84}ESP32とRaspberry Pi Picoで測る
抵抗計のコードをESP32で使うには、測定用のピンを34に変え、Rrefの上端を3V3ピンにつなぎます。GPIO 34はADC1グループのピンで、Wi-Fiがオンの間も動作し続けます。Unoと違って、ESP32のADCは電源電圧に対してレシオメトリックではなく、範囲の両端付近では直線性もありません。そのため、式の1024を4096に置き換えるだけでは10%を超える誤差が出ることがあります。代わりに、キャリブレーション済みのミリボルトを返すanalogReadMilliVolts()を使い、式をRx = Rref × V / (3300 − V)(Vの単位はミリボルト)とします。3300の代わりに、3V3ピンでテスターで測った電圧を入れると、結果はさらによくなります。ADCは約3.1 Vで飽和するので、開放(何もつながっていない状態)を判定するしきい値を約3000 mVまで下げ、測る抵抗を基準抵抗に近い値にしてください。Raspberry Pi Picoでは、下のMicroPythonのコードがSMDコードの解読とGP26での抵抗の測定の両方を行います。Picoのread_u16()は0〜65535の値を返すので、式の1024はここでは65535になります。Picoが初めてなら、Raspberry Pi Picoとは?から始めてください。
1from machine import ADC
2import time
3
4E96 = [100, 102, 105, 107, 110, 113, 115, 118, 121, 124, 127, 130, 133, 137, 140, 143,
5 147, 150, 154, 158, 162, 165, 169, 174, 178, 182, 187, 191, 196, 200, 205, 210,
6 215, 221, 226, 232, 237, 243, 249, 255, 261, 267, 274, 280, 287, 294, 301, 309,
7 316, 324, 332, 340, 348, 357, 365, 374, 383, 392, 402, 412, 422, 432, 442, 453,
8 464, 475, 487, 499, 511, 523, 536, 549, 562, 576, 590, 604, 619, 634, 649, 665,
9 681, 698, 715, 732, 750, 768, 787, 806, 825, 845, 866, 887, 909, 931, 953, 976]
10EIA = {"Z": 0.001, "Y": 0.01, "R": 0.01, "X": 0.1, "S": 0.1, "A": 1,
11 "B": 10, "H": 10, "C": 100, "D": 1000, "E": 10000, "F": 100000}
12
13def smd_coz(kod):
14 kod = kod.strip().upper()
15 if "R" in kod: # R ondalık virgüldür: 4R7, R47 / R is the decimal point
16 if kod.count("R") != 1 or not kod.replace("R", "").isdigit():
17 return None
18 return float(kod.replace("R", "."))
19 if len(kod) == 3 and kod[:2].isdigit() and kod[2] in EIA: # EIA-96: 01C
20 sira = int(kod[:2])
21 return E96[sira - 1] * EIA[kod[2]] if 1 <= sira <= 96 else None
22 if kod.isdigit():
23 if len(kod) <= 2:
24 return 0.0 if int(kod) == 0 else None # 0 ya da 00: köprü / 0 or 00: jumper
25 return int(kod[:-1]) * 10 ** int(kod[-1]) # son hane sıfır sayısı / last digit = number of zeros
26 return None
27
28def ohm_yaz(r):
29 if r >= 1e6:
30 return "{:.3g} MOhm".format(r / 1e6)
31 if r >= 1e3:
32 return "{:.3g} kOhm".format(r / 1e3)
33 return "{:.3g} Ohm".format(r)
34
35adc = ADC(26) # GP26 = ADC0
36RREF = 10000 # 3V3 ile GP26 arasındaki bilinen direnç / known resistor between 3V3 and GP26
37
38def olc():
39 toplam = 0
40 for _ in range(32): # 32 okumanın ortalaması / average of 32 readings
41 toplam += adc.read_u16()
42 time.sleep_ms(2)
43 ham = toplam / 32
44 if ham > 65000:
45 return None # açık devre / open circuit
46 return RREF * ham / (65535 - ham)
47
48for kod in ("103", "4702", "4R7", "01C", "68X"):
49 print(kod, "=", ohm_yaz(smd_coz(kod)))
50
51while True:
52 rx = olc()
53 print("Rx =", ohm_yaz(rx) if rx is not None else "acik devre / open circuit")
54 time.sleep(1)よくある間違いと直し方
| 間違い | 起きる理由 | 直し方 |
|---|---|---|
| 100と表記された抵抗を100 Ωだと思う | 最後の桁はゼロの数 | 100 = 10 Ω。100 Ωは101または1000と書く |
| 01Cを100 Ωだと思う | EIA-96のコードは番号 | 01 = 100、C = × 100。結果は10 kΩ |
| 104と表記された部品をすべて100 kΩだと思う | コンデンサのコードの単位はpF | 部品の種類を見分ける。コンデンサなら104 = 100 nF |
| 回路の中で値が小さく出る | ほかの部品が並列につながっている | 抵抗を外すか、片方の端を浮かせてから測る |
| 注文した部品がとても小さい | インチ系とメートル系の0603を取り違えた | 注文時にメートル系の対応サイズ(1608)を確認する |
| タンタルコンデンサが熱くなった | 逆向きに取り付けた | 帯のある側がプラス。部品を交換する |
| コードからおかしな値が出る | 逆さまに読んでいるか、抵抗ではない | 180度回して読み直す。必要なら測る |
SMDのコードを練習するアイデア
- 自分のボードを調べる:Arduino NanoやESP32のボードに載っている抵抗のコードを読みます。LEDの横の102や103のコードを見つけ、どの抵抗がどのLEDに電流を流しているかを調べましょう。
- ディスプレイ付きの抵抗計:上の抵抗計をI2C LCDディスプレイと組み合わせて、持ち運べる抵抗計を作ります。
- 容量計:表記のないセラミックコンデンサを抵抗経由で充電し、RC時定数を測って値を求めます。方法はコンデンサとは?で紹介しています。
- 自分のPCB:0805の抵抗とコンデンサで、初めてのPCBを設計します。手順はEasyEDAでのPCB設計で解説しています。
- 電池の電圧計:2個のSMD抵抗で分圧回路を作り、Arduinoで9 V電池を測ります。抵抗は「分圧回路」ツールで選べます。
- 整理された部品箱:取り外したSMD部品を、コードを書いたラベル付きの箱に保管します。表記のない部品は測って、値をラベルに書いておきます。
SMDのコードを読むのは、最初は暗号を解くように思えるかもしれません。しかしいくつかのルールを覚えれば、基板上のどの抵抗やコンデンサも、自分の役割を教えてくれるようになります。カラーコードの帯が付いた抵抗の仕組みをもう一度確認したいなら、抵抗とは?を見てください。BlueGraysアプリには、LEDの点灯やLDRでの光の測定から、NTCでの温度測定やデジタル電圧計まで、抵抗が大切な役割を果たすプロジェクトがあり、それぞれステップごとの回路図とコードが付いています。
よくある質問
SMD抵抗の103はどういう意味ですか?
103は、10の後ろにゼロを3つ付けた10,000 Ω、つまり10 kΩという意味です。3桁のコードでは、最初の2桁が値、最後の1桁がゼロの数です。同じ10 kΩの抵抗でも、誤差1%の品なら1002、0603サイズならEIA-96のコードで01Cと表記されることがあります。
100と表記されたSMD抵抗は何オームですか?
100というコードは100 Ωではなく10 Ωです。10の後ろにゼロが付かないという意味です。100 Ωの抵抗は、3桁のコードでは101、4桁のコードでは1000と表記されます。SMDのコードを読むときにいちばん多い間違いです。
01CのSMD抵抗の値はいくつですか?
01CはEIA-96のコードで、10 kΩに当たります。01はE96系列の最初の値である100を表し、文字のCは× 100の乗数です。このコードは0603サイズの誤差1%の抵抗に使われ、値は表かコード解読ツールでしか読めません。
コンデンサの104はどういう意味ですか?
104は、ピコファラドで10の後ろにゼロを4つ付けた値、つまり100,000 pF = 100 nF = 0.1 µFという意味です。ただし、セラミックのSMDコンデンサのほとんどには表記がまったくありません。104をよく見かけるのは、リード付きの円板形コンデンサ、タンタルコンデンサ、あるいは基板の印刷です。
0805と1206のSMD抵抗の違いは何ですか?
違いはサイズと、それにともなう定格電力です。0805は約2.0 × 1.25 mmで一般に1/8 W、1206は3.2 × 1.6 mmで1/4 Wです。値のコードは同じです。1206は、電力を多く消費する回路や手はんだに向いています。
表記のないSMD抵抗はどうやって測りますか?
テスターを抵抗レンジにして、できれば抵抗を回路から外してから測ってください。並列の経路があると値が小さく出るからです。0402以下のサイズの抵抗にはコードが印刷されていないので、測るしか方法はありません。テスターがなければ、値のわかっている基準抵抗を使ってArduinoで簡単な抵抗計を作れます。
この記事を読んだ後に作れるプロジェクト
全プロジェクトを見る
LEDの点滅
電子工作の第一歩は、1個のLEDを点けたり消したりすることです。Arduinoで短い間隔で点灯と消灯を繰り返すと、LEDが素早く点滅します。ボードが光を制御する仕組みを最もシンプルな形で確かめ、これから取り組むプロジェクトの基礎を身につけます。

LDRで光の強さを測定
部屋の明るさを数値で見てみませんか?光に反応する小さな部品、LDRで周囲の光を測定し、Arduinoが0.5秒ごとにその値をコンピューターの画面に表示します。手で覆うと数値が変わる様子を確認できます。自動で点灯する常夜灯などのプロジェクトへの第一歩です。

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

ESP32とLDRモジュールで光の強さを読み取る
LDRモジュールの生のADC値と、暗い状態・明るい状態の基準値から計算した相対的な明るさの割合を、シリアルモニタでリアルタイムに確認します。この割合はルクスの測定値ではありません。モジュールの校正の仕組みを学べます。しきい値の決定に使うため、プロジェクト10の前に取り組むのが適しています。

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

LCDディスプレイ付きデジタル電圧計
自作の測定器で、電池や電源アダプターが出力する電圧を調べます。2つの抵抗で作る分圧回路が、高い電圧をボードで読み取れるレベルまで下げます。Arduinoが元の電圧を計算し、2行のLCDディスプレイにボルト単位で表示します。この回路では約55ボルトまでの直流電圧を測定できます。コンセントの商用電源には絶対に接続しないでください。

NTCと2x16 LCDディスプレイで温度を測定
小さなビーズのようなセンサーで周囲の温度を測ります。NTCというこの部品は、温まるほど電気が流れやすくなります。Arduinoがその変化を読み取り、数式で摂氏温度に変換して、2行のLCDディスプレイに0.5秒ごとに表示します。手のひらでセンサーを温めて、数値が上がる様子を見るのも楽しみの1つです。

RGB LEDの使い方
1つのLEDに3つの色が入っています。RGB LEDが赤、緑、青の順に、それぞれ0.5秒点灯して0.5秒消灯し、このサイクルを繰り返します。ArduinoにRGB LEDを1つと抵抗を3つ接続するだけです。色とりどりの光を使うプロジェクトを、手軽に始められます。
ほかの記事
BlueGraysアプリ
この回路をスマホでステップごとに作る
回路図、コード、部品リストを1つの画面で確認できます。Arduino、ESP32、Picoのプロジェクトを200件以上用意しています。

