~初心者が試行錯誤して完成させたPC健康診断システム~
はじめに
以前の記事では、Arduino Nanoを用いてPCケース内8か所の温度を測定し、シリアルモニタへ表示するところまで完成しました。
しかし、それだけでは長時間の温度変化を分析することはできません。
そこで今回は、
- Raspberry Pi
- Python
- Visual Studio Code(VS Code)
を利用して、温度と騒音を同時に記録するデータロガーの製作に挑戦しました。
完成してみればシンプルなシステムですが、そこへ至るまでには数多くの壁がありました。
この記事では、完成までの試行錯誤をそのまま紹介します。
今回の目標
今回作成するシステムの構成は次のようになります。
Arduino Nano
│
├─ PCケース内温度(8点)
│
Arduino UNO
│
└─ 騒音レベル
↓
Raspberry Pi
↓
Python
↓
CSV保存
最終的には、
- 温度(8点)
- 騒音レベル
- 日時
を1つのCSVファイルへ自動保存することを目標としました。
最初の壁
USBポート番号が毎回変わる
最初は、
/dev/ttyUSB0
がNano、
/dev/ttyUSB1
がUNOだと思っていました。
しかし、USBを挿す順番によって番号が入れ替わることが判明しました。
そのため毎回、
ls /dev/ttyUSB*
で確認するようにしました。
原因が分かってしまえば簡単ですが、初心者には意外と分かりにくいポイントでした。
二つ目の壁
UNOだけ文字化けする
Nanoは正常なのに、
UNOだけが意味不明な文字列になってしまいました。
原因は通信速度でした。
Nano
9600bps
UNO
115200bps
通信速度が異なるため、
stty -F /dev/ttyUSB0 115200
で設定すると正常に表示されました。
通信速度が一致していなければ、正常なデータでも文字化けしてしまいます。
三つ目の壁
VS Codeからラズパイへ接続できない
VS CodeのRemote SSHを利用しましたが、
Could not establish connection
というエラーが表示されました。
原因を一つずつ確認し、
- SSH設定
- Linuxの選択
- パスワード認証
を順番に確認した結果、無事に接続できました。
Windowsから直接ラズパイ上のPythonを編集できる環境が完成した瞬間でした。
四つ目の壁
CSVの時間が7時間ずれる
CSVを見ると、
12:08
Windowsでは、
19:08
原因はラズパイのタイムゾーンでした。
ラズパイは英国夏時間(BST)になっていました。
そこで、
sudo timedatectl set-timezone Asia/Tokyo
を実行し、日本時間(JST)へ変更しました。
これでCSVも正しい時刻で保存されるようになりました。
五つ目の壁
騒音だけCSVへ保存されない
温度は保存されるのに、
Noiseだけ空欄になってしまいました。
原因はUNOのデータ形式でした。
UNOは、
Time_ms,Min,Max,PeakToPeak,Level
という形式で送信していました。
Python側で最後の
Level
だけを取り出すよう修正したところ、
無事にNoiseとして保存できるようになりました。
ついに完成
完成したCSVには、
DateTime
T0
T1
T2
T3
T4
T5
T6
T7
Noise
が毎秒自動で保存されます。
VS Codeからリアルタイムにデータを確認しながら開発できる環境も完成しました。
今回学んだこと
今回改めて感じたことがあります。
ものづくりは、完成品よりも完成するまでの過程に価値があるということです。
USB番号が変わる。
通信速度が違う。
SSHが接続できない。
タイムゾーンが違う。
CSVに保存されない。
一つ一つは小さな問題ですが、原因を切り分けながら解決していくことで、最終的には目的のシステムを完成させることができました。
これは、私がブログで書いている「現場・現物・現実」の考え方そのものです。
困ったときこそ現象をよく観察し、思い込みを捨て、一つずつ原因を確認する。
遠回りに見えても、それが最も確実な近道でした。
次回予告
今回完成したのは、データを記録する「データロガー」です。
次回は、このCSVデータを利用して、
温度と騒音をリアルタイムグラフで表示する「PC健康診断システム」
へ発展させていきます。
温度変化や騒音の推移を一目で確認できるようにし、異常の早期発見につながるシステムを目指します。
