.. include:: /index.rst
:start-after: start_hello_message
:end-before: end_hello_message
.. _py_rgb:
1.2 RGB LED
====================
**はじめに**
このプロジェクトでは、Raspberry Pi と GPIO プログラミングを使って RGB LED を制御し、さまざまな色を表示する方法を学びます。RGB LED は、赤・緑・青の光をそれぞれ異なる強さで組み合わせることで、多彩な色を表現できる便利な電子部品です。
----------------------------------------------
**必要なもの**
このプロジェクトを完成させるために、次の部品を用意してください。
.. list-table::
:widths: 30 20
:header-rows: 1
* - 部品
- 購入リンク
* - :ref:`cpn_breadboard`
- |link_breadboard_buy|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_resistor`
- |link_resistor_buy|
* - :ref:`cpn_rgb_led`
- |link_rgb_led_buy|
* - :ref:`cpn_fusion_hat`
- \-
* - Raspberry Pi
- \-
----------------------------------------------
**回路図**
RGB LED の R、G、B ピンをそれぞれ電流制限用の抵抗に接続し、その抵抗を PWM0、PWM1、PWM2 に接続します。LED の最も長いピン(GND)は Raspberry Pi の GND ピンに接続します。3つのピンに異なる PWM 値を与えることで、さまざまな色を生成できます。
.. image:: img/fzz/1.1.2_sch.png
:width: 80%
:align: center
----------------------------------------------
**配線図**
以下の手順に従って回路を組み立ててください。
1. RGB LED をブレッドボードに配置します。
2. LED の赤・緑・青のピンを、それぞれ抵抗を介して P0、P1、P2 に接続します。
3. LED の最も長いピン(GND)を Raspberry Pi の GND に接続します。
.. image:: img/fzz/1.1.2_bb.png
:width: 80%
:align: center
----------------------------------------------
**サンプルプログラムの実行**
このチュートリアルで使用するすべてのサンプルコードは、 ``ai-lab-kit`` ディレクトリに用意されています。
次の手順に従ってサンプルを実行してください。
.. raw:: html
.. code-block:: shell
cd ~/ai-lab-kit/python/
sudo python3 1.2_RGBLED.py
プログラムを実行すると、RGB LED は赤 → 緑 → 紫の順にそれぞれ 1 秒ずつ点灯し、最後に消灯します。``Ctrl + C`` を押すと LED も消灯します。
----------------------------------------------
**コード**
次の Python コードでは、赤・緑・青の PWM 値を変化させることで、RGB LED の色を順番に切り替えます。
.. raw:: html
.. code-block:: python
#!/usr/bin/env python3
from fusion_hat.modules import RGB_LED
from fusion_hat.pwm import PWM
from time import sleep
# Initialize an RGB LED. Connect the red component to P0, green to P1, and blue to P2.
rgb_led = RGB_LED(PWM(0), PWM(1), PWM(2), common=RGB_LED.CATHODE)
try:
# Set the RGB LED to red.
rgb_led.color((255, 0, 0))
sleep(1)
# Set the RGB LED to green.
rgb_led.color("#00FF22")
sleep(1)
# Set the RGB LED to purple.
rgb_led.color(0xFF00FF)
sleep(1)
# Set the RGB LED to black.
rgb_led.color(0x000000)
except KeyboardInterrupt:
# Handle a KeyboardInterrupt (Ctrl+C) to exit.
rgb_led.color(0x000000)
pass
このスクリプトは、Fusion Hat ライブラリを使って RGB LED を制御する方法を示しています。RGB LED を特定の PWM ピンで初期化し、異なる色を順番に設定します。
----------------------------------------------
**コードの理解**
RGB LED を接続した対応デバイス上でスクリプトを実行すると、LED は赤 → 緑 → 紫の順に点灯し、その後消灯します。
1. **依存モジュールのインポート**
.. code:: python
from fusion_hat.modules import RGB_LED
from fusion_hat.pwm import PWM
from time import sleep
必要なモジュールを読み込みます。 ``fusion_hat`` ライブラリの ``RGB_LED`` と ``PWM`` は RGB LED の制御に使用され、 ``sleep`` は時間待ちに使用されます。
2. **RGB LED の初期化**
.. code:: python
rgb_led = RGB_LED(PWM(0), PWM(1), PWM(2), common=RGB_LED.CATHODE)
RGB LED を初期化し、赤・緑・青の各チャンネルをそれぞれ PWM ピン ``P0`` 、 ``P1`` 、 ``P2`` に接続します。この LED は **共通カソード(Common Cathode)** タイプです。
3. **色を順番に設定する**
.. code:: python
rgb_led.color((255, 0, 0)) # Red
sleep(1)
rgb_led.color("#00FF22") # Green
sleep(1)
rgb_led.color(0xFF00FF) # Purple
sleep(1)
スクリプトでは、さまざまな形式で RGB LED の色を指定できます。
- ``(255, 0, 0)``:RGB タプル形式の赤
- ``"#00FF22"``:16進文字列形式の緑系カラー
- ``0xFF00FF``:紫を表す16進整数
4. **LED を消灯する**
.. code:: python
rgb_led.color(0x000000)
LED の色を黒( ``0x000000`` )に設定することで、LED を消灯します。
5. **割り込み処理**
.. code:: python
except KeyboardInterrupt:
rgb_led.color(0x000000)
pass
ユーザーが ``Ctrl+C`` を押してスクリプトを中断した場合、この例外を処理し、LED を消灯してから終了します。
----------------------------------------------
**トラブルシューティング**
1. **LED が点灯しない**
- **原因**:配線ミス、または GPIO ピンの接続間違い。
- **対処方法**:RGB LED の赤・緑・青ピンが正しいピンに接続されているか、また LED の共通カソードまたは共通アノードが正しく接続されているか確認してください。
2. **色がちらつく、または不安定**
- **原因**:電源が不安定、または抵抗の使用が不適切。
- **対処方法**:適切な抵抗を使用し、安定した電源を確保してください。
3. **GPIO の設定が正しくない**
- **原因**:Fusion_hat ライブラリがインストールされていない。
- **対処方法**: :ref:`install_fusion_hat` を参照してください。
----------------------------------------------
**発展アイデア**
1. **カスタムカラーシーケンス**
``COLORS`` リストにさらに多くの色を追加し、たとえば ``(125, 50, 200)`` のような柔らかい色調も試してみましょう。
2. **ユーザー入力による色指定**
ユーザーが RGB 値を入力して LED の色を設定できるようにします。
.. code-block:: python
while True:
user_color = input("Enter RGB values (e.g., 125,0,0): ")
r, g, b = map(int, user_color.split(","))
rgb_led.color = (r, g, b)
3. **ランダムカラー表示**
ランダムな色を生成し、動的で予測できないライト表示を作ります。
.. code-block:: python
from random import randint
while True:
rgb_led.color = (randint(1,255) , randint(1,255) , randint(1,255) )
sleep(1)
----------------------------------------------
**まとめ**
このガイドを通して、Raspberry Pi と Python を使って RGB LED を制御する方法を学びました。このプロジェクトでは、PWM の基本と色の合成を理解できます。これらの知識は、より高度な照明効果の作成やインタラクティブな電子プロジェクトの基礎として活用できます。