なぜ74HC595が今も「最強のGPIO拡張」なのか

Arduino開発者が必ず直面する「ピン不足問題」

Arduinoで複雑なプロジェクトを作っていると、誰もが一度は経験する悩み――それが 「GPIOピンが足りない!」 という壁です。

  • LCD(4〜8ピン)を接続したい
  • 複数のLEDインジケータが必要
  • モーター制御とセンサー読み取りを同時に
  • さらにシリアル通信も使いたい…

Arduino UNO R4は処理能力が飛躍的に向上しましたが、物理的なピン数は変わっていません。そこで登場するのが 「74HC595シフトレジスタ」 です。

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拡張技術を以下の流れで解説します:

  1. 74HC595シフトレジスタの使い方&SPI通信の動作原理(初心者でも理解できる図解付き)
  2. KiCadを使った回路設計&基板レイアウト(設計ファイル公開)
  3. JLCPCBでのアセンブリ発注テクニック(費用対効果の最適化)
  4. カスケード接続による多段拡張(理論上無限に拡張可能)
  5. Arduinoサンプルコード(GitHub公開)

ℹ️ 関連記事
I2C方式でGPIOを拡張したい方は、以下の記事も参照してください:
👉 【Arduino】MCP23017で16本のピン追加&自己診断テスト
👉 【ESP32 I/O拡張】MCP23017で16ピン追加!完全ガイド


74HC595の使い方:最短クイックスタート

「まず動かしたい」という方向けに、3ステップでのセットアップをまとめます。

ステップ1:ピン配線

74HC595ピン Arduino UNO R4ピン 説明
SER (14) D11 シリアルデータ入力
SRCLK (11) D13 シフトクロック
RCLK (12) D10 ラッチ(出力更新)
OE (13) GND 出力有効化(常時Low)
SRCLR (10) 5V リセット無効(常時High)
VCC (16) 5V 電源
GND (8) GND グランド
QA〜QH (15,1〜7) LED等へ 8ビット出力

ステップ2:サンプルコード(shiftOut)

const int SER  = 11;  // データ
const int SRCLK = 13; // クロック
const int RCLK = 10;  // ラッチ

void setup() {
  pinMode(SER, OUTPUT);
  pinMode(SRCLK, OUTPUT);
  pinMode(RCLK, OUTPUT);
}

void loop() {
  for (int i = 0; i < 8; i++) {
    digitalWrite(RCLK, LOW);
    shiftOut(SER, SRCLK, MSBFIRST, 1 << i); // 1ビットずつ点灯
    digitalWrite(RCLK, HIGH);
    delay(200);
  }
}

ステップ3:動作確認

QA〜QHピンそれぞれに抵抗(220Ω)を介してLEDを接続します。上記コードを書き込むと、LEDが1個ずつ順番に点灯するシフト動作を確認できます。

✅ うまく動かないときのチェックリスト
  • OEピン(13番)がGNDに接続されているか確認(Highのままだと出力が無効)
  • SRCLRピン(10番)が5Vに接続されているか確認(Lowのままでリセット状態)
  • RCLKのタイミング:shiftOut完了にHighにする順序を守る

74HC595シフトレジスタ:動作原理を完全理解

74HC595とは何か?

74HC595は、SIPO(Serial In Parallel Out)型の8ビットシフトレジスタ です。

「シリアル入力」とは、データを1ビットずつ順番に送る方式。「パラレル出力」とは、8ビット分のデータを同時に8本のピンから出力する方式です。

つまり、74HC595は 「1本の線から送られてきたデータを、8本の線に分配する変換器」 と考えるとわかりやすいでしょう。 Arduinoでシフトレジスタ74HC595を使う際の使い方はシンプルです。特別なライブラリは不要で、Arduino標準の shiftOut() 関数またはSPIライブラリだけで展開でき、初心者でも山の使い方を数分で习得できます

74HC595 内部ブロック図

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・シフトレジスタの使い方)

Arduinoでシフトレジスタ74HC595を使う基本的な使い方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完全対応

Arduino UNO R4 Minima

Arduino UNO R4 Minima

Arduino UNO R4 Minima starter kit

Arduino UNO R4 Minima starter kit

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モードエラー」が出る場合:

  1. RSTボタンを 2回連続で素早く押す
  2. オンボードLEDがオレンジ色に点滅したら書き込み開始
  3. Arduino IDE 2.x系を使用(1.8系では不安定)

回路設計:理論と実装の架け橋

設計コンセプト

今回の基板設計では、以下の3つの要件を満たすことを目指しました:

  1. カスケード接続対応:複数枚を連結して無限拡張可能
  2. 視覚的デバッグ機能:各ビットの状態をLEDで即座に確認
  3. コスト最適化:JLCPCBアセンブリとの相性を考慮した部品選定

回路図の詳細解説

74HC595 LED制御基板 回路図

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制御基板 配線図

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)

PlotGerber 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から届いた実装済み基板

JLCPCBから届いた実装済み基板

  • 抵抗・LED・ICが全て正確に実装済み
  • ハンダの盛り具合も均一(リフロー炉の威力)
  • 発注から到着まで 約7日間(DHL Express使用)

自分で行う作業:

  • ピンヘッダ/ソケットのスルーホール部品のみハンダ付け
  • 動作確認

これだけで完成するのが、アセンブリサービスの最大の魅力です。


実装とカスケード接続:無限拡張の実現

スルーホール部品の実装

届いた基板に、ピンヘッダとピンソケットをハンダ付けします。

コネクタ実装前の基板

コネクタ実装前の基板

推奨する部品:

  • ピンヘッダ(オス):2.54mmピッチ、ストレート型
  • ピンソケット(メス):2.54mmピッチ、スタッキング対応

ハンダ付けのコツ:

  1. 基板を固定治具(または第三の手)でしっかり固定
  2. 最初に対角の2本だけ仮止めして、垂直になっているか確認
  3. 問題なければ全ピンをハンダ付け
  4. フラックスを使うとハンダの流れが良くなる

5枚連結時の圧巻の光景

5枚カスケード接続した74HC595基板

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公開中のリソース

以下のリンクから全てのデータをダウンロードできます:

JLCPCB発注用データ(そのまま使える)

74HC595_testboard.zip をダウンロードすれば、以下が含まれています:

  • Gerberファイル(基板製造用)
  • BOMファイル(部品表、LCSC部品番号付き)
  • CPLファイル(部品配置座標)

発注手順:

  1. JLCPCB公式サイト にアクセス
  2. 74HC595_testboard.zip をアップロード
  3. 「PCB Assembly」を有効化
  4. BOM/CPLファイルをアップロード
  5. 部品配置を確認して発注

これで、LED・抵抗実装済みの基板 が自宅に届きます。


トラブルシューティング:よくある問題と解決策

Q1: LEDが全く点灯しない

チェックポイント:

  1. 電源供給の確認

    • 74HC595のVCCピンに5Vが来ているか?
    • GNDがArduinoと共通になっているか?
  2. 配線ミス

    • SER, SRCLK, RCLKが正しいピンに接続されているか?
    • 配線図と実際の配線を再確認
  3. OEピン(出力イネーブル)

    • OEピンがGNDに落ちているか確認(Highだと出力が無効化される)
  4. 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"

解決策:

  1. RSTボタンを 2回連続で素早く押す(ダブルクリックの要領)
  2. オンボードLEDがオレンジ色に点滅したら書き込み開始
  3. それでも失敗する場合、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 で完成品を販売しています。

🛒 購入はこちら

ElectroRam Studio(Booth)

内容: LED・抵抗実装済み基板(ピンヘッダは別売り)
動作確認済み: Arduino UNO R4 Minima / WiFi / R3


まとめ:74HC595は「今も現役」の最強GPIO拡張

今回のプロジェクトを通じて、74HC595シフトレジスタの以下の特性を実証しました:

✅ 技術的な利点

  • たった3本の信号線で無限拡張が可能
  • SPI通信による高速・安定した制御
  • 5V完全対応でArduino UNO R4と直結可能
  • カスケード接続による柔軟なシステム設計
  • 2段階の出力更新でグリッチフリー

✅ 実践的な利点

  • 1個30〜50円の圧倒的低コスト
  • JLCPCBアセンブリとの相性抜群
  • 豊富なライブラリとサンプルコード
  • トラブルシューティング情報が豊富

🚀 次のステップ

本記事で基礎を理解した後は、以下に挑戦してみてください:

  1. 7セグメントLEDで時計を作る
  2. 8×8 LEDマトリックスでアニメーション表示
  3. リレー制御で家電を自動化
  4. 74HC165と組み合わせて入出力拡張

📚 関連記事

Arduinoの他のGPIO拡張技術に興味がある方は、以下もご覧ください:

I2C方式のGPIO拡張(MCP23017)

その他のArduino拡張ツール


オープンソース・リソース一覧

本プロジェクトで使用した全データは、GitHubで公開しています:

📁 GitHub Repository

📝 ライセンス

本プロジェクトのハードウェア・ソフトウェアは MIT License で公開しています。
商用・非商用を問わず、自由に改変・再配布が可能です。


電子工作の醍醐味は、「自分で作った回路が動く瞬間の感動」です。
74HC595は古典的なICですが、その汎用性と信頼性は2026年の今でも色褪せません。

ぜひ、あなたのプロジェクトでも74HC595を活用して、「足りないピンを無限に増やす」魔法を体験してください。

それでは、良き電子工作ライフを!!

See You …