見出し画像

LEDマトリクスを制御する1(RaspberryPi + HUB75)

前回の記事ではHaskellでライフゲームを作ってたりしたわけですが、
今度は電子工作でもライフゲームを作ってみようと思い、どんなのにするかなと考えてみました。
表示部分をLEDで自作するのは、配線が大変なことになりそうなので、何かないかなと探したところ、どうやらLEDマトリクスというものがあるようです。
HUB75という規格でRaspberryPi使えば制御できるとのことなので、この組み合わせ行くことにする。

RaspberryPiについては既にセットアップ済みの「RaspberryPi 3 Model B」を持っていたのでそれを利用します。
python3でRPi.GPIOが使えるようになっています。

で、今回購入したLEDマトリクスがこれ。

LEDマトリクスパネル P10 RGB 16×16

エルパラで注文したら、すぐに届いたので早速中身を確認。
取扱説明書をみたらA4の紙1枚に線のつなげ方と簡単なスペックしか書いていなかった。
データシートとかってないんだっけ?と思いつつネットで探してみるも、見つからない。とりあえずHUB75という規格は分かってるので、そこを調べればなんとかなるはず。
HUB75の公開された仕様書が見つからないので、とりあえず以下の記事を参考に試行錯誤して探っていくことにする。

LEDドットマトリクスパネル HUB75規格について調べてみた
によると、以下のような仕組みで制御するらしい。

1. 全ピンをLOWにする。(最初だけ)
2. R1 G1 B1 R2 G2 B2をそれぞれ上に書いたようにLOWかHIGHにする。
3. CLKをHIGHにする。
4. CLKをLOWにする。これでLED2個分が書き込まれた。
5. これと同じように、2~4をあと31回繰り返す。これで1セクションのデータ分書き込み終わる。
6. ABCDの4bit使って送り込みたいセクションを決める。最初は0000とか。
7. OEをHIGHにする。画面表示有効のフラグらしい。
8. LAT(STB)をHIGHにする。これでLEDが光る。
9. LAT(STB)をLOWにする。
10. OEをLOWにする。
11. 以上、2~10をセクションを変えながら8回分繰り返す。これを高速で繰り返すことで画面を全部表示できる。ちなみに止めたらその瞬間消える(たぶん)

これをみて、何となく仕組みは分かった。
パネルの大きさが違うので数値を読みかえればOKなはず、ということでさっそく配線をしていくことにした。


HUB75の前にまずは電源部分から。
ここはRaspberryPiとは別の外部電源を繋げないといけない。
パネル側は付属のケーブルを挿すだけだが、その逆側の端子はU字型の金具になっている。

これは、ACアダプタのソケットを外して中の線を取り出して配線すればよしとわかったので、やってみる。

+/-を間違えないようにテスタで確認してからパネル側のケーブルとつなげる。

左側の部分がその接続をしたところで、外れないように絶縁テープを巻きつけておいた。
ちなみに、今回この配線が一番、電子工作してるなと感じたところ。

次にHUB75の配線になるが、ここで少し困った。
というのもこのパネル、ピンのそばに書いてあるラベルが一部隠れていて見えない。

えー、と思ったけど、HUB75という規格になっているんだから製品によってピン配置は変わらんよね?
でもセクションのピンに「B」「C」がなく「D」も「GND」になってて少し疑心暗鬼に。
セクションのピンについては小さいパネルなので、8セクション分しか用意してないってことだと解釈して、以下のようなピン配置になっていると仮定して進めることにする。

これでRaspberryPiとこんな感じに接続する。


メスーメスのジャンパワイヤでパネルと直接つなげてもいいけど、長いワイヤがなかったので、付属のケーブルを介してオスーメスで接続してます。
HUB75とRaspberryPiのピンは以下の通り対応させています。

R1:GPIO17
G1:GPIO18
B1:GPIO22
R2:GPIO23
G2:GPIO24
B2:GPIO25
CLK:GPIO3
A:GPIO7
B:GPIO8
C:GPIO9
STB:GPIO4
OE:GPIO2
※GPIOの番号はBCM
※上記以外は全てGNDにつなげる。
※後からわかったことだが、セクションの選択に使用するCピンは使わていないので、GNDで問題ない。(複数パネル接続時の拡張に使うのかな?)

ピンの対応自体は、以下を参考にしている、というかそのままです。

ラズベリーパイとpythonで12×32 LEDマトリクスに画像を表示する

ここにはソースも載っていて非常に助かりました。
まずは上記に載っていたソースを16×16に収まるように改造して動かす。
すると光りはするが挙動がおかしい。
でもここで光ってくれたおかげで、LEDマトリクスを使うための方向性は間違ってなさそうということが分かった。
あとは原因を調べてればなんとかなりそう。

といったところで、続きは次回。

いいなと思ったら応援しよう!