なぜ64個のLEDがたった3本で動くのか?
電子工作を始めた方なら、こんな経験があるはずです。
「8×8のドットマトリクスLEDで文字を表示したい!」
→ Arduinoのピン数を数える
→ 「え、64本も必要なの…?」 😱
Arduino UNO R4のピンは全部で約20本。明らかに足りません。
でも安心してください。「74HC595」というマジックチップを使えば、たった3本のピンで済みます。
今回は、前回の74HC595テストボード記事の応用編として、実際に8×8ドットマトリクスLED(64個のLED)を制御する基板を作りました。
【初心者向け】なぜピンが足りなくなるの?
ピン不足問題を数えてみよう
まず、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の内部構造
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本:
- DATA(データ線): ON/OFFの情報を送る
- CLOCK(クロック線): タイミングを合わせる
- 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の特徴:
- 高速処理: 48MHzのクロック(従来のR3は16MHz)
- ダイナミック点灯に最適: 高速でLEDを切り替えるのでちらつきが少ない
- ピン配置はR3と互換: 既存のシールドがそのまま使える
初心者の方には、必要な部品が全て揃った スターターキット がおすすめです。
このプロジェクトで学べること
このプロジェクトを完成させると、以下のスキルが身につきます:
✅ シフトレジスタ(74HC595)の使い方
→ 他のプロジェクトでもピン拡張に応用できる
✅ ダイナミック点灯の原理
→ 7セグメントLED、大型LED表示パネルなどにも応用可能
✅ SPI通信の基礎
→ センサーやSDカードなど、多くのモジュールで使われる重要な通信方式
✅ 回路設計と基板製作
→ オリジナル基板を作る第一歩
✅ Arduinoプログラミングの実践
→ タイマー割り込み、配列操作などの実用テクニック
ドットマトリクスLEDの仕組みを理解する
ドットマトリクスLEDとは?
「ドットマトリクス」という名前の通り、小さなLEDを格子状(マトリクス状)に並べた表示装置です。今回使用するのは8×8サイズ、つまり64個のLEDが入っています。
8×8ドットマトリクスLED
一見すると64個のLEDに64本の配線が必要に見えますが、実は内部で賢く配線されています。
内部のマトリクス構造
下の回路図を見てください。これがドットマトリクスLEDの内部構造です。
ドットマトリクスLED内部回路図
重要なポイント:
- アノード(+側): 8本の横線(ROW1〜ROW8)で各行をまとめて制御
- カソード(-側): 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の多彩な応用例
Arduinoと組み合わせることで、これらのようなオリジナル作品を作ることができます!
回路設計:74HC595でピンを増やす
全体回路図
ドットマトリクス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で設計)
【初心者向け】基板製作の選択肢
電子工作で基板を作る方法は、大きく3つあります:
| 方法 | メリット | デメリット | 初心者向け |
|---|---|---|---|
| ブレッドボード | ハンダ不要、何度でもやり直せる | 接触不良が起きやすい、大きい | ⭐⭐⭐⭐⭐ |
| ユニバーサル基板 | 自分でハンダ付け、自由度高い | 配線が大変、見た目が悪くなりがち | ⭐⭐⭐ |
| PCB基板発注 | プロ品質、小型化、量産可能 | 設計が必要、発注に時間 | ⭐⭐ |
今回は 「JLCPCB」 という基板製造サービスを利用しました。
JLCPCBのアセンブリサービスとは?
JLCPCBには、基板を作るだけでなく、**部品も一緒に実装してくれる「アセンブリサービス」**があります。
通常の基板発注:
- 基板だけ届く(配線だけが印刷された緑色の板)
- ICや抵抗を自分でハンダ付け(50個以上ある場合も…)
アセンブリサービス:
- 基板 + 部品がすでに実装済みで届く!
- 残りのコネクタやLEDだけ自分でハンダ付け
今回は以下を実装依頼しました:
- 74HC595 ×2個
- TBD62783 / TBD62083
- 抵抗(数十個)
- パスコン(ノイズ除去用コンデンサ)
自分でハンダ付けする部品:
- ドットマトリクスLED(大きいので手作業が確実)
- Arduinoとの接続コネクタ
【補足】コストについて
「アセンブリって高そう…」と思うかもしれませんが、意外とリーズナブルです。
- 基板5枚 + 表面実装部品代 + アセンブリ費用 ≈ 3,000〜5,000円程度
- 同じ部品を自分で買って50回ハンダ付けする手間を考えると、かなりコスパが良い!
特に 0603サイズの小さな抵抗やコンデンサ は、初心者が手作業でハンダ付けするのは至難の業です。
基板製作と動作確認
届いた基板をチェック
JLCPCB から届いた基板がこちらです。
JLCPCB から届いた基板(アセンブリ済み)
チェックポイント:
- ✅ IC類が正しい向きで実装されている
- ✅ 抵抗やコンデンサがずれていない
- ✅ ハンダの盛りが均一できれい
- ✅ ショート(意図しない接続)がない
さすがプロの仕上がり!手作業では難しい精度です。
残りの部品をハンダ付け
届いた基板に、自分で以下の部品をハンダ付けしました:
-
ドットマトリクスLED(OSL641501-ARA)
→ 向きに注意!(通常、▲マークやドットで1番ピンを示しています) -
Arduinoとの接続コネクタ
→ ピンソケット(メス)を使うと、Arduinoを抜き差しできて便利
LEDと コネクタを取り付けた完成基板
【初心者向け】ハンダ付けのコツ
ドットマトリクスLEDの取り付け:
- まず 4隅のピンだけ を仮ハンダ
- 基板にまっすぐ垂直に立っているか確認
- 傾いていたら、ハンダを溶かしながら修正
- 問題なければ残り全てのピンをハンダ付け
ハンダの量:
- 少なすぎ ❌: 接触不良の原因
- 多すぎ ❌: 隣のピンとショートの危険
- 富士山型 ✅: 理想的!
Arduinoに実装して動作テスト
完成した基板を Arduino UNO R4 にセット!
動作確認の様子
実際に動作させた動画がこちらです!
動作確認のポイント:
- ✅ すべての行と列が正しく動作
- ✅ ダイナミック点灯でちらつきなし
- ✅ 意図したパターンが正確に表示
- ✅ 明るさも十分
完璧に動きました!🎉
プログラムの基本構造
今回使用した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)
- ✅ 差し込み用ピンソケット
- ✅ 長ピンソケット(ピン名印字あり)
こんな方におすすめ:
- 基板発注の手間を省きたい
- すぐに動作確認したい
- 初めての電子工作で失敗したくない
まとめ:3本のピンで広がる可能性
今回のプロジェクトで、以下のことを学びました:
✅ 74HC595の基本: たった3本で16本のピンを増やせる技術
✅ ダイナミック点灯: 高速切り替えで同時点灯に見せる手法
✅ ドライバIC: 電流不足を解決する部品の選び方
✅ 基板設計: KiCadとJLCPCBを使った実践
✅ SPI通信: 高速データ転送の基礎
これらの知識は、ドットマトリクスだけでなく、7セグメント表示、大型LED看板、さらにはモーター制御など、他の多くのプロジェクトに応用できます。
電子工作の世界は、「ピンが足りない」という制約をどう乗り越えるか」 がテーマになることが多いです。この記事が、そのための第一歩になれば嬉しいです。
関連記事
- 👉 【Arduino初心者向け】74HC595で8個のLEDを3本のピンで制御!シフトレジスタ入門
- 👉 【Arduino開発を加速】全ピンLED搭載デバッグシールドの設計と実装
- 👉 【ESP32 I/O拡張】MCP23017で16ピン追加!
最後までお読みいただき、ありがとうございました!
質問や感想があれば、ぜひコメントやお問い合わせフォームからお気軽にどうぞ。
Happy Making! 🔧✨