なぜ74HC595が今も「最強のGPIO拡張」なのか
Arduino開発者が必ず直面する「ピン不足問題」
Arduinoで複雑なプロジェクトを作っていると、誰もが一度は経験する悩み――それが 「GPIOピンが足りない!」 という壁です。
- LCD(4〜8ピン)を接続したい
- 複数のLEDインジケータが必要
- モーター制御とセンサー読み取りを同時に
- さらにシリアル通信も使いたい…
Arduino UNO R4は処理能力が飛躍的に向上しましたが、物理的なピン数は変わっていません。そこで登場するのが 「74HC595シフトレジスタ」 です。
74HC595の圧倒的な優位性
2026年の今でも74HC595が圧倒的に支持される理由は明確です:
🚀 たった3本の信号線で無限拡張
- データ線(SER):シリアルデータ入力
- クロック線(SRCLK):シフトタイミング制御
- ラッチ線(RCLK):出力更新制御
この3本だけで8ビット(8個の出力)を制御でき、さらに カスケード接続により無制限に拡張可能 です。
💰 コストパフォーマンスの王者
- 1個あたり 約30〜50円(2026年2月現在)
- 大量生産時のアセンブリコストも最小
- 代替品が豊富で供給安定
⚡ 高速SPI通信対応
Arduino標準の shiftOut() 関数はもちろん、ハードウェアSPIを使えば MHz単位の高速通信 が可能。リアルタイム性が求められるLEDマトリクスやマルチプレクサ制御にも対応できます。
🔌 5V完全対応
最近のI2Cデバイスは3.3V専用が増えていますが、74HC595は 2V〜6V の広い動作電圧範囲。Arduino UNO R4と レベル変換なしで直結可能 です。
このプロジェクトで学べること
本記事では、74HC595を使った実践的なGPIO拡張技術を以下の流れで解説します:
- シフトレジスタとSPI通信の動作原理(初心者でも理解できる図解付き)
- KiCadを使った回路設計&基板レイアウト(設計ファイル公開)
- JLCPCBでのアセンブリ発注テクニック(費用対効果の最適化)
- カスケード接続による多段拡張(理論上無限に拡張可能)
- Arduinoサンプルコード(GitHub公開)
ℹ️ 関連記事
I2C方式でGPIOを拡張したい方は、以下の記事も参照してください:
👉 【Arduino】MCP23017で16本のピン追加&自己診断テスト
👉 【ESP32 I/O拡張】MCP23017で16ピン追加!完全ガイド
74HC595シフトレジスタ:動作原理を完全理解
74HC595とは何か?
74HC595は、SIPO(Serial In Parallel Out)型の8ビットシフトレジスタ です。
「シリアル入力」とは、データを1ビットずつ順番に送る方式。「パラレル出力」とは、8ビット分のデータを同時に8本のピンから出力する方式です。
つまり、74HC595は 「1本の線から送られてきたデータを、8本の線に分配する変換器」 と考えるとわかりやすいでしょう。
74HC595 内部ブロック図
なぜ「シフトレジスタ」と呼ばれるのか?
内部には8個の記憶素子(フリップフロップ)が直列に並んでおり、クロック信号が入るたびにデータが1ビットずつ「シフト(移動)」します。
クロック1回目: [1][0][0][0][0][0][0][0]
クロック2回目: [0][1][0][0][0][0][0][0] ← データが右に移動
クロック3回目: [1][0][1][0][0][0][0][0]
...
この「シフト動作」によって、1本の線から8ビット分のデータを順次格納できるのです。
主要ピン配置と機能
74HC595(DIPパッケージ)の重要なピンは以下の通りです:
| ピン番号 | ピン名 | 機能 | Arduinoとの接続例 |
|---|---|---|---|
| 14 | SER (DS) | シリアルデータ入力 | D11 (MOSI) |
| 11 | SRCLK (SHCP) | シフトレジスタクロック | D13 (SCK) |
| 12 | RCLK (STCP) | ストレージレジスタクロック(ラッチ) | D10 (SS) |
| 13 | OE | 出力イネーブル(Lowでアクティブ) | GND(常時有効) |
| 10 | SRCLR | シフトレジスタクリア(Lowでリセット) | +5V(リセット無効) |
| 9 | QH’ | カスケード用シリアル出力 | 次段のSERへ |
| 15〜1, 7 | QA〜QH | パラレル出力(8ビット) | LED, モーター等 |
【重要】2段階の出力更新プロセス
74HC595が他のシフトレジスタより優れている点は、「シフトレジスタ」と「ストレージレジスタ」の2段構成 になっていることです。
① シフトレジスタ(内部バッファ)
SERピンから入力されたデータが、SRCLKのクロックに同期して8ビット分格納される領域。この段階では まだ出力ピンには反映されません。
② ストレージレジスタ(出力バッファ)
シフトレジスタに8ビット分のデータが揃った後、RCLK(ラッチ)をHigh→Lowにすることで、一気に出力ピン(QA〜QH)に反映されます。
なぜこの2段構成が重要なのか?
もし1段だけだと、データをシフト中に出力が変化し続けるため、LEDがチラつく、モーターが誤作動する、といった問題が発生します。
2段構成により、「データ準備」と「出力更新」を分離 できるため、グリッチ(瞬間的な誤出力)が発生しない安定した制御 が可能になります。これがプロの基板設計で74HC595が選ばれる理由です。
タイミングチャート(動作シーケンス)
実際の信号のやり取りは以下のように進行します:
時刻 SER SRCLK RCLK → 出力(QA-QH)
T0 1 ↑ L → 変化なし(準備中)
T1 0 ↑ L → 変化なし
...
T7 1 ↑ L → 変化なし(8ビット揃った)
T8 - - ↑ → 一斉に更新!
RCLKが立ち上がる瞬間に、QA〜QHの全出力が一斉に変化します。この「同時更新」が74HC595の真骨頂です。
Arduino UNO R4での制御方法
最も基本的な制御は shiftOut() 関数です:
// データ0b10101010を送信
digitalWrite(latchPin, LOW); // ラッチを開く
shiftOut(dataPin, clockPin, MSBFIRST, 0b10101010);
digitalWrite(latchPin, HIGH); // ラッチを閉じて出力更新
より高速な制御が必要な場合はハードウェアSPIを使用します:
#include <SPI.h>
void setup() {
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV2); // 高速化
}
void loop() {
digitalWrite(latchPin, LOW);
SPI.transfer(0b10101010); // shiftOut()の約10倍高速
digitalWrite(latchPin, HIGH);
}
Arduino UNO R4完全対応
R4の強化ポイントが74HC595制御で活きる
Arduino UNO R4は従来のR3から大幅に進化しています:
| 項目 | UNO R3 | UNO R4 Minima | 74HC595制御への影響 |
|---|---|---|---|
| CPU | ATmega328P (8bit) | RA4M1 (32bit Cortex-M4) | 高速SPI通信が可能 |
| 動作周波数 | 16MHz | 48MHz | データ転送速度3倍 |
| SPI最大速度 | 8MHz | 24MHz | カスケード接続時の遅延減少 |
| デジタルピン | 14本 | 14本 | ピン配置はR3互換 |
重要: R4はCPU性能が向上していますが、ピン配置は完全にR3互換。したがって、本記事の回路図とコードはR4/R3の両方で動作します。
R4特有の注意点
USB書き込みエラーの対処法
R4 Minimaで初回書き込み時に「DFUモードエラー」が出る場合:
- RSTボタンを 2回連続で素早く押す
- オンボードLEDがオレンジ色に点滅したら書き込み開始
- Arduino IDE 2.x系を使用(1.8系では不安定)
回路設計:理論と実装の架け橋
設計コンセプト
今回の基板設計では、以下の3つの要件を満たすことを目指しました:
- カスケード接続対応:複数枚を連結して無限拡張可能
- 視覚的デバッグ機能:各ビットの状態をLEDで即座に確認
- コスト最適化:JLCPCBアセンブリとの相性を考慮した部品選定
回路図の詳細解説
74HC595 LED制御基板 回路図
電源部
- VCC(5V) と GND をArduinoから供給
- バイパスコンデンサ(0.1µF) を74HC595のVCCピン直近に配置
- 高速スイッチング時のノイズ除去
- 電源の瞬間的な電圧降下を補償
74HC595接続部
Arduino 74HC595
D11 (MOSI) → SER (Pin 14) データ入力
D13 (SCK) → SRCLK (Pin 11) シフトクロック
D10 (SS) → RCLK (Pin 12) ラッチ
- OE (Pin 13) → GND:出力常時有効
- SRCLR (Pin 10) → VCC:リセット無効化(プルアップ)
- QH’ (Pin 9) → 次段のSER:カスケード接続用
LED駆動部の設計
各出力ピン(QA〜QH)に以下を接続:
QA (Pin 15) ─┬─ 抵抗(330Ω) ─ LED(緑) ─ GND
└─ ジャンパ(オプション無効化用)
抵抗値の計算根拠:
- 74HC595の出力電圧:5V
- 緑色LED順方向電圧:Vf = 2.0V
- 目標LED電流:10mA(視認性と消費電力のバランス)
R = (5V - 2.0V) / 10mA = 300Ω
→ E24系列で最も近い 330Ω を選定
実際の電流:(5V - 2.0V) / 330Ω ≒ 9.1mA
8個同時点灯時の総電流: 約73mA(74HC595の最大出力電流150mA以内)
カスケード接続の仕組み
複数の基板を連結する場合、1段目の QH’ を2段目の SER に接続します。
Arduino → [基板1] QH' → SER [基板2] QH' → SER [基板3] ...
Arduinoから送られた最初の8ビットは基板3へ、次の8ビットは基板2へ、最後の8ビットは基板1へと順次格納されます。
制御コード例(3枚カスケード接続時):
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 0b10101010); // 基板3
shiftOut(dataPin, clockPin, MSBFIRST, 0b11001100); // 基板2
shiftOut(dataPin, clockPin, MSBFIRST, 0b11110000); // 基板1
digitalWrite(latchPin, HIGH); // 3枚同時に出力更新
PCB基板レイアウト(KiCad設計)
74HC595 LED制御基板 配線図
レイアウトの工夫
- 信号線の引き回し:SPIラインは最短距離で配線してノイズ低減
- GNDプレーン:裏面全体をベタグラウンドにして電源安定化
- コネクタ配置:基板の上下にピンヘッダ/ソケットを配置して積層可能に
- シルク印刷:ピン番号とQA〜QHの出力を明記
基板仕様
- サイズ:50mm × 50mm(JLCPCBの安価な範囲)
- 層数:2層(表面+裏面)
- 基板厚:1.6mm(標準)
- 表面処理:HASL(鉛フリー)
JLCPCBでのアセンブリ発注:コストと時間の最適化
なぜJLCPCBアセンブリを選ぶのか
自分で抵抗とLEDを30枚分(240個)ハンダ付けする労力を考えると、JLCPCBのアセンブリサービスは 時間・品質・コストの全てで優位 です。
| 項目 | 自分で実装 | JLCPCBアセンブリ |
|---|---|---|
| 部品調達 | 秋月・千石などで購入 | JLCPCBの在庫から自動 |
| 実装時間 | 240個分の手ハンダ(数時間) | ゼロ(機械実装) |
| 品質 | ハンダ不良のリスクあり | リフロー炉で均一実装 |
| コスト | 部品代 + 時給換算 | 基板代込みで1枚約$1.5 |
発注データの準備
① Gerberファイル生成(KiCad)
Plot → Gerber Format で以下のレイヤーを出力:
- F.Cu, B.Cu(表裏の銅箔)
- F.SilkS, B.SilkS(シルク印刷)
- F.Mask, B.Mask(ソルダーマスク)
- Edge.Cuts(基板外形)
- ドリルファイル
→ これらを ZIPファイルにまとめて JLCPCBにアップロード
② BOMファイル(部品表)
以下のフォーマットでCSVを作成:
Comment,Designator,Footprint,LCSC Part #
74HC595D,U1,SOIC-16,C5947
330Ω,R1-R8,0805,C17630
LED Green,D1-D8,0805,C2297
0.1µF,C1,0805,C49678
LCSC Part # はJLCPCBの在庫番号。LCSC.com で部品を検索して番号を確認します。
③ CPLファイル(部品配置座標)
KiCadの Place → Footprint Position File で生成。X/Y座標と回転角度がリストされたCSVファイルです。
実際の発注内容と費用
今回の発注実績(2026年2月):
- 基板枚数:30枚
- 基板サイズ:50mm × 50mm
- アセンブリ面:片面のみ
- 部品点数:18点/枚(IC 1個、抵抗 8個、LED 8個、コンデンサ 1個)
費用内訳:
基板製造費: $8.50
アセンブリ費: $18.00(セットアップ費)
部品費: $15.20(30枚分)
送料: $12.00(DHL Express)
──────────────────
合計: $53.70(約 6,800円)
1枚あたり: 約 227円
手作業との比較:
- 部品調達:秋月で同じ部品を買うと約5,000円
- 作業時間:手ハンダで約6時間(時給1,000円換算で6,000円)
- 合計11,000円 → アセンブリで6,800円
届いた基板の品質
JLCPCBから届いた実装済み基板
- 抵抗・LED・ICが全て正確に実装済み
- ハンダの盛り具合も均一(リフロー炉の威力)
- 発注から到着まで 約7日間(DHL Express使用)
自分で行う作業:
- ピンヘッダ/ソケットのスルーホール部品のみハンダ付け
- 動作確認
これだけで完成するのが、アセンブリサービスの最大の魅力です。
実装とカスケード接続:無限拡張の実現
スルーホール部品の実装
届いた基板に、ピンヘッダとピンソケットをハンダ付けします。
コネクタ実装前の基板
推奨する部品:
- ピンヘッダ(オス):2.54mmピッチ、ストレート型
- ピンソケット(メス):2.54mmピッチ、スタッキング対応
ハンダ付けのコツ:
- 基板を固定治具(または第三の手)でしっかり固定
- 最初に対角の2本だけ仮止めして、垂直になっているか確認
- 問題なければ全ピンをハンダ付け
- フラックスを使うとハンダの流れが良くなる
5枚連結時の圧巻の光景
5枚カスケード接続した74HC595基板
5枚連結すると 40個のLED を、Arduino側の3本のピンだけで制御できます。
制御コード(5枚 = 40LED):
const int latchPin = 10; // RCLK
const int clockPin = 13; // SRCLK
const int dataPin = 11; // SER
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
// 5枚分(5バイト)のデータを送信
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 0b10101010); // 基板5
shiftOut(dataPin, clockPin, MSBFIRST, 0b01010101); // 基板4
shiftOut(dataPin, clockPin, MSBFIRST, 0b11110000); // 基板3
shiftOut(dataPin, clockPin, MSBFIRST, 0b00001111); // 基板2
shiftOut(dataPin, clockPin, MSBFIRST, 0b11001100); // 基板1
digitalWrite(latchPin, HIGH); // 40個のLEDが一斉に更新
delay(500);
}
動作デモ動画
実際の動作を動画でご覧ください:
複数枚の基板が見事に同期して点灯・消灯を繰り返しています。カスケード接続でも遅延はほぼ感じられず、SPI通信の高速性が証明されています。
カスケード接続の理論上の限界
Q: 何枚まで連結できるのか?
理論上は 制限なし です。ただし、実際には以下の制約があります:
① 信号の劣化
74HC595のデジタル出力は頑健ですが、10枚、20枚と増やすと信号の立ち上がり/立ち下がりが鈍くなります。
対策:
- 5〜10枚ごとに バッファIC(74HC244など) を挿入
- 信号線のインピーダンス整合を取る(100Ω抵抗を直列挿入)
② 電源供給能力
LED 8個 × 30枚 = 240個を全点灯させると:
消費電流 = 9.1mA × 240 = 2.18A
Arduinoの5Vピンからは最大 500mA 程度しか供給できないため、外部電源が必須です。
推奨構成:
- Arduino: 制御信号のみ
- 外部5V電源(3A以上): LED電源として供給
- GNDは共通 にすること(基準電位を揃える)
③ データ転送速度
100枚カスケード接続した場合、全データを送るのに必要な時間:
shiftOut(): 8bit × 100枚 = 800bit
転送速度: 約 250kbps (shiftOut()関数の場合)
時間: 800bit / 250kbps ≒ 3.2ms
60fpsで更新したい場合、1フレーム = 16.7msなので、余裕で間に合います。ただし、1000枚レベルになるとボトルネックになります。
実践的な応用例
① LED マトリックス制御
8×8 LEDマトリックスも、74HC595 2個で制御可能:
- 1個目:行選択(8本)
- 2個目:列データ(8本)
ダイナミック点灯(スキャン方式)と組み合わせれば、64個のLEDを2個のICで制御できます。
② 7セグメントLED 複数桁表示
時計やカウンタ表示に最適。74HC595 1個で1桁(8セグメント)を制御し、カスケードで桁数を増やします。
[Arduino] → [74HC595] → 7seg(1桁目)
↓ QH'
[74HC595] → 7seg(2桁目)
↓ QH'
[74HC595] → 7seg(3桁目)
③ リレー制御(スマートホーム自動化)
家電製品を複数制御する際、74HC595の出力でトランジスタ/MOSFETを駆動し、リレーをON/OFFできます。
注意事項:
- リレーはコイルに逆起電力が発生するため、フライホイールダイオード(1N4007など) を並列接続すること
- 74HC595の出力は25mAまでなので、リレー駆動には 2SC1815などのトランジスタ を介すのが安全
④ I2C ←→ 74HC595 ブリッジ回路
「I2CならMCP23017を使えばいいのでは?」と思うかもしれませんが、74HC595はMCP23017より安価で入手性も高いため、74HC595をI2C経由で制御するアダプタ基板 を作る人もいます。
サンプルコードとGitHub公開リソース
基本的なLチカコード
// 74HC595 基本制御コード(Arduino UNO R4対応)
const int latchPin = 10; // RCLK (SS)
const int clockPin = 13; // SRCLK (SCK)
const int dataPin = 11; // SER (MOSI)
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
// 順次点灯パターン
for (int i = 0; i < 8; i++) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 1 << i); // ビットシフト
digitalWrite(latchPin, HIGH);
delay(100);
}
}
ハードウェアSPI版(高速化)
#include <SPI.h>
const int latchPin = 10;
void setup() {
pinMode(latchPin, OUTPUT);
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV2); // 最高速(24MHz / 2 = 12MHz)
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0);
}
void loop() {
digitalWrite(latchPin, LOW);
SPI.transfer(0b10101010); // shiftOut()の約10倍速
digitalWrite(latchPin, HIGH);
delay(100);
}
GitHub公開中のリソース
以下のリンクから全てのデータをダウンロードできます:
-
LED点灯サンプルプログラム(Arduino Sketch形式)
https://github.com/ramtuc/ram_prog/tree/main/74HC595_testboard/Arduino_Schetch -
KiCad回路図&基板データ(.kicad_pro, .kicad_sch, .kicad_pcb)
https://github.com/ramtuc/ram_prog/tree/main/74HC595_testboard/schematic
JLCPCB発注用データ(そのまま使える)
74HC595_testboard.zip をダウンロードすれば、以下が含まれています:
- Gerberファイル(基板製造用)
- BOMファイル(部品表、LCSC部品番号付き)
- CPLファイル(部品配置座標)
発注手順:
- JLCPCB公式サイト にアクセス
74HC595_testboard.zipをアップロード- 「PCB Assembly」を有効化
- BOM/CPLファイルをアップロード
- 部品配置を確認して発注
これで、LED・抵抗実装済みの基板 が自宅に届きます。
トラブルシューティング:よくある問題と解決策
Q1: LEDが全く点灯しない
チェックポイント:
-
電源供給の確認
- 74HC595のVCCピンに5Vが来ているか?
- GNDがArduinoと共通になっているか?
-
配線ミス
- SER, SRCLK, RCLKが正しいピンに接続されているか?
- 配線図と実際の配線を再確認
-
OEピン(出力イネーブル)
- OEピンがGNDに落ちているか確認(Highだと出力が無効化される)
-
SRCLRピン(リセット)
- SRCLRピンが5Vに接続されているか確認(Lowだとリセット状態)
Q2: カスケード接続で2段目以降が動かない
原因: QH’ピンの接続忘れが最多
- 1段目の QH’ (Pin 9) → 2段目の SER (Pin 14) を確実に接続
- ブレッドボードの場合、接触不良も疑う(ジャンパ線を交換してみる)
Q3: ちょうど動くが、LEDがちらつく
原因: ノイズ、または電源電圧の不安定
対策:
- バイパスコンデンサ(0.1µF)が実装されているか確認
- さらに 電解コンデンサ(100µF) をArduinoの5V-GND間に追加
- ジャンパ線を短くする(特にクロック線)
Q4: Arduino UNO R4で書き込みエラー
エラーメッセージ: "Failed entering bootloader mode"
解決策:
- RSTボタンを 2回連続で素早く押す(ダブルクリックの要領)
- オンボードLEDがオレンジ色に点滅したら書き込み開始
- それでも失敗する場合、Arduino IDE 2.3以降にアップデート
Q5: 高速動作時にデータが化ける
原因: 配線のインピーダンス不整合、または配線長過多
対策:
- ジャンパ線を 10cm以下 に抑える
- SERピンの直前に 100Ω直列抵抗 を挿入(信号整形)
- SPI.setClockDivider() で速度を落とす(DIV4, DIV8など)
74HC595 vs 他のGPIO拡張方法:徹底比較ガイド
主要GPIO拡張ICの性能比較表
| 項目 | 74HC595 | MCP23017 | PCF8574 | 74HC165 |
|---|---|---|---|---|
| 通信方式 | SPI同等(シフトレジスタ) | I2C | I2C | SPI同等(シフトレジスタ) |
| 必要ピン数 | 3本(DATA/CLK/LATCH) | 2本(SDA/SCL) | 2本(SDA/SCL) | 3本(DATA/CLK/LOAD) |
| 入力対応 | ❌ 出力専用 | ⭕ 16bit双方向 | ⭕ 8bit双方向 | ⭕ 入力専用 |
| 出力対応 | ⭕ 8bit | ⭕ 16bit | ⭕ 8bit | ❌ 入力専用 |
| カスケード | 無制限(QH’接続) | I2Cアドレス8個まで | I2Cアドレス8個まで | 無制限(シリアル接続) |
| 最大ピン数 | 理論上無限 | 128ピン(16×8) | 64ピン(8×8) | 理論上無限 |
| 転送速度 | 高速(MHz単位) | 普通(最大1.7MHz) | 普通(最大400kHz) | 高速(MHz単位) |
| 内部プルアップ | ❌ なし | ⭕ 100kΩ(内蔵) | ❌ なし(外付け推奨) | ❌ なし |
| 割り込み機能 | ❌ なし | ⭕ あり(INTピン) | ⭕ あり(INTピン) | ❌ なし |
| 出力電流 | 25mA/ピン(最大150mA) | 25mA/ピン | 25mA/ピン | N/A |
| 動作電圧 | 2〜6V | 2.7〜5.5V | 2.5〜6V | 2〜6V |
| 価格(2026年2月) | 約30〜50円 | 約100〜150円 | 約50〜80円 | 約30〜50円 |
| 入手性 | ⭕ 非常に良好 | ⭕ 良好 | ⭕ 良好 | ⭕ 良好 |
詳細な使い分けガイド
74HC595を選ぶべき場合
✅ 最適な用途:
- LED制御(マトリックス、7セグメント、インジケータ)
- リレー駆動(複数チャンネル)
- デジタル出力のみで十分なプロジェクト
- 最もコストを抑えたい場合
- 高速更新が必要(LEDアニメーション等)
⚠️ 注意点:
- 入力には使えない(ボタンの状態は読めない)
- ビン単位でのプルアップ/プルダウンが必要
- 割り込み機能なし(ポーリングのみ)
実装の難易度: ⭐⭐☆☆☆(初心者向け、shiftOut()関数で簡単)
MCP23017を選ぶべき場合
✅ 最適な用途:
- 入出力が混在するプロジェクト
- スイッチ入力とLED出力を同時制御
- I2Cバスを他のセンサーと共有したい
- 割り込み機能が必要(スイッチ検知等)
- 内部プルアップで配線を簡素化したい
⚠️ 注意点:
- I2Cアドレス競合に注意(最大8個まで)
- 74HC595より若干高価
- I2Cバスの負荷が増える(多数デバイス時)
実装の難易度: ⭐⭐⭐☆☆(中級者向け、Adafruitライブラリで簡単化)
📖 詳細はこちら:
PCF8574を選ぶべき場合
✅ 最適な用途:
- I2C LCD(1602/2004)のバックパック制御
- 8ピン以下の簡単な入出力
- 既存I2Cプロジェクトへの小規模追加
⚠️ 注意点:
- MCP23017より低速
- ピン数が8本のみ(大規模には不向き)
74HC165を選ぶべき場合
✅ 最適な用途:
- 多数のボタン/スイッチ入力
- キーボードマトリックス
- センサーのデジタル読み取り
⚠️ 注意点:
- 出力には使えない
- 74HC595とペアで使うケースが多い
プロジェクト別推奨IC
| プロジェクト内容 | 推奨IC | 理由 |
|---|---|---|
| 8×8 LEDマトリックス | 74HC595 × 2 | 高速更新+低コスト |
| 7セグメント時計(4桁) | 74HC595 × 1 | 出力専用+カスケード対応 |
| スマートホームコントローラ (ボタン入力+リレー出力) |
MCP23017 | 入出力混在+割り込み対応 |
| 多ボタン入力デバイス (16個以上) |
74HC165 + 74HC595 | 入力と出力を分離 |
| I2C LCD + 追加LED | PCF8574 + MCP23017 | I2Cバス統一 |
| 大規模LED制御 (100個以上) |
74HC595 カスケード | 無限拡張+高速 |
速度比較:実測データ
以下は、Arduino UNO R4で100回データ送信した場合の実測値です:
74HC595(shiftOut): 約 2.5ms
74HC595(SPI.transfer): 約 0.25ms (10倍高速)
MCP23017(I2C 100kHz): 約 8.0ms
MCP23017(I2C 400kHz): 約 2.5ms
PCF8574(I2C 100kHz): 約 10.0ms
結論: リアルタイム性が必要なら74HC595のハードウェアSPI、汎用性重視ならMCP23017
74HC595とMCP23017の併用パターン
実は、この2つは 競合ではなく補完関係 にあります。以下のように使い分けるのがプロの手法:
[Arduino] ─┬─ I2C → [MCP23017] → スイッチ16個入力
└─ SPI → [74HC595] → LED 40個出力
メリット:
- I2CとSPIを同時使用(バス分離)
- 入力と出力を別ICで処理(設計がシンプル)
- それぞれの強みを活かせる
選定フローチャート
出力専用でOK?
├─ YES → 高速更新が必要?
│ ├─ YES → 74HC595(SPI使用)
│ └─ NO → 74HC595 or MCP23017
└─ NO → 入力専用?
├─ YES → 74HC165
└─ NO → 入出力混在
├─ I2C統一したい → MCP23017
└─ 最安値優先 → 74HC595 + 74HC165
Boothショップでの購入
「自分で基板発注は敷居が高い」「少量だけ欲しい」という方向けに、ElectroRam Studio で完成品を販売しています。
🛒 購入はこちら
内容: LED・抵抗実装済み基板(ピンヘッダは別売り)
動作確認済み: Arduino UNO R4 Minima / WiFi / R3
まとめ:74HC595は「今も現役」の最強GPIO拡張
今回のプロジェクトを通じて、74HC595シフトレジスタの以下の特性を実証しました:
✅ 技術的な利点
- たった3本の信号線で無限拡張が可能
- SPI通信による高速・安定した制御
- 5V完全対応でArduino UNO R4と直結可能
- カスケード接続による柔軟なシステム設計
- 2段階の出力更新でグリッチフリー
✅ 実践的な利点
- 1個30〜50円の圧倒的低コスト
- JLCPCBアセンブリとの相性抜群
- 豊富なライブラリとサンプルコード
- トラブルシューティング情報が豊富
🚀 次のステップ
本記事で基礎を理解した後は、以下に挑戦してみてください:
- 7セグメントLEDで時計を作る
- 8×8 LEDマトリックスでアニメーション表示
- リレー制御で家電を自動化
- 74HC165と組み合わせて入出力拡張
📚 関連記事
Arduinoの他のGPIO拡張技術に興味がある方は、以下もご覧ください:
I2C方式のGPIO拡張(MCP23017)
-
【Arduino】MCP23017で16本のピン追加&自己診断テスト
Arduino UNO R4での実装とループバックテストによる動作検証 -
【ESP32 I/O拡張】MCP23017で16ピン追加!完全ガイド
ESP32での実装例とAdafruit_MCP23X17ライブラリの使い方
その他のArduino拡張ツール
- 【Arduino開発を加速】全ピンLED搭載デバッグシールドの設計と実装
全ピンの状態を視覚的に確認できるデバッグツール
オープンソース・リソース一覧
本プロジェクトで使用した全データは、GitHubで公開しています:
📁 GitHub Repository
-
サンプルコード(Arduino Sketch)
https://github.com/ramtuc/ram_prog/tree/main/74HC595_testboard/Arduino_Schetch -
KiCad設計データ(回路図・基板レイアウト)
https://github.com/ramtuc/ram_prog/tree/main/74HC595_testboard/schematic -
JLCPCB発注用ファイル(Gerber, BOM, CPL)
同梱の74HC595_testboard.zipをそのままアップロードして発注可能
📝 ライセンス
本プロジェクトのハードウェア・ソフトウェアは MIT License で公開しています。
商用・非商用を問わず、自由に改変・再配布が可能です。
電子工作の醍醐味は、「自分で作った回路が動く瞬間の感動」です。
74HC595は古典的なICですが、その汎用性と信頼性は2026年の今でも色褪せません。
ぜひ、あなたのプロジェクトでも74HC595を活用して、「足りないピンを無限に増やす」魔法を体験してください。
それでは、良き電子工作ライフを!!
See You …