Python/Arduino学習記録,備忘録

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

【Arduino#5】照度センサの値読み取り

前回まではボタンスイッチを用いていたが,今回はセンサを使用してみる。
今回用いるのは照度センサである。

照度センサ(以下,CdS)とは,当たる光の量によって抵抗値が変化するセンサである。
例えば,CdSの置く場所を以下の様にすると,

  • 明るい場所 ⇒ 抵抗値:小
  • 暗い場所  ⇒ 抵抗値:大

といった振る舞いをする。この抵抗値が変化する特徴を用いて電子回路で安価なセンサとして使用される。

今回は,CdSの値を読み取り,PC(シリアルモニタ)上で確認するということをする。

1. 必要素子

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

2. 配線図

f:id:opuktr:20180812160329p:plain


ここで,上の配線図で読み取っている電圧について説明する。
以下に上の配線図を回路図として示す。
f:id:opuktr:20180813171055p:plain

上図のように,分圧則によって読み取り電圧は式(1)のように表される。
式(1)から光の量によってCdSの抵抗値が変化すると,読み取り電圧も変化することが分かる。この時,読み取り電圧は読み取り時に0~1023の数値に変換される。
つまり,変換された数値をCdS valとすると

  • 明るい場所 ⇒ CdS抵抗値:小 ⇒ 読み取り電圧:大 ⇒ CdS val:大
  • 暗い場所  ⇒ CdS抵抗値:大 ⇒ 読み取り電圧:小 ⇒ CdS val:小

となる。

3. スケッチ

const int CdS = 0; //CdSを0番pinに設定

int val = 0; //A0から読み込んだ値を格納する変数

void setup() {
  Serial.begin(9600); //9600bpsでシリアルポートを開く
}

void loop() {
  val = analogRead(CdS); //A0pinからアナログ値を読み取る

  Serial.print("CdS val:");//シリアルポートへ()内を出力(改行無し)
  Serial.println(val);     //シリアルポートへ()内を出力(改行有り)
  
  delay(1000);//1秒ごとにループ
}

<シリアルモニタ上>
f:id:opuktr:20180812161224p:plain

2章で説明したとおり,明るい場所ではCdS valが1023に近づき,暗い場所では0に近づくことが確認できた。

4. スケッチで用いた関数まとめ

各々の関数についてまとめる。基本的にはArduino Referenceで説明されている。

const int CdS = 0;

変数を読み取り専用の変数として定義するもの
不変の値を設定したい時にconstを用いると良い。

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:改行したものがシリアルモニタへ出力
 delay(1000);
//delay(時間[単位はms]);
//戻り値:なし

指定した時間だけプログラムを止める関数
ここで,設定する時間はunsigned long型である。