Arduino CloudでガーデニングIoT -水やり電動＆遠隔操作化-

## 目的

ほぼ全ての園芸植物は定期的な灌水（水やり）が必要だが、それが面倒臭くて続かない人が一定数いて、ガーデニングを十分楽しめていない。IoTの力でこの問題を解決したいのだが、適切な頻度と量での灌水を完全に自動化するのは容易ではないので、今回はスマホからワンボタンで灌水するシステムをArduino Cloudで作る。


## 準備物

直流調速器はなくても成り立つが、あると灌水量を調節することができる。水道部分については植物の数に合わせて必要な量だけ準備する。今回は9鉢に40cm程度の間隔で設置した。分岐は鉢の数だけ必要になる。

電気部分
- ESPr® Developer
- [リレースイッチ（3.3V用）](https://www.amazon.co.jp/gp/product/B01N9MAUZH/ref=ppx_yo_dt_b_asin_title_o03_s00?ie=UTF8&psc=1)
- [直流調速器](https://www.amazon.co.jp/gp/product/B00IK6P8KI/ref=ppx_yo_dt_b_asin_title_o08_s00?ie=UTF8&th=1)
- [ポンプ（DC12V 5A）](https://www.amazon.co.jp/DC-12V-ウォーター-ポンプ-ダイヤフラム/dp/B00L9M3FJG/ref=pd_ci_mcx_pspc_dp_d_2_t_1?pd_rd_w=sM22t&content-id=amzn1.sym.03e6f1e0-68dc-4a96-a4fb-2db2c2a22e4d&pf_rd_p=03e6f1e0-68dc-4a96-a4fb-2db2c2a22e4d&pf_rd_r=Q8PXPRS0RDZQ6PEGM00T&pd_rd_wg=lRPJs&pd_rd_r=faebd774-f295-45db-a653-3d2896c55138&pd_rd_i=B00L9M3FJG)
- [ACアダプター（DC12V）](https://www.amazon.co.jp/gp/product/B0BM96BMCD/ref=ppx_yo_dt_b_asin_title_o09_s02?ie=UTF8&psc=1)
- ブレッドボード
- ジャンパー線

水道部分
- [水タンク（20L）](https://www.amazon.co.jp/dp/B000O1PE2O?psc=1&ref=ppx_yo2ov_dt_b_product_details)
- [内径9mmホース（エンドキャップ付き）](https://www.amazon.co.jp/dp/B00RGEGV3S?psc=1&ref=ppx_yo2ov_dt_b_product_details)
- [内径4mmホース](https://www.amazon.co.jp/dp/B0CCRP2XF4?psc=1&ref=ppx_yo2ov_dt_b_product_details)
- [自動水やり パーツ 9mmジョイント 4mm分岐（Takagi）](https://www.amazon.co.jp/dp/B00RGEGZVQ?ref=ppx_yo2ov_dt_b_product_details&th=1)
- [灌水スプリンクラー](https://www.amazon.co.jp/gp/product/B0CC5P5K3M/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1)




## Arduino Cloudの設定

[前回](https://qiita.com/shin_ga/items/2a3ff7d33277f792a9a9)と同様にESPr® Developerの[準備](https://sample.msr-r.net/esp8266-setting/)をしたら、Arduino Cloudの設定を行う。Deviceからボードを登録したら、Thingsで次の設定を行う。

### Setup

灌水をするかしないかの状態を表す変数の設定、ボードの紐付け、WifiのSSIDとパスワードの入力を行う。

![スクリーンショット 2024-05-06 15.09.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756622/d2529cd3-f823-0a71-ef18-799873aa68d3.png)


### Sketch

ESPr® DeveloperをUSBでPCに接続してFlashボタンを押しながら書き込む。

```
#include "thingProperties.h"
#define RELAY 5

void setup() {
  pinMode(RELAY, OUTPUT);
  Serial.begin(119200);
  delay(1500); 
  initProperties();
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
}

void loop() {
  ArduinoCloud.update();
}

void onIrrigationChange()  {
  if(irrigation){
    digitalWrite(RELAY, HIGH);
  } else {
    digitalWrite(RELAY, LOW);
  }
}
```

### Dashboard

Dashboardを開いたらADDからSwitchを選択。
![スクリーンショット 2024-05-06 15.54.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756622/54ca5fc8-4ad5-7a4a-ee72-f5bbbf4b6eec.png)

Linked VariableにSetupで設定した変数を紐づける。

![スクリーンショット 2024-05-06 15.55.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756622/bbffcd7f-9d52-2cc9-d242-accf647717e9.png)


## 配線

配線をする前にLチカで動作確認をすると良い。

![irrigation_ブレッドボード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756622/508191d2-9bca-5f61-f718-859f9469a779.png)


## 完成



![2B6E661B-A8B0-41FD-BA02-3135FA74C198.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756622/4bc63e5f-bd0b-eed5-f3d8-ce083d70f92c.jpeg)


![IMG_0356-2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756622/d6cdfcea-519e-99a6-20fa-c3de948adbf6.gif)


外に置く場合は[コンセントボックス](https://www.amazon.co.jp/gp/product/B0CBTN7P2H/ref=ppx_yo_dt_b_asin_title_o03_s01?ie=UTF8&th=1)を利用すると良い。

## 参考

https://qiita.com/macole/items/ba3fcbcc5945423984ac