なぜ64個のLEDがたった3本で動くのか?

電子工作を始めた方なら、こんな経験があるはずです。

「8×8のドットマトリクスLEDで文字を表示したい!」
→ Arduinoのピン数を数える
「え、64本も必要なの…?」 😱

Arduino UNO R4のピンは全部で約20本。明らかに足りません。

でも安心してください。「74HC595」というマジックチップを使えば、たった3本のピンで済みます。

今回は、前回の74HC595テストボード記事の応用編として、実際に8×8ドットマトリクスLED(64個のLED)を制御する基板を作りました。

74HC595を秋月電子で購入


【初心者向け】なぜピンが足りなくなるの?

ピン不足問題を数えてみよう

まず、8×8のドットマトリクスLEDについて考えてみましょう。

単純計算の場合:

  • 8行 × 8列 = 64個のLED
  • 各LEDに1本ずつピンが必要 = 64本必要

でも、Arduino UNO R4のピンは全部で:

  • デジタルピン:14本(D0〜D13)
  • アナログピン:6本(A0〜A5)
  • 合計:約20本

64本 - 20本 = 44本足りない! これが「ピン不足問題」です。

【解決策①】ダイナミック点灯を使う

「全部のLEDを同時に光らせなければいいのでは?」

その通りです!「ダイナミック点灯(時分割制御)」 という技術を使います。

ダイナミック点灯とは?

ドットマトリクスLEDの内部構造

ドットマトリクスLEDの内部構造

8×8ドットマトリクスLEDの内部では、LEDは以下のように配線されています:

  • 8本の横ライン(行): 各LEDのアノード(+側)が接続
  • 8本の縦ライン(列): 各LEDのカソード(-側)が接続

つまり、「1行目を選択して、光らせたい列にだけ信号を送る」 を超高速で繰り返せば、人間の目には全体が光っているように見えます。

時刻0ms: 1行目だけON → [●○●○●○●○](パターンA)
時刻1ms: 2行目だけON → [○●○●○●○●](パターンB)
時刻2ms: 3行目だけON → [●○●○●○●○](パターンC)
  ...以下、8行目まで繰り返す

このサイクルを1秒間に数百回繰り返すと、残像効果で全体が同時に光っているように見えるのです!

これで必要なピン数は:

  • 8本(行の選択)+ 8本(列のパターン)= 16本

だいぶ減りました!でも、まだ足りませんね…。

【解決策②】74HC595シフトレジスタを使う

そこで登場するのが 「74HC595」 という魔法のICチップです。

74HC595って何ができるの?

74HC595は、「たった3本のピンで、8本分のピンを増やせる」 ICです。

必要なピンはたった3本:

  1. DATA(データ線): ON/OFFの情報を送る
  2. CLOCK(クロック線): タイミングを合わせる
  3. LATCH(ラッチ線): 「確定!」の合図

この3本を使って、8個のON/OFF情報を順番に送り込むと、74HC595が8本の出力ピンに変換してくれます。

さらに! 74HC595は 数珠つなぎ(カスケード接続) ができます。
2個つなげば16本、3個なら24本…と、どんどん増やせます。

今回の構成

今回は74HC595を 2個 使います:

  • 1個目(74HC595 #1): 8行の選択(どの行を光らせるか)
  • 2個目(74HC595 #2): 8列のパターン(その行のどのLEDを光らせるか)

これで、Arduinoから3本のピンだけで、16本分の制御信号を送れます!


使用するArduinoとパーツ紹介

今回使用するのは、最新の 「Arduino UNO R4 MINIMA」 です。

Arduino UNO R4 Minima

Arduino UNO R4 Minima

Arduino UNO R4 Minima starter kit

Arduino UNO R4 Minima starter kit

Arduino UNO R4の特徴:

  • 高速処理: 48MHzのクロック(従来のR3は16MHz)
  • ダイナミック点灯に最適: 高速でLEDを切り替えるのでちらつきが少ない
  • ピン配置はR3と互換: 既存のシールドがそのまま使える

初心者の方には、必要な部品が全て揃った スターターキット がおすすめです。

このプロジェクトで学べること

このプロジェクトを完成させると、以下のスキルが身につきます:

シフトレジスタ(74HC595)の使い方
→ 他のプロジェクトでもピン拡張に応用できる

ダイナミック点灯の原理
→ 7セグメントLED、大型LED表示パネルなどにも応用可能

SPI通信の基礎
→ センサーやSDカードなど、多くのモジュールで使われる重要な通信方式

回路設計と基板製作
→ オリジナル基板を作る第一歩

Arduinoプログラミングの実践
→ タイマー割り込み、配列操作などの実用テクニック


ドットマトリクスLEDの仕組みを理解する

ドットマトリクスLEDとは?

「ドットマトリクス」という名前の通り、小さなLEDを格子状(マトリクス状)に並べた表示装置です。今回使用するのは8×8サイズ、つまり64個のLEDが入っています

8×8ドットマトリクスLED

8×8ドットマトリクスLED

一見すると64個のLEDに64本の配線が必要に見えますが、実は内部で賢く配線されています。

内部のマトリクス構造

下の回路図を見てください。これがドットマトリクスLEDの内部構造です。

ドットマトリクスLED内部回路図

ドットマトリクスLED内部回路図

重要なポイント:

  1. アノード(+側): 8本の横線(ROW1〜ROW8)で各行をまとめて制御
  2. カソード(-側): 8本の縦線(COL1〜COL8)で各列をまとめて制御

つまり、「ROW3とアンドCOL5を選択」すると、3行目5列目のLEDだけが光る仕組みです。

これなら 64本も配線せず、たった16本(8+8)で制御できます!

ダイナミック点灯を図解で理解

前述の「ダイナミック点灯」を、もう少し詳しく見てみましょう。

例:「A」という文字を表示する場合

目標パターン(8×8):
  □■■■■■□□
  ■□□□□■□□
  ■□□□□■□□
  ■■■■■■□□
  ■□□□□■□□
  ■□□□□■□□
  ■□□□□■□□
  □□□□□□□□

これを一度に表示するのではなく、1行ずつ高速で切り替えます:

時刻0: ROW1をON → □■■■■■□□ を表示
時刻1: ROW2をON → ■□□□□■□□ を表示
時刻2: ROW3をON → ■□□□□■□□ を表示
...
時刻7: ROW8をON → □□□□□□□□ を表示

→ これを1秒間に約200回繰り返す!

人間の目は約1/30秒(約33ms)の残像を持つため、各行が5ms(= 1/200秒)で切り替わるなら、全体が同時に光っているように見えます

【補足】ニキシー管時計でも使われている技術

このダイナミック点灯は、レトロなニキシー管時計でも使われています。詳しい解説は以下の記事もご参照ください。

👉 ニキシー管時計のダイナミック点灯記事


ドットマトリクスLEDの実用例

この仕組みは、身の回りの様々な場所で使われています:

用途 具体例
🚉 交通機関 駅の電光掲示板、バスの行き先表示
🏪 店舗 デジタルメニューボード、価格表示器
時計 デジタル時計、カウンター
🎮 エンターテイメント レトロゲーム風ディスプレイ、LED Art
🎵 オーディオ スペクトラムアナライザー
ドットマトリクスLEDの多彩な応用例

ドットマトリクスLEDの多彩な応用例

Arduinoと組み合わせることで、これらのようなオリジナル作品を作ることができます!


回路設計:74HC595でピンを増やす

全体回路図

ドットマトリクスLEDドライブ回路の全体図

ドットマトリクスLEDドライブ回路の全体図

【初心者向け】回路図の読み方

一見複雑に見えますが、大きく分けると 3つのブロック に分かれています:

① Arduino(左側)

  • 3本のピン でデータを送信:
    • MOSI(データ線): LED点灯パターンを送る
    • SCK(クロック線): タイミングを合わせる
    • SS(ラッチ線): 「確定!」の合図

② 74HC595シフトレジスタ(中央)

  • Arduinoから受け取ったデータを 8本の並列信号 に変換
  • 2個カスケード接続で 16本分の制御信号 を生成

③ ドライバIC + ドットマトリクスLED(右側)

  • 74HC595だけでは電流が足りないので、ドライバICで増幅
  • ドットマトリクスLEDを駆動

【重要】なぜドライバICが必要なのか?

ここが初心者の方がつまずきやすいポイントです。

74HC595の出力電流は最大でも約25mAです。
一方、8×8ドットマトリクスを明るく点灯させるには、1行あたり100mA以上必要な場合があります。

例えば、1行に8個のLEDを同時点灯させると:

1個のLED: 約20mA
8個同時: 20mA × 8 = 160mA

→ 74HC595単体: 25mA しか流せない ❌
→ ドライバIC使用: 200mA以上OK ✅

そのため、「電流増幅役」としてドライバICが必須になります。

使用するドライバIC

今回採用したのは、以下の2つのトランジスタアレイICです:

IC型番 役割 接続先 特徴
TBD62783 アノードドライバ 行選択(ROW1〜8) ソース型、大電流駆動可能
TBD62083 カソードドライバ 列制御(COL1〜8) シンク型、高速スイッチング

【用語解説】トランジスタアレイとは?

「トランジスタアレイ」とは、複数のトランジスタ(電流を増幅するスイッチ)が1つのICに入っている部品です。

  • 普通のトランジスタ: 1個ずつ配線が必要(8個なら8個分のハンダ付け)
  • トランジスタアレイ: 8個分が1つのICに内蔵 → 配線が超シンプル!

なぜこの2つのICを選んだのか?

TBD62783(アノード側)の特徴:

  • ソース型: 電源から電流を「供給する」タイプ
  • 行を選択するのに最適(選んだ行だけに電流を流す)
  • 内部にダイオードがあり、逆起電力から保護

TBD62083(カソード側)の特徴:

  • シンク型: 電流を「GNDに引き込む」タイプ
  • 列の点灯パターンに最適(ONにした列だけ電流が流れる)
  • 高速スイッチングでちらつき防止

この組み合わせにより、安定して明るいドット表示が可能になります。


基板設計と製作

PCB(プリント基板)の設計

回路図をもとに、KiCadという無料のCADソフトで基板レイアウトを設計しました。

基板配線図(KiCadで設計)

基板配線図(KiCadで設計)

【初心者向け】基板製作の選択肢

電子工作で基板を作る方法は、大きく3つあります:

方法 メリット デメリット 初心者向け
ブレッドボード ハンダ不要、何度でもやり直せる 接触不良が起きやすい、大きい ⭐⭐⭐⭐⭐
ユニバーサル基板 自分でハンダ付け、自由度高い 配線が大変、見た目が悪くなりがち ⭐⭐⭐
PCB基板発注 プロ品質、小型化、量産可能 設計が必要、発注に時間 ⭐⭐

今回は 「JLCPCB」 という基板製造サービスを利用しました。

JLCPCBのアセンブリサービスとは?

JLCPCBには、基板を作るだけでなく、**部品も一緒に実装してくれる「アセンブリサービス」**があります。

通常の基板発注:

  1. 基板だけ届く(配線だけが印刷された緑色の板)
  2. ICや抵抗を自分でハンダ付け(50個以上ある場合も…)

アセンブリサービス:

  1. 基板 + 部品がすでに実装済みで届く!
  2. 残りのコネクタやLEDだけ自分でハンダ付け

今回は以下を実装依頼しました:

  • 74HC595 ×2個
  • TBD62783 / TBD62083
  • 抵抗(数十個)
  • パスコン(ノイズ除去用コンデンサ)

自分でハンダ付けする部品:

  • ドットマトリクスLED(大きいので手作業が確実)
  • Arduinoとの接続コネクタ

【補足】コストについて

「アセンブリって高そう…」と思うかもしれませんが、意外とリーズナブルです。

  • 基板5枚 + 表面実装部品代 + アセンブリ費用 ≈ 3,000〜5,000円程度
  • 同じ部品を自分で買って50回ハンダ付けする手間を考えると、かなりコスパが良い!

特に 0603サイズの小さな抵抗やコンデンサ は、初心者が手作業でハンダ付けするのは至難の業です。


基板製作と動作確認

届いた基板をチェック

JLCPCB から届いた基板がこちらです。

JLCPCB から届いた基板(アセンブリ済み)

JLCPCB から届いた基板(アセンブリ済み)

チェックポイント:

  • ✅ IC類が正しい向きで実装されている
  • ✅ 抵抗やコンデンサがずれていない
  • ✅ ハンダの盛りが均一できれい
  • ✅ ショート(意図しない接続)がない

さすがプロの仕上がり!手作業では難しい精度です。

残りの部品をハンダ付け

届いた基板に、自分で以下の部品をハンダ付けしました:

  1. ドットマトリクスLED(OSL641501-ARA)
    → 向きに注意!(通常、▲マークやドットで1番ピンを示しています)

  2. Arduinoとの接続コネクタ
    → ピンソケット(メス)を使うと、Arduinoを抜き差しできて便利

LEDと コネクタを取り付けた完成基板

LEDと コネクタを取り付けた完成基板

【初心者向け】ハンダ付けのコツ

ドットマトリクスLEDの取り付け:

  1. まず 4隅のピンだけ を仮ハンダ
  2. 基板にまっすぐ垂直に立っているか確認
  3. 傾いていたら、ハンダを溶かしながら修正
  4. 問題なければ残り全てのピンをハンダ付け

ハンダの量:

  • 少なすぎ ❌: 接触不良の原因
  • 多すぎ ❌: 隣のピンとショートの危険
  • 富士山型 ✅: 理想的!

Arduinoに実装して動作テスト

完成した基板を Arduino UNO R4 にセット!

Arduino UNO R4 Minima

Arduino UNO R4 Minima

Arduino UNO R4 Minima starter kit

Arduino UNO R4 Minima starter kit

動作確認の様子

実際に動作させた動画がこちらです!

動作確認のポイント:

  • ✅ すべての行と列が正しく動作
  • ✅ ダイナミック点灯でちらつきなし
  • ✅ 意図したパターンが正確に表示
  • ✅ 明るさも十分

完璧に動きました!🎉

プログラムの基本構造

今回使用したArduinoスケッチの概要です:

// SPI通信でデータ送信
void updateDisplay() {
  digitalWrite(LATCH_PIN, LOW);      // ラッチを開く
  
  // 74HC595にデータを送信(16bit = 2バイト)
  SPI.transfer(rowData);   // 行選択データ
  SPI.transfer(colData);   // 列パターンデータ
  
  digitalWrite(LATCH_PIN, HIGH);     // ラッチを閉じて確定
}

ポイント:

  • SPI.transfer() で1バイトずつデータを送信
  • カスケード接続なので、2回送信(行用 + 列用)
  • ラッチピンをHIGHにした瞬間に出力が更新される

完全なコードは、GitHubで公開しています(後述)。


このプロジェクトの応用アイデア

基本が動いたら、こんな応用も可能です!

初級編

  • スクロール文字表示: 「Hello」などの文字を右から左に流す
  • 🎲 サイコロゲーム: ボタンを押すとランダムな目が表示
  • ⏱️ カウントダウンタイマー: 数字をドット表示

中級編

  • 🌡️ 温度計: センサーと組み合わせて温度を表示
  • 📊 VUメーター: マイクで音を拾ってレベル表示
  • 🐍 レトロゲーム: スネークゲームを作る

上級編

  • 📡 Wi-Fi対応: Arduino R4 WiFi版でネット経由のメッセージ表示
  • 🔀 複数基板連結: 8×8を複数枚つなげて大型ディスプレイ化
  • 🎨 アニメーション: SD カードから読み込んで動画再生

購入・ダウンロード情報

GitHubで設計データ公開中(無料)

回路図、基板データ、プログラムはすべて オープンソース として公開しています!

📁 公開内容:

  • 回路図(KiCad形式)
  • 基板データ(Gerberファイル)
  • JLCPCB用BOM/CPLファイル(そのまま実装依頼可能)
  • Arduinoスケッチ(サンプルプログラム)

ダウンロードリンク:

📦 74HC595_testboard.zip の中身:

  • Gerberファイル(基板製造用)
  • BOM(部品リスト)
  • CPL(部品配置ファイル)

これを使えば、JLCPCBで そのまま実装済み基板を発注 できます!

完成品をBoothで販売中

「基板を発注するのはハードルが高い…」という方のために、すぐに使える完成キット を販売しています。

🛒 ElectroRam Studio(BOOTH)で販売中

セット内容:

  • ✅ Arduinoシールド基板(IC・抵抗実装済み)
  • ✅ ドットマトリクスLED(OSL641501-ARA)
  • ✅ 差し込み用ピンソケット
  • ✅ 長ピンソケット(ピン名印字あり)
BOOTHで購入する

こんな方におすすめ:

  • 基板発注の手間を省きたい
  • すぐに動作確認したい
  • 初めての電子工作で失敗したくない

まとめ:3本のピンで広がる可能性

今回のプロジェクトで、以下のことを学びました:

74HC595の基本: たった3本で16本のピンを増やせる技術
ダイナミック点灯: 高速切り替えで同時点灯に見せる手法
ドライバIC: 電流不足を解決する部品の選び方
基板設計: KiCadとJLCPCBを使った実践
SPI通信: 高速データ転送の基礎

これらの知識は、ドットマトリクスだけでなく、7セグメント表示、大型LED看板、さらにはモーター制御など、他の多くのプロジェクトに応用できます

電子工作の世界は、「ピンが足りない」という制約をどう乗り越えるか」 がテーマになることが多いです。この記事が、そのための第一歩になれば嬉しいです。


関連記事


最後までお読みいただき、ありがとうございました!

質問や感想があれば、ぜひコメントやお問い合わせフォームからお気軽にどうぞ。

Happy Making! 🔧✨