目次
ESP32でフォトトランジスタ(明るさセンサ)を使う
こんにちは!今回はESP32でフォトトランジスタを使い、周囲の明るさを計測してみました。
動いている様子
ESP32でフォトトランジスタ(明るさセンサー)。analogReadの値をそのまま出してるだけ。
手をかざすと暗くなり、値も減少。逆に灯りにかざすと増加します。#ESP32 #電子工作 pic.twitter.com/bNnKw7ukdz— ????????????-???????????????? (@wak_tech) January 4, 2019
実行環境
ソフトウェア関連
- windows10 home
- Arduino 1.8.5
- ESP32 core for arduino 1.0.0
使用部品
- ESP32 dev module
- サンハヤト ブレッドボード
- ジャンプワイヤ
- フレキシブルジャンプワイヤ
- フォトトランジスタ
今回は手持ちにあったのが上記の940nmが中心波長のものだったのでこちらを使いましたが、より人間の色域に近い照度センサ(フォトトランジスタ) 560nm NJL7502Lの方がおすすめです。
フォトトランジスタの見た目はこんな感じ。完全にLEDですね。
回路
上記回路ではLEDとして表現されていますが、これをフォトトランジスタだと思ってくださいm(__)m
フォトトランジスタの使い方
フォトトランジスタとは、光を当てると2つの足が導通する素子です。
つまり光スイッチとして使えます。
また、光の強さにより流れる電流がだんだんと増加していくという性質があるので、明るさを大雑把ですが検知できます。今回はこれを利用します。
上記回路のように電源(3.3V)に短い方の足をつなぎます。今回使用したL-31ROPT1Cでは短い脚が+側に繋ぐコレクタになっています。使用する照度センサに合わせて向きを変えましょう。
次に、その先に抵抗をつなぎます。このフォトトランジスタと抵抗の間の電圧は、明るいほど3.3Vに近づいていきます。フォトトランジスタがより多くの電流を流す=抵抗が下がるからです。
極端なイメージでいえばフォトトランジスタが0オームであればGPIO34には3.3Vがかかりますね。GPIO34には以下の写真のように電圧を読み取れるAD変換器(アナログーデジタル変換の略) が付いています。ADC~と書かれているピンがそれです。今回はこれを利用して、その電圧を読み取りシリアル通信で表示します。
今回はADC6が設定されているGPIO34を利用します。
ソースコード
void setup() {
pinMode(A6,INPUT);//ADC6を入力へ
Serial.begin(115200);//シリアル通信スタート
delay(1000);//シリアル通信初期化待ち
}
double analogValue;//アナログ変換した値を保持する変数
void loop() {
analogValue = analogRead(A6);//ADC6のアナログ変換値を取得
Serial.println(analogValue);//アナログ変換値を出力
delay(200);
}
たったこれだけです。ESP32のボードライブラリでは、ADC~というピンを使うときは 「A~」 と表記すればいいようです。かなり簡単になっていて便利。
loop()内で
analogRead(A6);
とすることでADC6ピンのアナログ変換値を取得できます。アナログ変換値ってなんだ。まだ説明していませんでした。
実はESP32に積まれているAD変換器は12bit = 4096段階の分解能を持っていて、電圧が0Vの時0,3.3Vの時4095になります。つまり電圧を取得したいときは
V = analogRead(A6)/4096 * 3.3;
という変換が必要です。今回は大雑把な明るさの変化が知りたいだけなので、生の値のanalogValueをそのまま表示しました。この生の値をアナログ変換値と呼びます。
最後に
今回は明るさが取得できたので、次は明るさを閾値にしてLEDを点灯させます。
具体的には「暗くなったらLEDを点灯する回路」を作ります。たまにホームセンターに売ってるあれですね。
twitterアカウントの方で最新記事のお知らせや記事にならないような小さな情報を小出ししています。もしよろしければフォローお願いいたしますm(__)m
ご覧いただきありがとうございました!
ピンバック: SP32で明るさセンサを使って「部屋が暗くなったらLEDを点灯」させてみた | Wak-tech