【Arduino#6】照度センサでLED明るさ調節
前回照度センサ(以下,CdS)から値を読み取り,シリアルモニタに表示させた。
今回はこの読み取った値を用いてLEDの明るさを調整する。
といっても,今まで行ってきた内容を組み合わせることで簡単に実装できる。
1. 必要素子
- ブレッドボード
- 抵抗(10kΩ) 2個
- CdS
- LED
- ジャンパー線 5本
2. 配線図
3. スケッチ
const int CdS = 0; //CdSを0番pinに設定 const int LED = 11;//LEDを11番pinに設定 int val = 0; //A0から読み込んだ値を格納する変数 void setup() { pinMode(LED,OUTPUT);//LEDpinを出力に設定 Serial.begin(9600); //9600bpsでシリアルポートを開く } void loop() { val = analogRead(CdS); //CdSpinから電圧値を読み取る Serial.print("CdS val:");//シリアルポートへ()内を出力(改行無し) Serial.println(val); //シリアルポートへ()内を出力(改行有り) analogWrite(LED,val/4); //LEDpinにCdS値に応じたPWM波を出力 delay(100); //0.1秒ごとにループ }
ここで,シリアルポートへCdSの読み取り値を出力しているのは,LEDの明るさが変化する様子をシリアルモニタ上に表示されるCdS valと照らし合わせるためである。
従って,Serial.~~~~は無くても動作に問題はない。
また, analogWrite(LED,val/4)でvalを4で割ることにより,[0~1023]のレンジをanalogWrite用のレンジ[0~255]に変換している。
4. スケッチで用いた関数まとめ
各々の関数についてまとめる。基本的にはArduino Referenceで説明されている。
const int CdS = 0; const int LED = 11;
変数を読み取り専用の変数として定義するもの
不変の値を設定したい時にconstを用いると良い。
pinMode(LED,OUTPUT); //pinMode(pin番号, OUTPUT / INPUT / INPUT_PULLUP); //戻り値:なし
pinの動作を入力(INPUT, INPUT_PULLUP)か出力(OUTPUT)に設定する関数
入力には以下の2種類ある。
INPUT:普通の入力
INPUT_PULLUP:マイコン内部のプルアップ抵抗を利用する(回路簡素化できる)
Serial.begin(9600); //Serial.begin(転送レート); //戻り値:なし
シリアル通信の転送レートを指定する関数
単位はbpsである。基本的には300,1200,2400,4800,9600,14400,19200,28800,38400,57600,115200が使われる。
analogRead(CdS); //analogRead(pin番号); //戻り値:0~1023までの整数値
指定したpinからアナログ値を読み取る関数
基本的にはアナログpinの0~5番を用いる。
Serial.print("CdS val:"); Serial.println(val); //Serial.print(出力したいデータ[全ての型に対応]); //Serial.println(出力したいデータ[全ての型に対応]); //戻り値:送信したバイト数
データをシリアルポートへ出力する関数
- Serial.print :改行せず,そのままシリアルモニタへ出力
- Serial.println:改行したものがシリアルモニタへ出力
analogWrite(LED,val/4); //analogWrite(pin番号, デューティ比に対応する値(0~255)); //戻り値:なし
指定したpinからPWM波を出力する関数
ここで,指定するpinはDigital pinの~がついているpin(3,5,6,9,10,11番pin)とする必要がある。
また,デューティ比に対応する値が0であれば0Vを出力,255であれば5V(3.3V)を出力する電圧源と等しくなる。
delay(100); //delay(時間[単位はms]); //戻り値:なし
指定した時間だけプログラムを止める関数
ここで,設定する時間はunsigned long型である。