注釈
こんにちは!SunFounder Raspberry Pi & Arduino & ESP32 愛好者コミュニティ(Facebook)へようこそ!Raspberry Pi、Arduino、ESP32 に関する知識を深め、仲間たちと一緒に楽しみましょう。
参加するメリット
専門的なサポート:購入後の問題や技術的な課題を、コミュニティメンバーやチームのサポートで解決。
学びと共有:ヒントやチュートリアルを交換し、スキルを向上。
最新情報の先行公開:新製品の発表やプレビューをいち早くチェック。
特別割引:最新製品を会員限定の特別価格で購入可能。
イベント & プレゼント企画:プレゼントキャンペーンや季節ごとのプロモーションに参加可能。
👉 一緒にものづくりを楽しみましょう![こちら] をクリックして、今すぐ参加!
5.1 74HC595 シフトレジスタの使用
このレッスンでは、 74HC595シフトレジスタ を使用して、Raspberry Pi Pico 2 のわずかな GPIO ピンで複数の LED を制御する方法を学びます。 74HC595 は、シリアル入力を並列出力に変換することができる集積回路(IC)であり、GPIO ピンが限られている場合に、多数の出力を制御するのに非常に便利です。
必要なもの
このプロジェクトでは、以下のコンポーネントが必要です。
すべて揃ったキットを購入すると便利です。リンクはこちら:
名称 |
キットに含まれるアイテム |
リンク |
|---|---|---|
Newton Lab Kit |
450点以上 |
個別に購入する場合は、以下のリンクからどうぞ。
SN |
コンポーネント |
数量 |
リンク |
|---|---|---|---|
1 |
1 |
||
2 |
Micro USB ケーブル |
1 |
|
3 |
1 |
||
4 |
数本 |
||
5 |
8 (220Ω) |
||
6 |
8 |
||
7 |
1 |
74HC595シフトレジスタの仕組み
74HC595 は、 8ビットのシリアル入力・並列出力 を持つシフトレジスタで、出力ラッチを備えています。 シリアルデータを入力し、並列出力へ変換できるため、Pico の 3 本の GPIO ピンだけで 8 つの出力を制御できます。
74HC595 の主要ピン:

DS (Pin 14): シリアルデータ入力
SHCP (Pin 11): シフトレジスタクロック入力
STCP (Pin 12): ストレージレジスタクロック入力(ラッチピン)
OE (Pin 13): 出力イネーブル(Low アクティブ、GND に接続)
MR (Pin 10): マスターリセット(Low アクティブ、3.3V に接続)
Q0-Q7 (Pins 15, 1-7): 並列出力ピン
VCC (Pin 16): 3.3V に接続
GND (Pin 8): GND に接続
回路図

配線図
コードの記述
Raspberry Pi Pico からシリアルデータを送信し、74HC595 シフトレジスタを介して LED を順番に点灯させるプログラムを作成します。
注釈
5.1_microchip_74hc595.inoをnewton-lab-kit/arduino/5.1_microchip_74hc595から開くことができます。または、このコードを Arduino IDE にコピーしてください。
Raspberry Pi Pico 2 ボードを選択し、適切なポートを設定して「Upload」をクリックしてください。
// 74HC595 に接続するピンを定義
const int DS = 0; // GPIO 0 -> DS (Pin 14)
const int SHCP = 1; // GPIO 1 -> SHCP (Pin 11)
const int STCP = 2; // GPIO 2 -> STCP (Pin 12)
// LED を制御するバイナリパターン
int datArray[] = {
0b00000000, // All LEDs off
0b00000001, // LED 0 on
0b00000011, // LEDs 0 and 1 on
0b00000111, // LEDs 0, 1, and 2 on
0b00001111, // LEDs 0, 1, 2, and 3 on
0b00011111, // LEDs 0 to 4 on
0b00111111, // LEDs 0 to 5 on
0b01111111, // LEDs 0 to 6 on
0b11111111 // All LEDs on
};
void setup() {
// Initialize the control pins as outputs
pinMode(DS, OUTPUT);
pinMode(SHCP, OUTPUT);
pinMode(STCP, OUTPUT);
}
void loop() {
// Iterate through each pattern in datArray
for (int num = 0; num < 9; num++) {
// Set STCP to LOW to prepare for data
digitalWrite(STCP, LOW);
// Shift out the data to the shift register
shiftOut(DS, SHCP, MSBFIRST, datArray[num]);
// Set STCP to HIGH to latch the data to the output pins
digitalWrite(STCP, HIGH);
delay(500); // Wait for half a second before the next pattern
}
// Turn off all LEDs after the sequence
digitalWrite(STCP, LOW);
shiftOut(DS, SHCP, MSBFIRST, 0b00000000);
digitalWrite(STCP, HIGH);
delay(500);
}
コードをアップロードすると、 datArray に定義されたパターンに従い、74HC595 に接続された LED が順番に点灯します。
すべての LED が点灯した後、順番に消灯します。
コードの理解
制御ピンの定義:
DS (Data Serial Input): シリアルデータを受信SHCP (Shift Register Clock Input): データをシフトレジスタに転送STCP (Storage Register Clock Input): データを出力ピンにラッチ
const int DS = 0; // GPIO 0 -> DS (Pin 14) const int SHCP = 1; // GPIO 1 -> SHCP (Pin 11) const int STCP = 2; // GPIO 2 -> STCP (Pin 12)
データパターンの作成:
datArray配列に、LED を制御するバイナリパターンを格納各ビットが LED の状態を表し、1 で点灯、0 で消灯
int datArray[] = { 0b00000000, // すべての LED をオフ 0b00000001, // LED 0 をオン 0b00000011, // LED 0, 1 をオン 0b00000111, // LED 0, 1, 2 をオン 0b00001111, // LED 0, 1, 2, 3 をオン 0b00011111, // LED 0 から 4 までをオン 0b00111111, // LED 0 から 5 までをオン 0b01111111, // LED 0 から 6 までをオン 0b11111111 // すべての LED をオン };
セットアップ関数:
DS,SHCP,STCPピンを出力として設定し、シフトレジスタにデータを送信できるようにする。void setup() { // Initialize the control pins as outputs pinMode(DS, OUTPUT); pinMode(SHCP, OUTPUT); pinMode(STCP, OUTPUT); }
ループ関数:
forループでdatArray内の各パターンを順番に適用データのシフト出力
shiftOutで 1 ビットずつデータを送信MSBFIRSTを指定し、最上位ビットから送信
shiftOut(DS, SHCP, MSBFIRST, datArray[num]);
データのラッチ
STCPをLOWにしてデータの受信準備データ送信後、
STCPをHIGHにして出力ピンへ反映
digitalWrite(STCP, LOW); // shiftOut(...) digitalWrite(STCP, HIGH);
ディレイ処理
delay(500);で 0.5 秒ごとに LED の状態を更新LED の消灯
すべての LED を消灯するために 0b00000000 を送信
digitalWrite(STCP, LOW); shiftOut(DS, SHCP, MSBFIRST, 0b00000000); digitalWrite(STCP, HIGH); delay(500);
トラブルシューティング
LED が点灯しない場合
配線を再確認
74HC595 に電源が供給されているか確認
Pico の GPIO ピンが正しく接続されているかチェック
LED の動作が異常な場合
datArrayのバイナリパターンを見直すLED に適切な抵抗が接続されているか確認
さらなる発展
他のデバイスの制御
74HC595 を使ってリレーやモーターなどを制御可能
シフトレジスタのカスケード接続
複数の 74HC595 を直列に接続し、出力を拡張
LED パターンの作成
datArrayを変更して、より複雑な LED アニメーションを作成
センサーとの統合
センサーと組み合わせて、インタラクティブなシステムを構築
LED マトリックスの作成
複数のシフトレジスタを使用し、大規模な LED マトリックスを構築
まとめ
このレッスンでは、Raspberry Pi Pico の 3 本の GPIO ピンを使用し、74HC595 シフトレジスタを介して複数の LED を制御する方法を学びました。 この技術を活用することで、GPIO ピンの使用を最小限に抑えながら、より複雑でインタラクティブな電子工作を実現できます。 シリアルデータを並列出力に変換し、効率的に LED やその他のアクチュエータ、ディスプレイを管理できるようになります。
