はじめに #
最近 LED のマトリクス回路に興味があって、イコライザーを作ってみたいが、
たぶん完成まで長い時間が掛かるので、進捗に合わせて、複数の記事に分けて書いていこうと思います。
今回は、LED マトリクスのダイナミック点灯を実現します。
さっそく始めましょう!
機材 #
- Raspberry Pi Pico W
- 3mm赤色LED 625nm 70度 OSR5JA3Z74A(9個)
- カーボン抵抗(炭素皮膜抵抗) 1/4W250Ω(3個)
- ケーブル・ジャンパーワイヤ
配線 #
ブレッドボードの配線は以下の通りです。

LED マトリクス制御 #
LED は発光ダイオードなので、逆方向からの電流が流れにくい特性があります。
勿論ブレークダウン電圧を超えたら壊れます。
ここでは、GP10 の出力を High にして、LED3, LED6, LED9 それぞれに繋げている GP6, GP7, GP8 の出力を制御したら、LED の制御ができます。
例えば以下ような場合、
- Low:
GP6 - High:
GP10,GP7,GP8
LED3 だけ順電圧を満たし、LED が点灯します。
これで、線6本で、9個の LED をコントロールすることができます。
同様に、4x4であれば16個、10x10であれば100個の LED を制御できます。

メモ #
今回は C 言語で作りました。
C SDK 環境の構築はこちらの記事に書いています。
まずは GPIO の定義です。
#define PIO_1 10
#define PIO_2 11
#define PIO_3 12
#define PIO_4 6
#define PIO_5 7
#define PIO_6 8数字は PIN 番号ではなく GPIO 番号です。
LED の輝度を調節したいので、PWM 調光を使います。
陽極は PWM で、陰極は普通の GPIO 出力にします。
PWM #
初期化 #
GPIO に PWM を利用すると伝えます。
gpio_set_function(PIO_1, GPIO_FUNC_PWM);GPIO のスライスを取得します。
uint slice_num_1 = pwm_gpio_to_slice_num(PIO_1);256サイクルの期間を設定します。(0〜255を含む)
pwm_set_wrap(slice_num_1, 255);チャンネルのデューティ比(Duty Cycle)を設定します。
ここでは 0 を初期状態にします。
範囲は pwm_set_wrap で設定したサイクル期間によります。
pwm_set_chan_level(slice_num_1, PWM_CHAN_A, 0);
pwm_set_chan_level(slice_num_1, PWM_CHAN_B, 0);PWM を有効化します。
pwm_set_enabled(slice_num_1, true);調光 #
初期化後、GPIO 番号での輝度制御ができます。
数字が大きくなると、輝度が上がります。
範囲は pwm_set_wrap で設定したサイクル期間によります。
pwm_set_gpio_level(PIO_1, 127);GPIOs #
初期化 #
GPIO を初期化します。
gpio_init(PIO_4);GPIO の入出力方向を設定します。
ここでは出力にします。
gpio_set_dir(PIO_4, GPIO_OUT);制御 #
GPIO の出力電圧を設定します。
1 は High, 0 は Low です。
gpio_put(PIO_4, 1);おわりに #
現段階では、LED マトリクスのダイナミック点灯を実現しました。
次回は PC との無線通信をする予定です。
