Python/Arduino学習記録,備忘録

コツコツ学んだ学習記録と備忘録。現在Python,Arduino勉強中。

【Arduino#6】照度センサでLED明るさ調節

前回照度センサ(以下,CdS)から値を読み取り,シリアルモニタに表示させた。
今回はこの読み取った値を用いてLEDの明るさを調整する。

といっても,今まで行ってきた内容を組み合わせることで簡単に実装できる。

1. 必要素子

  • ブレッドボード
  • 抵抗(10kΩ) 2個
  • CdS
  • LED
  • ジャンパー線 5本

2. 配線図

f:id:opuktr:20180813232633p:plain

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型である。