かつて、家の前の猫除け対策として水を入れたペットボトルを置くと猫が近寄らなくなるという説が信じられていました。通称「猫よけペットボトル」です。最近ではその効果が疑問視され、見かける機会も随分と減りました。
今回はこの「猫よけペットボトル」をパワーアップしたものを自作します。
とはいえ、ただペットボトルに水を入れても仕方がないので、市販の洗剤に使用されている電動スプレーボトルを改造してArduinoと赤外線センサを取り付けます。
スプレーボトルの中には水を入れておき、猫の接近を赤外線センサが感知したら自動的に水を噴霧する、全自動の猫よけペットボトルです。
もちろん、実際に猫に使用する場合は細心の注意を払ってください!
ジョークのような電子工作ですが、Arduinoとデジタルトランジスタを組み合わせるヒントが隠されています。
目次
1. 電動スプレーボトルの機能
洗剤などに使用されるスプレーボトルは「トリガーノズル」と呼ばれ、スプレー部分のすぐ下の「引き金」を握ることで中の液体を噴霧するタイプが主流です。
電動スプレーボトルには、人の力で動作する引き金に代わってモータが取り付けられています。スイッチを押すとモータが回転し、その力で中の液体を押し出す構造になっています。
今回の電子工作は、この電動スプレーボトルを改造してArduinoでスイッチをON/OFFできるようにするのが目的です。
改造と言っても難しくはありません。電動スプレーボトルのモータをデジタルトランジスタでArduinoボードと接続するだけです。
さらに今回は、Arduinoボードに赤外線センサも取り付けて、動物に反応して電動スプレーを自動で吹き出すようにします。
2. 準備
以下のものを用意してください。
Arduino Uno
Arduino IDE
ブレッドボード
抵抗
330Ω×8本(LEDの破損防止用)
ダイオード
デジタルトランジスタ
DTCxxx
赤外線センサ
電動スプレーボトル
熱収縮チューブ
電子工作向けの赤外線センサには、VMA314やHC-SR501などさまざまな種類があります、これらのセンサは、ピン配列に注意すればほとんどの製品が利用可能です。
デジタルトランジスタはNPNタイプの型番が「DTC」で始まるものを使用します。電子工作ではDTC114ELが入手しやすいでしょう。
電動スプレーボトルは既製品を使用します
さまざまなメーカーから販売されていますが今回は「カビキラー」の電動スプレーボトルを例に紹介します。これらの製品の中を水に入れ替えて使用します。(※注意:改造は自己責任で行ってください)
上記に加えてブレッドボード用のジャンパーワイヤ、USBケーブルが必要です。
3. スケッチ
以下がスケッチ全体です。スケッチのあとに解説が続きます。
const int motionPower = 13; const int motionIn = 12; int motor = 3; void setup(){ pinMode(motionPower, OUTPUT); pinMode(motionIn, INPUT); pinMode(motor, OUTPUT); digitalWrite(motor, LOW); digitalWrite(motionPower, HIGH); Serial.begin(9600); } void loop(){ int value= digitalRead(motionIn); if (value == HIGH){ digitalWrite(motor, HIGH); Serial.println("Squirt activated."); delay(500); digitalWrite(motor, LOW); delay(5000); } }
最初に電子部品を接続するArduinoボードのピン番号を定義します。
const int motionPower = 13; const int motionIn = 12; int motor = 3;
最初の2行は赤外線センサです。定数motionPowerは電源ピン、motionInは信号ピンを接続するArduinoボードのピン番号を指定します。今回はそれぞれ13番ピン、12番ピンです。
赤外線センサには直接Arduinoボードのコネクタに差し込めるものがあり、今回使用する製品は13番ピン・12番ピン・GNDを占有します。この部分はお手持ちの赤外線センサによって変更してください。
3行目の変数motorはデジタルトランジスタにつながるピン番号です。今回は3番ピンを使用しています。
続いてsetup()関数です。
void setup(){ pinMode(motionPower, OUTPUT); pinMode(motionIn, INPUT); pinMode(motor, OUTPUT); digitalWrite(motor, LOW); digitalWrite(motionPower, HIGH); Serial.begin(9600); }
ここではArduinoボードのピンの動作を設定します。
赤外線センサの電源ピンがつながる13番ピンは、5Vを「出力」に指定する必要があります。また、信号ピンのつながる12番ピンは「入力」です。
電動スプレーボトルがつながるピンは、「出力」の状態のとき、LOW(動作しない)に設定しておきます。
最後はシリアルモニターの初期化です。今回の電子工作ではスプレーが動作する際、画面上に「Squirt activated.」と表示されるようにします。
以下はloop()関数内の抜粋です。
int value= digitalRead(motionIn); if (value == HIGH){ digitalWrite(motor, HIGH); Serial.println("Squirt activated."); delay(500); digitalWrite(motor, LOW); delay(5000); }
1行目のdigitalRead()関数で赤外線センサの状態を読み取ります。
if文で赤外センサの条件分岐を行い(HIGH)で以下のスケッチが実行されるようにします。
最初に電動スプレーボトルをONにします。次の行のdelay(500)でONの状態を500ミリ秒(0.5秒)間保持したあとに電動スプレーボトルをOFFにします。
最後のdelay(5000)は、連続して電動スプレーボトルが作動しないように5秒間プログラムの動作を止めています。
4. 配線
最初に赤外線センサをArduinoボードに取り付けます。赤外線センサはArduinoボードのコネクタに直接接続できるタイプを使用しますが、ブレッドボードで配線しても構いません。
- 赤外線センサの電源ピンを、Arduinoボードの13番ピンに接続。
- 赤外線センサの信号ピンを、デジタル入出力ピンの12番に接続。
- 赤外線センサのグランドピンを、ArduinoボードのGNDピンに接続。
続いて電動スプレーボトルを動作するためのデジタルトランジスタを配線します。デジタルトランジスタの端子は用途が決まっているため、ブレッドボードに挿す向きに注意してください。デジタルトランジスタの平らな面が手前に来るようにします。
型番がDTCで始まり、外観が今回用意したDTC114ELと同じデジタルトランジスタであれば、端子の位置は全て共通です。
- デジタルトランジスタの左側のピンを電源ライン[-]に接続。
- デジタルトランジスタの中央のピンにダイオードのマークがない方の端子を接続。
- ダイオードのマークがある方の端子を電源ライン[+]に接続。
- デジタルトランジスタの右側のピンをArduinoボードの3番ピンに接続。
続いて電動スプレーボトルの接続です。
電動スプレーボトルのスプレー部分を分解してモータの配線が見える状態にします。モータの赤色のリード線を取り出して、ブレッドボードの電源ライン[+]に接続し、もう一方のリード線はデジタルトランジスタの中央のピンに接続します。
モータから出るリード線の色は製品によって異なる場合もありますが、何色でも問題はありません。また、銅線が露出している部分は熱収縮チューブでカバーします。
デジタルトランジスタの中央のピンには、ダイオードのマークがない方の端子が既に配線されているはずです。モータのリード線もそこに接続してください。
モータとダイオードは並列に接続します。モータなどのコイルを使った電子部品は、動作がOFFになる際に大きな電圧を発生させることがあるため、ダイオードはトランジスタ破損を防止するために使用します。
配線が終わったらArduinoボードを再びパソコンに接続します。
手を赤外線センサのすぐ前にかざしてみましょう。配線に問題がなければ電動スプレーボトルが0.5秒間作動し、中に入れた水が噴霧されるはずです。
5. まとめ
今回は市販されている洗剤の電動スプレーボトルを使って電子工作を進めてみました。今回解説した猫除け電動sprayボトルを実際に使用するには、もう少し動作の検証などを進めて防水なども考慮しないといけないので、電子工作の範疇にとどめるのが無難です。
今回解説したデジタルトランジスタを使ったモータの制御は、応用の幅が広い実用的な電子工作です。この方法は、モータだけでなくリレーなどの制御にも使えるので、ぜひマスターしましょう。