汎用培養装置InCUBE
2020.11.26自宅に設置したDIY培養装置内の映像を常時ネット配信させる準備2〜サーバーに集めた画像からタイムラプス画像を自動合成 /115
2020.11.17自宅に設置したDIY培養装置内の映像を常時ネット配信させる準備。Raspberry PiとWebカメラを使用 /62
2020.11.09汎用培養装置InCUBE ver.1.0完成 /6
2020.09.29DIY培養器内の温度をペルチェで4〜40℃に維持するには何W必要? /12
2020.09.10循環する水の温度制御で培養装置内の温度をコントロールしたい /9
2020.08.21Project InCUBE構想〜自室で「培養・飼育」を楽しむための万能容器を作りたい /501

2020.11.26

自宅に設置したDIY培養装置内の映像を常時ネット配信させる準備2〜サーバーに集めた画像からタイムラプス画像を自動合成

↑BTW

前回、Raspberry piとWebカメラで一定間隔で撮影してサーバーに送る方法を説明しました。

今回はその画像をタイムラプス動画にしてリアルタイムでWeb公開する方法です。

↓出来上がり。テスト用に1週間ほど撮影しタイムラプス画像にしたものです。動画は自動で1日4回最新の状況に更新されています。水が蒸発するので毎晩水を足しています。深夜も100円ショップで売っていたUSBライトで照らしています。

途中1日ほどRaspberry Piが死んでおり映像が飛んでいます。watch dog設定しなきゃ。そしてもう寒いので発芽まで1週間程度かかっています。頑張れラディッシュ!。2000円のWebカメラは画質がイマイチでかつ、近くにピントが合いませんね。

当初、サーバーにアップロードした画像をサーバー上で動画に合成しようと思ったのですが
(1)ffmpegとかmencoderとか必要なソフトをサーバーにうまくインストール出来なかった。
(2)出来たとしても定期的に動画合成していると負荷が大きすぎて怒られそう(共用サーバーなので)

というわけで、サーバーから一度、吸い出して、そこで動画合成して、動画だけサーバーに送るという方式をとることにしました。使用したので俺の部屋に無限に転がっているRaspberry Pi笑

現在、アップロードされた画像と動画はhttps://kamotown.net/upload/に置かれています。

from ftplib import FTP
import subprocess
import os

#サーバーのFTP設定(アドレス、ID、パスワード)
ftp= FTP(
"xxxxx.xxxx.xxx",
"yyyyyy",
passwd="zzzzzzz"
)
items=ftp.nlst("www/kamotown/upload/")

#サーバーの指定ディレクトリにある画像の中でこちら側にダウンロードしていない画像をダウンロード
for file in items:
if os.path.splitext(os.path.basename(file))[1] == '.jpg':
if os.path.isfile(os.path.basename(file))==False:
with open(os.path.basename(file),"wb") as f:
ftp.retrbinary("RETR "+str(file),f.write)
print str(file)
f.close()

#画像ファイル一覧をlist.txtに保存
subprocess.call('ls *.jpg>list.txt',shell=True)

#画像ファイルをffmpegで読み込めるように整形してlist2.txtに保存
f2=open('list.txt')
f3=open('list2.txt','w')

data=f2.readline()
while data:
f3.write('file '+data)
data=f2.readline()

f2.close()
f3.close()

#サブプロセスでffmpegで画像変換
subprocess.call('ffmpeg -f image2 -r 15 -f concat -i list2.txt -r 15 -an -vcodec libx264 -pix_fmt yuv420p timelapse.mp4', shell=True)

#サーバーに戻す
with open("timelapse.mp4", "rb") as f:
ftp.storbinary("STOR www/kamotown/upload/timelapse.mp4", f)
f.close()


Raspberry Piへのffmpegのインストールは

sudo apt-get install ffmpeg

でOKです。簡単♪

このPythonスクリプトをcrontabなどを使って定期的に実行することでサーバー側に最新の動画が掲載され続けます。

今回一番非力なRaspberry Pi zeroを動画変換に使用したのですが、400枚の画像からタイムラプス動画(10Mbyte)を作るのに1時間近くかかりました。う〜ん。けっこう重いな。

そのうち皆で使えるタイムラプス専用の投稿・閲覧サーバーでも立ち上げようと思っているのですが、動画変換部分をどうするのか考えなければいけません。

あ、ffmpegのエンコード時のオプションを「-vcodec h264_omx」とするとハードウェアエンコードされるのか?


2020.11.17

自宅に設置したDIY培養装置内の映像を常時ネット配信させる準備。Raspberry PiとWebカメラを使用

↑BTW

自宅でDIY培養実験をするにしても帰宅後に毎日培養の様子を観察なんて時代遅れだと思うんです。培養の様子を常時ネット配信して、ついでにタイムラプス動画も作ってしまうのが今時(いまどき)かと。仕事中に何度も様子を確認しちゃうという状態を目指しています。

Raspberry PiとWebカメラでの配信を実験中。自宅の自室に放置したラディッシュの種。真ん中1つ発芽してきた!失敗した、寒いから全然芽が出ない笑。

ステップ1:Raspberry Piに接続したWebカメラで写真を撮る

#Webカメラのドライバーをインストール
sudo apt-get install fswebcam

#下記で撮影した画像が保存される。簡単♪
fswebcam -r 1280x720 capture.jpg


ステップ2:撮影した画像をWebサーバーに投げるためのrequestsというモジュールをインストール
#まずインストールに必要なpipをインストール
sudo apt-get install python-dev
sudo apt-get install python-pip

#pipでrequestsをインストール
pip install requests


ステップ3:Webカメラで撮影して撮影した画像をWebにPOSTするPythonスクリプト
import requests
import subprocess

subprocess.call(['fswebcam','-r','1280x720','capture.jpg'])

url='http://xxxxx.com/upload.cgi'
file = {'upload_file': open('capture.jpg','rb')}
data = {'temp1': 'dummydata'} #一緒にパラメータを送る時用
r = requests.post(url, files=file, data=data)
print r.text

これをcrontabとかで動かせば自動で指定した時間ごとに撮影されます。Raspberry PiとWebカメラ併せて4000円もあればタイムラプス撮影装置が作成出来ます。

ステップ4:写真とかを受信するサーバー側のPerlスクリプト
#! /usr/bin/perl
use CGI;
my $q = new CGI;
my $fh = $q->param('upload_file');
@FORMname= $q->param();
foreach my $dammy (@FORMname){
$FORM{$dammy}=$q->param($dammy);
}

print "Content-Type:text/html\n\n";
print "OK";

$tt=time; #取得した画像は現在のエポックタイムをファイル名として保存

if ($fh ne "") {
open(F,">".$tt.'.jpg') or die;
flock(F, 2);
binmode F;
if (defined $fh) {while (<$fh>) {print F $_;}}
close F;
}
exit;


サーバー側で取得した連続jpgを合成してタイムラプス動画を合成したいんだけど、必要なmencoderかffmpegを「さくらのレンタルサーバー」にインストール出来ない。うむむむ。。。
これ↓の通りにやっているだけど本体のmakeでたくさんエラーが出る。。。。


2020.11.09

汎用培養装置InCUBE ver.1.0完成

↑BTW


色々と問題だらけだけど、とりあえず基本構造を組んでみました。美しくないなー。でも3Dプリンターでシリアル番号入りのエンブレム出力して貼り付けた笑

とりあえず何か中で培養・栽培・飼育してタイムラプス配信したい。ちなみに写真はミドリムシ培養中。こんなたいそうな装置無くても増えるけど。

搭載した機能は
(1)加温・冷却対応の温度調整機能付きの水循環(モータードライバ×ペルチェTEC1-12704、30W出力)。試してないけど加温は室温+10度。冷却は-2〜3度が限界の非力な状況かも。ダメダメならモータードライバもペルチェも高出力のやつに交換しよう。理想はどんな気温でも4℃〜37℃まで制御可能にすること。

(2)照明。10W LED(ON/OFF制御は手動)。植物栽培にはたぶんパワー足りないな。

(3)温度センサー×3(現状は(A)室温。(B)ペルチェ。(C)培養装置内部液体を測定。1-wireセンサー使用。

(4)タイムラプス撮影用Webカメラ。Raspberry専用カメラにこだわってきたけど、なんだWebカメラをUSB接続するのが簡単で安いじゃん。

制御はRaspberry Piです。電源はAC1本繋げればOKにしてあります。照明用LED以外は12V電源がメインでそこから12V→5V(DC/DC)ユニット使って5Vに落としてRaspberry Piと水ポンプを駆動しています。要素技術多いな。。。DIYバイオと言ってもこれを各個人で作れというのは酷な話かもしれない。DIY自宅培養の普及には製品化が必要だな。部品はAmazonマーケットプライスとAliexpress、Banggoodの集大成って感じ。部品代は総額で1万円は超えてないかな。

改良に関しては下記がTODOリスト(個人的メモ)


2020.09.29

DIY培養器内の温度をペルチェで4〜40℃に維持するには何W必要?

↑BTW



↓前回の続きです。

培養器内の温度は4℃〜40℃ぐらいまで自在に制御出来ると使い勝手が良いなと思うのでペルチェ×モータードライバで加温・冷却両方出来るようにしたいです。必要な出力によってペルチェとモータードライバの選択が変わってくるのでまずは予定しているペルチェ×水冷アルミブロックでどれぐらい水の温度を制御出来るのか調べました。

↓前回と同じ仕組みです。ペルチェの下面はファンで強制冷却。上面に水冷アルミブロックを設置し、シリコンチューブで培養器につなぎます。培養器の中には水2リットル。



(省略されています。全文を読む


2020.09.10

循環する水の温度制御で培養装置内の温度をコントロールしたい

↑BTW


汎用培養装置を作る上で、温度制御をどうするかなのですが、培養装置の中を循環する液体の温度をコントロールする実験を開始しました。


テスト用の培養器として20cm四方のアクリルボックスを設置、中に1リットルほど水を入れて5V水ポンプにシリコンチューブをつないで水を装置から出せるようにしています。

(省略されています。全文を読む


2020.08.21

Project InCUBE構想〜自室で「培養・飼育」を楽しむための万能容器を作りたい

↑BTW

まずは名前を付けてみた。色々と「培養」を楽しみたいと思っているのですが、培養対象は多岐にわたるし、培養装置の製作で満足してしまったり一度に1種類の条件でしか培養出来なかったりと、いっこうに有意義な自宅実験にならない。そこで汎用性の高いこのような容器があれば良いなと考えDIYしようかと思っています。


以前に屋内植物栽培実験用に作ったコレを大きくする感じかな

同じ規格の容器を10個とか自室に積み重ねて実験出来るのが理想。
ゾンビウイルスが流行って自宅から出れなくなったらこれで食料生産して自給自足して生き延びることが出来る?