Raspberry PiでフルカラーLEDイルミネーションを作るには

フルカラーLEDをRaspberry Piで制御して、様々な色を表現するイルミネーションを作ってみたいと思います。

デジタル的に単にLEDをチカチカ(ON/OFF)させるのではなく、アナログ的に輝度(明るさ)を4096段階調整可能です。調節はPWM(Pulse Width Modulation)制御基板を使用しました。

「イルミネーション」に相応しく、PWM制御基板1つで16チャンネル=フルカラーLEDを5つ接続することができます。複数のPWM制御基板を並列に接続することで最大992チャンネル、330個のフルカラーLEDを接続し、Raspberry Pi 1台で制御することが可能です。

この記事では、そのようなフルカラーLEDを制御する方法を記録してみたいと思います。


Raspberry PiのフルカラーLEDイルミネーション作成手順

使用する材料

Raspberry Pi本体

OSはRaspbianを使用したいと思います。どのRaspberry Piの機種でも大丈夫かと思います。

PWM制御基板

PCA9685を採用したPWM制御基板は多くの種類が出回っているようです。同じコントローラーを採用していてI2C端子に3.3Vの信号線を接続可能ならどれでも問題ないかと思います。

この記事では秋月電子通商さんの製品を使用させて頂きました。こちらは部品実装済みですが、ピンヘッダのはんだ付けが必要です。

電源分岐用microB端子

USB電源を分岐して、Raspberry PiとPWM制御基板に給電することで、GPIOの電力不足を解決しようと思います。秋月電子通商さんのこちらの製品を使用させて頂きました。

CPU、GPUの負荷が低く、USB端子に何も接続せず、少数のモーターやLEDを接続する場合でしたら、5V 3A程度のUSB電源をご用意頂ければ、電力不足の問題は発生し辛いかと思います。

フルカラーLED

カソードコモンの製品を使用しました。アノードコモンの場合、PWM信号(3.3V)と電源電圧(5V)の電位差で赤色が完全に消灯しない感じでした。PWM端子側の電源容量の都合から、LEDを大量に接続する場合、アノードコモンのほうが良いかもしれません。

カーボン抵抗/可変抵抗

手持ちの200Ωを使用しました。カソードコモンのフルカラーLEDの場合、3.3Vで抵抗値を計算します。LEDは個体差があるようです。本格的なイルミネーションを作成する場合、LEDの寿命を考慮して正しい値の電流が流れるように可変抵抗で調整する方法をお勧め致します。抵抗値を変えても明るさは変わらないため、LEDの輝度の個体差はPWM制御のパラメータで調節します。

配線・ブレッドボード

Raspberry PiとPWM制御基板はピンヘッダで接続するため、ジャンパーワイヤーのメス-メスを使用すると配線が楽です。


配線図

電源・Raspberry Pi・PWM制御基板

Raspberry PiとPWM基板の配線はこちらの記事を御覧ください。

フルカラーLED

フルカラーLEDを1つ接続する場合の配線は下図になります。

ブレッドボードを使用すると、全体的にこのような感じになります。


OSの設定

I2Cバスドライバの有効化

raspi-configでi2cバスを使用できるように設定後、再起動します。


PythonやJavaScriptでPWMの制御が可能

PythonでPWM制御プログラムを作成する場合、たとえばこちらのライブラリを使用して作成が可能のようです。

この記事ではNode.jsで制御画面を作成、そのままNode.jsでPWM制御も行っています。下記のライブラリを使用させて頂きました。

制御画面が無くても、最低限、つぎのAPI2つでLEDを点灯可能のようです。周波数を指定して初期化:pwm = new Pca9685Driver()、チャンネルごとにON/OFFのステップを指定:pwm.setPulseRange()

画面はNode.jsで作成して、制御はPythonプログラムを使用したい場合、後ほど作成するws-event-handler.jsファイルからPythonプログラムを実行すると、うまく連携できるかと思います。

以下、ソフトウェア的に制御画面を作成する内容になります。


フルカラーLED制御画面作成

コントロール用スイッチの設計

LEDの明るさを段階的に変えたいわけですが。そのための何かボリュームやスライダーがあると便利そうです。

ここではそのようなスイッチをソフトウェア的に作成して、スマートフォンやPCからLEDをコントロールできるようにしたいと思います。

完成形はこのような画面になります。PWM制御に必要な最低限のパラメータ、周波数とRGB各チャンネルのターンオン・ターンオフステップを入力するかたちにしようと思います。


Node.js+Express.jsプロジェクト作成

こちらの記事を参考に、Express.jsのプロジェクトを作成します。

  1. プロジェクト名は「ledcontrol」にしてみました。
  2. PWM制御に使用するモジュールをインストールしておきます。

あとで画面を変更したい場合、Raspberry Piで直接プロジェクトを作成せずに、WindowsやMac等のPCで作成後、SFTP、Git、Subversion、Nextcloud等でRaspberry Piへファイルを転送(同期)したほうが変更しやすいかと思います。Visual Studio Codeを使用する方法は宜しければこちらを御覧ください。


 ソースファイルの作成・変更

app.jsファイル変更

app.jsファイルを編集します。

「var app = express();」行の下に下記を追加しました。

WebSocketサーバを作成、データを送受信しつつ、ws-event-handler.jsファイルの関数を実行する内容です。


views/index.ejsファイル変更

index.ejsファイルをそっくり入れ替えます。

こちらがコントロール画面になります。

public/javascripts/pwm_graph.jsファイル作成

グラフの描画用にpwm_graph.jsファイルを作成しました。

HTML5のcanvasにグラフを書く内容です。

ws-event-handler.jsファイル作成

最後に実際にPWM制御を行うソースファイルを作成します。

pca9685モジュールを使用して周波数やターンオン/ターンオフパラメータをPCA9685コントローラーにセットする内容です。


以上で準備が完了しました。

作成したledcontrolプロジェクトを実行すると

スマートフォンやWebブラウザでLEDの制御画面にアクセスできるようになります。

スライダーを動かすと、Raspberry PiからPWM制御基板を経由してLEDの明るさを変えられるかと思います。

複数のLEDを接続すれば、空間的にさらにゴージャスなイルミネーションを作成できると思います。

お好みの色のパラメータを探して、例えばタイマーで自動的に色を変化させたりすることで、時間的なバリエーションのあるイルミネーションを演出することも可能かと思います。

宜しければいろいろとお試し下さい。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク