注釈

こんにちは!FacebookのSunFounder Raspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Raspberry Pi、Arduino、ESP32について、同じ趣味を持つ仲間とともにさらに深く学びましょう。

なぜ参加するのか?

  • 専門的サポート: コミュニティやチームからの支援を受けて、販売後の問題や技術的な課題を解決します。

  • 学びと共有: ヒントやチュートリアルを交換し、スキルを向上させます。

  • 独占プレビュー: 新製品の発表や先行情報をいち早く入手できます。

  • 特別割引: 最新の製品をお得に購入できる割引を提供します。

  • 祝祭プロモーションやギフト: ギフトや祝日のプロモーションに参加できます。

👉 一緒に探索して創造してみませんか?[ここ]をクリックして、今すぐ参加しましょう!

2.3 LEDのフェードイン・フェードアウト

このレッスンでは、Raspberry Pi Pico 2 Wを使用して、PWM(パルス幅変調)でLEDの明るさを制御する方法を学びます。これは、LEDやモーターなどのデバイスの強度を調整するための、電子回路における基本的な技術です。

PWMとは?

パルス幅変調(PWM) は、電子デバイスに供給される電力の量を高頻度でオン・オフすることによって制御する方法です。パルスの「幅」(オンの時間の長さ)がデバイスが受け取る電力の量を決定します。

img_pwm_duty_cycle

  • デューティサイクル: 信号がアクティブな期間の割合です。100%のデューティサイクルは常にオン、0%は常にオフを意味します。

  • 周波数: 信号がオンとオフを繰り返す回数(秒単位)です。

デューティサイクルを調整することによって、デジタル信号を使用してアナログ出力をシミュレートできます。例えば、LEDを高速でオン・オフすると、LEDが各サイクルでどれくらいの時間オンの状態でいるかに応じて、目には異なる明るさとして見えます。

PWMを使用する理由

  • LEDの明るさ調整: LEDの明るさをスムーズに調整できます。

  • モーターの速度調整: DCモーターの速度を制御できます。

  • 効率性: PWMは可変抵抗を使うよりも効率的で、熱としてのエネルギー損失を減らします。

Raspberry Pi Pico 2 WでのPWMの理解

Raspberry Pi Pico 2 Wは、すべてのGPIOピンでPWM機能を持っていますが、実際には8つのPWMスライス(PWM0からPWM7)を持ち、それぞれに2つのチャネル(AとB)があり、合計16個の独立したPWM出力が可能です。

pin_pwm

注釈

同じPWMスライスを共有するピン(例えば、GP0とGP16)は、異なる周波数を持つことはできませんが、デューティサイクルは異なる値に設定できます。

必要なコンポーネント

このプロジェクトに必要なコンポーネントは以下の通りです。

全てが揃ったキットを購入するのは便利です。こちらのリンクから購入できます:

名前

このキットに含まれるアイテム

購入リンク

Pico 2 W スターターキット

450+

Pico 2 W Kit

以下のリンクから個別に購入することもできます。

SN

コンポーネントの説明

数量

購入リンク

1

Pico 2 Wの概要

1

2

Micro USBケーブル

1

3

ブレッドボード

1

買う

4

ジャンパーワイヤー

数本

買う

5

抵抗器

1(220Ω)

買う

6

LED

1

買う

回路図

sch_led

配線

wiring_led

コードの作成

注釈

  • ファイル 2.3_fading_led.inopico-2w-kit-main/arduino/2.3_fading_led のパスで開くことができます。

  • または、このコードを Arduino IDE にコピーしてください。

  • アップロードボタンをクリックする前に、Raspberry Pi Picoボードと正しいポートを選択してください。

const int ledPin = 15; // GPIOピン15に接続されたLED

void setup() {
  pinMode(ledPin, OUTPUT); // GPIOピンを出力モードに設定
}

void loop() {
  // 明るさを増加
  for (int value = 0; value <= 255; value += 5) {
    analogWrite(ledPin, value); // 明るさを設定
    delay(30);                   // 30ミリ秒待機
  }
  // 明るさを減少
  for (int value = 255; value >= 0; value -= 5) {
    analogWrite(ledPin, value);
    delay(30);
  }
}

コードをアップロードした後、LEDは徐々に明るさが増し、その後フェードアウトすることで、スムーズなパルス効果が作成されます。

コードの理解

  1. LEDピンの宣言:

    定数整数 ledPin を宣言し、それを15に設定します。この値は、LEDが接続されているGPIOピン15に対応します。

    const int ledPin = 15;
    
  2. ピンの設定:

    setup() 関数は、ボードが起動するたびに1回実行されます。ここでは、 ledPin を出力として初期化するために pinMode() を使用します。

    void setup() {
      pinMode(ledPin, OUTPUT);
    }
    
  3. ループ関数:

    loop() 関数は繰り返し実行されます。この関数には2つの for ループがあります。

    • 明るさを増加: value = 0 から始めて、5ずつ増加して255に達します。

    • 明るさを減少: value = 255 から始めて、5ずつ減少して0に達します。

    • analogWrite() 関数は、指定したピンにPWM信号を書き込みます。値は0(常にオフ)から255(常にオン)までで、明るさの256段階を設定できます。

    • delay(30); を追加することでループの速度が遅くなり、明るさの変化が徐々に見えるようになります。

    void loop() {
      // 明るさを増加
      for (int value = 0; value <= 255; value += 5) {
        analogWrite(ledPin, value);
        delay(30);
      }
      // 明るさを減少
      for (int value = 255; value >= 0; value -= 5) {
        analogWrite(ledPin, value);
        delay(30);
      }
    }
    

追加のヒント

  • 実験: 値の増加幅や遅延時間を変更して、フェードの速度にどう影響するかを確認してみましょう。

  • PWMの制限について理解する: PicoのすべてのGPIOピンはPWMをサポートしていますが、同じPWMスライスを共有するピンは、異なる周波数を持つことはできませんが、デューティサイクルは異なる値に設定できます。

  • 安全第一: LEDが過剰な電流を引き込んで焼けないように、常にLEDには抵抗を使用してください。

結論

Raspberry Pi Pico 2 WでPWMを使用してLEDのフェードイン・フェードアウト効果を作成しました。このプロジェクトは、デジタル信号を使用してアナログ動作をシミュレートする方法を示しており、電子回路とマイクロコントローラのプログラミングにおける基本的な概念を学ぶことができます。