Arduinoと戯れてみる!

Arduino 入門 Lesson 22 【フォトレジスタ編】 其の1

Arduino-lesson22-00 Arduino入門編
スポンサーリンク
子供と一緒に始める マイコンプログラム
Arduino 入門
Lesson 22
【フォトレジスタ編】 其の1

「Arduino」を使ったマイコンプログラミングを子供と一緒に学習するブログ。

少しずつ、子供と一緒に楽しみながら気長にアップしてく予定です。

追記:回路図とスケッチの一部に誤りがありましたので修正しました。

 

本日はLesson 22 【フォトレジスタ編】 其の1です。

フォトレジスタは別名で下記と呼ばれることもあります。
1.光依存性抵抗 (light-dependent resistor, LDR)
2.光導電体 (photoconductor)
3.フォトセル(photocell)

 

色々、言い方がありますが要は「光センサー」です!

 

その1ということはその2もあります。

今回、【フォトレジスタ編】については2回にLessonを分けます。

 

「其の1」では、基本的なコードを理解します。

「其の2」では、Lesson 20Lesson 21で8bitシフトレジスタとLEDの回路とフォトレジスタ利用して遊びます。

「其の2」は面白いので、ぜひ記事アップまでしばしお待ちください。

 

本Lesson解説で使用しているのはArduino互換品です。

互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

スポンサーリンク

はじめに

フォトレジスタ」は、別名「光依存性抵抗:LDR」とも呼ばれ、名前の通り光によって抵抗値が変わる電子部品です。

 

Wikipedia フォトレジスタ

フォトレジスタ (photoresistor) とは、入射する光の強度が増加すると電気抵抗が低下する電子部品である。 光依存性抵抗 (light-dependent resistor, LDR) や 光導電体 (photoconductor) 、フォトセル(photocell)とも呼ばれる。

フォトレジスタは、高抵抗の半導体でできている。 充分に周波数の高い光が素子に入ると、半導体に吸収された光子のエネルギーにより束縛電子が伝導帯に飛び込む。 結果として生じる自由電子(と対になるホール)によって電流が流れ、電気抵抗が低くなる。

 

用途としては、光を感知して何かをさせる。

光を感知しなくなることで何かをさせる。

といったことが考えられます。

 

身近な用途としては、街灯などがあげられます。

暗くなると、勝手に電気が点灯しますよね。

そんな、身近な製品には、安価なCdsセルが使われていることが多いです。

本Lessonで使用するフォトレジスタもCdsセルとなります。

Cds:硫化カドミウム

手持ちがない方は以下からどうぞ。

 

Lsson 22 目標

1.「フォトレジスタ」の制御方法を理解します。
2.フォトレジスタの値をアナログ入力を使って計測します。
3.アナログ入力で受け取った値を利用してLEDの輝度を変更します。

今回も遊ぶことを最大の目標に楽しみましょう!

 

【フォトレジスタ編】 其の1ではフォトレジスタの基本的な使い方を理解します。

 

準備

ではLessonの準備に取り掛かりましょう。

今回も部品は多くないので、すぐに実践に移ることができます。

 

必要なもの

 

Jumper wire、抵抗は今後も頻繁に利用します。

Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。

 

抵抗も単品で揃えるよりはセットをおすすめします。

 

使用部品説明

新たに登場した部品について説明していきます。

本Lessonで新しく登場するのは、フォトレジスタ(Cdsセル)のみです。

 

フォトレジスタ(Cdsセル) 実物写真

下の写真が、フォトレジスタ(Cdsセル)です。

Cds-cell

 

ちなみに、ELEGOO UNO キットには合わせて梱包されています。

フォトレジスタは抵抗器と同じく極性がありません。
向きを気にすることなく使用することができます。

 

フォトレジスタ(Cdsセル)仕様

フォトレジスタ(Cdsセル)仕様は以下のようになっています。

下記は参考としてみてください。

部品によっては、異なりますので詳細は購入した部品の仕様の確認をお願いします。

項目内容
最大電圧150VDC
最大電力100mW
使用温度範囲-30 ~ +70
ピーク波長540nm
明抵抗(@10Lux)10kΩ ~ 20kΩ ※1
暗抵抗1MΩ ※1
反応時間上昇:30ms 下降:30ms ※2
繰り返し精度±1% RH
レスポンス時間<6s

※1 Arduinoで遊ぶ場合に、気にしておくべき仕様は「明抵抗」「暗抵抗」の2つとなります。
※2 反応時間の仕様を見てわかるように、反応スピードは遅いというこも頭に入れてください。

実際に使用する照度範囲の抵抗値を知りたい場合は、お手持ちのテスタでCdsセルの「明抵抗」「暗抵抗」を測定してください。

詳細な仕様は下記にて確認ができます。

CdSセル 5mmタイプ: パーツ一般 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,マイコン,電子工作CdSセル 5mmタイプ秋月電子通商 電子部品通信販売…

 

フォトレジスタ(Cdsセル)原理

フォトレジスタ(Cdsセル)は、硫化カドミウムの焼結体を用いた光導電素子で、照射する光量によって抵抗値が変化します。

すなわち、明るさを抵抗値の変化に置き換える光センサです。

 

Cdsのセル構造図を下記に示します。

Cds-Structural-drawing

 

またCdsセルは、可視光線に対して高感度で、分高度が人間の眼に近い特性を示します。

下図に分光度特性を示します。

可視光領域に対して高感度であることがわかります。

この特性があることから、人にとっては使いやすい電子部品となるのです。

下記は、仕様の分光度特性に可視光領域を重ねたものです。

Spectral-characteristics

 

さらに詳しい、動作原理は半導体の光導電効果を説明をしなければなりません。

その説明だけで記事一本かけてしまうので、ここでは割愛します。

 

興味のある方は、下記が比較的説明があるサイトかなと思いましたので紹介しておきます。

CdS(硫化カドミウム)セル – 半導体とは?初心者サイト

 

使用する抵抗について

このあとに説明する実践で使う抵抗値について補足しておきます。

フォトレジスタ(Cdsセル)と直列につなぐ抵抗は10kΩを使用します。

フォトレジスタ(Cdsセル)と直列につないで電圧を分圧させるために使用します。

10kΩを使用してみて輝度の変化がわかりづらい場合は、抵抗値を上げるなどして読み取り値の範囲の調整をしてください。

※詳細は実践の回路図を参照ください。

 

LEDが焼き切れないようにするため、LEDと直列につなぐ電流制限抵抗は220Ωとします。

こちらは、LEDが焼き切れない抵抗値であれば大丈夫です。

 

実践1 回路作成とコード作成

まずは、下記の目標について実践していきます。

フォトレジスタの値をアナログ入力を使って計測する。

 

最初に回路図を確認してください。

次に、回路図に合わせて部品を接続します。

最後にコードを書いて、フォトレジスタ(Cdsセル)を動かしていきましょう。

 

フォトレジスタは使い勝手が良いので、遊ぶには持って来いの電子部品です。
ぜひ、使い方を学習して遊んでみましょう!

 

Arduinoのピン配置を確認したい方は番外編02を参照してください。

 

回路図 1

フォトレジスタ(Cdsセル)と抵抗が直列に接続されていることに注目してください。

フォトレジスタ(Cdsセル)と抵抗の間の電圧をアナログ入力の0番につなぐことによって電圧の変化を読み取る回路となっています。

 

抵抗値は10kΩで一定なのに対して、フォトレジスタ(Cdsセル)は抵抗値が変化します。

そのため、分圧比がかわることによって読み取る値も変わるという仕組みです。

VoutがA0に入力される電圧。
Vout = R1/(R1+R2)×5V
R1:Cdsセル R2:10kΩ

回路図がこちら。

 

Arduino-lesson22-circuit-diagram-1

 

こちらがブレッドボード図。
※M-M jumper wireのみで結線できます。

 

Arduino-lesson22-breadboard-1

 

 

回路図は「fritzing」を利用しています。

「fritzing」の使い方は下記を参照してください。

 

接続 1

下図に示すように、用意した部品を使用して接続しましょう。

部品はフォトレジスタ(Cdsセル)と抵抗のみです。

M-M jumper wireを使用してUNOと接続しましょう。

 

使用するポートは、アナログ入力の「0」、電源の「5V」、「GND」です。

穴に挿入しづらいときは、ラジオペンチなどを使用してください。

Arduino-lesson22-06-circuit-1

 

コードの書き込み 1

接続が終わったら、USBケーブルを使用してUNOにプログラムを書き込んで行きましょう。

コードを書き終えたら、いつでも利用できるように「ファイル」⇒「名前を付けて保存」で保存しておきましょう。

 

コマンド説明 1

特に新しくでてきたコマンドはありませんが、復習しておきましょう。

コマンド説明
analogRead(pin)アナログ値を読み取るアナログ入力ピンを指定。
pin:0,1,2,3,4,5のいずれかを指定
例 アナログ入力ピンに3番を指定する。
analogRead(3);
Serial.begin(speed)シリアル通信のデータ転送レートをbpsで指定。
※bpsはビット/秒
speed:転送レート(int)

 

サンプルコード 1」ではアナログ入力が重要となります。

下記、記事にて詳細を説明していますので、あわせて確認してください。

 

サンプルコード 1

サンプルコードを下記に示します。

//sample 1 フォトレジスタの値を読み取る
//https://omoroya.com

int val=0; //フォトレジスタの値を格納する変数

void setup() {
Serial.begin(9600); //モニターに出力するための設定
}

void loop() {
val=analogRead(0); //アナログ入力の0番からデータ読み取り
Serial.println(val); //入力された値をモニターに出力
delay(500);
}

 

動作確認 1

では、さっそく動作を確認していきます。

シリアルモニタを起動して確認してみてください。
※IDEの「ツール」⇒「シリアルモニタ」

変化を確認するために、フォトレジスタ(Cdsセル)に光をあてたり、手で光をさえぎったりしてください。

結果はこちら。
※IDEの「ツール」⇒「シリアルモニタ」を開いて確認してください。

フォトレジスタ
測定環境
シリアルモニタの値
ライトを当てるArduino-lesson22-07
手で遮るArduino-lesson22-08

 

ライトを当てると数字が小さくなり、手で遮ると値が高くなれば成功です!

 

実践2 回路作成とコード作成

つづいて、下記目標について実践していきます。

アナログ入力で受け取った値を利用してLEDの輝度を変更する。
LEDへの出力はアナログ入力で得られた値を変換してアナログ出力から出す。

 

最初に回路図を確認してください。

次に、回路図に合わせて部品を接続します。

最後にコードを書いて、フォトレジスタ(Cdsセル)の値を使って、LEDの輝度を変更するのを確認していきましょう。

 

Arduinoのピン配置を確認したい方は番外編02を参照してください。

 

回路図 2

回路図がこちら。

 

Arduino-lesson22-circuit-diagram-2

 

こちらがブレッドボード図。
※M-M jumper wireのみで結線できます。

Arduino-lesson22-breadboard-2

 

 

回路図は「fritzing」を利用しています。

「fritzing」の使い方は下記を参照してください。

 

接続 2

下図に示すように、用意した部品を使用して接続しましょう。

この実践でも、部品はフォトレジスタ(Cdsセル)と抵抗のみです。

M-M jumper wireを使用してUNOと接続しましょう。

 

使用するポートは、その1から一つ増えてます。

アナログ出力として利用する、デジタルピンの「3」。

アナログ入力の「0」、電源の「5V」、「GND」。

穴に挿入しづらいときは、ラジオペンチなどを使用してください。

Arduino-lesson22-11-circuit

 

コードの書き込み 2

接続が終わったら、USBケーブルを使用してUNOにプログラムを書き込んで行きましょう。

コードを書き終えたら、いつでも利用できるように「ファイル」⇒「名前を付けて保存」で保存しておきましょう。

 

コマンド説明 2

特に新しくでてきたコマンドはありませんが、復習しておきましょう。

コマンド説明
analogRead(pin)アナログ値を読み取るアナログ入力ピンを指定。
pin:0,1,2,3,4,5のいずれかを指定
例 アナログ入力ピンに3番を指定する。
analogRead(3);
analogWrite(pin, value)指定したピンからアナログ値(PWM波)を出力します。
Unoのボードでは、デジタルピン3、5、6、9、10、11でこの機能が使えます。
pin:出力に使うピンの番号
value:デューティ比(0から255)
例 得られたアナログ値を1/4にして、0~1023を0~255に変換。
val = analogRead(analogPin);
analogWrite(ledPin, val/4);
Serial.begin(speed)シリアル通信のデータ転送レートをbpsで指定。
※bpsはビット/秒
speed:転送レート(int)

analogWriteの詳しく知りたい方は下記を併せてお読みください。

 

その2ではアナログ入力をアナログ出力へ変換することが重要となります。

 

サンプルコード 2

サンプルコードを下記に示します。

//sample 2 フォトレジスタの値を読み取ってLEDの輝度を変更する
//https://omoroya.com

int val=0; //入力される値を格納する為の変数

void setup() {
Serial.begin(9600); //モニターに出力するための設定
}

void loop() {
val=analogRead(0); //アナログ入力の0番からデータ読み取り

//analogRead 0-1023,analogWrite 0-255 に変換
Serial.println(val/4); //入力された値をモニターに出力
analogWrite(3,val/4); //入力された値÷4の値をアナログ出力する

delay(500);
}

 

動作確認

では、さっそく動作を確認していきます。

シリアルモニタを起動して確認してみてください。
※IDEの「ツール」⇒「シリアルモニタ」

 

変化を確認するために、フォトレジスタ(Cdsセル)に光をあてたり、手で光をさえぎったりしてください。

結果はこちら。

IDEの値LEDの状態
ライトを当てる
Arduino-lesson22-12
Arduino-lesson22-13
手で遮る
Arduino-lesson22-14
Arduino-lesson22-15

 

ライトを当てるとLEDが暗くなり、手で遮るとLEDが明るく変われば成功です。

 

何をしたかったかというと・・・。

暗くなるとLEDが点灯する。
街灯だったり、家の中の非常灯だったりと同じことができていますよね!

実際は、if文などを使うことで、読み取り値を区切ることで調整をするのが良いです。

利用しているのがアナログ出力のため、制御はPWM制御となっています。

そのため、if文でアナログ出力に0を与えるなど工夫をすると良いです。

そうすることで、暗いと点灯、明るいと消灯とはっきりとした動作をさせられます。

ぜひ、if文などを追加して遊んでみてください。

 

PWM制御については下記記事で詳細を説明しています。

 

まとめ

今回は以下の内容について理解してもらいました。

今回も項目4の遊ぶことが一番の目標でした。

1.「フォトレジスタ」の制御方法を理解する。
2.「フォトレジスタ」の値をアナログ入力を使って計測する。
3.アナログ入力で受け取った値を利用してLEDの輝度を変更する。
4.楽しんで遊ぶ。

 

いかがだったでしょうか。

Lesson 22 【フォトレジスタ編】 其の1はここまで。

ぜひ、みなさんも子供と一緒にやられてみることをお勧めします。

 

フォトレジスタ(Cdsセル)、色んな事が簡単にできそうな電子部品ですよね。

ぜひ、色々と考えて遊んでみましょう!

 

疑問点、質問などありましたら気軽にコメントください。

 

次回、Lesson 23は【フォトレジスタ編】 其の2です。

なかなか、面白いかなと個人的には思っています。

お楽しみに。

 

最後に

疑問点、質問などありましたら気軽にコメントください。

この電子部品の解説をしてほしい!などなどなんでもOKです。

リンク切れなどあればコメントいただけると助かります。

 

Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。

 

Arduino入門編で使用しているUNOはAmazonにて購入可能です。

互換品とは言え、Arduinoはオープンソース。

複製して販売するのもライセンス的に問題なし。

 

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

学習用、遊び用、お試し用には安価な互換品がおすすめです。

 

Amazon ベストセラーNo.1
ELEGOO UNO キット レベルアップ  チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用

 

上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。

コメント

  1. omoroya omoroya より:

    Arduino入門 Lesson 22【フォトレジスタ編】其の1の記事アップしました。フォトレジスタはいわゆる光センサのことです。色々と楽しめる電子部品です。ぜひ遊んでみてください。

タイトルとURLをコピーしました