基礎 · 読了まで16分

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で測る方法も紹介します。

102と表記されたSMD抵抗が載ったAMS1117 3.3 Vレギュレーターモジュール
AMS1117 3.3 Vレギュレーターモジュール。右側のSMD抵抗には102と表記されていて、その横の基板のシルク印刷には1K、つまり1 kΩと書かれています。見えている106と104はコンデンサ自体ではなく基板に印刷されたもので、セラミックのSMDコンデンサのほとんどには表記がまったくありません。

SMD抵抗とは?なぜカラーコードがないの?

SMD(Surface Mount Device、表面実装部品)は、リード線を穴に通さず、回路基板の表面にあるパッドに直接はんだ付けする部品のことです。SMD抵抗は、両端が金属めっきされた小さなセラミックのブロックで、上面の黒い保護膜が抵抗体の膜を守り、コードも載せています。0805の抵抗は2 × 1.25 mmしかないので、4本のカラーコードの帯を塗るのは現実的ではありません。代わりに、値が白い数字のコードで印刷されています。0402以下のサイズの抵抗にはその余地すらないので、表記はまったくありません。コードからわかるのは抵抗値だけだということを覚えておいてください。電力と電圧の上限は本体のサイズで決まり、誤差はたいていコードの種類から推測できます。

コードの種類例読み方値主に使われる部品
3桁10310にゼロを3つ10 kΩ誤差5%、0603以上
4桁4702470にゼロを2つ47 kΩ誤差1%、0805以上
Rあり4R7R = 小数点4.7 Ω10 Ω未満の値
EIA-9601C表の100 × 10010 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のボードやモジュールでのよくある用途
10010 Ω小さな直列抵抗、電流制限
22022 ΩUSBのデータ線の直列抵抗
221220 Ω5 VでのLEDの電流制限
331330 ΩLEDとトランジスタのベース抵抗
1021 kΩ基板上の電源LEDと状態表示LED
4724.7 kΩI2Cと1-Wireのプルアップ抵抗
10310 kΩリセットとボタンのプルアップ抵抗
47347 kΩ分圧回路
104100 kΩ電池の電圧を測る分圧回路
1051 MΩハイインピーダンスの入力
いちばん多い間違いはこれです。100と表記された抵抗は100 Ωではなく10 Ωです(10の後ろにゼロなし)。同じく220 = 22 Ω、470 = 47 Ωです。100 Ωの抵抗は、3桁のコードでは101、4桁のコードでは1000と表記されます。104にも注意してください。抵抗なら100 kΩですが、コンデンサなら100 nFです。コンデンサのコードの単位はオームではなくピコファラドだからです。

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.00101Z = 0.1 Ω
YまたはR× 0.0101Y = 1 Ω
XまたはS× 0.168X = 49.9 Ω
A× 101A = 100 Ω
BまたはH× 1085B = 7.5 kΩ
C× 10001C = 10 kΩ
D× 1,00051D = 332 kΩ
E× 10,00001E = 1 MΩ
F× 100,00001F = 10 MΩ
コード値コード値
0110051332
0511055365
0912159402
1313363442
1815066475
2216568499
2618273562
3020077619
3422185750
4226796976
コードからおかしな結果が出たら、部品を180度回してもう一度読んでください。小さな本体では6と9を取り違えやすく、681の抵抗を逆さまに持つと189に見えます。これだと18 GΩになりますが、そんなSMD抵抗はありません。正しい向きなら680 Ωです。見つけた値が標準値かどうかは、「標準抵抗値」ツールで確認できます。

下線、ゼロオーム、そのほかの特殊なケース

  • 下線:メーカーによっては、誤差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)一般的な電力一般的な最大電圧表記
020106030.6 × 0.31/20 W25 Vなし
040210051.0 × 0.51/16 W50 V通常はなし
060316081.6 × 0.81/10 W75 V3桁またはEIA-96
080520122.0 × 1.251/8 W150 V3桁または4桁
120632163.2 × 1.61/4 W200 V3桁または4桁
121032253.2 × 2.51/2 W200 V3桁または4桁
201050255.0 × 2.53/4 W200 V3桁または4桁
251263326.3 × 3.21 W200 V3桁か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かそれより大きい本体を選びます。この計算の考え方はオームの法則とは?を見てください。

同じ名前で違う2つのサイズがあります。インチ系の0603(1.6 × 0.8 mm)とメートル系の0603(0.6 × 0.3 mm、インチ系では0201)は大きく違います。注文するときは、商品ページにメートル系の対応サイズ(1608)が書かれているかを確認してください。そうしないと、ほこりの粒ほどの部品が届くかもしれません。

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です。コードをすばやく換算するには「コンデンサコード」ツールを使ってください。

コードpFnF/µF一般的な用途
22022 pF0.022 nF16 MHzの水晶振動子の横のコンデンサ
101100 pF0.1 nFフィルターとノイズ対策
1021,000 pF1 nFフィルター
10310,000 pF10 nFボタンやセンサーの信号線のノイズ除去
104100,000 pF100 nF = 0.1 µFすべてのICの電源ピンのパスコン
474470,000 pF470 nFレギュレーターとフィルターの回路
1051,000,000 pF1 µFレギュレーターの出力
10610,000,000 pF10 µFAMS1117のようなレギュレーターの入力と出力

大切なことがあります。セラミックの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電圧が上がると容量の大部分を失うことがあります。

本体に値が印刷された電解コンデンサ
電解コンデンサには、コードではなく値と電圧がそのまま印刷されています(例:470 µF 16 V)。SMDのアルミ電解コンデンサもたいてい同じです。

タンタルコンデンサは、たいてい黄色、オレンジ色、黒の長方形の本体です。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です。コンデンサの種類についてはコンデンサとは?で詳しく紹介しています。

タンタルコンデンサでは、本体の線や帯がプラス(+)端子を示します。一方、電解コンデンサでは印のある側がマイナスです。この逆の決まりが、組み立てでいちばん多い間違いの原因です。逆向きに取り付けたタンタルコンデンサはショートし、発熱して発火することもあるので、取り付ける前に必ずPCBの+の印を確認してください。

SMDトランジスタとダイオードのコード(1AM、J3Y、A7、M7)

SOT-23のような小さなパッケージには完全な型番が収まらないので、トランジスタやダイオードには2〜3文字のマーキングコードが付いています。これらのコードには統一された規格がありません。同じコードが2つのメーカーでまったく違う部品を表すこともあり、末尾の小さな文字はたいてい工場や製造日のコードです。部品を特定するときは、パッケージの種類、マーキングコード、回路の中での部品の役割という3つの手がかりを組み合わせて使います。バイポーラトランジスタでは、SOT-23のピンの順番はたいてい1 = ベース、2 = エミッタ、3 = コレクタです。2N7002のようなMOSFETでは1 = ゲート、2 = ソース、3 = ドレインです。ピン配置と互換品は「トランジスタ」ツールで、仕組みはトランジスタとは?で確認してください。

コードパッケージ部品種類
1AMSOT-23MMBT3904NPNトランジスタ(2N3904のSMD版)
2ASOT-23MMBT3906PNPトランジスタ(2N3906のSMD版)
1PSOT-23MMBT2222ANPNトランジスタ
1FSOT-23BC847BNPNトランジスタ(BC547Bの互換品)
3FSOT-23BC857BPNPトランジスタ(BC557Bの互換品)
J3YSOT-23S8050NPNトランジスタ、モジュールでとてもよく使われる
2TYSOT-23S8550PNPトランジスタ
702SOT-232N7002Nチャネルの小信号MOSFET
A7SOT-23BAV99直列につながった2個入りのスイッチングダイオード
T4SOD-1231N4148W高速スイッチングダイオード
M7SMA1N4007の互換品1 A、1000 Vの整流ダイオード
SS14SMASS141 A、40 Vのショットキーダイオード
SMDダイオードでは、本体の線がカソードを示します。SMD LEDの表記はメーカーによって違います。多くはカソード側に緑の線、点、または角の切り欠きがありますが、うのみにはしないでください。テスターをダイオードレンジにしてリードに当て、LEDがかすかに光れば、赤いテスト棒を当てている側がアノードです。詳しくはダイオードとは?とテスターの使い方を見てください。

表記がない、または読めない抵抗を測る: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 UnoESP32Raspberry Pi Pico
Rrefの上端5V3V33V3(OUT)
RrefとRxの接続点A0GPIO 34GP26(ADC0)
Rxの下端GNDGNDGND
C++ (Arduino IDE)
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のシリアルモニタを見てください。

C++ (Arduino IDE)
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とは?から始めてください。

MicroPython
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抵抗を交換するときは、同じ値で同じサイズの部品か、パッドが許せば1つ大きいサイズの部品を選び、電力の上限も忘れずに確認してください。はんだ付けには、先の細いはんだごて、ピンセット、フラックスを使います。まず片方のパッドに少しはんだを盛り、部品をピンセットでつまんでそのパッドに付け、それからもう片方の端をはんだ付けします。詳しくははんだ付けのやり方で紹介しています。

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の点滅

電子工作の第一歩は、1個のLEDを点けたり消したりすることです。Arduinoで短い間隔で点灯と消灯を繰り返すと、LEDが素早く点滅します。ボードが光を制御する仕組みを最もシンプルな形で確かめ、これから取り組むプロジェクトの基礎を身につけます。

4.6(188)
1127
LDRで光の強さを測定
#11初級

LDRで光の強さを測定

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

4.6(81)
139
ESP32でLEDを点滅
#103初級

ESP32でLEDを点滅

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

4.7(37)
99
ESP32とLDRモジュールで光の強さを読み取る
#113初級

ESP32とLDRモジュールで光の強さを読み取る

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

4.6(36)
55
Raspberry Pi Picoで外付けLEDを点灯(ブレッドボード)
#148初級

Raspberry Pi Picoで外付けLEDを点灯(ブレッドボード)

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

4.5(2)
7
LCDディスプレイ付きデジタル電圧計
#56中級
プレミアム

LCDディスプレイ付きデジタル電圧計

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

4.5(27)
36
NTCと2x16 LCDディスプレイで温度を測定
#44初級
プレミアム

NTCと2x16 LCDディスプレイで温度を測定

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

4.5(33)
44
RGB LEDの使い方
#39初級
プレミアム

RGB LEDの使い方

1つのLEDに3つの色が入っています。RGB LEDが赤、緑、青の順に、それぞれ0.5秒点灯して0.5秒消灯し、このサイクルを繰り返します。ArduinoにRGB LEDを1つと抵抗を3つ接続するだけです。色とりどりの光を使うプロジェクトを、手軽に始められます。

4.9(73)
98