Baumkuchen’s Workshop

バイオリンと電子工作、DIY、ジョギングなど。

3Dプリンター遠隔モニター装置を作る

眠ってるラズパイとUSBカメラで、3Dプリンターの遠隔モニターを実現します。

動機

 3Dプリンターを買ってから、印刷時間のかかる事に改めて実感した次第。3Dプリンターで、印刷開始して初めの数層がちゃんと定着するのを見計らったらあとはひたすら待つだけ。時々、フィラメントが絡まってないかとか、途中でベースから剥がれて無いかを確認してます。

 その度に、リビングから3Dプリンターの置いてある部屋まで行ったり来たりと。寒くなってきたので、こたつから出たくないですね〜、と言う不精な動機で、作ることにしました。

 3Dプリンター遠隔モニター装置

構想

リビングのWiFi 接続したノートパソコンから、①web経由で3Dプリンターの作動状況の動画を確認。同じく、②web経由で、照明のon/offが出来ること。③緊急事態には、3Dプリンタの電源を切れること。

システム構成

SSDリレー以外は、手持品ち活用。

  • USBカメラ
  • Raspherry Pi Model B
  • WiFiトングル
  • USB電源
  • SSDリレー

f:id:Baum_kuchen:20211212004531j:plain

f:id:Baum_kuchen:20211212004622j:plain

ソフトは、下記を組み合わせて構築する。

製作

ラズパイは、買ってから殆ど使ってなかったものでした、OSから再インストール。古いタイプなので、WiFiもついてないので余っていたWiFiトングル活用。カメラも、openCVで遊ぼうと思っていたものを活用。この二つで、 USBポートは使い切ってしまいます。

WiFiトングル

これは、 USBポートに挿すだけで動きました。安いトングルだったせいか接続が安定しないので、開発中は適宜有線LANも使ってます。

USBカメラ

 USBカメラも基本挿すだけ。lsusbで、 USB接続が問題ないことを確認。

pi@raspberrypi:~ $ lsusb
Bus 001 Device 005: ID 056e:7016 Elecom Co., Ltd UCAM-C0220F
Bus 001 Device 004: ID 2019:ed17 PLANEX GW-USValue-EZ 802.11n Wireless Adapter [Realtek RTL8188CUS]

ls /dev/video*で、ビデオカメラとしても問題なく認識。

pi@raspberrypi:~ $ ls /dev/video*
/dev/video0  /dev/video10  /dev/video12  /dev/video14  /dev/video16
/dev/video1  /dev/video11  /dev/video13  /dev/video15  /dev/video18

fswebcamを使って正しく画像が読み取れるかも確認して問題なし。以下参考。

hellobreak.net

ストリーミング

mjpg-streamerをインストール。
~/mjpg-streamer/mjpg-streamer-experimental下のstart_stream.shを修正して、

./mjpg_streamer -i "./input_uvc.so -f 20 -r 320x240 -d /dev/video0 -y -n" \
-o "./output_http.so -w /usr/local/share/mjpg-streamer/www -p 8080"

自動起動の為、/etc/rc.localに下記を追加してから、再起動。

start_stream.sh&

再起動後に、ウェブブラウザからurlに

 192.162.1.27(IPアドレス):8080/?action=stream

を入力して、無事に映りました。

f:id:Baum_kuchen:20211215205722p:plain

GPIO制御

GPIOの制御は、以下の記事を参考にしました。

make.bcde.jpところが、上手く行きません。

webサーバーとして、lighttpdをインストールするところまではできました。

ところが、FastCGIインターフェース用のpythonのflupモジュールがインストールできません。

Sudo apt install python-flup

としても、見つかりませんとのメッセージが出るのみ。ただ、pip listでインストール済みモジュールを確認するとあります。不思議です。

とりあえず、pythonコードの該当部をコメントアウトして、web経由pythonコードが起動出来るか確認しましたがだめです。web経由アクセスすると

500 Internal Server Error

との表示。pythonコードのファイル名をあえて違ったものにすると404がでるので、パスは通っている様。lighttpd のエラーログ(/var/log/lighttpd/error.log)を見てみると

unlink /tmp/doStuff.python.socket-0 after connect failed: Connection refused

と。どうもこれが原因のようですが、対処方法がさっぱりです。

疲れました。

とりあえず、lighttpサーバ経由で表示ができようように

<body>
<center>
<h1>Hello world from the Raspberry Pi</h1>
<img border = "1" width = "640" height = "480" src = "http://192.168.1.27:8080/?action=stream">
</center>
<body>

をhtmlに書いて、しばらく使います。ま、これで十分という話も・・・

f:id:Baum_kuchen:20211215204910j:plain

今後

しばらくは、リモートでの動画確認だけになりますが使っていきます。

web経由でのGPIO制御が出来るようになったら全体のシステムアップを考えるつもり。

ps:やっぱりLinuxをちゃんと勉強しないだめかな〜