注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

  • 学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

👉 私たちと一緒に探索し、創造する準備はできていますか?[ ここ]をクリックして今すぐ参加しましょう!

光敏アレイ

このプログラムは、光依存抵抗器からの読み取りを対応する数の点灯するLEDライトに変換し、光の明るさのシンプルなインジケータを作成します。

必要なコンポーネント

このプロジェクトには以下のコンポーネントが必要です。

全体のキットを購入すると便利です。こちらがリンクです:

名称

このキットのアイテム数

リンク

Elite Explorer Kit

300+

Elite Explorer Kit

以下のリンクから別々に購入することもできます。

コンポーネント紹介

購入リンク

Arduino Uno R4 WiFi

-

ブレッドボード

購入

ジャンパーワイヤー

購入

抵抗器

購入

LED

購入

フォトレジスタ

購入

配線図

../_images/04_light_sensitive_array_bb.png

回路図

../_images/04_light_sensitive_array_schematic.png

コード

注釈

  • ファイル 04_light_sensitive_array.inoelite-explorer-kit-main\fun_project\04_light_sensitive_array のパスから直接開くことができます。

  • または、このコードをArduino IDEにコピーしてください。

04_light_sensitive_array.ino
 1/*
 2  The code reads the ambient light level through a photoresistor and lights up
 3  a certain number of LEDs based on the light level. The LEDs serve as a "light level bar."
 4
 5  Board: Arduino Uno R4 
 6  Component: Photoresistor and LED
 7*/
 8
 9// Constants for the number of LEDs and their pins
10const int NbrLEDs = 8;
11const int ledPins[] = { 5, 6, 7, 8, 9, 10, 11, 12 };
12
13// Pin for the photoresistor
14const int photocellPin = A0;
15
16// Variables to store sensor and LED level values
17int sensorValue = 0;  // value read from the sensor
18int ledLevel = 0;     // sensor value converted into LED 'bars'
19
20void setup() {
21  // Initialize all LED pins as outputs
22  for (int led = 0; led < NbrLEDs; led++) {
23    pinMode(ledPins[led], OUTPUT);
24  }
25}
26
27void loop() {
28  sensorValue = analogRead(photocellPin);              // Read the ambient light level from the photoresistor
29  ledLevel = map(sensorValue, 300, 1023, 0, NbrLEDs);  // Map the sensor value to the number of LEDs to be lit
30
31  // Update the state of each LED based on the mapped value
32  for (int led = 0; led < NbrLEDs; led++) {
33    if (led < ledLevel) {
34      digitalWrite(ledPins[led], HIGH);  // Turn ON LEDs that are below the level
35    } else {
36      digitalWrite(ledPins[led], LOW);  // Turn OFF LEDs that are above the level
37    }
38  }
39}

どのように動作しますか?

以下はコードの詳細な説明です:

  1. 定数と変数の定義:

    NbrLEDs:8個のLEDの存在を定義します。 ledPins[]:LEDはArduinoのピン5から12に接続されています。 photocellPin:フォトレジスタはArduinoのA0ピンに接続されています。 sensorValue:この変数はフォトレジスタから読み取った値を保存します。 ledLevel:この変数はsensorValueの変換に基づいてLEDの数を保存します。

  2. setup()

    ピン5から12を出力として設定し、LEDを駆動します。

  3. loop()

    フォトレジスタのアナログ値をピンA0から読み取ります。通常は0から1023の範囲です。 map関数を使用して、フォトレジスタの値を300-1023の範囲から0-8の範囲にマップします。 これは、光依存抵抗器からの読み取りが300の場合、LEDは点灯しないことを意味します。 読み取りが1023以上の場合、8個のLEDすべてが点灯します。

    続くforループは、各LEDをチェックします。そのインデックスがledLevel未満の場合、 LEDを点灯させます。それ以外の場合は、LEDを消灯させます。