アサガオの観察日記を電子工作で自動化してみよう

# はじめに
僕が子供のころは、夏休みの宿題で「アサガオの観察日記」というのがあり、夏休みに毎日水をやって、成長を観察して、その日の天気やらどんな感じで成長しているかやらを絵日記にしていた。
ただ、これがひたすらにめんどくさい。旅行とかで長期間家を空けられない。
その間、世話ができずに枯らすこともままあり、非常に苦労した思い出がある。

そこで、大人になった今、それらを自動化できないかと考え、作ってみることにした。

# 全体図
<img width="978" alt="スクリーンショット 2019-08-19 13.31.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27192/a29cf501-4909-c07c-6839-27fe0b43f89d.png">

# 単体のそれぞれの機能

## 水をやるところ
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">アサガオに水をやるやつ出来ました <a href="https://t.co/4SutPzXUNw">pic.twitter.com/4SutPzXUNw</a></p>&mdash; R19 (@r19_tech) <a href="https://twitter.com/r19_tech/status/1163299878211997696?ref_src=twsrc%5Etfw">August 19, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

コード

```javascript
var servo = obniz.wired("ServoMotor", {signal:0,vcc:1, gnd:2});

servo.angle(180.0); // 下げる

servo.angle(0.0); // 上げる
```
[参照](https://obniz.io/ja/sdk/parts/ServoMotor/README.md)

### つかったもの（obniz以外で）
・サーボモーター （[RB996a-N](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4REW)）（1480円）
・ブリキのジョウロ（300円くらい）
・ちょっと厚めの輪ゴム（108円）
・金属製のハンガー（108円）
・タコ糸（108円）
・クリップ（108円）
・空きペットボトル（0円）

サーボモーター
<img width="814" alt="スクリーンショット 2019-08-19 17.23.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27192/f142bedb-f38c-3c5d-0906-67b745b19218.png">


ブリキのジョウロ
<img width="968" alt="スクリーンショット 2019-08-19 17.22.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27192/f4183029-e6fd-4c35-65e8-86055b51fb47.png">


金属製のハンガー
<img width="488" alt="スクリーンショット 2019-08-19 17.23.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27192/e8d8cf47-927d-d767-02a3-1258a7dee591.png">


## 土の湿度を測るところ

### つかったもの（obniz以外で）
<img width="405" alt="スクリーンショット 2019-08-19 17.45.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27192/9796d996-7af7-42b3-c07d-dc276d177b1a.png">

[湿度センサー](http://wiki.seeedstudio.com/Grove-Moisture_Sensor/)（734円）

コード

```javascript
var sensor = obniz.wired("SEN0114", {vcc:0,  gnd:1, output:2});
sensor.onchange = function(value){
  // 1.47という数値は環境や条件によって調整する
  if(1.47 > value){
    // 土が乾いている
  }else if(value > 1.47){
    // 土が十分潤った
  }
};
```
[参照](https://obniz.io/ja/sdk/parts/SEN0114/README.md)

## アサガオの写真を撮る（実装中）

### 使ったもの
~~[Ｇｒｏｖｅ－シリアルカメラキット](https://www.seeedstudio.com/Grove-Serial-Camera-Kit.html)（3,564円）~~

obniz公式のこちらで再挑戦
[小型ＴＴＬシリアルＪＰＥＧカメラ（ＮＴＳＣビデオ出力付）]
(http://akizukidenshi.com/catalog/g/gM-07746/)
挙動確認用のサンプルコード

```html
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@latest/obniz.js"></script>
</head>
<body>

<div id="obniz-debug"></div>
<img id="image">

<script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  obniz.io6.output(true);
  obniz.io9.output(false);
  var cam = obniz.wired("JpegSerialCam", {vcc:0, cam_tx:1, cam_rx:2, gnd:3});
  await cam.startWait({baud: 38400});
  await cam.setSizeWait("640x480");
  const jpegData = await cam.takeWait();
  document.getElementById("image").src = "data:image/jpeg;base64," + cam.arrayToBase64(jpegData);
}
</script>
</body>
</html>
```

過電流の問題は解決したけどちょっとうまく動かない。。。

<img width="604" alt="スクリーンショット 2019-08-19 22.52.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27192/c2f0f019-54d3-d3cf-1dcf-781f523421f9.png">
<img width="1068" alt="スクリーンショット 2019-08-19 22.56.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27192/02b4e4e0-2f24-445f-cd25-66e5e4e12472.png">


[参照](https://obniz.io/ja/sdk/parts/JpegSerialCam/README.md)

参考
[ESP-WROOM-02にカメラモジュールを繋いでネットワークカメラを作る](https://qiita.com/binzume/items/e301c12b7ec1486d7c42)

# まとめて動かす
帰省中でアサガオが準備できなかったので自宅に帰ってから設置します（;;）

# 感想
いろんなサーボモーターやステップモーター、電磁マグネットなどでジョウロの上げる部分の試行錯誤してみたが、サーボモーター（RB996a-N）が強力で安定して使えた。
ちょっと厚い輪ゴムが工作でめちゃくちゃ使える頼もしい素材だと思った。
カメラは下調べが不十分で、obnizSDKで紹介されていたものとは違うものを買ってしまい、[公式wiki](http://wiki.seeedstudio.com/Grove-Serial_Camera_Kit/)のサンプルコードにはSDカードにカメラで撮った写真を保存する方法しか載ってなく、めちゃくちゃ焦った。なんだかんだ、obnizのJpegSerialCamのSDKで使えそうなので、もうちょっと試行錯誤してみる。
今回はバラバラに実装を確認したが、実際に組み立てると、防水の問題や日光の問題など、もっといろんな問題が出てきそうなので、それらにどう解決するかを今後まとめたい。