色々なセンサーである程度遊び検証し終わって、他に何か検証するものはないかなと部品入れを探していたら、以前購入したパーツセットに

 

 ICみたいなやつが入っている。なにかと調べたら、シフトレジスタ(74HC595N)というものらしい。何に使うのかというと・・・ラズパイを用いて色々なセンサー、LED等を制御する場合、GPIOピンに接続する。I2CやSPI対応センサーのようなシリアル通信対応だと複数つないで制御できるが、そうでないものは信号線分のGPIOピンを割かなければならない。特にLEDを1つ1つ制御する場合はLEDの数だけGPIOピンが必要となってしまうからGPIOが27本なので27個が限界となってしまう。それを3本の信号線でシリアルデータを送り、パラレルに制御できるようにする部品(74HC595Nは1個で同時に8つ)で、しかも複数つないで増やせるので大量にLEDを制御できるらしい。

とりあえず、参考サイトを探してみると・・・

で詳しく接続方法とPythonコードが紹介されているので、早速まねて動かしてみました。とりあえず、実行する前にデータシートを確認。電源電圧は3.3Vで利用可能。使用してない入力はVccまたはGNDにつなげろと書いてあります。次に、絶対最大定格をみて制限抵抗の計算。

 制限抵抗の決め方として、74HC595の最大は70mA、一個あたり(1ピン当たり)のLEDは大体35mAの制限がある。8ピンを同時にLEDに接続するには8.5mA程度に抑える必要がある。6mA/LED一個程度で点灯させたいので下のサイトで計算すると216Ω、抵抗は220Ωをつけておけばよさそう。


 (追記11/18)1ピン3.3vの最大電流値が一番引っ掛かりそうで考慮していなかった(汗。3.3vの1ピンと17ピン合計で最大電流値は50mAの制限がある。74HC595の最大よりも少ないため、こちらを優先に考えると50÷8=6.25mA程度なので、6mAだとギリギリとなってしまう。4mA程度で納めておいたほうが良さそうなので330Ωの抵抗が望ましい。74HC595の消費電力は4μA程度なので無視できると思う。

ちなみに、220Ωの抵抗でどのくらいの電流が流れているかの動画も掲載します。結果として5mA/1LEDぐらいだったのでトータル40mAだったんだけど、シフトレジスタを2個つけてLEDつけるとやっぱりオーバーは免れないので、5Vからとったほうがよさそう。


 ちなみに多くの電流(1ピン当たり35mA[QA~QH]↑ or トータル50mA↑)を流したい場合は、トランジスタでスイッチングする必要があると思う。とりあえず、許容以内で流して動作を確認する。

 まずは、ブレッドボードにラズパイと74HC595に直接つなげる前に、電源ボードを刺しこんで点灯チェック。

全部のLEDが点灯するのを確認。そのあと、74HC595とラズパイに接続する(ワイヤーの処理が汚いw)

参考サイトにあるled.pyを動かしてみる。

 とりあえず、正常に動作ししている模様。ここで終わっては2番煎じとなってしまうので、お決まりのライブラリーを探してみる。どちらにせよ二番煎じ・・・どころかそれ以降w

 上のライブラリを見つけたのでインストールして、よりパーリィー感を出してコードを書いてみる。python3で行うので以下でインストールを行う

 インストールをしたら、以下のコードを実行してみた。ライブラリのexampleにの変更点は、ピンモードが実ピンモード(GIPO.BOARD)からGPIO番号を指定するモード(GPIO.BCM)に変えたくらい。ループの中は0.05秒毎にLEDをつけて、0.05秒毎に消していくのを繰り返すようにした。

てな感じ。とりあえず、ちょっとパーリィー感がでた。


 次に、明るさ調節ができるとの情報が載っているサイトをみかけた。

 上の接続だど74HC595の10番ピン(SCLR)は3.3V(HIGH)につないでいるが、これをPWMで制御することで明るさを調整できるらしい。10番ピンを3.3Vから外して、GPIO4に接続して下のコードを実行してみた(反射的に書いたコードなんで・・・定義とかしてません)。

参考サイトではArduinoでanalogWriteを使っていて、リファレンスを読むと

周波数は490Hzでデューティ比は0-255で表現するらしいので、GPIO用にざっくり換算して上のコードを書いてみた。動作確認の動画は以下です。

 まとめての明滅はできるけど、一つ一つのコントロールはできないとおもう・・・(なんかあるのかな。とりあえずは、ここまでしかわからなかった。

今後は「複数の74HC595をつなげての制御」を調べて検証していきたい。

 

 

投稿者 まる

Twitter : @dinagon Instagram : @d_dinagon フォロバします!!最近、ESP/Arduinoいじりすぎでアプリ開発が進んでない。歯医者なのに歯のことはあまり触れませんw