注釈
こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!FacebookでRaspberry Pi、Arduino、ESP32をさらに深く探求しましょう。
なぜ参加するのか?
専門サポート: コミュニティとチームの助けを借りて、販売後の問題や技術的な課題を解決。
学びと共有: スキルを向上させるためのヒントやチュートリアルを交換。
独占プレビュー: 新製品の発表や先行情報に早くアクセス。
特別割引: 最新製品の特別割引を享受。
フェスティバルプロモーションとプレゼント: プレゼントや休日のプロモーションに参加。
👉 一緒に探求して創造する準備はできましたか?クリックして[here]今日参加してください!
2.2 PWMを使用したアナログ出力
前のプロジェクトでは、デジタル出力を使用してLEDを点灯および消灯しました。このプロジェクトでは、パルス幅変調(PWM)を利用してLEDに呼吸効果を与えます。PWMは、四角波信号のデューティサイクルを変えることで、LEDの明るさやモーターの速度を制御する技術です。
PWMを使用すると、単にLEDを点灯または消灯するのではなく、各サイクル内でLEDが点灯している時間と消灯している時間を調整します。LEDを急速に点滅させることで、LEDが徐々に明るくなり、暗くなる錯覚を作り出し、呼吸効果をシミュレートします。
ESP32 WROOM 32EのPWM機能を使用することで、LEDの明るさを滑らかで精密に制御できます。この呼吸効果は、プロジェクトに動的で視覚的に魅力的な要素を追加し、目を引くディスプレイや雰囲気を作り出します。
使用可能なピン
このプロジェクトでESP32ボードで使用可能なピンのリストは次の通りです。
使用可能なピン |
IO13, IO12, IO14, IO27, IO26, IO25, IO33, IO32, IO15, IO2, IO0, IO4, IO5, IO18, IO19, IO21, IO22, IO23 |
必要な部品
このプロジェクトで必要な部品は次の通りです。
部品紹介 |
購入リンク |
|---|---|
- |
|
ブレッドボード |
|
ジャンパーワイヤー |
|
抵抗器 |
|
LED |
回路図
このプロジェクトは最初のプロジェクト 2.1 デジタル出力 と同じ回路ですが、信号の種類が異なります。最初のプロジェクトでは、pin26から直接デジタルのハイおよびロー(0&1)レベルを出力してLEDを点灯または消灯させましたが、このプロジェクトでは、pin26からPWM信号を出力してLEDの明るさを制御します。
配線図
コード
このコードをダウンロードするか、直接Arduino IDEにコピーします。
コードが正常にアップロードされると、LEDが呼吸するように点灯します。
動作の仕組み
定数と変数を定義します。
const int ledPin = 26; // LEDのGPIOピン int brightness = 0; int fadeAmount = 5;
ledPin: LEDが接続されているGPIOピン番号(この場合、GPIO 26)。brightness: LEDの現在の明るさレベル(初期設定は0)。fadeAmount: LEDの明るさを各ステップで変える量(設定値は5)。
PWMチャネルを初期化し、LEDピンを設定します。
void setup() { ledcAttach(ledPin, 5000, 8); // Configure the PWM pin with 5000Hz frequency and 8-bit resolution }
ここでは、LEDC (LED制御)周辺機器を使用しています。これは主にLEDの強度を制御するために設計されていますが、他の目的のためにPWM信号を生成することもできます。
bool ledcAttach(uint8_t pin, uint32_t freq, uint8_t resolution_bits);: This function is used to setup the LEDC pin frequency and resolution. It will returnfrequencyconfigured for LEDC pin.pin: GPIOピンを選択。freq: PWMの周波数を選択。resolution_bits: ledcチャネルの解像度を選択します。範囲は1-14ビット(ESP32では1-20ビット)。
loop()関数には、プログラムのメインロジックが含まれており、連続して実行されます。LEDの明るさを更新し、明るさが最小値または最大値に達したときにフェード量を反転させ、遅延を導入します。void loop() { ledcWrite(ledPin, brightness); // PWMチャネルに新しい明るさの値を書き込む brightness = brightness + fadeAmount; if (brightness <= 0 || brightness >= 255) { fadeAmount = -fadeAmount; } delay(50); // 20ミリ秒待機 }
void ledcWrite(uint8_t pin, uint32_t duty);: この関数はLEDCチャネルのデューティを設定します。pin: デューティを書き込むLEDCチャネルを選択。duty: 選択されたチャネルに設定するデューティを選択。