こんにちは、FacebookのSunFounder Raspberry Pi & Arduino & ESP32エンスージアストコミュニティへようこそ!Raspberry Pi、Arduino、ESP32について、仲間と一緒にさらに深く探求しましょう。 **参加する理由は?** - **エキスパートサポート**: コミュニティやチームから、販売後の問題や技術的な課題を解決します。 - **学びと共有**: スキル向上のためのヒントやチュートリアルを交換。 - **独占プレビュー**: 新製品発表や製品の先行予告へのアクセス。 - **特別割引**: 最新製品の独占割引を楽しむ。 - **祭りのプロモーションとギブアウェイ**: ギブアウェイや休日のプロモーションに参加。 👉 私たちと一緒に探求し、創造してみませんか?クリック[|link_sf_facebook|]して今日参加! .. _py_fade: 2.3 LEDのフェード ======================== このレッスンでは、Raspberry Pi Pico 2を使用してLEDの明るさをパルス幅変調(PWM)で制御する方法を学びます。これは、LEDやモーターなどのデバイスを異なる強度で制御できる、電子工学の基本的な技術です。 **PWMとは何か?** **パルス幅変調(PWM)** は、高周波で電力をオンとオフに切り替えることで、電子デバイスへの電力供給量を制御する方法です。パルスの「幅」(オンになっている期間)がデバイスが受け取る電力量を決定します。 |img_pwm_duty_cycle| * **デューティサイクル**: シグナルがアクティブである一周期の割合。100%のデューティサイクルはシグナルが常にオンであり、0%は常にオフです。 * **周波数**: シグナルが1秒間にオンとオフを繰り返す回数。 デューティサイクルを調整することで、デジタル信号を使ってアナログ出力をシミュレートできます。例えば、LEDを高速でオンとオフに切り替えると、各サイクル中にLEDがオンになっている期間に応じて、私たちの目は異なる明るさを認識します。 **PWMを使用する理由は?** * **LEDの明るさ制御**: LEDの明るさをスムーズに調整します。 * **モーター速度制御**: DCモーターの速度を制御します。 * **効率**: PWMは可変抵抗を使用するよりも効率が良いため、熱としてのエネルギー損失を減らすことができます。 **Raspberry Pi Pico 2のPWMについて** Raspberry Pi Pico 2はすべてのGPIOピンでPWM機能を備えていますが、実際には8つのPWMスライス(PWM0からPWM7まで)があり、各スライスには2つのチャンネル(AとB)があり、合計16の独立したPWM出力があります。 |pin_pwm| .. note:: 同じPWMスライスを共有しているピン(GP0とGP16など)は異なる周波数を持つことはできませんが、異なるデューティサイクルを持つことは可能です。 **必要なもの** このプロジェクトには、以下のコンポーネントが必要です。 キット全体を購入することは非常に便利です。こちらがリンクです: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - 名前 - このキットに含まれるもの - リンク * - Newton Lab Kit - 450以上の部品 - |link_newton_lab_kit| 以下のリンクから個別に購入することもできます。 .. list-table:: :widths: 5 20 5 20 :header-rows: 1 * - SN - コンポーネント - 数量 - リンク * - 1 - :ref:`cpn_pico_2` - 1 - |link_pico2_buy| * - 2 - マイクロUSBケーブル - 1 - * - 3 - :ref:`cpn_breadboard` - 1 - |link_breadboard_buy| * - 4 - :ref:`cpn_wire` - 数本 - |link_wires_buy| * - 5 - :ref:`cpn_resistor` - 1(220Ω) - |link_resistor_buy| * - 6 - :ref:`cpn_led` - 1 - |link_led_buy| **回路図** |sch_led| **配線図** |wiring_led| **コードの書き方** .. note:: * ``2.3_fading_led.py`` を ``newton-lab-kit/micropython`` から開くか、Thonnyにコードをコピーして「実行」ボタンをクリックするか、F5キーを押してください。 * 正しいインタプリターが選択されていることを確認してください:MicroPython(Raspberry Pi Pico).COMxx。 .. code-block:: python import machine import utime # GP15ピンにPWMを設定 led = machine.PWM(machine.Pin(15)) led.freq(1000) # 周波数を1000Hzに設定 # 明るさを徐々に増加 for duty in range(0, 65536, 64): led.duty_u16(duty) # デューティサイクルを設定(16ビット値) utime.sleep(0.01) # 10ms待つ # LEDをオフにする led.duty_u16(0) コードが実行されると、GP15ピンに接続されたLEDの明るさがオフから最大まで徐々に増加します。 **コードの理解** * ライブラリのインポート: * ``machine``: ハードウェアコンポーネントにアクセスします。 * ``utime``: 遅延を加えることができます。 * PWMの設定: * ``machine.PWM(machine.Pin(15))``: GP15でPWMを初期化します。 * ``led.freq(1000)``: PWM周波数を1000Hz(1サイクルあたり1ms)に設定します。 * デューティサイクルの調整: * ``for duty in range(0, 65536, 64)``: 0から65535まで64刻みでループします。 * ``led.duty_u16(duty)``: デューティサイクルを設定します。 ``duty_u16`` 関数は16ビット値(0から65535)を受け入れ、0は0%、65535は100%のデューティサイクルを意味します。 * ``utime.sleep(0.01)``: 明るさの変化が目に見えるように小さな遅延を加えます。 * LEDをオフにする: * ``led.duty_u16(0)``: デューティサイクルを0%に設定し、LEDをオフにします。 **さらなる実験** * **フェードインとアウト**: コードを変更して、LEDをフェードインさせた後、フェードアウトさせます。 * **速度変更**: ``utime.sleep()`` の値を調整して、明るさが変わる速度を変えます。 * **異なる周波数**: ``led.freq()`` を使って異なるPWM周波数を試し、それがLEDにどのような影響を与えるかを見ます。 **まとめ** PWMは、デジタル出力を使用してアナログ入力が必要なデバイスを制御するための強力な技術です。PWMを理解することで、モーター制御、オーディオ信号処理など、より複雑なプロジェクトの可能性が広がります。 Raspberry Pi Pico 2でPWMの基本をマスターすることで、より高度な電子プロジェクトを作成する準備が整います。 **参考文献** * |link_mpython_pwm|