Raspberry PiとArduinoで作るWeb駆動型LEDアニメーション
部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Raspberry Pi 3 Model B | 1 | |
| Arduino UNO | 1 | Nanoも可。大量LED駆動ならMega推奨 |
| NeoPixelストリップ (WS2812B等) | 1 | 任意のWS2812系LEDストリップ |
使用アプリ・サービス
- Arduino IDE
プロジェクト概要
プロジェクト概要
Arduino Light Animation (ALA) は、最小限の労力でLEDを制御し、カラフルなアニメーションを実行するArduinoライブラリです。30種類以上のプリセットアニメーションと複数のカラーパレットを提供。詳細はブログを参照。
本プロジェクトではRaspberry Pi 3を追加し、スマホやPCのWebブラウザからアニメーション・色・速度を制御できるWebページを提供します。AlaWebのデモ動画をご覧ください。
必要な主要コンポーネントは3つ:
- WS2812 RGB LEDストリップ:個別にアドレス指定可能な1線式インターフェースで、各RGB LEDの色を完全制御
- Arduino:ALAライブラリでLEDストリップを駆動、Raspberry PiからUSBシリアルでコマンド受信。Uno、Nano、Mega対応
- Raspberry Pi:照明・アニメーション・パラメータを制御するWebページを提供する小型PC
ArduinoとRaspberry Piに慣れていればシンプルなプロジェクトです。セットアップ手順を2ステップに分けて解説します。
配線
WS2812 LEDストリップの接続は簡単。全LEDを駆動する十分な電源が必要です。非常に短いストリップ(10個以下)ならUSBポートから直接給電可能ですが、長い場合は適切な電源を用意してください。まずはArduino 5Vピンから給電する方法を推奨(動画参照)。
- Arduino GND → WS2812 GND
- Arduino 5V → WS2812 5V
- Arduino ピン6 → WS2812 Ctrl/Din
より多くのピクセルを駆動する場合は外部電源必須。計算式:各RGB LEDは全点灯白で60mA消費。例:2m、60LED/mのストリップなら 2 × 60 × 60mA = 7.2A の5V電源が必要。
- 電源GND → Arduino GND および WS2812 GND
- 電源5V → Arduino 5Vピン および WS2812 5V
- Arduino ピン6 → WS2812 CTRLピン
※ Arduino 5Vピンに給電すると電圧レギュレーターと保護回路をバイパスするため注意。詳細はこのガイド参照。WS2812配線の詳細はこちら。
Arduinoセットアップ
- ArduinoをPCのUSBポートに接続
- Arduino IDEでライブラリ・マネージャ(スケッチ>ライブラリをインクルード>ライブラリを管理)を開き、最新のALAライブラリをインストール
- RgbStripSerial例を開く(ファイル>スケッチ例>ALA>RgbStripSerial)し、
NUM_PIXELS定数が手元のLED数と一致するか確認。10個超の場合は改良版配線を使用 - Ctrl+Uまたはスケッチ>アップロードで書き込み。問題時はツール>ボード/ポートを確認
- シリアル・モニタ(ツール>シリアル・モニタ)を開くとウェルカム・メッセージ表示
動作テスト(シリアル・モニタからコマンド送信)
スペースなしで以下を入力:
- A=101 - LED点灯
- A=251 - 「ラーソン・スキャナー」アニメーション実行
- P=2 - レインボー・パレット設定
- A=242 - 別のアニメーション
面白いですよね? 以下のコマンド・リファレンスで様々な組み合わせを試せます:
- A=[アニメーション・コード] - アニメーション設定(コードは
AlaLed.hに定義) - B=[輝度] - 輝度設定(0-100範囲)
- D=[周期] - アニメーション・サイクル期間(ミリ秒、標準500-5000)
- C=[色] - 色設定(16進RGB表記、例:E8A240)
- P=[パレット] - パレット設定(0-5範囲)
では、スマホから制御してみましょう。
Raspberry Piセットアップ
Raspberry Piで小型Webサーバーを稼働し、WebブラウザからLEDストリップを制御できるようにします。同じアプリケーションはPython 3が入った任意のPCでも動作します。
前提条件:Raspberry Piが最新Raspbian OS(Stretchでテスト済み)で稼働中、インターネット接続済み。
Pythonライブラリ・インストール
sudo pip3 install pyserial flask
プロジェクト・ディレクトリ作成とコード取得
mkdir /home/pi/AlaWeb
cd /home/pi/AlaWeb
wget https://github.com/bportaluri/AlaWeb/archive/master.zip
unzip master.zip
実行
ArduinoのUSBポートをRaspberry Piに接続。AlaWebアプリがUSBシリアルでArduinoと通信します。
cd AlaWeb-master
sudo python3 AlaWeb.py
AlaWebは全USBシリアル・ポートを列挙し、Arduinoを自動検出。ループする場合は中断し、ポート名を指定:
sudo python3 AlaWeb.py /dev/ttyACM0
成功時の出力例:
表示されたURLをWebブラウザで開くと、LEDストリップを制御するボタン満載のWebページが表示されます。
Enjoy!
コード
回路図
製造プロセス
- Samsung SAMI、Arduino UNO、Raspberry Piで高速・信頼性の高い火災検知システムを構築
- Raspberry Piと湿度センサーで作る自動エアロポニックスシステム
- Raspberry Pi と Python でロボットを構築:完全ガイド
- Arduino & Raspberry Pi でインターネット制御ビデオストリーミングロボットを構築
- gatoBot:Raspberry Pi Zero WでWeb操作・ライブ映像ストリーミングロボット
- Arduino Nano 33 IoT製 フライトシミュレーター2020用コックピットパネル - LCD&CDI表示
- Microsoft Flight Simulator 2020用Arduinoスイッチ&LEDパネル
- ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
- スマートArduino四足歩行ロボットの製作:ステップバイステップガイド
- Arduino & MPU6050:SG90 & MG996Rサーボの精密制御
- Bolt IoTとArduino UNOでLED輝度をシームレス制御