Arduinoブロックプログラミング シフトレジスタ(74HC595)の使い方【Lesson7】
Arduino(アルドゥイーノ)プログラミングLESSON7は「シフトレジスタを使って8つのLED点灯を制御する」です。
今回はシフトレジスタ(74HC595)という電子機器を使って学習をすすめます。
本LESSON記事は、プログラミングの学習とシフトレジスタの機能知識を習得するプログラムになっています。
小学生やプログラミング初心者の方も安心してプログラミングができるように、ブロックを使ったスクラッチでのプログラミング方法についても動画付きで紹介しています。
シフトレジスタって何?っていう方に向けて、わかりやすく説明するよ
- シフトレジスタの機能と使い方
- プログラミングによる、シフトレジスタを用いたLED点灯制御回路の作り方
- Arduino IDE、スクラッチ(Scrattino3)を使ったプログラミング方法
せでぃあはこんな人物です
✅プライム企業に勤める電気・機械設計エンジニア
✅親子の絆を深めるため、夏休みに子供と一緒に電子工作を製作
✅Arduinoプログラミングを用いて作ったプログラミング電子工作「信GO機」が市の発明くふう展で「優秀賞」を受賞
✅本ブログにてArduinoスクラッチプログラミングLESSON記事投稿中
✅YouTubeチャンネル「せでぃあブログちゃんねる」運営中
子供の成長を育む!小学生のお子様にぴったりなプログラミング教室が見つかるように厳選しました!
シフトレジスタ(74HC595)とは
概要説明
シフトレジスタとは、ざっくりいうと「記憶されたビットデータが隣のビットにシフトする電子機器」です。
シフトレジスタを使うことでどんなメリットがあるかというと、Arduinoのデジタル出力ソケットを3つ使用するだけで8つの出力を制御することができます。
押しボタンやLED等多くの電子部品を使っていくと、Arduinoの入出力ソケットが不足してしまいます。
シフトレジスタは入出力ソケット不足の解消に役立ちます。
シフトレジスタを連結することで、さらに多くの出力を制御できますが今回は割愛します
各ピンの機能説明
シフトレジスタには16ものピンがついており、ブレッドボードに差し込んで使用します。
各ピンに対する、役割を上記説明図に記入しています。
各ピンの役割について、もう少し詳しく説明します。
デジタル出力Q0~Q7(1~7、9番ピン)
Arduinoのデジタル出力ソケットのようにLOW=0またはHIGH=1の出力切り替えが可能です。
LEDを接続して点灯させるには、各LEDに対してそれぞれ抵抗をつなぐ必要があります。
シリアルデータ入力DS(14番ピン)
シフトレジスタ入力~出力プロセスのSTEP1/3です。
Arduinoからシフトレジスタに対して、ビット信号0または1を伝える入力ピンです。
シフトレジスタクロック入力SH-CP(11番ピン)
シフトレジスタ入力~出力プロセスのSTEP2/3です。
シフトレジスタのビットデータを1ビット分シフトさせます。
そのあとで1ビット目のデータに、STEP1/3でのシリアルデータ入力0or1を代入します。
入力信号がLOW=0⇒HIGH=1に切り替わったタイミングでシフト動作が行われます
ストレージレジスタクロック入力ST-CP(12番ピン)
シフトレジスタ入力~出力プロセスのSTEP3/3です。
シフトレジスタのビットデータをそのままストレージレジスタに代入します。
入力信号がLOW=0⇒HIGH=1に切り替わったタイミングでシフト動作が行われます
デジタル出力有効入力OE(13番ピン)
入力がLOW=0のとき、デジタル出力Q0~Q7が有効になります。
シフトレジスタからの出力機能を常に有効にしたい場合はGNDに接続します
シフトレジスタリセット入力MR(10番ピン)
入力がLOW=0のとき、出力データをすべてLOW=0にします。
今回は出力リセット機能を使わないため、VCC=5Vに接続します
シリアル出力Q7´(9番ピン)
シフトレジスタをもう一つ連結させるときに使用します。
連結先のDSに接続して使用します。
今回はシフトレジスタを連結させないので、9番ピンには何も接続しません
シフトレジスタを使った点灯LEDシフト動作の説明
シフトレジスタのデジタル出力とLEDの接続が以下になっていることを踏まえて、動作の説明をします。
- デジタル出力0に接続された赤色LEDが点灯する
- 点灯LEDがデジタル出力0⇒1⇒2⇒3⇒4⇒5⇒6⇒7の順に切り替わる
- デジタル出力7が消灯したのちは、再びデジタル出力0から動作が繰り返される
- シフトレジスタを使った、点灯LEDシフト制御動作
- スクラッチを使ったプログラミング手順
まずは動画を見て、点灯するLEDがシフトする動作を確認してください。
また、スクラッチを使ったプログラミングをするためには準備作業が必要です。
動画にて準備作業に必要な手順をくわしく説明しています。
シフトレジスタを使った点灯LEDシフト制御回路の作り方
プログラミングするために、パソコンが必要です。
電子部品等の必要な機器については、このあと説明します。
パソコンに統合開発ソフトウェア「ArduinoIDE」のインストールを行います。
Arduinoのセットアップ方法については、以下の記事にて詳しく説明しています。
Arduino IDEでの言語プログラミングも勉強したい方は、プログラミングの流れを理解しておいてください。
以下の記事にて、プログラミングから動作確認までの流れを詳しく説明しています。
パソコンにスクラッチでプログラミングするためのソフトウェア「Scrattino3(スクラッチーノ3)」のインストールを行います。
以下の記事にて詳しく説明しています。
電子部品とジャンパーワイヤの差し込みだけで配線が可能です。
専用開発ソフトウェア「Arduino IDE」を使います。
文字列プログラミングを行う場合は、私が作成したプログラムをコピペして使ってください。
スクラッチプログラミングについては、動画または後述するプログラミング例を参考にしてください。
プログラムが完成したら動作確認を行います。
- 点灯LEDがデジタル出力0⇒1⇒2⇒3⇒4⇒5⇒6⇒7の順に切り替わるか?
- デジタル出力7が消灯したのちは、再びデジタル出力0から動作が繰り返されるか?
記載のプログラムは動作確認済です。
動作確認方法については、以下の記事にて詳しく説明しています。
シフトレジスタによる点灯LEDシフト動作回路で使うもの
- パソコン
- Arduino本体
- USBケーブル
- ブレッドボード
- LED(青・緑・黄・赤)×各2本
- 抵抗(220Ω)×8本
- シフトレジスタ(74HC595)
- ジャンパー線(オスーオス)×18本
今回はELEGOO社のスターターキットに入っている部品のみで作ることができますが、Arduino裏面のショート対策としてクリアケースも併せて準備することをおすすめします。
パソコン
プログラムを作成するために必要です。
プログラム制御の演算はArduino側で行うため、パソコンのSPECは一般的なモデルで十分対応可能です。
パソコンのOSはWindows、Macどちらでも対応可能です。
Arduino本体【キット】
基本的なエディション「Arduino Uno」の互換機である、ELEGOO社のUNO R3を使用しています。
Arduino本体裏面のショート対策に、別売りのクリアケースの購入をおすすめしています。
各ソケットの役割など、Arduino本体の機能について以下の記事にて詳しく説明しています。
USBケーブル【キット】
パソコンとArduinoを接続してプログラムデータのやり取りをするために必要です。
ブレッドボード【キット】
たくさんの穴が開いていて、部品の端子を穴に差し込むだけで電気的に接続が可能な板です。
LED(青・緑・黄・赤)【キット】
4色のLED(発行ダイオード)を各1本使用します。
LED素子にはプラスマイナスの極性があるため配線時には注意が必要です。
極性を間違えて配線すると、LEDは点灯しません
抵抗(220Ω)【キット】
220Ωの抵抗を8本使用し、各LEDに対して1本ずつ接続します。
LEDは流せる電流値に制約があるため、抵抗を直列つなぎすることでLEDに流れる電流を調節します。
抵抗は極性がないので、配線時に方向を気にする必要はありません。
LEDを点灯させるために接続する抵抗の選び方については、こちらの記事で詳しく説明しています。
シフトレジスタ(74HC595)【キット】
シフトレジスタ(74HC595)を使用します。
機器配置場所については後述しますが、ブレッドボードの中央溝をまたいで差し込んで使います。
ジャンパー線(オスーオス)【キット】
ジャンパー線を18本使用します。
今回のLESSONでは、Arduino本体とブレッドボードの接続またはブレッド内での配線に使います。
今回は配線本数が多いので、落ち着いて配線しよう
今回のLESSONで使用可能な、スターターキットです。
(おすすめ!)モーターやLEDディスプレイ等の機器を備えたコスパの高いキットです。
【おすすめ!】Arduino本体裏面のショート対策におすすめです。
配線のやり方
上図が配線説明図となりますので、これと同じ配線をすれば完成します。
- シフトレジスタをブレッドボードに差し込む
- 各LEDをブレッドボードに差し込む
- 220Ω抵抗をブレッドボードに差し込む
- ジャンパー線をブレッドボードとArduinoソケットに差し込む(計5本)
- ジャンパー線をブレッドボード内の2か所に差し込む(計13本)
シフトレジスタは、ブレッドボードに対して各ピンが垂直に挿入されるように傾けずに挿入してください。
シフトレジスタのピンが折れてしまう可能性がありますのでご注意ください。
LEDや抵抗及びジャンパー線は、Arduinoのソケットやブレッドボード穴に差し込むだけでOKです。
LEDはプラス・マイナスの極性があります。
抵抗は極性がありません。
上記説明図で「+」マークがある側(右側)をプラス側にしてください。
LED極性の見分け方については、こちらをご確認ください。
機器故障させないためにも、USBケーブルを抜いた「通電OFF」状態にて配線を行ってください
シフトレジスタを制御するプログラミングの考え方
基本的な考え方としては以下の2種類の方法があります。
1ビットずつデータをシフトさせる【本LESSONの例】
今回のLESSONで取り扱うプログラミングの例がこちらの方法になります。
1ビット目のデータにLOW=0またはHIGH=1を代入し、1ビットずつシフトさせる方式です。
この方式のデメリットとしては、1ビット目のデータしか書き換えできないため複雑な点灯パターンを作ることはできません。
8ビットを一括でデータシフトさせる
こちらは1回のクロック入力動作で、8ビット分の出力データを一括で入れ替えることが可能です。
そこで使用するのが「shiftOut関数」です。
8つのLED点灯状態を一括で変化させられるため、複雑な点灯パターン切り替えが可能です。
この方式のデメリットとしては、スクラッチプログラミングで作ることができない点です。
プログラミングのやり方
Arduino IDEとスクラッチの両方について、プログラミング方法とプログラムを説明します。
2つのプログラミングの特徴は以下の通り。
ArduinoIDE:文字列による命令語形式
スクラッチ:ブロックによるビジュアル形式
文字列を使わないスクラッチの方が、直感的で分かりやすく小学生におすすめのプログラミング方法になります。
スクラッチを使ってプログラミングをする方は、スクラッチの説明まで読み飛ばしてください。
Arduino IDE
Arduino IDEとは統合開発ソフトウェアで、C言語のような文字列を用いたプログラミング方法です。
プログラミングするにあたり、ある程度の命令語を知っておく必要があります。
Arduino IDEのインストール方法については、以下の記事で詳しく説明しています。
プログラミング方法
Arduino IDEを使って、文字列プログラミングを行います。
Arduino IDEを使ったプログラミング~動作確認方法については、以下の記事で詳細説明しています。
Arduino IDEプログラム
/* 作品名:LESSON7 */
/* 作成者:せでぃあ https://cediablog.com */
/* シフトレジスタによる複数LED点灯制御 */
const int PIN_SER = 8; //14ピン:シリアルデータ入力
const int PIN_STR = 9; //12ピン:ストレージレジスタクロック入力
const int PIN_SHR = 10; //11ピン:シフトレジスタクロック入力
void setup() { //プログラム実行時1度だけ演算されるプログラム
pinMode(PIN_SER, OUTPUT); //8番ソケットを出力として使用
pinMode(PIN_STR,OUTPUT); //9番ソケットを出力として使用
pinMode(PIN_SHR,OUTPUT); //10番ソケットを出力として使用
}
void loop() { //繰り返し演算されるプログラム
digitalWrite(PIN_SER,HIGH); //シリアルデータ入力をHIGH=1にする
for(int i=0; i<8; i++){ //8ビット分繰り返す
//LOW→HIGH切替わり時、シフトレジスタを1ビットシフト+シリアルデータ状態を記憶
digitalWrite(PIN_SHR,LOW);
digitalWrite(PIN_SHR,HIGH);
//LOW→HIGH切替わり時、シフトレジスタの状態をストレージレジスタに反映
digitalWrite(PIN_STR,LOW);
digitalWrite(PIN_STR,HIGH);
delay(200); //0.2秒間隔でLED点灯パターンを切り替える
digitalWrite(PIN_SER,LOW); //シリアルデータ入力をLOW=0にする
}
}
上記がシフトレジスタによる点灯LEDシフト制御回路のプログラムになります。
Arduino IDEのプログラム画面にコピーアンドペーストすることで、動作確認まで進めることができます。
各プログラム列の右側にプログラム内容をコメント記入してありますので参考にしてください。
色変化スピードを調整するにはディレイタイマの数値を変更してください
命令語の解説
今回のプログラムで使用した命令文について、解説します。
変数のデータ型指定
変数のデータ型を指定するものです。
今回はピンソケット番号を代入するので整数を扱う「int型」を指定します。
データ型 | 説明 | 扱える範囲 |
---|---|---|
int | 2バイトの整数を代入可能。 | -32768~32767 |
long | 4バイトの整数を代入可能 | -2,147,483,648~2,147,483,647 |
float | 4バイトの小数を代入可能。 | 3.4028235×1038~-3.4028235×1038 |
char | 1バイトの値を代入可能。文字列の代入に利用されます。 | -128~127 |
boolean | 0または1のみ代入可能。フラグのON-OFFなどに利用されます。 | 0,1 |
constを付帯することで、書き換え不能の固定値にすることができます
pinMode(入出力ソケット番号,INPUTまたはOUTPUT)
指定したデジタル入出力ソケット番号の機能を指示します。
入力として使用する場合は「INPUT」、出力の場合は「OUTPUT」を指定します。
digitalWrite(入出力ソケット番号,HIGHまたはLOW)
指定したデジタル入出力ソケット番号の電圧をON、またはOFFします。
ONさせたいときは「HIGH」、OFFさせたいときは「LOW」を指定します。
for文
初期値から加算値を加算しながら実行分を繰り返します。
条件式が成立すると繰り返し動作が終了します。
for(初期化 ; 条件式 ; 加算){
実行される文 ;
}
delay(時間)
()内で指定した時間(単位はmsec)だけ、プログラム実行を待たせます。
マイクロ秒単位で指定したい場合は、delayMcroseconds(時間)を使います。
スクラッチ
Scrattino3(スクラッチーノ3)というソフトウェアを使って、プログラミングする方法です。
Scrattino3のインストール方法やプログラミング、動作確認方法については、以下の記事にて詳しく説明しています。
動画を参考にプログラミングしてみよう
スクラッチプログラム(Scrattino3|スクラッチーノ3)
上記がスクラッチのプログラミングとその解説になります。
Scrattino3(スクラッチーノ3)でのスクラッチプログラミングの作り方について、本記事冒頭の動画にて詳しく説明していますのでぜひご覧ください。
Arduino専用ブロックについては、以下の記事にて詳しく説明しています。
動作確認方法
- 点灯LEDがデジタル出力0⇒1⇒2⇒3⇒4⇒5⇒6⇒7の順に切り替わるか?
- デジタル出力7が消灯したのちは、再びデジタル出力0から動作が繰り返されるか?
上記項目について確認していきましょう。
点灯LEDがデジタル出力0⇒1⇒2⇒3⇒4⇒5⇒6⇒7の順に切り替わるか?
点灯LEDが1つだけでかつ、順番に移動していくことを目で見て確認してください。
赤⇒黄⇒緑⇒青⇒青⇒緑⇒黄⇒赤の順に切り替わっているか確認してください。
繰り返し回数を1回や2回に変えて、動作確認すると面白いですよ!
デジタル出力7が消灯したのちは、再びデジタル出力0から動作が繰り返されるか?
継続的に色変化が起きることを確認してください。
もし、点灯LEDのシフト動作が途中で止まってしまった場合はプログラム内容を見直して修正してください。
スクラッチプログラミングの応用編
応用編として、サンプルプログラムを紹介します。
- 点灯するLEDを1つずつ切り替える(LESSONテーマと同一)
- 点灯するLEDを1つずつ追加する
- 点灯するLEDを1つずつ減少させる
シフトレジスタによる点灯LEDシフト動作回路(LESSON7)のまとめ
- シフトレジスタは記憶されたビットデータが隣の回路にシフトする電子機器
- シフトレジスタを使えば、3点の出力ソケット使用で、8つの出力を制御できる
- スクッラッチプログラミングでは機能の制約により、複数のLEDを同時に変化させられない
小学生のお子様には断然、スクラッチでのプログラミングがおすすめです!
次は電子機器の学習プログラムである、LESSON8(チルトスイッチとアクティブブザー)にチャレンジしてください。
次はチルトスイッチについて学習しましょう!
小学生のお子様には、プログラミング教室での基礎学習をおすすめしています!
まずは体験入学から始めてみてはいかがでしょうか?
Arduinoスクラッチプログラミングのおすすめ参考書について詳しく説明しています。
Arduinoプログラミング(スクラッチも)を使った電子工作を紹介しています。
LESSON6:フルカラーLED点灯制御プログラミングの学習についてはこちら!
コメント