💡

Raspberry Piと74HC595でLEDを複数制御する

2025/03/13に公開

電子工作してみたいなあと思い下記の入門キットを購入しました。
https://amzn.asia/d/9iuVVMc
セットの中に74HC595が入っていたので今回はそれで8個のLEDを制御してみます。

74HC595とは

74HC595とはシフトレジスタと呼ばれるICです。LED1個を点灯させるためには入力が1つ必要になります。8個点灯させるためには8個入力が必要になりますがシフトレジスタを利用することで少ない入力でより多くのLEDを操作することができるようになります。
このICの入出力や原理はこちらのサイトが非常に参考になりました。
https://synapse.kyoto/glossary/74hc595/page001.html

RaspberryPiとの接続

今回作成した回路です。このICを使った他の記事だとSRCLRは電源に接続することが多いですが、手元の環境だと動作がかなり不安定になってしまったので初回にLOW→HIGHTで入力していきます。

抵抗は330Ωのものを利用しています。また、ラズパイからの電源供給だと動作が不安定になってしまったため、購入したキットに入っていたHW-131という電源モジュールを別途利用しています。

74HC595とラズパイは以下のように接続していきます。

74HC595 ラズパイ
SER GPIO26
RCLK GPIO19
SRCLK GPIO13
SRCLR GPIO6

Lチカしてみる

今回は2進数でカウントアップをしていくように光らせていきます。
各入力の制御は上記のサイトの図11を参考にしています。

main.py
import RPi.GPIO as GPIO
import time

SER = 26
RCLK = 19
SRCLK = 13
SRCLR = 6

GPIO.setmode(GPIO.BCM)
GPIO.setup(SER, GPIO.OUT)
GPIO.setup(SRCLK, GPIO.OUT)
GPIO.setup(RCLK, GPIO.OUT)
GPIO.setup(SRCLR, GPIO.OUT)

# 8ビットデータを送る関数
def shiftOut(value):
    for i in range(0, 8):
        bit = (value >> i) & 0x01
        GPIO.output(SER, bit)
        GPIO.output(SRCLK, GPIO.HIGH)
        GPIO.output(SRCLK, GPIO.LOW)

# シフトレジスタを更新する関数
def updateShiftRegister(value):
    GPIO.output(RCLK, GPIO.HIGH)
    GPIO.output(RCLK, GPIO.LOW)
    shiftOut(value)

try:
    GPIO.output(SRCLR, GPIO.HIGH)
    GPIO.output(SRCLR, GPIO.LOW)
    GPIO.output(SRCLR, GPIO.HIGH)
    while True:
        for i in range(0,256):
            updateShiftRegister(i)
            time.sleep(0.1)
except KeyboardInterrupt:
    pass
finally:
    GPIO.cleanup()

参考

https://stupiddog.jp/note/archives/1152
https://synapse.kyoto/glossary/74hc595/page001.html

Discussion