3Dプリンタカバーなど(続)
- 2023/08/20 16:16
- カテゴリー:3Dプリンタ
マザーボードを変更する前にやっておきたいことがようやく終わりそう
エンクロージャー
上の蓋と手前に扉を作製
全てはめ込み式にしたので取り外し可能
上部から覗きこめるように透明板(透明写真立ての板を使用)を付けたが前面からも見えた方が便利そうなので後で扉にも付けた
扉に使用するための丁番が(ダイキ)だと高価だったので3DプリントしようとしたがCADで上手く作れない
困っていたらコーナンで嬉しい安価版を見つけた
扉留めには磁石を埋め込んだ
フィラメントガイドも隙間ができないように作り直している
エンクロージャは主にABSの積層割れ対策だが,消費電力の改善や冬場の温度保護にもなるだろう
エアフロー用FAN
エアフロー用FANは上部のバーに付け,コントローラをラズパイボックスの横に付けて24Vを元電源から引いた(コントローラはエンクロージャ内に設置予定だったが熱のため変更)
温度監視
エンクロージャの上部と下部で温度監視するためBMP280を2個I2C接続で使用
コントロールはラズパイで行うがOctoPrintは利用できないので,映像を含めてラズパイで監視システムを組み込むことにした
(BMP280)
I2C接続した2つのBMP280から温度を取得するためpythonでプログラミングするのだがBMP280のライブラリが無いのでArduino版を参考にして作る( 写真はラズパイ3Bを使ってテスト中)
しかし何故か温度が5~6℃高くなる
Arduinoで確認すると正常なのでBMP280の異常ではない
後で見つけたBME280のスイッチサイエンス版(1接続用なので利用できない)でも同様で温度に誤差がある
読み込んだレジスタ値を(同時ではないが)Arduinoで読んだ値と照合したところ異なる部分があるのでBullseyeのI/O Ctrl部かI2Cの不具合も考えられる
原因不明なため温度の元になる値を5℃分強制的に下げることにした(気圧値にも影響あるため元になる値を補正)
(配信の実装方法)
取得温度の表示はリアルタイムにするため「websocket」を利用(websocketは初なのでこちらが参考になった)
映像は「OpenCV+websocket」「RTSP」「GStreamer」を試行してみたところ正常動作しないので「MJPG-Streamer」を使った(Bullseyeなのでこちらを参考にすると良い)
(OS設定)
ラズパイZERO WHで使用するので32ビット版のBullseyeを使う
2023-05-03-raspios-bullseye-armhf-lite.img.xz
後で再セットアップした際,最新のラズパイイメージャーが正常に動作したので利用したが直接書き込んだ場合以下の問題あることが判った
SSHを有効にするため「/boot/ssh」(拡張子なし)を作成するが,SSHでログインできるUIDが無い
→ 最初の起動でパーティションを拡張,再起動後,consoleでユーザとパスワードの設定待ちとなっている
ログインできたら定番の設定
$ sudo raspi-config
host-name → 当ネットワークの命名規約
LANG → UTF8追加
TimeZone → ASIA,Tokyo
I2C Enable
Serial console Desable + Serial Enable(Bullseyeで扱いに変更あり)
$ sudo apt update --allow-releaseinfo-change
$ sudo apt update
$ sudo apt upgrade
$ shutdown -r now
(注)IPアドレスはDHCPサーバにて管理
pythonとGPIO
$ sudo systemctl disable hciuart. → (Bluetoothで「PL011」を使う設定をUARTで使うようにする)
(pythonセットアップ)
$ sudo apt install git
$ sudo apt install python-dev python3-pip
(pipの確認)
$ python -m pip -V
/usr/bin/python: No module named pip
(pipのアップグレード)
$ sudo pip install --upgrade pip
...
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 20.3.4
...
Successfully installed pip-23.2.1
$ pip -V
pip 23.2.1 from /usr/local/lib/python3.9/dist-packages/pip (python 3.9)
(GPIO出力)
$ sudo pip install wiringpi
...
Successfully built wiringpi
Installing collected packages: wiringpi
Successfully installed wiringpi-2.60.1
...
(websocketライブラリ)
$ sudo pip install tornado
Installing collected packages: tornado
Successfully installed tornado-6.3.3
...
(smbus2を使用可能にする)
$ sudo pip install smbus2
...
Installing collected packages: smbus2
Successfully installed smbus2-0.4.2
...
$ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 77
MJPG-Streamer(映像配信)セットアップ
$ sudo apt update
$ sudo apt install -y git cmake libjpeg-dev
$ cd
$ git clone https://github.com/neuralassembly/mjpg-streamer.git
$ cd mjpg-streamer/mjpg-streamer-experimental
$ make
$ sudo make install
ラズパイ専用カメラモジュールを使う場合 (input_raspicam.so)
$ cd $HOME/mjpg-streamer/mjpg-streamer-experimental
$ mjpg_streamer -o 'output_http.so -w ./www -p 8080' -i 'input_raspicam.so -x 1920 -y 1080 -fps 30 -q 10'
USBカメラを使う場合 (input_uvc.so)
$ cd $HOME/mjpg-streamer/mjpg-streamer-experimental
$ mjpg_streamer -o 'output_http.so -w ./www -p 8080' -i 'input_uvc.so -d /dev/video0 -r 640x480 -fps 30 -q 10'
-wは//(root)のコンテンツを指定する場合
-pのポート指定は8080でないと動作しない(コンパイルで固定になっている部分があるのか)
ラズパイ専用カメラモジュールはUSBカメラのライブラリでも動作する
LD_LIBRARY_PATH=/usr/local/lib/mjpg-streamerの指定無しでも動作した(上のコマンドはライブラリのあるディレクトリで起動している)
(コード)
温度表示サーバ(server.py):websocket(tornado)用のサーバサイドpython
映像配信サーバ(mjpg-streamer.sh):MJPG-Streamerサーバ起動用のプロシージャ
監視画面用HTML(main.html):温度表示サーバと組みとなって表示(CSSは未公開)
BMP280温度(newBMP280_2.py):server.pyから使用されるBMP280温度取得python
CPU温度(cputemp.py):server.pyから使用されるCPU温度取得python
(監視画面)
エンクロージャ内は暗いので照明が必要か
(追加:2023.08.24)
照明を追加12VのLEDモジュールを2個直列して24Vで使用(バーに引掛けて設置)
見える程度にはなったのでとりあえずは良しとする
外気31℃時,PLAの印刷にて(ビルドプレート50℃設定)上部がMax.42.1℃,下部がMax.39.9℃まで達した
(設置)
I2C用のケーブルをどうするか悩んでいたところ丁度コネクタが異常になったUSBケーブルが出来たので利用
設置用のパーツ(センサー台,ケーブル止め)は3DプリントしてXH端子を付けて完成
レールのTスロットに差し込んで回せば止まるように作ってある
接続元は基板の空きがなかったため2段にした(いいかげん作り直せばいいのだがw)
排気(未)
冬までには追加する予定