Project 12.1 フォトレジスター/NightLamp

前回はポテンションメーターを使用して8LED をグルグル回してみました。

あわせて読みたい
Project 11.3 ビット変換の別解/Soft Rainbow Light 前回はポテンションメーターを3つ使用してRGB LEDの色を自在に制御してみました。 https://kaneshige.org/?p=391 今回は8LED モジュールをコントロールしてみましょう。...

今回はフォトレジスターを使用して暗くなったらLEDを点灯させる制御をしてみましょう。

目次

フォトレジスターとは?

フォトレジスタ(光抵抗素子)は、光の強さに応じて抵抗値が変化する電子受動部品です。受ける光の強さによって抵抗値が減少します。この特性から、光強度を検出するために使用できます。受ける周囲光の強さに対して抵抗値が変化します。 フォトレジスタと回路図記号は以下の通りです。

以下の回路は、光抵抗素子の抵抗値変化を検出するために使用されます。光量の変化に応じて、出力電圧が変化します。

上記の回路では、光量の変化によるフォトレジスターの抵抗値の変化に伴い、フォトレジスターと抵抗器R2の間の電圧も変化します。(分圧の考え方です) そのため、この電圧を測定することで光の強度を知ることができます。

回路図

接続図

コード

/**********************************************************************
  Filename    : NightLamp
  Description : Controlling the brightness of LED by photoresistor.
  Auther      : www.freenove.com
  Modification: 2022/10/21
**********************************************************************/
#define PIN_ANALOG_IN   1
#define PIN_LED         14
#define CHAN            0
#define LIGHT_MIN       372
#define LIGHT_MAX       2048
void setup() {
  ledcSetup(CHAN, 1000, 12);
  ledcAttachPin(PIN_LED, CHAN);
}

void loop() {
  int adcVal = analogRead(PIN_ANALOG_IN); //read adc
  int pwmVal = map(constrain(adcVal, LIGHT_MIN, LIGHT_MAX), LIGHT_MIN, LIGHT_MAX, 0, 4095);  // adcVal re-map to pwmVal
  ledcWrite(CHAN, pwmVal);    // set the pulse width.
  delay(10);
}

コード解説

今回のコードでは19行目にconstrain()関数という見慣れない関数が出てきました。これは値の上限・下限を設定する処理です。直訳すると、制限する・拘束するという意味ですね。明るすぎた場合や暗すぎた場合に予期せぬ動作を招かないように、事前にLIGHT_MINとLIGHT_MAXの範囲に収まるようにします。そのうえで、mapで12ビットに引き伸ばしています。

ちなみに、深夜0時に実験しているのですが部屋の明るさと手で覆って暗くする程度ではあまり明るさの差が付きませんでした。スマホの懐中電灯を当てるとフォトレジスターがいい感じに反応してくれました。

次回はサーミスタを使用して温度計を作ってみましょう。

あわせて読みたい
Project 13.1 サーミスタ/Thermometer 前回はフォトレジスターを使って周辺の明るさに応じてLEDの光量をコントロールしてみました。 https://kaneshige.org/?p=406 今回はサーミスタを使用して温度を測定して...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

金重総合研究所の主席研究員。
子供の頃から研究者を目指し、ライフワークとして日々様々な研究をしています。
経営・マネジメント・金融・DXあたりが本職です。
私を採用したい人、私と一緒に働きたい人、一緒に知識を肥やしていきたい人はぜひお声がけ下さい。

コメント

コメントする

目次