プロジェクト3:フォトレジスタ

(1)概要:
光感知抵抗(フォトレジスタ)は、硫化物やセレンなどの半導体材料で作られた特殊な抵抗で、光導電効果を持つ防湿樹脂でコーティングされています。光感知抵抗は周囲の光に最も敏感で、照明の強さが異なると、光感知抵抗の抵抗値も異なります。光感知抵抗を使用して光感知抵抗モジュールを設計します。
モジュールの信号はマイクロコントローラのアナログポートに接続されます。光の強度が強いほど、アナログポートの電圧が大きくなり、つまりマイクロコントローラのシミュレーション値も大きくなります。逆に、光の強度が弱いほど、アナログポートの電圧が小さくなり、つまりマイクロコントローラのシミュレーション値も小さくなります。
このようにして、光感知抵抗モジュールを使用して対応するアナログ値を読み取り、環境内の光の強度を検知することができます。


(2)パラメータ:
光感知抵抗の抵抗値:5K Ou-0.5m
インターフェースタイプ:シミュレーションポート A0、A1
動作電圧:3.3V-5V
ピン間隔:2.54mm
(3)接続図:
次にテストするのはロボットの左側にある光感知抵抗モジュールです。

左側の光感知抵抗はモータードライブシールドの A1/P3 に接続されています。

(4)テストコード:
(注意: コードをアップロードする前にBluetoothモジュールを接続しないでください。コードのアップロードにもシリアル通信を使用するため、Bluetoothシリアル通信と競合が発生し、アップロードが失敗する場合があります。)
/*
Keyestudio Mini Tank Robot V3 (Popular Edition)
lesson 3.1
photocell
http://www.keyestudio.com
*/
int sensorPin = A1; // A1はフォトレジスタの入力ピン
int sensorValue = 0; // フォトレジスタの値を保存する
void setup()
{
Serial.begin(9600); // シリアルポートモニターを開き、ボーレートを9600に設定する
}
void loop()
{
sensorValue = analogRead(sensorPin); // フォトレジスタセンサーからアナログ値を読み取る
Serial.println(sensorValue); // シリアルポートにフォトレジスタの値を出力する
delay(500); // 500msの遅延
}
(5)テスト結果:

覆うと値が小さくなり、覆わない場合は値が大きくなります。
(6)コードの説明:
analogRead(sensorPin):フォトレジスタのアナログ値を読み取る
Serial.begin(9600):シリアルポートを初期化し、ボーレートを9600に設定する
Serial.println:シリアル出力
(7)応用練習:
上記のコードはフォトレジスタの値を読み取るだけです。光感知とLEDを組み合わせてLEDを変化させることができます。フォトレジスタでLEDの明るさを制御してみましょう。

LEDの明るさはPWMで制御されます。そのため、LEDをシールドのPMWピン(ピン9)に接続します。
テストコード
(注意: コードをアップロードする前にBluetoothモジュールを接続しないでください。コードのアップロードにもシリアル通信を使用するため、Bluetoothシリアル通信と競合が発生し、アップロードが失敗する場合があります。)
/*
Keyestudio Mini Tank Robot V3 (Popular Edition)
lesson 3.2
photocell-analog output
http://www.keyestudio.com
*/
int analogInPin = A1; // A1はフォトレジスタの入力ピン
int analogOutPin = 9; // デジタルポート9がPMWの出力
int sensorValue = 0; // フォトレジスタの抵抗値の変数を保存する
int outputValue = 0; // PMWへの出力値
void setup()
{
Serial.begin(9600); // シリアルポートモニターを開き、ボーレートを9600に設定する
}
void loop()
{
sensorValue = analogRead(analogInPin); // フォトレジスタセンサーからアナログ値を読み取る
// アナログ値0\~1023をPWM出力値255\~0にマッピングする
outputValue = map(sensorValue, 0, 1023, 255, 0);
// アナログ出力を変更する
analogWrite(analogOutPin, outputValue);
Serial.println(sensorValue); // シリアルポートにフォトレジスタの値を出力する
delay(2);
}
開発ボードにコードをアップロードし、フォトレジスタを覆ってLEDの明るさの変化を観察してください。
