夏です。暑いです。 暑いと思ったら、自動で心地よい風が吹いてきてほしいです。

今回のゴール

  • 温度センサで室内の温度を計測する。
  • 温度が高い場合に心地よい風を送る。

利用するもの

  • Arduino UNO
  • ブレッドボード
  • 温度センサ(LM35DZ)
  • トランジスタ(2N2222)
  • ダイオード
  • 電池(9V)
  • モーター
  • プロペラ

温度の計測

温度センサは以下のようにつなぐことで、温度を計測することができます。

温度センサ

コードは以下のようになります。

float input;
float temp = 0; // 摂氏

void setup() {
  Serial.begin(9600);  // シリアル通信速度
}
void loop() {
  input = analogRead(0);
  temp = input * 5 / 1024 * 100; // 摂氏に換算
  Serial.println(temp);

  // 1000ms待機
  delay(1000);
}

アナログ入力では、0~5Vの値を0~1024で表すため、取得した値を5/1024倍したのち、摂氏温度で表します。

これで温度の計測は完了です。

モーターの制御

モーターをArduinnoで制御するのには注意点があります。

  • モーターに電圧1.5Vをかけた場合、流れる電流は200mA。
  • Arduinoのデジタルピンの電流は40mA。

つまり、Arduinoのデジタルピンにモーターを直接つなげると、モーターが仕様より大きな電流を引き出そうとするため、Arduinoに負荷がかかります。 最悪の場合、壊れる原因になります。

よって、モーターを直接Arduinoにつなげて制御することはできません。

これを解決するには、トランジスタとダイオードを利用します。

トランジスタは、電気の流れを制御することができます。

トランジスタ

真ん中の半導体にプラスの電荷を送る(電流を流す)ことで、電荷の偏りがなくなり、左右の半導体を通して電流を流すことができるようになります。 電流を制御することで、左右の半導体を流れる電流を制御し、スイッチの役割を果たします。

モーター(コイル)には、磁束の変化を妨げる方向へと電圧を発生する性質があります。 つまり、モーターの作動中に突然電流を遮断すると、モーターの端子電圧は瞬間的に跳ね上がります。 これが発生すると、今度はトランジスタの破損の原因になってしまいます。

それを防ぐために、ダイオードを用います。 ダイオードは電荷の偏りによって、ある一方向にのみ電流が流れるようになっています。

ダイオードをモーターと並列でつなぐと、以下のようになります。

ダイオード

電流が遮断され、モーターが磁束の変化を妨げる方向へと電圧を発生した時のみ、ダイオードに電流が流れます。 これによって、トランジスタに大きな電圧がかかることを防ぎます。

全体を図で表すと、以下のようになります。

設計図

11番ピンに電流が流れると、トランジスタ内部の電荷が移動し、左右に電流が流れ始めます。

11番ピンに電流が流れる仕組みをコードで実装していきましょう。 以下のようになります。

float input;
float temp = 0; // 摂氏

void setup() {
  pinMode(11, OUTPUT);
  Serial.begin(9600);  // シリアル通信速度
}
void loop() {
  input = analogRead(0);

  temp = ((5 * input) / 1024) * 100; // 摂氏に換算
  Serial.println(temp);

  if (temp > 30.0) {
    digitalWrite(11,HIGH); //11番ピンの出力を5Vにする
  } else {
    digitalWrite(11,LOW); //11番ピンの出力を0Vにする
  }

  // 1000ms待機
  delay(1000);
}

温度が接し30度より大きかった場合、出力を5Vにします。

これによってトランジスタの真ん中の半導体に電流が流れるため、左右にも電流が流れます。

以上より、全て完成しました。

29.30
29.30
29.30
29.30
29.30
29.30
29.30
29.30
29.30
29.30
29.30
29.30
29.30
29.30
29.30
29.30
29.30
29.30
29.79
29.79
30.27
30.27
30.27

残念ながら今日は少し涼しいので、温度センサをさりげなく温めると…

涼しい

できました!涼しい。

まとめ

  • 温度センサなどのアナログ入力では、電圧0~5Vを0~1023の数値で表す。
  • モーターを直接Arduinoで制御しようとすると、故障の原因になる。
  • トランジスタとダイオードを用いることで、モーターを制御することができる。