なぜ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. シフトレジスタとSPI通信の動作原理(初心者でも理解できる図解付き)
  2. KiCadを使った回路設計&基板レイアウト(設計ファイル公開)
  3. JLCPCBでのアセンブリ発注テクニック(費用対効果の最適化)
  4. カスケード接続による多段拡張(理論上無限に拡張可能)
  5. 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 内部ブロック図

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完全対応

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 …