willist

セリグマンの犬の脱出―escape of Seligman's DOG―

自動水やり器をArduinoで作る

背景

私は植物を育てると大体枯らしてしまう。でもベランダで野菜を育てたい。 といわけで土壌湿度センサーを利用し、乾燥したら水を勝手にやってくれる機械を作ることにした。

利点

ベランダでは重量の問題からあまり土を厚く敷くことができないため、枯れるリスクと栄養不足のリスクが高い。しかし、水やり器で液体肥料を撒くことで、土壌が薄くてもちゃんとした野菜ができる(といいなぁと思っている。)

全体構成

今回は水道から水を引く形ではなく、水を溜めたタンクからポンプを使い水をまく形とする 全体像は以下の通り。 Skitch から.png

  • 土壌湿度センサで土壌湿度を計測
  • Arduinoで、センサの値が一定以下になったら信号を送る
  • Arduinoから信号がきたら、スイッチ(リレー)を入れる
  • スイッチが入ると、灯油ポンプが動いて水をくみ上げる

材料

  • 電池式灯油ポンプ 500円くらい 自動で止まらないやつの方がよい
  • Arduino (自分はLeonardを使用)
  • 土壌湿度センサー 500円くらい  ※釘2本とかで代用している人もいる
  • リレー 200円くらい(5V・10〜20mmAで動くもの。自分はomron G5V-1を利用)
  • ワイヤとか

作成

センサー⇒Arduino

土壌湿度を計り、湿度が低かったらArduinoのデジタル1ピンから出力するようにする。 また、一度水が出たら一定時間信号を出し続ける(水を出し続ける)ようにする。

回路

下の図のように、赤⇔5V、黒⇔GND、青⇔Analog1ピンにつなぐ - hoge 引用:http://www.dfrobot.com/wiki/index.php?title=Moisture_Sensor_(SKU:SEN0114)

プログラム

初心者なのでごちゃっとしていて恥ずかしい :see_no_evil: 。きれいにかける人がいたら直してほしい…。

/*
  # the sensor value description
  # 0  ~300     dry soil
  # 300~700     humid soil
  # 700~950     in water
*/
  int time;
  int moi;
  int ON;
 
void setup(){ 
  pinMode(1,OUTPUT);
}
 
void loop(){
  moi=analogRead(0); 
 // Serial.println(moi);
  delay(1000);
 if(moi<300){ //湿度センサの抵抗値が300以下ならdigital1ピンから出力
      digitalWrite(1,HIGH);
      time = time++;
      ON=1;
      delay(1000);
    }else{   //一度出力したらtimeが30秒立つまでは出力し続ける
          if(time<30 & ON>0){
          digitalWrite(1,HIGH);
          time=time+1;
          delay(1000);  
          }else{
          digitalWrite(1,LOW);
          time=0;
          ON=0;} 
}
}

Arduino⇒ポンプ

ポンプはArduinoのデジタルピンからの出力では動かないため、リレーを使うことでArduinoからの出力信号をスイッチとして使い、乾電池で動かす。

スイッチ部分

リレー部分

リレーは電気が流れるとスイッチが入る(or切れる)部品。制御部分(Arduino)の出力だけでは動かせないものを動かすときに、外部電源のスイッチとして働く。 2-9番に電気が流れる(小さい信号・スイッチ)と、10-5(or6)番に電気が流れる(大きい電気・モーターを動かす) 参考)http://www.omron.co.jp/ecb/products/pdf/g5v_1.pdf

1.1. digital1⇔リレー2番(or9番) 1.2. リレー9番(or2番)⇔GND

Skitch から (1).jpg 電池ボックスを空けてみると、青い①のところと②のところが接触し電気が流れるとモーターが動く仕組みになっていた。 なので、①と②をリレーでスイッチが入ると電流が流れる10番-5番(or6番)につないでやる。

2.1. リレー5番(or6番)⇔①(or②) 2.2. リレー10番⇔②(or①)

実験

濡らしたティッシュなどでセンサーの金属部分を覆い、Arduinoのリセットボタンを押す。 濡らしたテッシュをセンサーから外したらポンプのモーターが動いたら小成功。 ティッシュに戻してしばらくして自動で止まったら成功(そのままにしとくと動き続ける)。

残課題

あとはホースの部分を作成してやり、必要部分のハンダ付けやケースへの収納をすれば実用できる。 最適な水やりタイミングのための土壌湿度センサー値の調整や、水やり時間の調整はばあちゃんのアドバイスを聞き野菜を育てながら進めたい。 あと電池がなくなったら、電池をやめて太陽電池バッテリーから電気をとるように改造しようかな。

参考

http://www.dfrobot.com/wiki/index.php?title=Moisture_Sensor_(SKU:SEN0114) http://startelc.com/elc/elc_3_6Lr.html