自動石鹸ディスペンサー

この自動石鹸ディスペンサープロジェクトは、Arduino Unoボードと赤外線障害物回避センサー、水ポンプを使用しています。このセンサーは手などの物体の存在を検出し、その結果を基に水ポンプが石鹸を供給します。

1. 回路の作成

../_images/04-fun_Automatic_soap_dispenser_circuit.png

2. コード

  1. ultimate-sensor-kit\fun_project\04-Automatic_soap_dispenser のパス下にある 04-Automatic_soap_dispenser.ino ファイルを開くか、このコードを Arduino IDE にコピーしてください。

3. コードの解説

このプロジェクトの主旨は、手を使わずに石鹸を供給するシステムを作成することです。赤外線障害物回避センサーが物体(手など)が近づいているのを検出すると、その情報をArduinoに送信します。それによって水ポンプが活性化し、短い期間石鹸を供給した後、停止します。

  1. センサーとポンプのピンの定義

    このコードスニペットでは、センサーとポンプに接続するArduinoのピンを定義しています。7番ピンをセンサーピンとして、 sensorValue 変数でこのセンサーから読み取るデータを保持します。水ポンプには、9番と10番の2つのピンを使用します。

    const int sensorPin = 7;
    int sensorValue;
    const int pump1A = 9;
    const int pump1B = 10;
    
  2. センサーとポンプの設定

    setup() 関数では、使用するピンのモードを定義しています。センサーピンは INPUT として設定され、センサーからのデータを受信します。ポンプのピンは OUTPUT として設定され、ポンプに命令を送ります。 pump1B ピンが LOW (オフ)状態から始まるようにし、9600のボーレートでシリアル通信を開始します。

    void setup() {
      pinMode(sensorPin, INPUT);
      pinMode(pump1A, OUTPUT);
      pinMode(pump1B, OUTPUT);
      digitalWrite(pump1B, LOW);
      Serial.begin(9600);
    }
    
  3. センサーの状態を常に確認し、ポンプを制御する

    loop() 関数では、Arduinoが常にセンサーからの値を digitalRead() で読み取り、 sensorValue() に割り当てます。その値をデバッグのためにシリアルモニターに出力します。センサーが物体を検出すると、 sensorValue() は0になります。このとき、 pump1AHIGH に設定してポンプを活性化し、700ミリ秒の遅延で石鹸を供給します。その後、 pump1ALOW に設定してポンプを停止し、1秒の遅延でユーザーが手を動かせる時間を確保します。

    void loop() {
      sensorValue = digitalRead(sensorPin);
      Serial.println(sensorValue);
      if (sensorValue == 0) {
        digitalWrite(pump1A, HIGH);
        delay(700);
        digitalWrite(pump1A, LOW);
        delay(1000);
      }
    }