トランジスタとは?しくみ、NPNとPNPの違い、Arduinoでの使い方
トランジスタとは何か、どう動くのかを解説します。NPNとPNPの違い、ベース抵抗の計算、BC547・2N2222A・TIP120の比較、Arduinoでのモーターとリレーの回路を紹介します。
トランジスタは、小さな電流でずっと大きな電流を制御する、3本足の半導体部品です。基本の役割は2つあり、電子スイッチとして負荷をオン・オフすることと、弱い信号を強くする増幅器として働くことです。Arduinoのピンが安全に流せる電流は約20 mAだけです。LEDには十分ですが、モーター、リレー、12 VのLEDテープを動かすには足りません。そこでトランジスタの出番です。ピンからの数ミリアンペアで、数百ミリアンペア、さらには数アンペアの電流を制御できます。
トランジスタは1947年にベル研究所でジョン・バーディーン、ウォルター・ブラッテン、ウィリアム・ショックレーによって発明されました。真空管に取って代わり、コンピューターをポケットに入るほど小さくしました。今ではスマートフォンのプロセッサには数十億個の小さなトランジスタが入っていて、Arduinoの心臓部であるATmega328Pも膨大な数のトランジスタでできています。この記事では、NPNとPNPの違い、ベース、コレクタ、エミッタの役割、ベース抵抗の計算方法、BC547、2N2222A、TIP120の比較、Arduino、ESP32、Raspberry Pi Picoでモーター、リレー、LEDテープを動かす方法、テスターで足を見分ける方法を学びます。

トランジスタとは?そのしくみ
トランジスタは水道の蛇口にたとえられます。ハンドルを回すのに必要な力はわずかですが、パイプには大量の水が流れます。トランジスタでは、ハンドルにあたるのがベース電流、パイプを流れる水にあたるのがコレクタからエミッタへ流れる主電流です。両者の比がトランジスタの電流増幅率で、データシートではhFEまたはβ(ベータ)と書かれます:IC = hFE × IB。たとえば、hFEが200のBC547のベースに0.1 mAを流すと、コレクタには最大20 mAが流れます。シリコントランジスタが導通し始めるには、ベースとエミッタの間に約0.6〜0.7 Vが必要です。これは内部にあるダイオードのような接合のしきい値電圧です。エミッタから出る電流は両方の合計です:IE = IC + IB。
| 足 | 記号 | 役割 | NPNのスイッチ回路での接続先 |
|---|---|---|---|
| ベース | B | 制御端子。小さな電流がここから入る | 抵抗を通してArduinoのピンへ |
| コレクタ | C | 負荷の電流がここから入る | 負荷のマイナス側へ |
| エミッタ | E | 合計の電流がここから出る(IE = IC + IB) | GNDへ |
NPNトランジスタとPNPトランジスタの違い
バイポーラトランジスタ(BJT)は3層の半導体でできています。NPNトランジスタでは中央の薄いP層がベースで、ベースがエミッタより約0.7 V高くなると、コレクタからエミッタへ電流が流れます。PNPトランジスタではすべてが逆です。エミッタを電源のプラスにつなぎ、ベースをエミッタより約0.7 V低くすると、エミッタからコレクタへ電流が流れます。記号の覚え方はエミッタの矢印です。NPNは外向き、PNPは内向きです。Arduinoのプロジェクトでは、エミッタをそのままGNDにつなげて、ピンをHIGHにするとオンになるため、NPNのほうがずっとよく使われます。負荷は電源のプラスとコレクタの間に入ります。これをローサイドスイッチと呼びます。
| 項目 | NPN | PNP |
|---|---|---|
| 記号の矢印 | エミッタから外向き | エミッタへ内向き |
| エミッタの接続先 | GND(マイナス) | 電源のプラス(+) |
| オンにするときのベース | エミッタより≈0.7 V高い(ピンHIGH) | エミッタより≈0.7 V低い(ピンLOW) |
| 主電流の向き | コレクタからエミッタへ | エミッタからコレクタへ |
| 負荷の位置 | +とコレクタの間(ローサイド) | コレクタとGNDの間(ハイサイド) |
| よく使う部品 | BC547、S8050、2N2222A、BC337、TIP120 | BC557、S8550、2N2907A、BC327、TIP125 |
動作領域:遮断、活性、飽和
| 領域 | 条件 | コレクタ電流 | VCE | 用途 |
|---|---|---|---|---|
| 遮断領域 | VBE < ≈0.6 V、ベース電流なし | ほぼゼロ | 電源電圧に近い | スイッチOFF |
| 活性領域 | VBE ≈ 0.65〜0.7 V、適度なベース電流 | IC = hFE × IB | その中間 | 増幅器 |
| 飽和領域 | IBがIC / hFEよりずっと大きい | 負荷と電源で決まる | 0.1〜0.3 V(ダーリントンは0.8〜2 V) | スイッチON |
トランジスタをスイッチとして使うときは、完全にオフ(遮断)か完全にオン(飽和)の2つの状態だけで使います。その間の活性領域は増幅器のためのもので、スイッチでは避けたい状態です。トランジスタが消費する電力はP = VCE × ICだからです。飽和した2N2222Aは150 mAで最大0.3 Vしか落とさず、発熱はわずか45 mWです。同じ電流で半分オンのまま3 Vを落とすと、450 mWを消費します。これはTO-92パッケージの上限625 mWにかなり近く、トランジスタは触れないほど熱くなります。そのため、スイッチ回路では必ずベースに十分な電流を流し、トランジスタをしっかり飽和させます。
増幅器としてのトランジスタ
トランジスタを活性領域に保つと、ベースの小さな変化をコレクタの大きな変化に拡大します。たとえばhFEが200のトランジスタでは、ベース電流が10 µA増えるとコレクタ電流は2 mA増えます。2.2 kΩのコレクタ抵抗では、これは4.4 Vの電圧変化になります。マイクのプリアンプ、ラジオ、オーディオアンプはこの原理で動いています。最もよく使われる回路はエミッタ接地増幅回路です。分圧回路でベースを活性領域の中央に設定し、エミッタの抵抗(RE)で温度変化に対して回路を安定させます。電圧増幅率はおよそRC / REで、4.7 kΩと470 Ωなら約10倍です。エレクトレットマイクの中にも、信号を強める小さなトランジスタ(JFET)が入っています。Arduinoのプロジェクトでは、センサーの信号の増幅には既製のICを使うのが一般的です。詳しくはオペアンプとは?をご覧ください。この記事の残りでは、Arduinoで最もよく必要になるスイッチとしての使い方を中心に解説します。
トランジスタのスイッチをArduinoにつなぐ
最もよく使う回路は、NPNトランジスタを使ったローサイドスイッチです。負荷(モーター、リレーのコイル、LEDテープ)のプラス側を外部電源のプラスにつなぎ、マイナス側をトランジスタのコレクタにつなぎます。エミッタはGNDへつなぎます。Arduinoのピンは必ず抵抗を通してベースにつなぎます。この抵抗は、ピンから流れる電流とベース電流の両方を制限します。ベースとGNDの間の10 kΩの抵抗は、電源投入時やリセット中にピンが浮いている間に、トランジスタが勝手にオンになるのを防ぎます。この構成では、トランジスタは負荷からGNDへの経路を開け閉めするだけなので、Arduinoを5 Vで動かしたまま、負荷を12 Vで動かせます。
| 接続 | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| 制御ピン(ベース抵抗の入力側) | D9(PWM)またはD7 | GPIO 18 | GP15 |
| ベースとGNDの間のプルダウン抵抗 | 10 kΩ | 10 kΩ | 10 kΩ |
| エミッタ | GND | GND | GND |
| コレクタ | 負荷のマイナス(−) | 負荷のマイナス(−) | 負荷のマイナス(−) |
| 負荷のプラス(+) | 外部電源の+(例:12 V) | 外部電源の+(例:12 V) | VBUS(5 V)または外部電源の+ |
| 外部電源のマイナス(−) | ArduinoのGND(共通GND) | ESP32のGND(共通GND) | PicoのGND(共通GND) |
ベース抵抗の計算:hFEと飽和
ベース抵抗を選ぶには、負荷が流す電流(IC)と、トランジスタのデータシートにある最小のhFEの2つが必要です。同じ型番でも、hFEは個体ごとに、また温度や電流によって大きく変わります。BC547では110から800までの幅があります。そのため、標準値ではなく最小値で計算し、結果に2〜10倍の安全係数を掛けます。式はIB = (IC / hFE) × 安全係数とRB = (Vpin − VBE) / IBです。VpinはArduino Unoでは5 V、ESP32とPicoでは3.3 Vです。VBEは通常のトランジスタで約0.7 V、TIP120のようなダーリントンでは約1.4 Vです。よく使われる簡便法は、飽和のためにhFEを10と仮定する方法(強制ベータ)です。データシートの飽和電圧は、まさにこの条件で規定されています。
- 負荷電流を求める:コイルが70 Ωの5 Vリレーは、オームの法則により5 / 70 ≈ 71 mAを流します。計算にはオームの法則ツールが使えます。
- トランジスタを選ぶ:71 mAはBC547の上限100 mAにかなり近いので、600 mA定格の2N2222Aのほうが安全です。
- ベース電流を計算する:強制ベータを10とすると、IB = 71 / 10 ≈ 7 mAです。
- 抵抗を計算する:Unoでは、RB = (5 − 0.7) / 0.007 ≈ 614 Ωです。1つ上の標準値の680 Ωを選ぶと、ベース電流は約6.3 mAになります。
- 3.3 Vのボードで計算し直す:ESP32やPicoでは、RB = (3.3 − 0.7) / 0.007 ≈ 371 Ωです。次の標準値の390 Ωか、より一般的な470 Ω(約5.5 mA)で問題ありません。それでも強制ベータは約13です。
- 最終確認:ピンの電流は20 mA未満、トランジスタの電流定格は負荷電流の1.5倍以上、消費電力(VCE(sat) × IC ≈ 0.2 V × 71 mA ≈ 14 mW)はパッケージの上限よりずっと小さいことを確かめます。
| 負荷(電流) | おすすめのトランジスタ | Arduino Uno(5 V) | ESP32 / Pico(3.3 V) |
|---|---|---|---|
| LEDのグループ、ブザー(20〜50 mA) | BC547、S8050 | 2.2 kΩ(≈2 mA) | 1.2 kΩ(≈2.2 mA) |
| 5 Vリレーのコイル(70〜90 mA) | 2N2222A、BC337、S8050 | 680 Ω(≈6.3 mA) | 470 Ω(≈5.5 mA) |
| 小型DCモーター、短いLEDテープ(0.3〜1 A) | TIP120 | 1 kΩ(≈3.6 mA) | 470 Ω(≈4 mA) |
| 1.5 A超(大型モーター、長いLEDテープ) | ロジックレベルMOSFET | IRLZ44N。ゲートに220 Ω、ゲートとGNDの間に10 kΩ | IRLB8721。ゲートに220 Ω、ゲートとGNDの間に10 kΩ |
BC547、2N2222A、TIP120:よく使うトランジスタの比較
| 型番 | 種類 / パッケージ | VCEO | 連続IC | hFE | ピンの順番 | 主な用途 |
|---|---|---|---|---|---|---|
| BC547 | NPN / TO-92 | 45 V | 100 mA | 110〜800(A、B、Cランク) | C-B-E | LED、ブザー、信号の切り替え |
| BC557 | PNP / TO-92 | 45 V | 100 mA | 125〜800 | C-B-E | BC547のPNP版、ハイサイドスイッチ |
| S8050 | NPN / TO-92 | 25 V | 500 mA | 85〜300(ランクによる) | E-B-C | スターターキット、リレーモジュール |
| 2N2222A | NPN / TO-92 | 40 V | 600 mA | 100〜300(150 mA時) | E-B-C | リレー、小型モーター、ファン |
| BC337 | NPN / TO-92 | 45 V | 800 mA | 100〜630 | C-B-E | リレー、LEDのグループ、振動モーター |
| TIP120 | NPNダーリントン / TO-220 | 60 V | 5 A | 1000以上 | B-C-E | DCモーター、LEDテープ、ソレノイド |
ピンの順番は、平らな印字面を手前に向け、足を下にして左から読みます。注意点として、BC547と2N2222Aは順番が逆(C-B-EとE-B-C)なので、片方をもう片方に置き換えるときはコレクタとエミッタを入れ替える必要があります。金属缶(TO-18)の2N2222や、メーカーの違う互換品では順番が異なることがあります。迷ったらテスターで確認しましょう。TIP120はダーリントントランジスタです。中に2つのトランジスタが縦続接続されているため増幅率は1000以上あり、1 kΩの抵抗を通してArduinoのピンから直接駆動できます。その代わり、トランジスタ自体で1〜2 Vの電圧降下があり、それに伴って発熱します。1 Aで約1 Wを消費し、ヒートシンクなしのTO-220パッケージは室温より約60 °C上がります。既製のドライバボードもトランジスタでできています。28BYJ-48ステッピングモーターのULN2003ボードには7つのダーリントンが入っていて、L298NモジュールにはトランジスタでできたHブリッジが2つ入っています。
ArduinoでDCモーターを動かす:TIP120とフライバックダイオード
では、6〜12 Vの小型DCモーターの速度をポテンショメーターで調整してみましょう。ArduinoのPWMピン9を1 kΩの抵抗を通してTIP120のベースにつなぎ、モーターを外部電源のプラスとTIP120のコレクタの間に入れます。エミッタはGNDへつなぎます。ポテンショメーターの両端の足を5VとGNDに、中央の足(ワイパー)をA0につなぎます。モーターにはフライバックダイオード(1N4007、またはより高速な1N5819)を逆向きに並列でつなぎます。帯のあるカソード側を電源のプラスに、もう一方をコレクタに向けます。PWM信号はトランジスタを1秒間に数百回オン・オフし、モーターは平均電圧に応じて速く、または遅く回ります。
1// TIP120 ile DC motor hız kontrolü / DC motor speed control with a TIP120
2const int MOTOR_PIN = 9; // PWM pini, 1 kΩ ile TIP120 beyzine / PWM pin, to the TIP120 base via 1 kΩ
3const int POT_PIN = A0; // potansiyometre orta ucu / potentiometer wiper
4
5void setup() {
6 pinMode(MOTOR_PIN, OUTPUT);
7 Serial.begin(9600);
8}
9
10void loop() {
11 int pot = analogRead(POT_PIN); // 0–1023
12 int speed = map(pot, 0, 1023, 0, 255); // PWM değerine çevir / convert to a PWM value
13 if (speed < 40) speed = 0; // çok düşükte motor yalnızca vızıldar / too low, the motor only hums
14 analogWrite(MOTOR_PIN, speed);
15 Serial.println(speed);
16 delay(50);
17}
リレーを動かす:2N2222Aで5 Vリレー
既製のリレーモジュールには、小さなトランジスタ、ベース抵抗、フライバックダイオードという、この回路がすでに入っています。単体の5 Vリレーを使う場合は、同じ回路を自分で組みます。リレーのコイルを5Vと2N2222Aのコレクタの間に入れ、1N4007ダイオードをコイルに逆向きに並列でつなぎ、D7ピンを680 Ωを通してベースにつなぎます。下のコードでは、シリアルモニタで1を入力するとリレーがオンになり、0を入力するとオフになります。リレーの接点で商用電源を切り替える前に、必ずリレーモジュールとは?の安全ルールを読んでください。
1// 2N2222A ile 5 V röle sürme / Driving a 5 V relay with a 2N2222A
2const int RELAY_PIN = 7; // 680 Ω ile transistör beyzine / to the transistor base via 680 Ω
3
4void setup() {
5 pinMode(RELAY_PIN, OUTPUT);
6 digitalWrite(RELAY_PIN, LOW); // açılışta kapalı / off at startup
7 Serial.begin(9600);
8 Serial.println("1: röle açık / relay on, 0: röle kapalı / relay off");
9}
10
11void loop() {
12 if (Serial.available() > 0) {
13 char c = Serial.read();
14 if (c == '1') {
15 digitalWrite(RELAY_PIN, HIGH); // transistör doyumda, röle çeker / transistor saturated, relay pulls in
16 Serial.println("Röle açık / relay on");
17 } else if (c == '0') {
18 digitalWrite(RELAY_PIN, LOW); // transistör kesimde, röle bırakır / transistor cut off, relay releases
19 Serial.println("Röle kapalı / relay off");
20 }
21 }
22}ESP32とRaspberry Pi Picoでトランジスタを使う
ESP32とPicoのピンは3.3 Vを出力するので、ベース抵抗は3.3 Vで計算する必要があります。5 V用に選んだ1 kΩでは、3.3 VのときTIP120に1.9 mAしか流れません。下のESP32の例では、GPIO 18のPWMで12 VのLEDテープをなめらかに明るくしたり暗くしたりします。1 mあたり60個のLEDが付いた5050のテープは、1 mあたり約1.2 Aを流します。1 mのテープなら470 Ωのベース抵抗とTIP120で足りますが、小さなヒートシンクを忘れないでください。LEDテープにはコイルがないので、フライバックダイオードは不要です。コードでは、ESP32 Arduinoコアのバージョン3.xにあるledcAttachとledcWrite関数を使っています。古い2.xでは、代わりにledcSetupとledcAttachPinを使っていました。
1// ESP32 ile 12 V LED şerit parlaklığı (TIP120) / 12 V LED strip brightness with ESP32 (TIP120)
2const int STRIP_PIN = 18; // 470 Ω ile TIP120 beyzine / to the TIP120 base via 470 Ω
3
4void setup() {
5 ledcAttach(STRIP_PIN, 1000, 8); // 1 kHz, 8 bit (0–255); çekirdek 3.x / core 3.x
6}
7
8void loop() {
9 for (int d = 0; d <= 255; d++) { // yavaşça aydınlan / fade in
10 ledcWrite(STRIP_PIN, d);
11 delay(10);
12 }
13 delay(1000);
14 for (int d = 255; d >= 0; d--) { // yavaşça karar / fade out
15 ledcWrite(STRIP_PIN, d);
16 delay(10);
17 }
18 delay(1000);
19}MicroPythonでRaspberry Pi Picoからトランジスタを駆動する方法も同じです。下のコードはPicoの内蔵温度センサーを読み、温度が32 °Cに達するとGP15のトランジスタを通して小型の5 Vファンを回し、29 °Cまで下がると止めます。しきい値を2つに分ける(ヒステリシス)ことで、境目でファンが細かくオン・オフを繰り返すのを防ぎます。ファンはVBUSピン(USBの5 V)から給電します。約100 mAのファンなら、1 kΩの抵抗とBC337か2N2222Aで足ります。ここでもファンにはダイオードを並列につなぎます。チップの温度は周囲より数度高く出ます。実際のプロジェクトでは、DS18B20などのセンサーのほうが正確です。
1# Pico yonga sıcaklığına göre fan / Fan controlled by the Pico's chip temperature
2from machine import Pin, ADC
3import time
4
5fan = Pin(15, Pin.OUT, value=0) # 1 kΩ ile transistör beyzine / to the transistor base via 1 kΩ
6sensor = ADC(4) # yonga içi sıcaklık sensörü / on-chip temperature sensor
7ON_C, OFF_C = 32, 29 # açma ve kapama eşikleri / switch-on and switch-off thresholds
8
9while True:
10 v = sensor.read_u16() * 3.3 / 65535
11 temp = 27 - (v - 0.706) / 0.001721 # RP2040 veri sayfası formülü / RP2040 datasheet formula
12 if temp >= ON_C:
13 fan.value(1) # transistör iletimde, fan döner / transistor on, fan spins
14 elif temp <= OFF_C:
15 fan.value(0) # transistör kesimde, fan durur / transistor off, fan stops
16 print("{:.1f} C, fan: {}".format(temp, fan.value()))
17 time.sleep(1)テスターでトランジスタの足を見分ける
- トランジスタを回路から外し、テスターをダイオードテストモード(ダイオードの記号)にします。
- 赤のテスト棒を1本の足に当てたまま、黒のテスト棒で残りの2本に順に触れます。どちらも0.5〜0.8 Vなら、赤のテスト棒の足がベースで、トランジスタはNPNです。
- そのような足が見つからなければ、テスト棒を入れ替えます。黒のテスト棒を1本の足に当てたまま、残りの2本が0.5〜0.8 Vなら、その足がベースで、トランジスタはPNPです。
- ベースと残りの2本の間の値を比べます。少し高いほう(たとえば0.62 Vに対して0.65 V)がエミッタ、低いほうがコレクタです。差がごくわずかなら、データシートを信じましょう。
- コレクタとエミッタの間は、どちらの向きでもOL(開放)になるはずです。ベースの測定で逆向きにしたときもOLになります。
- テスターにhFEソケットがあれば、見つけたピンの順番でトランジスタをNPNまたはPNPの穴に差し込みます。画面に電流増幅率が表示されます。
TIP120のようなダーリントントランジスタでは、ベースとエミッタの間に2つの接合と内部抵抗(約8 kΩと120 Ω)があるため、測定値はこのルールどおりになりません。ピンの順番はデータシートで確認してください。コレクタとエミッタの間でどちらの向きでもほぼゼロが表示されたら、トランジスタはショートしています。ベースからほかの足へ、どちらの向きでも値が出なければ、中の接合が断線しています。テスターのレンジについて詳しくは、テスターの使い方をご覧ください。
トランジスタを使ったプロジェクトのアイデア
- 自動ナイトライト:LDRが暗さを検知したら、TIP120で12 VのLEDテープを点灯します。
- スマートファン:DHT11で測った温度が上がるにつれて、PWMとトランジスタでファンの回転を速くします。
- 自動水やり:土壌水分センサーが土の乾きを検知したら、トランジスタを通して小型の水ポンプを動かします。
- 暗証番号ロック:キーパッドで正しい番号が入力されたら、TIP120とダイオードで12 Vのソレノイドロックを開けます。
- サイレント通知:BC337で振動モーターを動かし、身につけられる通知デバイスを作ります。
- 大音量アラーム:PIRセンサーが動きを検知したら、Arduinoのピンだけでは鳴らせない12 Vのサイレンをトランジスタで鳴らします。
よくある失敗と対処法
| 症状 | 考えられる原因 | 対処法 |
|---|---|---|
| 負荷がまったく動かない | 共通GNDがない、または足が逆 | 電源のマイナス同士をつなぎ、ピンの順番を確認する |
| トランジスタがとても熱くなる | 飽和していない(ベース電流不足)か、電流定格を超えている | ベース抵抗を小さくするか、より強いトランジスタかMOSFETを選ぶ |
| モーターが止まるとArduinoがリセットする、またはトランジスタが壊れる | フライバックダイオードがない | 1N4007か1N5819を負荷に逆向きに並列でつなぎ、帯をプラス側にする |
| ピンがLOWでも負荷が動く | トランジスタの破損(C-Eショート)か、ベースが浮いている | テスターでトランジスタを確認し、ベースとGNDの間に10 kΩを入れる |
| PNPトランジスタがオフにならない | エミッタは12 Vなのに、ピンは5 Vまでしか上がらない | PNPのベースをNPNで駆動するか、NPNでローサイドから負荷を切り替える |
| Arduinoのピンが壊れた | 抵抗なしでピンを直接ベースにつないだ | 必ずベース抵抗を使い、ピンの電流を20 mA未満にする |
| ESP32やPicoだと負荷の動きが弱い | 抵抗を5 V用に選んだ、またはMOSFETが3.3 Vで完全にオンにならない | ベース抵抗を3.3 Vで計算し、3.3 V対応のMOSFETを選ぶ |
トランジスタは、小さな信号で大きな負荷を制御する、つまりArduinoを現実の世界とつなぐための鍵です。ベース抵抗の計算、共通GND、フライバックダイオードがわかれば、モーター、ポンプ、LEDテープも怖くありません。BlueGraysアプリでは、LDRのナイトライト、ブザー、PWMでのLEDのフェード、ステッピングモーター、商用電源のランプ制御などのプロジェクトを、回路図とコード付きでステップごとに学べます。
よくある質問
トランジスタは何に使いますか?
トランジスタの基本の役割は2つです。小さな電流で大きな電流をオン・オフする電子スイッチとしての働きと、弱い信号を強くする増幅器としての働きです。Arduinoのプロジェクトでは、モーター、リレー、ファン、LEDテープなど、ピンだけでは動かせない負荷の制御によく使われます。
NPNトランジスタとPNPトランジスタの違いは何ですか?
NPNトランジスタはエミッタをGNDにつなぎ、ベースがエミッタより約0.7 V高くなると導通します。電流はコレクタからエミッタへ流れます。PNPはエミッタを電源のプラスにつなぎ、ベースをエミッタより0.7 V低くするとオンになります。ArduinoでGND側から負荷を切り替えるなら、NPNのほうが簡単です。
トランジスタのピンはどうやって見分けますか?
最も確実なのはデータシートです。印字面を手前に向けて左から、BC547はC-B-E、2N2222AはE-B-C、TIP120はB-C-Eの順です。データシートがなくても、テスターのダイオードモードでベースと種類がわかり、ベースとエミッタの間の値がベースとコレクタの間よりわずかに高いことでエミッタを見分けられます。
Arduinoにはどのトランジスタを使えばいいですか?
LEDやブザーなど50 mAまでの負荷ならBC547で十分です。5 Vリレーのコイル(70〜90 mA)や500 mAまでの小型モーターには2N2222AかBC337を、1 A前後のモーターやLEDテープにはTIP120を使います。それ以上の電流では、ロジックレベルMOSFETのほうが発熱が少なくなります。
トランジスタのベース抵抗は何Ωにすればいいですか?
ベース抵抗はRB = (Vpin − VBE) / IBで計算します。通常のトランジスタでは、負荷電流の10分の1をIBの出発点にするとよいでしょう。Arduino Unoでの目安は、5 Vリレーで680 Ω、LEDやブザーなど20〜50 mAの負荷で2.2 kΩ、TIP120で1 kΩです。
トランジスタが熱くなるのはなぜですか?
トランジスタの発熱はP = VCE × ICです。ベース電流が少なすぎるとトランジスタが飽和せず、数ボルトが残って熱くなります。負荷電流が定格を超えた場合も同じです。ベース抵抗を小さくするか、より強いトランジスタかMOSFETを選び、1 Aを超えるならヒートシンクを使いましょう。
この記事を読んだ後に作れるプロジェクト
全プロジェクトを見る
LDRで作る常夜灯
暗くなると自動で点灯し、朝になると消灯する小さな常夜灯です。光センサーが部屋の明るさを測定し、Arduinoが十分に暗くなったらLEDを点灯させ、明るくなったら消灯させます。街灯が夕方になると自動で点灯する仕組みも理解できます。

ブザーの使い方
呼び鈴やアラームがどうやって音を出すのか、気になったことはありませんか?Arduinoが小さなブザーを短い間隔で鳴らし、音を出す、止める、を繰り返します。電気で音が生まれる仕組みを学び、メロディーを演奏するプロジェクトへの第一歩を踏み出せます。

ESP32のPWMでLEDをフェード
LEDの明るさを0から最大へ、最大から0へと滑らかに変化させます。Arduinoと同じようにanalogWrite()でPWMを制御します。ESP32 Arduino Core 3.0+では同じ構文がそのまま使えます。ピンの定義とpinMode、analogWriteだけで実現できます。

Raspberry Pi PicoのPWMでLEDをフェード(呼吸のような明滅)
LEDを単に点滅させるだけでなく、呼吸するように明滅させます!Raspberry Pi PicoのPWM(パルス幅変調)を使い、スリープ中のMacBookのランプのように、明るさをゆっくり上げてからゆっくり下げます。machine.PWMクラス、duty_u16()(0–65535の16ビットの明るさ)、PWM周波数(freq(1000)で1秒間に1000回オン・オフし、ちらつきを感じさせない)、range()による段階的なループ(増加と減少)、デジタルピンからのアナログのような出力を学びます。PWMはRGBの混色やモーターなどに使われる、組み込み開発の基本技術です。

ステッピングモーターの使い方
時計の針のように、必要な分だけ正確に少しずつ回転するモーターです。Arduinoがドライバーボードを介して小さなステッピングモーターを一方向に1回転させ、1秒待ってから逆方向に1回転させます。ドア、カーテン、回転台など、正確な回転が必要なプロジェクトの基礎を学べます。

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

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

ESP32スマート照明(PIR + LDR + リレー + OLED)
ESP32で廊下やトイレ、食品庫の照明をスマート化します!PIRモーションセンサー、LDR光センサー、リレーモジュールを使い、「暗い場所で動きを検知すると点灯する」定番の仕組みを作ります。周囲が明るければ動きを検知しても点灯しないため、日中の無駄な電力消費を抑えられます。照明は30秒間点灯し、動きが続くとタイマーがリセットされて点灯時間が延びます。SSD1306 OLEDには大きな文字で状態(ON / DAYTIME / WAITING)とカウントダウンを表示します。
ほかの記事
BlueGraysアプリ
この回路をスマホでステップごとに作る
回路図、コード、部品リストを1つの画面で確認できます。Arduino、ESP32、Picoのプロジェクトを200件以上用意しています。

