自動石鹸ディスペンサー¶
この自動石鹸ディスペンサープロジェクトは、Arduino Unoボードと赤外線障害物回避センサー、水ポンプを使用しています。このセンサーは手などの物体の存在を検出し、その結果を基に水ポンプが石鹸を供給します。
1. 回路の作成¶
2. コード¶
ultimate-sensor-kit\fun_project\04-Automatic_soap_dispenser
のパス下にある04-Automatic_soap_dispenser.ino
ファイルを開くか、このコードを Arduino IDE にコピーしてください。
3. コードの解説¶
このプロジェクトの主旨は、手を使わずに石鹸を供給するシステムを作成することです。赤外線障害物回避センサーが物体(手など)が近づいているのを検出すると、その情報をArduinoに送信します。それによって水ポンプが活性化し、短い期間石鹸を供給した後、停止します。
センサーとポンプのピンの定義
このコードスニペットでは、センサーとポンプに接続するArduinoのピンを定義しています。7番ピンをセンサーピンとして、
sensorValue
変数でこのセンサーから読み取るデータを保持します。水ポンプには、9番と10番の2つのピンを使用します。const int sensorPin = 7; int sensorValue; const int pump1A = 9; const int pump1B = 10;
センサーとポンプの設定
setup()
関数では、使用するピンのモードを定義しています。センサーピンはINPUT
として設定され、センサーからのデータを受信します。ポンプのピンはOUTPUT
として設定され、ポンプに命令を送ります。pump1B
ピンがLOW
(オフ)状態から始まるようにし、9600のボーレートでシリアル通信を開始します。void setup() { pinMode(sensorPin, INPUT); pinMode(pump1A, OUTPUT); pinMode(pump1B, OUTPUT); digitalWrite(pump1B, LOW); Serial.begin(9600); }
センサーの状態を常に確認し、ポンプを制御する
loop()
関数では、Arduinoが常にセンサーからの値をdigitalRead()
で読み取り、sensorValue()
に割り当てます。その値をデバッグのためにシリアルモニターに出力します。センサーが物体を検出すると、sensorValue()
は0になります。このとき、pump1A
をHIGH
に設定してポンプを活性化し、700ミリ秒の遅延で石鹸を供給します。その後、pump1A
をLOW
に設定してポンプを停止し、1秒の遅延でユーザーが手を動かせる時間を確保します。void loop() { sensorValue = digitalRead(sensorPin); Serial.println(sensorValue); if (sensorValue == 0) { digitalWrite(pump1A, HIGH); delay(700); digitalWrite(pump1A, LOW); delay(1000); } }