Raspberry Pi Pico③アナログ入出力をやってみる!

目次

今回の内容

Raspberry Pi Pico(以下、ラズピコ)でアナログ入出力を行い、前回作ったRGBLEDの色を調整する回路を組んでみようと思います。
Arduino言語を使ってやっているので、Arduinoでも同じ要領でできる内容かなと思います。

※今回のスケッチは「Raspberry Pi Pico/RP2040 by Earle F.Philhower,Ⅲ」のボードマネージャを使う前提のものになります。

可変抵抗器

RGB値を調整するのに使います。
つまみを回すことで、抵抗値を変化させることができるパーツです。
今回使うのは最大が10kΩの可変抵抗器です。

Amazonではセットで販売されていました。

analogRead()とanalogWrite()

analogRead()は可変抵抗器で調整した電圧値を読み取るために使用する関数です。
analogWrite()はアナログ値(PWM波)を出力するために使用する関数です。
Arduino公式リファレンスに説明と使い方の例がありました。

今回の回路図

RGB(フルカラー)LEDの時の回路に可変抵抗器を加えます。可変抵抗器は3つ使って赤色、緑色、青色のそれぞれに割り当てます。
またあわせて、現在のRGB値を確認するためにディスプレイとしてOLEDも加えてみました。

Picoのピンの中でanalogRead()できるピンはGPIO26~29です。今回はその中から、26、27、28ピンを使います。

No.部品数量
1Raspberry Pi Pico1
2赤色LED1
3緑色LED1
4青色LED1
5抵抗(330Ω)6
6ブレッドボード必要な数
7ジャンプワイヤー必要な数
8USBケーブル(A-microB)1
9RGB(フルカラー)LED1
1010kΩ可変抵抗器3
11OLED_SSD13061

今回のスケッチ

OLEDの時のスケッチと合わせ技でやってみてます。
また、analogRead()からanalogWrite()に値を渡す際に「読み取った値÷4」をしています。
これはanalogRead()の戻り値範囲が0~1023であるのに対して、analogWrite()には0~255で入力する必要があるためです。

//アナログ入出力をやってみる!
//https://jcomet.com/


//ライブラリをインクルード
//https://github.com/adafruit/Adafruit_SSD1306
#include<Adafruit_GFX.h>
#include<Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
#define SCREEN_ADDRESS 0x3C //SSD1306のI2Cアドレス 0x3C for 128x32
// ディスプレイ変数の宣言
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

//RED出力ピン指定
int RedLed = 18;
int GreenLed = 17;
int BlueLed = 16;

//可変抵抗器から値を読み取るピン指定
int PotRed = 26;
int PotGreen = 27;
int PotBlue = 28;

//変換したRGB値を入れる変数
int ValRed = 0;
int ValGreen = 0;
int ValBlue = 0;


void setup() {
  // ディスプレイの初期化
  display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
  pinMode(RedLed, OUTPUT);
  pinMode(GreenLed, OUTPUT);
  pinMode(BlueLed, OUTPUT);
}
void loop() {
  SetDisplay(); //OLEDの画面設定
  delay(10);
  ReadPotential(); //可変抵抗器から値読み取りRGB値に変換
  delay(10);
  RGB_Displayed(); //OLEDにRGB値を表示する
  delay(10);
  //RGBLEDを点灯する
  analogWrite(RedLed, ValRed);
  analogWrite(GreenLed, ValGreen);
  analogWrite(BlueLed, ValBlue);
  delay(10);
}

//OLEDの画面設定
void SetDisplay(){
  display.clearDisplay(); // ディスプレイをクリア
  display.setTextSize(1); // 出力する文字の大きさ
  display.setTextColor(WHITE); // 出力する文字の色
  display.setCursor(0, 0); // 文字の一番端の位置
}

//可変抵抗器から値読み取りRGB値に変換
void ReadPotential(){
ValRed = analogRead(PotRed) / 4;
ValGreen = analogRead(PotGreen) / 4;
ValBlue = analogRead(PotBlue) / 4;
}

//OLEDにRGB値を表示する
void RGB_Displayed(){
  display.print("Red : ");
  display.println(ValRed);
  display.print("Green : ");
  display.println(ValGreen);
  display.print("Blue : ");
  display.println(ValBlue);
  display.display(); // ディスプレイへの表示
}

//RGBの値を引数にして色を指定する用の関数。
void SetClolor(int Red, int Green, int Blue) {
  analogWrite(RedLed, Red);
  analogWrite(GreenLed, Green);
  analogWrite(BlueLed, Blue);
}

実践結果

可変抵抗器を回してRGBLEDの色を調整することができました💡

感想

スケッチにRGB値を書き込まなくても、フルカラーLEDの色を変化させられるので、可変抵抗をくるくる回して楽しく遊べました😊

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

趣味で楽しみながら電子工作やプログラミングをちょこちょこやってます!
ブログでは遊んでみたこと、やってみたこと&雑記を配信中です!
よろしくお願いします!!

コメント

コメントする

CAPTCHA


目次