ArduinoとCdS光センサ

ArduinoとCdS光センサ
ArduinoとCdS光センサ

この記事では、ArduinoでCdS光センサを使う方法を解説する。CdSとは、硫化カドミウムを使用した光センサーで、可視光線の光の強さによって抵抗値が低下する抵抗型センサーである。フォトトランジスタに比べると反応速度遅いが、たとえば日中と夜を判断する場合などの用途ではCdSセンサで十分である。

CdSで光の強さに反応する

開発環境

項目バージョン
ArduinoデバイスArduino Uno Rev3
CdSセル2MΩ
統合開発環境VS Code x Platform IO
パソコンmacOS Big Sur 11.0.1

CdSセルの抵抗値は、1MΩ程度のものを選ぶと良い。

【10個入り】CdSセル 光可変抵抗器 5mm GL5528
【10個入り】CdSセル 光可変抵抗器 5mm GL5528

型番:GL5528/ピーク波長:540nm 最大電圧:150VDC/最大電力:100mw 明抵抗:10~20kΩ(10Lux時)/暗抵抗:1MΩ

Amazon
Arduino Uno Rev3 ATmega328 マイコンボード A000066
Arduino Uno Rev3 ATmega328 マイコンボード A000066

Uno Rev.3、8 bit、AVR、ATmega328、USB-シリアルコンバータとしてプログラムされたATmega 16U2搭載

AmazonRakuten

ArduinoとCdSの配線

ArduinoとCdSの配線
ArduinoとCdSの配線

CdSと10kΩの抵抗を直列に繋ぎ、両端に5Vの電圧をかける。そしてCdSと抵抗で分圧した点を、Arduinoのアナログ入力に接続する。CdSに極性はないので、とくに向きを気にする必要はない。

プログラム

CdSと抵抗で分圧された電圧を読み取ることで、光の明るさを検知することができる。次は、分圧された電圧をシリアルモニタに表示するだけの簡単なプログラムだ。CdSセルにライトを近づけたり離したりして実験してみよう。光の強さに応じて、0〜1023の値でシリアルモニタに表示されるはずだ。

#include <Arduino.h>


int A0 = 0;

void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);
}

void loop() {
  float v = analogRead(A0);  
  Serial.println(v);
  delay(1000);
}

光の強さ左右の判定

次に、2つのCdSセルを使って左右のどちらが光が強いか判定させてみた。先ほどとの配線と同様にもう1つのCdSセルを抵抗で分圧して、A1へ繋いでみよう。下のプログラムでは光源が左右のどちらにあるか判定させている。ポイントとしては、光源が中央の場合のしきい値を設けているところだ。しきい値がないと、光源が中央にある場合に左右にふらついてしまい安定しないからである。

#include <Arduino.h>


int LEFT = 0;
int RIGHT = 1;
int threshold = 100;

void setup() {
  Serial.begin(9600);
  pinMode(LEFT, INPUT);
  pinMode(RIGHT, INPUT);
}

void loop() {
  int vL = analogRead(LEFT);
  int vR = analogRead(RIGHT);
  int diffLR = vL - vR;
  if (diffLR > threshold)
  {
    Serial.println("LEFT");
  }
  else if(diffLR < -threshold) {
    Serial.println("RIGHT");
  }
  else
  {
    Serial.println("CENTER");
  }
  delay(1000);
}

オペアンプの作動入力を使ったアイデア

先ほどの仕組みをさらに応用し、上下方向も判定させれば例えば太陽の方向にあわせて向きを制御することができるだろう。効率よく太陽発電させた場合に使えそうだ。しかし、CdSの数が増えるごとにアナログピンを占領していく。もう少しスマートにやる方法はないかと考えたのが次の回路である。

オペアンプの作動入力を使って光源を判定させる回路図
オペアンプの作動入力を使って光源を判定させる回路図

回路図のように、オペアンプの作動入力を使うことでどちらのCdSセルに光が強く当たっているか判定できる。作動入力とは、簡単に言えば2つの入力電圧の引き算を結果として出力する回路である。

この場合、

$$V_{OUT} = V_{IN+} - V_{IN-}$$

で出力電圧が計算される。また、回路図の100kΩの抵抗は増幅率を上げるために入れてある。

よって、オペアンプの出力電圧をArduinoのアナログ入力で読み取れば光源の位置を判定させることができる。アナログ入力を2つ使っていたところを1つで済ますことができるのだ。

今回使用した関連製品はこちら

【10個入り】CdSセル 光可変抵抗器 5mm GL5528
【10個入り】CdSセル 光可変抵抗器 5mm GL5528

型番:GL5528/ピーク波長:540nm 最大電圧:150VDC/最大電力:100mw 明抵抗:10~20kΩ(10Lux時)/暗抵抗:1MΩ

Amazon
Arduino Uno Rev3 ATmega328 マイコンボード A000066
Arduino Uno Rev3 ATmega328 マイコンボード A000066

Uno Rev.3、8 bit、AVR、ATmega328、USB-シリアルコンバータとしてプログラムされたATmega 16U2搭載

AmazonRakuten

こんな商品も人気です!

1.54インチ 電子ペーパーモジュール 200x200ラズベリーパイ エンベデッドコントローラ付き E-Inkディスプレイ画面
1.54インチ 電子ペーパーモジュール 200x200ラズベリーパイ エンベデッドコントローラ付き E-Inkディスプレイ画面

バックライトがなく、電源を切っても最後のコンテンツが長時間表示される。 超低消費電力、基本的に電力はリフレッシュにのみ必要です。 SPIインターフェイス、Raspberry Pi / Arduino / Nucleoなどのコントローラーボードとの接続用。

AmazonRakuten
M5Stack 開発ボード M5Stack Core2 開発キットデュアルコア32ビット240Mhz LX6プロセッサーUIFlow, MicroPython, A r d u i n o用
M5Stack 開発ボード M5Stack Core2 開発キットデュアルコア32ビット240Mhz LX6プロセッサーUIFlow, MicroPython, A r d u i n o用

Amazon
ELEGOO Arduino用 Nanoボード V3.0 CH340/ATmega328P、Nano V3.0互換
ELEGOO Arduino用 Nanoボード V3.0 CH340/ATmega328P、Nano V3.0互換

NanoはArduinoと互換性があり、ATmega328PやCH340と同じの公式バージョンで使用しています。 これは、最小で、完全で、ブレッドボードに優しいボードです。より多くのアナログ入力ピンとオンボード+ 5V AREFジャンパを備えた(電気的に)すべてが備わっています。

Amazon
ELEGOO Arduino用の 2.8 Inches TFT ターチスクリーン カードソケット付
ELEGOO Arduino用の 2.8 Inches TFT ターチスクリーン カードソケット付

無料チュートリアル(CDに収録)、より良い価格、より良いサービス。 (技術データ付き) 2.8インチ多彩なディスプレイ液晶画面 タッチペンも付き

AmazonRakuten

Arduinoの参考書

ESP32&Arduino 電子工作 プログラミング入門
ESP32&Arduino 電子工作 プログラミング入門

電子工作ファンに人気のマイコンArduino、そしてWiFiとBluetooth内蔵でネットワーク接続しやすいESP32。それらのマイコンでプログラムを組む際に使うのが「Arduino言語」です。「電子工作は好きだけどプログラミングはよくわからない」あるいは「プログラミングの経験がある。それを活かして電子工作を楽しみたい」--そんなみなさまのための電子工作プログラミング入門が本書です。

KindleAmazonRakuten
電子部品ごとの制御を学べる! Arduino 電子工作実践講座 改訂第2版
電子部品ごとの制御を学べる! Arduino 電子工作実践講座 改訂第2版

電子パーツを自由自在に組み合わせて電子工作ができるように、Arduinoによる電子部品ごとの制御方法を詳しく解説。初心者や電子工作に躓いた人でも安心して取り組めるよう、豊富な図・写真で徹底解説。2018年発刊の「Arduino 電子工作 実践講座」の改訂版です。

KindleAmazonRakuten
Arduinoをはじめよう 第3版 (Make:PROJECTS)
Arduinoをはじめよう 第3版 (Make:PROJECTS)

本書では、開発者自らが、Arduinoの哲学、ハードウェア、ソフトウェアの基礎を解説、誰にでもできる簡単なチュートリアルを行います。

AmazonRakuten

Amazonでお得に購入するなら、Amazonギフト券がオススメ!

\Amazonギフトがお得/

コンビニ・ATM・ネットバンキングで¥5,000以上チャージすると、プライム会員は最大2.5%ポイント、通常会員は最大2%ポイントがもらえます!
Amazonギフト券

\この記事をシェアする/