水槽IoT
概要
水槽カメラ、温度測定、PH測定(優先度高)
バルブカウンタ測定(優先度低)
水槽に親和性のある外見(優先度高)
コストはなるべく低減(優先度中)
対象水槽
水草メイン
魚はグリーンネオンテトラ10、オトシンネグロ2、ヤマトヌマエビ10
https://gyazo.com/27ce5fde012e59b316c4c579eccb8990
公開範囲
インターネット('DMZリバースプロキシ経由、セキュリティはFWおよびDMZリバースプロキシで厳密に制御)
設置セグメントは内部セグメント
部品選定
※極力ありもので対応
サーバ:Raspberry Pi 4 Model B (4GB)
32GB microSD
カメラ:ロジテック Webcam LOGITECH C270
温度センサ:DiyStudio 3個 Arduino用 DS18B20温度センサー
PHセンサ:DiyStudio PH 0-14値検出センサーモジュール+ PH電極プローブBNCコードテスト Raspberry Pi
VKLSVAN Pro Micro USB ATmega32U4 5V/16MHz マイクロコントローラ Micro USB 開発ボード
ブレッドボード
pH標準液(センサー校正用)
精製水(センサー校正用)
技術選定(OSレイヤー以上)
表示系:PHP(仮)
DB:MySQL(グラフ描画用の計測結果保管で使用)
センサ制御+後方機能:Nore-Red
USBカメラ接続
接続後 lsusb コマンドで C270が表示されることを確認
動画配信機能作成
参考サイト
インストールコマンド
sudo apt-get install -y cmake libv4l-dev libjpeg-dev imagemagick
cd mjpg-streamer/mjpg-streamer-experimental
make
動画配信コマンド
cd /home/pi/mjpg-streamer/mjpg-streamer-experimental
./mjpg_streamer -i "./input_uvc.so -f 2 -q 30 -r 320x240 -d /dev/video0" -o "./output_http.so -w ./www -p 8080"
動画リンクの埋め込み方
静止画リンクの埋め込み方
自動起動設定
stream.shに以下を記載
cd /home/pi/mjpg-streamer/mjpg-streamer-experimental
./mjpg_streamer -i "./input_uvc.so -f 10 -r 320x240 -d /dev/video0 -y -n" -o "./output_http.so -w ./www -p 8080"
stream.shのアクセス権限を755にする
/etc/rc.local の exit 0 の前に以下の行を追加し、rebootする。
sh <保管先フルパス>/stream.sh
温度計接続
参考サイト
https://gyazo.com/b539c70d477235679ed8ec5a6d9e6169
Ruspberry Piの設定⇒インターフェースで「1-Wire」を有効にする
/boot/config.txtのall配下に以下を追記して再起動 dtoverlay=w1-gpio,pullup=on,gpiopin=4
以下を実行して w1_gpio と w1_therm の双方が表示されていれば認識されている。
lsmod | grep w1
温度は以下ファイルに表示
/sys/devices/w1_bus_master1/28-<任意の番号>/w1_svlave
t=の配下が温度 ※t=25937の場合は25.93℃
pHセンサー接続
※参考サイト
マイコン「VKLSVAN Pro Micro USB ATmega32U4 5V/16MHz マイクロコントローラ」にプログラムを書き込む
※pHセンサーのシリアル出力をUSB通信に変換する
書き込むプログラムを作成(1が入力されるとセンサーのpH値を返す⇒ph02.ino Nore-Redインストール
Node-Redをインストール
sudo apt-get install nodered
以下コマンドでnodered自動起動化
sudo systemctl enable nodered.service
以下コマンドでシリアル通信制御モジュール追加
npm install node-red-node-serialport
Node-Redに接続
Node-RedにSerial Requestノードを配置し、プログラムを書き込んだマイコンを選択する。
pHセンサー校正
pHセンサーをショートさせ、出力電圧が2.5Vになるよう調整
pHとpHセンサーの出力電圧は相関関係にあるため、pH標準液pH4.00、pH6.86、pH9.18についてそれぞれセンサーから出力される電圧を調べる。今回は以下となった。
※pHとセンサーが出力する電圧。
Vol pH
3.020 4.00
2.526 6.86
2.107 9.18
上記からpHとセンサー出力電圧の関係は <pH> = -5.674 × <電圧> + 21.107 となる。
【問題点】
電圧計が感知している電圧とマイコンが感知している電圧が異なる。
対策として、マイコンが感知している電圧を正として改めて立式する。
※pHとマイコンが感知した電圧
Vol pH
3.16 4.00
2.64 6.86
2.2 9.18
上記からpHとマイコン検知電圧の関係は <pH> = -5.34 × <電圧> + 21.05
※訂正前
float phValue = -6.1507 * pHVol + 22.511;
※訂正後
float phValue = -5.34 * pHVol + 22.05;
※校正の様子
https://gyazo.com/49bdda0e78c2628e7e272a8789d06050
DB接続
MySQLインストール
sudo apt-get install mariadb-server
rootパスワード設定
mysql -u root
MariaDB (none)> UPDATE mysql.user SET password=password('password') WHERE user = 'root'; テーブル作成
CREATE DATABASE aquadb
CLEATE TABLE aquadb.status(date DATE, time TIME, ph DOUBLE, temperature DOUBLE);
Node-RedのMySQL対応
Node-RedにMySQL用モジュール追加
npm install node-red-node-mysql
SQL文を作成するノードを追加
MySQL接続ノードを追加
https://gyazo.com/121a011fde63c70d0de62612f3807a54
表示系作成
フェーズ1:PHPでDBの内容を読みだして表示
できた
https://gyazo.com/2b9979d2ccd0d2d5a5edf9be8f775b30
運用設計
Node-Redで2日前のデータを削除するSQLを実行
cronで2日前のログを削除するシェルスクリプトを実行
セキュリティ設計
ネットワーク機器に依存するため省略
外装の作成
外装はfusion 360で設計のうえべーこんさんに協力頂き3Dプリンタで作成。 底板
https://gyazo.com/b47ab85ade364eeacdef870fd2a34fbf
天板
センサーホルダー(設計中⇒既製品のS字フックを流用)
課題
温度とPHをグラフで表示
mjpeg streamerを実行するとたまにフリーズする問題の解消