2014年10月11日土曜日

PDS5022Sのキャリブレーション

ウチにあるオシロスコープ OWONのPDS5022SのCH1がかなり変な電圧を示すようになってしまった
200mV以上のスケールではオフセットが450mVもある
ということで校正の方法を

まず全てのプローブを取り外す
CH1とCH2を外せばいい 念のためEXT TRIGも外しておく

次にスイッチパネル左上の方にある6個のメニュースイッチの内、左下にあるUTILITYを押す
そしてファンクションキー3に割り当てられているAuto calibrationスイッチを押す
でもこの文字はロットとかによって違うみたいなので、とりあえずF3キーを押せばいいとおぼえておけばOK
ロットとかによっては場所自体変わってるかもしれないけど、CalibrationとかCalとか書いてあると思う

するとこんな画面になる
「オートキャリブレーションをするよ CH1とCH2につながってるすべてのケーブルとプローブを外してね Auto calibrationを押すとキャリブレーションを始めるよ それ以外のキーを押すと終了するよ」みたいなことが書いてある
ちなみにウチのオシロは数秒でこの画面が消えてしまうので書いてある字を読む暇すらくれなかった

すでにケーブル類は全て外されていると思うので、もう一度F3を押す
画面がすぐに消えてしまうようならF3を2回連打する必要がある

しばらく黄色い画面に文字が出ているので放置する
数分もあれば終わるはず
黄色い画面が消えたら終了


終了したらオフセットが綺麗に消えているはず
あとは念のため1kHz端子でも覗いてみてちゃんと計測できるか確認する

自動校正はそんなに頻繁にやる必要はないと思うけど、時々オフセット電圧が乗ってないか確認してやった方がいい
このオシロ、11年に買って3年位、ずーっと校正してなかったかも

オシロはあんまり使わないけど、いざというときにあると便利なので一家に一台ぜひ…
個人的にはオシロよりロジアナのほうが出番多いけど

NS73Mを試してみる(とりあえず搬送波だけ)

NS73MというFMトランスミッタモジュールを試してみた
画像はSDR#で見た送信周波数あたり


結構あちこちにいらない電波が飛んでいるようだ
あんまりよろしくない…
しかし、SDRだとこうやって目で見て余分な電波がわかるので便利

このトランスミッタモジュール もちろん技適なんて取ってないし、最小出力でも出力は強すぎるらしい
トライステートがこのモジュールを使ったFMトランスミッタキットを出してるけど、簡易的なアッテネータが入ってる(インピーダンス合わせてるだけな気もするけどよくわからない)
ネットで出てきた例でもまじめなアッテネータが入っているのがある
今は2.4GHzかと思うような短いアンテナで出してるし、迷惑かけるような周りの人がいないような場所だけど、缶サットとかに載せてテレメトリ出すならちゃんと考える必要がありそう

このモジュールはI2Cで制御ができて、内部の1ビットをON/OFFすることにより送信したり止めたりできる
ラインイン端子をGNDに落としていても送信すれば無音としてラジオで受信できるし、送信を止めればラジオからはノイズが聞こえてるく
さながらバーティカルリミット(映画)のワンシーンのよう


久しぶりにチューナにQFHアンテナを付けたのだけど、PCのノイズとかが多くてあんまり綺麗に受信できない
エアバンドを受信できるほど空港に近いわけじゃないし、アマチュア無線が常時飛び交うようなことも無いし、ローカルFMも面白くないし
ベランダの上にディスコーンアンテナとか立てればもうちょっとエアバンドとか受信できるかもしれないけど、そこまでするのもねぇ…

2014年10月10日金曜日

皆既月食を撮ってみた

K-5で皆既月食を撮ってみました

途中で勘違いとかで撮影を終了してしまったので、完全に食に入ったあたりで終了しています
左下から登ってきた月が右上に移動しつつだんだん欠けています

撮影条件はISO160でSS1/50sec F3.5 という感じです
皆既月食はかなり暗くなるので、明るさは2-4倍くらいで撮影したほうが良かったかも

何年か前に日食を撮影した時は綺麗に撮れましたが、月はぼやけてあんまり綺麗に撮れないです
夜露とかが影響するのかも


2014年10月2日木曜日

C#+OpenCvで静止画を動画にする

タイムラプス撮影とかした場合に問題になるのが、大量の静止画をどうやって動画にするか
安い動画編集ソフトだと静止画は最短で0.1秒表示みたいな感じで望む再生速度にならない

ということでC#で動画化するアプリを書いてみた

今回はC#のコンソールアプリとして作る
もちろんフォームアプリを作ってオープンファイルダイアログでファイルを選択するようにしてもいいわけだが、今回は上位のプログラムから起動して処理させたかったのでこのような方式にした

それと動画ファイルを作るのにOpenCvを使う
C#で走らせるのでOpenCvSharpが必要になる
これの準備は他のブログとかにちゃんと説明されてるのでそっちを参照。。

/* *** */

まず静止画の一覧を獲得する必要がある
今回はコンソールアプリの1個目のオプションに画像の一覧を書いたテキストファイルを渡すようにする


画像ファイルはList<string>で扱う
リストに突っ込むときは片っ端から突っ込んでそのファイルが存在するかとか、そもそもそれは正しいファイルパスなのかとかは気にしない

それとdouble型でフレームパーセックの変数を用意しておく
とりあえず double FPS = 30; を作り、オプションが2個以上であれば2個目をdoubleの文字列として読ませるようにした これでファイルのリストだけが与えられたら30fpsの動画を作り、それ以外の速度にしたければ引数で与えればその速度になる


それと画像ファイルの解像度を獲得する関数を作る
引数に渡された画像をBitmapで開いてWidthとHeightを返すだけ
そして GetPictureSize(PictureFilePaths[0], out SizeX, out SizeY); のような感じで画像の解像度を得る
この解像度で動画を作成することになる


最後に動画ファイルを作成する

最初に処理時間の目安を計測するためにStopwatchを確保する

次にCv.CreateVideoWriter関数を呼ぶ
第一引数:ファイル名
第二引数:エンコード方式
第三引数:フレームパーセック
第四引数:解像度
なのでそれぞれに変数を渡すなりして適切な値を与えてやる
なお、FileExte = "avi"; EncodedFormat = "MJPG"としてstringの変数を作ってある
これはAViコンテナにモーションJPGの動画を入れるということ
エンコードはH.264とかやろうと思ったけどどうやらウチのマシンは対応していないようなのでMJPGになった
fpsはさっき作ったdoubleをそのまま渡す
解像度もさっき調べた解像度をそのまま渡せばOK

あとはCv.WriteFrameで動画を書き込んでいけば動画ファイルを作成することができる

forで0からPictureFilePaths.countまでを回して、まずFile.Existsでファイルが存在するかを確認する
そしてCv.LoadImageで読み込んで渡す


本来はもっとまじめにエラー対策とかする必要がある
けど面倒なので読み込むファイルのチェック程度しかしていない

出力されるコンテナはaviなので、youtubeに投げる場合は別のコンテナにエンコードし直す必要がある
その辺りは動画編集ソフトに突っ込んでBGMつけて書き出せばいいので気にしないで置く


ということで、面倒な大量の静止画を動画にする作業が簡単になった
静止画のリストはCygwinとかで ls *.jpg > list.csv とかで簡単に作れるし、あとはそれを引数に渡せばいい
もしもGUIが必要なら最初からGUIで作ってもいいし、GUIはファイルの選択とリストの作成だけで、それ以外はCUIに投げてもいい

今回はコンソール用に作ってるのでファイルが存在するかの確認とか、解像度を調べるとかを除けばそのままCとかC++のOpenCvにも移植できるはず