【電子工作】IoT玉ねぎチェッカーを作成しました！

![20180512175914.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30697/8f65726d-0deb-4a83-435d-bc94b7d57205.jpeg)

# はじめに（自己紹介）
筆者は、HottyDBという全文検索エンジン＋機械学習ランキング＋レコメンデーションの機能を搭載したRDBMSを個人開発しています！
本記事とは関係ないですが、HottyDBを解説した記事もあるので、是非そちらも見てみてください！

https://qiita.com/toru1055/items/0fe400989373823e9c78


# 玉ねぎチェッカー作りました！
ずいぶん前（５年くらい前）になりますが、大作「玉ねぎチェッカー」を作りましたのでその作成過程を紹介したいと思います。

イメージは上図の通り。
玉ねぎの重さや個数をIoT機器でネット上に送り、スマホからチェックできるようにしました！ 

# 用途
仕事帰り、スーパーに寄った時、こんなことを思うことないですか？
「あれー、家にまだ玉ねぎあったかなー？」と。
玉ねぎチェッカーは、それを解決してくれます！
外にいながらにして、家に玉ねぎが何個あるか分かるようになります！！

# 作り方
## 1. まず重さセンサーを用意する 
ロードセルセンサーとHX711というセンサーモジュールを購入しておきます。

https://www.amazon.co.jp/exec/obidos/ASIN/B073GR3C2S/

次に、ロードセルを取り付ける板を用意します。

![20180512184631.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30697/aa6f23f9-2771-2b46-f8ce-6bbe5b79f3ea.jpeg)

ロードセルセンサーは、下のように重量がかかったら曲がるようにベニヤ板に取り付けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30697/91ddbb96-cf6c-a9dd-7a94-c795b7ae4131.png)

上の写真はベニヤ板とロードセルの間にナットを挟んでスペースを作りましたが、スペーサーとかを使った方がよかったです。（とんでもなく苦労しました・・・。）

ちなみにロードセルはM4とM5の二種類のネジ穴が空いているので注意してください。

 

上からみるとこんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30697/ac79017a-2a22-11a9-a54d-7621d34cec6f.png)

これ見てわかるように、ネジはできるだけフラットな頭の方がいいです。 

## 2. 重さセンサーとIoT機器を繋げる
だいたいこんな感じで作っていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30697/e2666b3d-03ef-1269-9466-6230563af7dc.png)

### 用意するもの

#### 1. NodeMCUというIoT機器。家のWiFiに繋げてインターネットに接続できます。

https://www.amazon.co.jp/OSOYOO-%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9-%E9%96%8B%E7%99%BA%E3%83%9C%E3%83%BC%E3%83%89%E3%80%81CH340-Micropython-%E8%A9%B3%E3%81%97%E3%81%84%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%E3%81%8C%E4%BB%98%E5%B1%9E/dp/B0BW2XDQYT/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=12VAKGQZY8Z65&keywords=ESP8266%2BNodeMCU%2B%E6%8A%80%E9%81%A9&qid=1681892276&s=industrial&sprefix=esp8266%2Bnodemcu%2B%E6%8A%80%E9%81%A9%2Cindustrial%2C152&sr=1-1&th=1

#### 2. 16x2のLCDディスプレイ（HD44780）。玉ねぎの重さなど表示させます。
https://www.amazon.co.jp/Hailege-HD44780-LCD%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%ABDC-16x2%E3%82%AD%E3%83%A3%E3%83%A9%E3%82%AF%E3%82%BF%E3%83%BCLCM-LCD%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4%E7%94%BB%E9%9D%A2%E3%83%96%E3%83%AB%E3%83%BC%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF%E3%83%A9%E3%82%A4%E3%83%88/dp/B08QMCWVYW/ref=sr_1_1_sspa?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3INX3N0BL30JP&keywords=HD44780&qid=1681888559&sprefix=hd44780%2Caps%2C160&sr=8-1-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUFZTDBUSjNJUzhQTjMmZW5jcnlwdGVkSWQ9QTA4MTg4ODMySFExUEhKSFJQQTMzJmVuY3J5cHRlZEFkSWQ9QTNPVVZMQ0w0WFhNNlUmd2lkZ2V0TmFtZT1zcF9hdGYmYWN0aW9uPWNsaWNrUmVkaXJlY3QmZG9Ob3RMb2dDbGljaz10cnVl

#### 3.  HD44780のLCDをI2Cに変換するモジュール。上記LCD単体でも機能しますが、配線の節約のためにこのモジュールが必要になります。
https://www.amazon.co.jp/KKHMF-%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E3%83%9C%E3%83%BC%E3%83%89%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB1602-2004-LCD%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4Arduino-%E3%80%8C%E5%9B%BD%E5%86%85%E9%85%8D%E9%80%81%E3%80%8D/dp/B0822F2VRP/ref=dp_prsubs_1?pd_rd_w=z25Cj&content-id=amzn1.sym.49e3e198-53e4-409b-8a2c-254f8afc2766&pf_rd_p=49e3e198-53e4-409b-8a2c-254f8afc2766&pf_rd_r=W2R690E98R6Y14EMDGA7&pd_rd_wg=EEX8u&pd_rd_r=d427c63c-3e56-4e66-bf79-033f091e61b2&pd_rd_i=B0822F2VRP&psc=1

#### 4. タクトスイッチ４つ。「ZEROボタン」「ONEボタン」「OFFボタン」「ONボタン」用に。
https://www.amazon.co.jp/Youmile-GR-YM-094-100%E5%80%8B%E3%82%BF%E3%82%AF%E3%83%88%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%B9%E3%82%A4%E3%83%83%E3%83%816x6x4-5mm-4%E3%83%94%E3%83%B3DIP%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%83%91%E3%83%8D%E3%83%ABPCB%E3%83%A2%E3%83%BC%E3%83%A1%E3%83%B3%E3%82%BF%E3%83%AA%E3%83%BC%E3%82%BF%E3%82%AF%E3%82%BF%E3%82%A4%E3%83%AB%E3%82%BF%E3%82%AF%E3%83%88%E3%83%97%E3%83%83%E3%82%B7%E3%83%A5%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81/dp/B084VP1XSN/ref=sr_1_2_sspa?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3SAHMJGLP7KTV&keywords=%E3%82%BF%E3%82%AF%E3%83%88%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81&qid=1681888665&s=diy&sprefix=%E3%82%BF%E3%82%AF%E3%83%88%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%2Cdiy%2C164&sr=1-2-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUEyN0VKTTY2WFJLVldFJmVuY3J5cHRlZElkPUEwMjI4ODQzMjNDVVpNMDFSMEdERyZlbmNyeXB0ZWRBZElkPUFEVVdEWFVLV1VLN1Amd2lkZ2V0TmFtZT1zcF9hdGYmYWN0aW9uPWNsaWNrUmVkaXJlY3QmZG9Ob3RMb2dDbGljaz10cnVl

### ブレッドボードで構築するとこんな感じになります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30697/c722b210-575c-477c-8f81-7002a31a5e18.png)

この右側に伸びてる赤、緑、黒、白の配線とロードセルの配線を繋げます。

## 3. ハードウェアを完成させる
### ブレッドボードの配線の通りにプリント基盤を発注
上のブレッドボードの配線で、プリント基盤を発注しました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30697/167ad87f-8156-415f-01f6-f39ee093e75c.png)

[Seeed Studio](https://www.seeedstudio.com/) というところで発注しましたが、
基盤10枚で400円と激安でした（送料が2000円かかりましたが・・・）。

:::note warn
作成したのは５年ほど前でその当時の価格です
:::

ちなみに基盤の設計は [Fritzing](https://fritzing.org/) というソフトを使いました。
ブレッドボードに配線をポチポチ繋げるだけで設計ができるのでとても簡単！

### 半田付けしていく

あとは、NodeMCUやタクトスイッチ、HX711などを基盤に半田付けしていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30697/5eef4566-a494-8967-5b06-af35d05e3686.png)

半田のノリも良いです。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30697/ad371f88-5baa-981d-eb61-c7b28646b2c7.png)

こんな感じになりました。めっちゃ簡単です！

実は最初、ユニバーサル基盤でやろうとしましたが、その時はめっちゃ時間かかって結局失敗しました・・・。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30697/ff90f7c8-db3e-493f-1409-c053846db3c8.png)
↑は失敗したやつです。配線の半田は難しい・・・。

### 全て繋げる

出来上がった基盤と重みセンサー、LCDディスプレイなどを繋げていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30697/b4d2eedc-47fa-50bb-6403-706f4aedb3f5.png)
重さセンサーの中に機器を入れていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30697/c7b001e5-d01c-aec7-3852-4a19f6997421.png)

最終的にこんな感じになりました！良い感じです！


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30697/6b3c74f8-d39c-ad89-7d85-a8710422ff64.png)

## 4. ArduinoIDEでソフトウェアを開発

ただ機械を繋げただけでは、玉ねぎは測れません。

玉ねぎを測定し、ネット上にデータを送るプログラムを書いていきます。

### AmbientというIoTデータ可視化サービスを使います
玉ねぎのデータをネット上のどこかに保存しておかなければいけません。
そこで、IoTのデータを貯めて置けるサービスを利用します。

https://ambidata.io/

というサービスを使って玉ねぎの重さと個数をインターネット上に保存します。

AmbientにはArduinoIDE用のライブラリがあるので、それをインストールしておきます。

### プログラムの概要（設定モード）
設定モードでは、IoT機器が自宅のWiFiと接続できるように設定します。

- OFFボタンを押しながら起動すると、このモードが始まります
- このモードでは、NodeMCUをWiFiアクセスポイントとして起動
- WEBサーバーを起動し、自宅のWiFiと繋げるための設定ページ（SSIDやパスワードを登録するページ）を配信
- 設定したWiFi設定情報をファイルに保存する処理

### プログラムの概要（通常モード）
通常モードでは、1時間に1回起動し玉ねぎの重さをAmbientに送る処理を実行します。

- 設定したWiFi情報をファイルから読み込み、自宅WiFiに接続します
- 重みセンサーから重さを読み取り、LCDに表示する
- 「ZEROボタン」を押すと、現在の重さを0としてセットします
- 「ONEボタン」を押すと、現在の重さを1個の重さとしてセットします
- 「OFFボタン」を押すと、現在の重さと個数を計算してAmbientにデータを送り、1時間Sleepします
- 起動後90秒経つと、「OFFボタン」を押した時と同じ処理を実行します
- 「ONボタン」を押すとプログラムがリスタートされます

## 5. Ambientアプリから玉ねぎの個数を確認
[Ambient](https://ambidata.io/) に格納されたデータをスマホから閲覧するために、専用のスマホアプリも開発しました！

https://play.google.com/store/apps/details?id=jp.thotta.cordova&pli=1

かつては iOS　版もありましたが、お金を払っていなかったのでアプリストアからは姿を消してしまいました。

## 6. 完成！
以上で玉ねぎチェッカー完成しました！

実際に動かしてみた動画がこちら↓です。

https://youtu.be/16-pNVNRD84

これでいつでも玉ねぎの個数を確認できます！