メインコンテンツへスキップ

Raspberry Pi Pico - LED マトリクス

icysamon
著者
icysamon
電子工作・クリエイター

はじめに
#

最近 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 との無線通信をする予定です。