こんばんは。

 

 

お父ラボ(お父Lab.)です。

 

 

金魚水槽の自動水換え装置を目標にプログラミング学習を始めました。

 

 

まずはアルディーノ(ARDUINO)でプログラミング・電子工作を学びます。

 

今年から金魚の仔引きにも挑戦していますが、産卵したのは今のところ、ふじ六りんだけです。

 

 

抱卵しているメスは沢山いるのに、オスの追星はどんどん薄くなっている気がします(><)

 

 

オーロラが産卵してくれたらいいなぁ。気長に待ちます。

 

 

 

 

 

さて、今日はフルカラーLEDを使った、パルス幅変調の学習です。

 

 

パルス幅変調(PWM)を使うことで、HIGHとLOWの間隔を変えます。

 

 

LEDと組み合わせると、HIGHの割合が多いと明るく見え、少ないと暗く見えます。

 

 

今回の回路です。右に3つ並んでいるのは赤、緑、青のセロハンを被せた、フォトトランジスタです。

 

 

フォトトランジスタとは吸収される光の量に比例した電流を生成するコンポーネントです。

 

 

このフォトトランジスタに赤色のセロハンを乗せると、赤色の波長のみを受光することができるので、

 

 

その電流をフルカラーLEDのRGBのRと紐付ければ、赤い光を調整しながら出力してくれます。

 

 

 

 

 

 

例えば太陽を受光するとします。朝焼けをインプットすればフルカラーLEDの赤みが強く光り、

 

 

昼間は白っぽく且つ明るく光ります。また、夕暮れをインプットすれば再び赤みが強く光ります。

 

 

窓の無い部屋でも外の光を感じることが、出来るかもしれませんね。

 

 

それではまた次回!

 

 

 

 

本日のプログラム

 

const int greenLEDPin = 9;   //グリーンのPWMのOUTPUT用ピン

const int redLEDPin =11;

const int blueLEDPin = 10;

 

const int redSensorPin = A0;

const int greenSensorPin = A1;  //グリーンのセロハンがついたフォトトランジスタのインプット用ピン

const int blueSensorPin = A2;

 

int redValue = 0;

int greenValue = 0;  //グリーンのAD変換後の変数

int blueValue = 0;

 

int redSensorValue = 0;

int greenSensorValue = 0;   //グリーンのアナログ信号値の変数

int blueSensorValue = 0;

 

void setup(){

  Serial.begin(9600);

  pinMode(greenLEDPin,OUTPUT);

  pinMode(redLEDPin,OUTPUT);

  pinMode(blueLEDPin,OUTPUT);

}

 

void loop(){

  redSensorValue = analogRead(redSensorPin); 

    //アルディーノのADコンバータは1個なので、delayさせて、切り替えて使う。

  delay(5);

  greenSensorValue = analogRead(greenSensorPin);

  delay(5);

  blueSensorValue = analogRead(blueSensorPin);

  Serial.print("Raw Sensor Values \t Red: ");

  Serial.print(redSensorValue);

  Serial.print("\t Green: ");

  Serial.print(greenSensorValue);

  Serial.print("\t blue: ");

  Serial.print(blueSensorValue);

 

  redValue = redSensorValue / 4;

  greenValue = greenSensorValue / 4;  //アナログ値は0〜1023で、デューティ比は0〜255なので、4で割る

  blueValue = blueSensorValue / 4;

 

  Serial.print("Mapped Sensor Values \t Red: ");

  Serial.print(redValue);

  Serial.print("\t Green: ");

  Serial.print(greenValue);

  Serial.print("\t blue: ");

  Serial.print(blueValue);

 

  analogWrite(redLEDPin, redValue);

  analogWrite(greenLEDPin, greenValue);  

 //analogWrite(OUTPUT場所,デューティ比)←デジタル入出力端子なのにアナログ注意 

  

 analogWrite(blueLEDPin, blueValue);

 

 }