注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

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

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

👉 私たちと一緒に探索し、創造する準備はできていますか?[ここ]をクリックして今すぐ参加しましょう!

2.11 - ノブを回す

前回のプロジェクトでは、Pico Wのデジタル入力を使用しました。 たとえば、ボタンはピンを低レベル(オフ)から高レベル(オン)に変更できます。これは2値の動作状態です。

しかし、Pico Wは別のタイプの入力信号、つまりアナログ入力も受け取ることができます。 完全に閉じた状態から完全に開いた状態まで、任意の状態になることができ、可能な値の範囲があります。 アナログ入力によって、マイクロコントローラは物理世界の光強度、音強度、温度、湿度などを感知できます。

通常、マイクロコントローラにはアナログ入力を実装するための追加ハードウェア、すなわちアナログ-デジタル変換器(ADC)が必要です。 しかし、Pico W自体には直接使用できる内蔵ADCがあります。

pin_adc

Pico Wには、アナログ入力を使用できるGPIOピンが3つあります、GP26、GP27、GP28。すなわち、アナログチャンネル0、1、2です。 さらに、内蔵の温度センサーに接続された第4のアナログチャンネルもありますが、ここでは紹介しません。

このプロジェクトでは、ポテンショメータのアナログ値を読み取ろうとしています。

必要なコンポーネント

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

一式をまとめて購入すると便利です、そのためのリンクはこちら:

名前

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

購入リンク

ケプラーキット

450+

Kepler Ultimate Kit

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

SN

コンポーネント紹介

数量

購入リンク

1

Pico Wを知る

1

購入

2

マイクロUSBケーブル

1

3

ブレッドボード

1

購入

4

ジャンパーワイヤー

数本

購入

5

抵抗器

1(220Ω)

購入

6

LED

1

購入

7

ポテンショメーター

1

購入

回路図

sch_pot

ポテンショメータはアナログデバイスで、2つの異なる方向に回すことができます。

ポテンショメータの中央のピンをアナログピンGP28に接続します。Raspberry Pi Pico Wには多チャンネルの16ビットアナログ-デジタルコンバータが搭載されています。これは、入力電圧(0から動作電圧の3.3Vの間)を整数値(0から1023の間)にマッピングすることを意味します。そのため、GP28の値は0から1023の範囲になります。

計算式は以下の通りです。

デジタル値 = (アナログ電圧 / 3.3V) * 1023

次に、GP28(ポテンショメータ)の値をGP15(LED)のPWM値としてプログラムします。 こうすることで、ポテンショメータを回転させると、LEDの明るさが同時に変化することがわかります。

配線

wiring_pot

コード

注釈

  • ファイル 2.11_turn_the_knob.ino は、パス kepler-kit-main/arduino/2.11_turn_the_knob の下で開くことができます。

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

  • Upload ボタンをクリックする前に、ボード(Raspberry Pi Pico)と正確なポートを選択することを忘れないでください。

プログラムが実行されているとき、シリアルモニターでGP28ピンによって現在読み取られているアナログ値を見ることができます。 ノブを回すと、値は0から1023まで変わります。 同時に、アナログ値が増加するにつれて、LEDの明るさも増加します。

どのように動作するか?

シリアルモニターを有効にするには、 setup() でシリアル通信を開始し、データレートを9600に設定する必要があります。

void setup() {
    pinMode(ledPin, OUTPUT);
    Serial.begin(9600);
}

ループ関数では、ポテンショメータの値を読み取り、その値を0-1023から0-255にマッピングし、最終的にマッピング後の値を使用してLEDの明るさを制御します。

void loop() {
    int sensorValue = analogRead(sensorPin);
    Serial.println(sensorValue);
    int brightness = map(sensorValue, 0, 1023, 0, 255);
    analogWrite(ledPin, brightness);
}
  • analogRead() は、sensorPin(ポテンショメータ)の値を読み取り、変数 sensorValue に割り当てるために使用されます。

int sensorValue = analogRead(sensorPin);
  • シリアルモニターでSensorValueの値を表示します。

Serial.println(sensorValue);
  • ここで、 map(value, fromLow, fromHigh, toLow, toHigh) 関数が必要です。ポテンショメータで読み取られる値は0-1023の範囲であり、PWMピンの値は0-255の範囲です。この関数は、値を別の範囲に再マッピングするために使用されます。

int brightness = map(sensorValue, 0, 1023, 0, 255);
  • これで、この値を使用してLEDの明るさを制御できます。

analogWrite(ledPin, brightness);