【Arduino】 シフトレジスタでLEDを制御する ①

LESSON 016

  シフトレジスタ(74HC595)でLEDを制御する

  
 Arduino​でLEDを点灯させるには LED 1個に対してGPIO 1ポートが必要になります。LED を 8個必要ならGPIO は8ポートが必要になります。
 
 
 14ポート中 8ポートが使われるため残り6ポートになり、この6ポートでセンサ等を使用しなければなりません。そこで、シフトレジスタ(74HC595)のICを用いる事でGPIO 3ポートでLEDを8個以上コントロール出来ます。  
  
 74HC595 のICは シリアル信号からパラレル信号に変換され、QA ~ QHに出力されます。
  
 

 
      
   今回は SRCLRはシフトレジスタ内の情報を保持のため HIGH にする
       OE は 出力を有効にするため LOW にする
になります。
 
○ シリアル信号 パラレル信号 の違い
  
  信号の送り方としてシリアル信号とパラレル信号があります。
   シリアル信号 1本の信号線で直列に信号を送ります。 
          利点 回路がシンプルに作れる
   
   パラレル信号 複数本の信号線で並列に信号を送ります。
          利点 複数の信号を一度に送れる  
 
  シリアル信号からパラレル信号はこの様になります。
構成部品

Arduino​
USBケーブル​
ブレッドボード​
74HC595
LED​
抵抗​ 220Ω
ジャンパー線
配線図

   

  
       GPIO     8   ⇒ SER
       GPIO   9 ⇒ RCLR
    GPIO 10    ⇒ SRCLK​ 
    GPIO GND   ⇒ ー
     
    
   

スケッチ《 test014 》
   
const int SER = 8;
const int RCLK = 9;
const int SRCLK = 10;

void setup() {
  pinMode(SRCLK, OUTPUT);
  pinMode(RCLK,  OUTPUT);
  pinMode(SER,   OUTPUT);
}

void loop() {
  digitalWrite(SER, HIGH);
  for (int i=0; i<8; i++) {
    digitalWrite(SRCLK, LOW);
    digitalWrite(SRCLK, HIGH);
    digitalWrite(RCLK,  LOW);
    digitalWrite(RCLK,  HIGH);  
    delay(1000);
    digitalWrite(SER, LOW);
  }
}

  
解説
 

LEDの点灯の場所が移動していく
  

  • void loop() 
      

    digitalWrite(SER, HIGH);
      
      
     2進(0000 0001)2の値をシリアルデータでレジスタ ① に書き込むとパラレルデータ ② に変換されます。 

     digitalWrite(SRCLK, LOW);
     digitalWrite(SRCLK, HIGH);
      
      レジスタのデータはSRCLKポートにLOWの信号を入れてからHIGHの信号を送るとレジスタのデータをシフトさせることが出来ます 
     
     digitalWrite(RCLK, LOW);
     digitalWrite(RCLK, HIGH);

      
      RCLKポートにLOWの信号を入れてからHIGHの信号を送るとレジスタのデータをQA ~ QHに出力します。③

    digitalWrite(SER, LOW);
     
     LOOP後、レジスタにシリアルデータが加わるためここでシリアルデータを0にする必要がある。この命令をを無くすとシフトするたびにLEDの点灯が増えて最後には全て点灯してしまいます。
      

  結果  
     

まとめ

○ Arduino​でシフトレジスタ(74HC595)でLEDを制御する場合は、GPIO 3ピンで8つの信号(LED)を制御出来ます。また、シフトレジスタを連結する事も可能でシフトレジスタの連結数 × 8 の信号が制御出来ます。 
       
○ Arduino を 学ぶ上で書籍やWebpageを参考に作っていますが、私なりに噛み砕いて書いているつもりですが、判らない点がありましたら連絡下さい。

目次