Arduino 入門
Lesson 22
【フォトレジスタ編】 其の1
「Arduino」を使ったマイコンプログラミングを子供と一緒に学習するブログ。
少しずつ、子供と一緒に楽しみながら気長にアップしてく予定です。
本日はLesson 22 【フォトレジスタ編】 其の1です。
色々、言い方がありますが要は「光センサー」です!
その1ということはその2もあります。
今回、【フォトレジスタ編】については2回にLessonを分けます。
「其の1」では、基本的なコードを理解します。
「其の2」では、Lesson 20、Lesson 21で8bitシフトレジスタとLEDの回路とフォトレジスタ利用して遊びます。
「其の2」は面白いので、ぜひ記事アップまでしばしお待ちください。
本Lesson解説で使用しているのはArduino互換品です。
互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
はじめに
「フォトレジスタ」は、別名「光依存性抵抗:LDR」とも呼ばれ、名前の通り光によって抵抗値が変わる電子部品です。
フォトレジスタ (photoresistor) とは、入射する光の強度が増加すると電気抵抗が低下する電子部品である。 光依存性抵抗 (light-dependent resistor, LDR) や 光導電体 (photoconductor) 、フォトセル(photocell)とも呼ばれる。
フォトレジスタは、高抵抗の半導体でできている。 充分に周波数の高い光が素子に入ると、半導体に吸収された光子のエネルギーにより束縛電子が伝導帯に飛び込む。 結果として生じる自由電子(と対になるホール)によって電流が流れ、電気抵抗が低くなる。
用途としては、光を感知して何かをさせる。
光を感知しなくなることで何かをさせる。
といったことが考えられます。
身近な用途としては、街灯などがあげられます。
暗くなると、勝手に電気が点灯しますよね。
そんな、身近な製品には、安価なCdsセルが使われていることが多いです。
本Lessonで使用するフォトレジスタもCdsセルとなります。
手持ちがない方は以下からどうぞ。
Lsson 22 目標
2.フォトレジスタの値をアナログ入力を使って計測します。
3.アナログ入力で受け取った値を利用してLEDの輝度を変更します。
今回も遊ぶことを最大の目標に楽しみましょう!
【フォトレジスタ編】 其の1ではフォトレジスタの基本的な使い方を理解します。
準備
ではLessonの準備に取り掛かりましょう。
今回も部品は多くないので、すぐに実践に移ることができます。
必要なもの
- USB接続用のPC(IDE統合環境がインストールされたPC)
→管理人が勝手に比較したBTOメーカーを紹介しています。 - UNO R3(以下UNO)、おすすめUNO互換品(ELEGOO)
- PCとUNOを接続するUSBケーブル
- ブレッドボード安価(大)、ブレッドボード安価(中)
※おすすめブレッドボード(大)、おすすめブレッドボード(中) - フォトレジスタ(Cdsセル)
- 抵抗 10kΩ 1本、220Ω 1本
- M-M Jumper wire(UNOと部品をつなぐための配線)
Jumper wire、抵抗は今後も頻繁に利用します。
Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。
短めが使いやすい場合も。
抵抗も単品で揃えるよりはセットをおすすめします。
抵抗、LEDなどを個別でセット品を購入しても、そんなに使わない!
という方は、「電子工作基本部品セット」が使い勝手が良い。
使用部品説明
新たに登場した部品について説明していきます。
本Lessonで新しく登場するのは、フォトレジスタ(Cdsセル)のみです。
フォトレジスタ(Cdsセル) 実物写真
下の写真が、フォトレジスタ(Cdsセル)です。
ちなみに、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セル)原理
フォトレジスタ(Cdsセル)は、硫化カドミウムの焼結体を用いた光導電素子で、照射する光量によって抵抗値が変化します。
すなわち、明るさを抵抗値の変化に置き換える光センサです。
Cdsのセル構造図を下記に示します。
またCdsセルは、可視光線に対して高感度で、分高度が人間の眼に近い特性を示します。
下図に分光度特性を示します。
可視光領域に対して高感度であることがわかります。
この特性があることから、人にとっては使いやすい電子部品となるのです。
下記は、仕様の分光度特性に可視光領域を重ねたものです。
さらに詳しい、動作原理は半導体の光導電効果を説明をしなければなりません。
その説明だけで記事一本かけてしまうので、ここでは割愛します。
興味のある方は、下記が比較的説明があるサイトかなと思いましたので紹介しておきます。
使用する抵抗について
このあとに説明する実践で使う抵抗値について補足しておきます。
フォトレジスタ(Cdsセル)と直列につなぐ抵抗は10kΩを使用します。
フォトレジスタ(Cdsセル)と直列につないで電圧を分圧させるために使用します。
10kΩを使用してみて輝度の変化がわかりづらい場合は、抵抗値を上げるなどして読み取り値の範囲の調整をしてください。
※詳細は実践の回路図を参照ください。
LEDが焼き切れないようにするため、LEDと直列につなぐ電流制限抵抗は220Ωとします。
こちらは、LEDが焼き切れない抵抗値であれば大丈夫です。
実践1 回路作成とコード作成
まずは、下記の目標について実践していきます。
最初に回路図を確認してください。
次に、回路図に合わせて部品を接続します。
最後にコードを書いて、フォトレジスタ(Cdsセル)を動かしていきましょう。
Arduinoのピン配置を確認したい方は番外編02を参照してください。
回路図 1
フォトレジスタ(Cdsセル)と抵抗が直列に接続されていることに注目してください。
フォトレジスタ(Cdsセル)と抵抗の間の電圧をアナログ入力の0番につなぐことによって電圧の変化を読み取る回路となっています。
抵抗値は10kΩで一定なのに対して、フォトレジスタ(Cdsセル)は抵抗値が変化します。
そのため、分圧比がかわることによって読み取る値も変わるという仕組みです。
Vout = R1/(R1+R2)×5V
R1:Cdsセル R2:10kΩ
回路図がこちら。
こちらがブレッドボード図。
※M-M jumper wireのみで結線できます。
回路図は「fritzing」を利用しています。
「fritzing」の使い方は下記を参照してください。
接続 1
下図に示すように、用意した部品を使用して接続しましょう。
部品はフォトレジスタ(Cdsセル)と抵抗のみです。
M-M jumper wireを使用してUNOと接続しましょう。
使用するポートは、アナログ入力の「0」、電源の「5V」、「GND」です。
穴に挿入しづらいときは、ラジオペンチなどを使用してください。
コードの書き込み 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の「ツール」⇒「シリアルモニタ」を開いて確認してください。
フォトレジスタ 測定環境 |
シリアルモニタの値 |
---|---|
ライトを当てる | ![]() |
手で遮る | ![]() |
ライトを当てると数字が小さくなり、手で遮ると値が高くなれば成功です!
実践2 回路作成とコード作成
つづいて、下記目標について実践していきます。
LEDへの出力はアナログ入力で得られた値を変換してアナログ出力から出す。
最初に回路図を確認してください。
次に、回路図に合わせて部品を接続します。
最後にコードを書いて、フォトレジスタ(Cdsセル)の値を使って、LEDの輝度を変更するのを確認していきましょう。
Arduinoのピン配置を確認したい方は番外編02を参照してください。
回路図 2
回路図がこちら。
こちらがブレッドボード図。
※M-M jumper wireのみで結線できます。
回路図は「fritzing」を利用しています。
「fritzing」の使い方は下記を参照してください。
接続 2
下図に示すように、用意した部品を使用して接続しましょう。
この実践でも、部品はフォトレジスタ(Cdsセル)と抵抗のみです。
M-M jumper wireを使用してUNOと接続しましょう。
使用するポートは、その1から一つ増えてます。
アナログ出力として利用する、デジタルピンの「3」。
アナログ入力の「0」、電源の「5V」、「GND」。
穴に挿入しづらいときは、ラジオペンチなどを使用してください。
コードの書き込み 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の状態 |
---|---|
ライトを当てる![]() |
![]() |
手で遮る![]() |
![]() |
ライトを当てるとLEDが暗くなり、手で遮るとLEDが明るく変われば成功です。
何をしたかったかというと・・・。
実際は、if文などを使うことで、読み取り値を区切ることで調整をするのが良いです。
利用しているのがアナログ出力のため、制御はPWM制御となっています。
そのため、if文でアナログ出力に0を与えるなど工夫をすると良いです。
そうすることで、暗いと点灯、明るいと消灯とはっきりとした動作をさせられます。
ぜひ、if文などを追加して遊んでみてください。
PWM制御については下記記事で詳細を説明しています。
まとめ
今回は以下の内容について理解してもらいました。
今回も項目4の遊ぶことが一番の目標でした。
2.「フォトレジスタ」の値をアナログ入力を使って計測する。
3.アナログ入力で受け取った値を利用してLEDの輝度を変更する。
4.楽しんで遊ぶ。
いかがだったでしょうか。
Lesson 22 【フォトレジスタ編】 其の1はここまで。
ぜひ、みなさんも子供と一緒にやられてみることをお勧めします。
フォトレジスタ(Cdsセル)、色んな事が簡単にできそうな電子部品ですよね。
ぜひ、色々と考えて遊んでみましょう!
疑問点、質問などありましたら気軽にコメントください。
次回、Lesson 23は【フォトレジスタ編】 其の2です。
![](https://omoroya.com/wp-content/uploads/2019/08/Arduino-lesson23-00-160x90.jpg)
なかなか、面白いかなと個人的には思っています。
お楽しみに。
最後に
疑問点、質問などありましたら気軽にコメントください。
この電子部品の解説をしてほしい!などなどなんでもOKです。
リンク切れ、間違いなどあればコメントいただけると助かります。
Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。
Arduino入門編、Arduino入門編2で使用しているUNOはAmazonにて購入可能です。
Arduino入門編では互換品を使用。
Arduinoはオープンソース。
複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
学習用、遊び用、お試し用には安価な互換品がおすすめです。
ELEGOO UNO キット レベルアップ チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用
上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
Amazonでお得に買う方法
Amazonでお得に購入するならAmazon Mastercard、Amazonギフト券がおすすめです。
時期により異なりますが、様々なキャンペーンを実施しています。
\Amazonギフト券/
Amazonギフトカード キャンペーン
\Amazon Mastercard お申込み/
Amazon Mastercard 申し込み
いずれの場合もプライム会員である方がお得!!
\Amazon Prime 30日間の無料会員を試す/
無料会員登録
コメント
ごめんなさい。
コメントできたかわからないのでもう一度。
大変ためになります。ありがとうございます。
このセンサーですが、複数をつなげることは可能でしょうか?
例えば横に5つ程度並べて、位置ごとに光の強さが異なるので、それぞれのセンサーの応答を出力する。。。等。
コメントありがとうございます。
例えば2個のフォトレジスタを用意して角度をつけて向きを変えて配置。
光の当たり具合で、何かをさせるとか可能です。
工夫次第で色々と遊べると思います。
まとまってない質問にご返信ありがとうございます。
なるほど。。いろいろ遊べそうですね~。
ちなみに複数繋ぐときの参考とかありますでしょうか。。。(配線など。)
聞いてばかりでごめんなさい。参考等あれば。。
コメントありがとうございます。
単純に試行したいだけであれば、本Lessonのコードその2に
アナログ入力、出力のピンを
もう1つ追加するだけでも試行はできます。
Arduino入門 Lesson 22【フォトレジスタ編】其の1の記事アップしました。フォトレジスタはいわゆる光センサのことです。色々と楽しめる電子部品です。ぜひ遊んでみてください。