
【電子工作】ラズパイピコを使って、普通のLEDを周囲の明るさに応じて光るスマートLEDに変えてみた
こんにちは!けろたろーです!
今回はラズベリーパイ ピコを使って周囲の明るさに応じてLEDの明るさを変える回路を組んでみました!
この技術はスマートフォンの画面や、街中の広告が流れているディスプレイなどに使われていますね!(実は暗い場所では眩しすぎないように輝度を下げ、逆に明るい場所では視認性を保てるように輝度を上げています)
さっそく回路を載せていきます!

配線とかごちゃごちゃしていてちょっとわかりにくいですね。。
わかりやすいように順を追って説明していきます!
実はこの回路は大きく分けて2つのブロックに分けられます!

〇オレンジ色で囲まれている回路
LEDの明るさを調整する回路です!
水色の回路で検知した値に応じてLEDの明るさを調整しています。
LEDの明るさはPWM制御という制御を用いていて調整しています。
簡単に。。
PWM制御は回路の電源をONする時間とOFFする時間を調整して機械やLEDの制御を行う方式です。
例えば
ONの時間が長い → 光がたくさん出て明るく見える
OFFの時間が長い → 光が少なくなって暗く見える
といった感じでON/OFFの時間を調整して制御を行っています!
〇水色で囲まれている回路
周囲の光を検知して、それをラズパイピコに伝える回路です!
黄色の丸で囲まれている素子が今回の回路の核となる素子で、「光抵抗」と呼びます。これは光の強さに応じて電気抵抗が変化する素子で、この素子による抵抗値の変化(電圧値の変化)を読みとってラズパイピコが周囲の明るさを読み取っています!
回路はこんなところです。
が。。回路があってもプログラムがなきゃ回路を動かせないですね。
ということで、プログラムを載せて解説していきます!!
今回用いたプログラム

行数も少なくて簡単なプログラムです。
言語はMicroPythonで記述しています!
コードを解説していきます!
まずは最初の行
from machine import Pin, PWM, ADC
ここで必要なライブラリ(機能)を読み込んでいます!
読み込んだものは下記になります。
Pin: ラズパイピコのピンを制御するための機能
PWM: パルス幅変調(明るさなどの制御)のための機能
ADC: アナログ信号をデジタルに変換する機能
次の行
pwm = PWM(Pin(15))
adc = ADC(Pin(28))
ここでは使用するピンの設定を行っています!
具体的には下記のように設定しています。
Pin15:PWM出力用に設定(LEDに繋ぐ)
Pin28:ADC入力用に設定
pwm.freq(1000)
ここではPWM制御の周波数を設定しています。
今回は1000Hzに設定しました。
while True:
duty = adc.read_u16()
pwm.duty_u16(60000-duty)
ここはプログラムのメインとなる箇所です。
1行1行解説していきます!
while True:
ここは下の行に書かれているプログラムを繰り返し処理するという記述です。
duty = adc.read_u16()
ここで、回路図で水枠の部分でのアナログ値を読み取っています。
pwm.duty_u16(60000-duty)
ここで読み取った値に応じてLEDの明るさを調整する出力を出しています。
ちょっと長くなってしまいましたがプログラムはこんな感じです!
実際に動作させてみた
通常時。。

ほんのり光ってますね
光抵抗(センサ)を指で覆ったとき

ちょっとわかりにくいですが、明るくなっているのがわかると思います!(伝わってほしい。笑)
こんな感じで今回は周囲の明るさによってLEDの明るさを自動調節する回路を組みました!
次回以降はPWMやADCに関してもうちょっと深堀りした説明をしていきたいと思います!
ここまで読んでくださりありがとうございました!