tanaka's Programming Memo

プログラミングについてのメモ。

フォトトランジスタ 7502L を Arduino で使う(大間違いあり)

(モーターのノイズについて、補足しました)
(抵抗の考え方を完全に間違えてました。直しました。2016/10/1)

akizukidenshi.com

データシートを見ると、標準値として「33μA 標準 条件:白色LED, 100Lux 」とあります。100Luxの白色LEDがどのぐらい明るいか分かりませんが、とりあえずこの33μAという値を基準に考えれば良さそうです。

Arduinoの回路に流して良いのは20mA以下ですが、仕様書の絶対最大定格を見ると10mAなので、どんなに明るくても電流の心配はなさそうです。

利用する抵抗値を検討します。根拠はありませんが、標準値の3倍ぐらいの値がアナログ入力の半分の512になるなら安心ではないだろうか、ということで、100μAの時に、2.5Vを発生する抵抗値を計算してみます。

「抵抗値(Ω) = 電圧(V) / 電流(A)」ですから、

2.5(V) / 0.0001(A) = 25000Ω

つまり、25KΩ程度の抵抗が良さそうです。

手元にあった中で一番近い10KΩを使って室内で試したところ、CdSセルよりは小さい値でしたが、最大で70程度の値が得られました。脇にLEDを光源としておくことで、フォトトランジスタの前に白いものを置くと100程度の数値が得られました。実際に使う場所の明るさにもよりますが、この環境であれば、事前に計算した25KΩから、50KΩ程度の抵抗が良さそうです。

こういう時に、可変抵抗器があると便利そうです。では、今回試した配線とスケッチを以下に示します。

以上、全部誤りです。電圧はコレクターにかかっているものなので、上記の計算は全く意味がありませんでした。後日、改めて整理します。

フォトトランジスタ配線

LED用配線

  • デジタルピン13番 - LED(+)
  • 1KΩ抵抗 - LED(-)
  • 1KΩ抵抗 - グランド

モーターのノイズ対策

上記のままだと、時々モーターが変な音を発生して、Arduinoのランプが不意についたりします。これはモーターのノイズのようです。Netduino: サーボモーターをコントロールしよう - Build Insiderを参考にして、5VとGNDの間に、0.1μFのセラミックコンデンサーを入れた方が良さそうです。(モーターやLEDの誤動作は、電源からの電圧の変化によって、フォトトランジスタの値が変化してしまうのが原因でした。電圧をアナログ入力で監視して、1000以下になる場合はセンサーの値を無視して対応しました。2016/9/28追記)

スケッチ

const int SENSOR = 0;
int val = 0;
const int LED = 13;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
}

void loop() {
  // put your main code here, to run repeatedly:
  val = analogRead(SENSOR);
  Serial.println(val);
  delay(50);
}