So-net無料ブログ作成
検索選択
前の10件 | -

NHK-FM きらクラ! 「ご自愛☆ステッカー」いただきました。 [ham]

来ました。前回の放送からその週のうちに届きましたので早かったですね。
ドンのコーナーに応募して、チャイコフスキーアンダンテ・カンタービレを正解で読んでもらえました。
実は2月にもドンに応募して一度投稿を読んでいただいたのですが、
その時はニアピンで、ニアピン競争にも負けてステッカーはもらえませんでした。
でも、ふかわさんが"わたしもそう思った"といってくださったことや
その投稿に書いた絶滅した鳥ドードーの話で盛り上がっていただいたので、
それはそれでいいかと思うことにしました。(くやしいけど)
まぁ、結局、今回ステッカーをいただけたので今はもう満足してしまっています。hihi

ブログのカテゴリー(ham)が合ってないって?
そんなことはないですよ。なにせラジオネームを"QNV"で投稿していますから。
ラジオも無線ですし。


回転体アンバランス振動の模型を作ってみた [工作]

いろいろ思うところがあって、回転体アンバランス振動の模型を作ってみることにしました。
錘を模型のモータで振り回して振動させ、それを加速度センサーで測って、
不釣合いの振動ベクトルを計算して、モード円を画いてみると言うものです。

装置の製作から、振動ベクトルの計算、結果表示と、ひととおり出来上がったのでwebページに纏めました。今回は、機械工作、電子工作、プログラミングとメイカー臭を撒き散らしたものになっています。(残念ながら裁縫は無い)

 http://www009.upp.so-net.ne.jp/gateside/body/rotor_model/rotor_model.html

実験の様子の動画(YouTube: https://youtu.be/83qR7vTQLZk)

加速度センサを買ったのは2012年10月と、ずいぶん前で、その頃から構想はあったようなのですが、
しばらくほったらかしにしていて、2015年の春ごろから部品を少しずつそろえ始めてようやく完成しました。

この装置は実用的な何かではありませんが、
ここで取り上げているセンサー類と計測器、分析器を使って、
たとえば自転車等のホイールバランスに使えそうかなと思います。


TBS1052B + octave 4.0.1 ( + Vine linux 6.3 ) [Linux]

Vine linux でもOctave が3.6.4 から4.0.1 へアップグレードされましたね。
パッケージを作ってくださった方に感謝します。
FFT結果を判りやすく表示させるために findpeaks の関数を使いたかったのですが、
旧版ではサポートされておらず、あきらめいていました。
が、今回、新しいバージョンがリリースされ、findpeaksも使えるようになったので、
早速アップグレードした次第です。
FFTについては前の記事でTBS1052B用のoctaveスクリプトを作っていて、
これは新バージョンでもそのまま動作しましたが、
Octave を起動するためのbashスクリプトはそのままでは動きませんでした。
そういった訳で、ほんの少し引っかかった部分があったのでメモします。
3.6.4では octave の起動オプションに --eval とスクリプトファイル指定の併用が可能でしたが、
4.0 .1ではどうもだめっぽい。
bash のスクリプトで取得したデータのファイル名を octave に渡す必要があるため、
--eval オプションの方でデータのファイル名とoctave スクリプトの両方をを渡す形にしました。
そのための スクリプトは下記。スクリプト中の filename は TBS1052B で測定してUSB に保存した
波形データ(CSVファイル)で、octfft.m(後述の octave スクリプトファイル)の中で使用しています。

#!/bin/sh
# TBS 1052B のデータを FFT して表示
OCTDIR="/home/hoge/octave"
csvfile=$(zenity --file-selection --title "TBS 1052B FFT Analysis" --text "send CSV file ")
octcmd="filename='$csvfile' ; cd $OCTDIR ; octfft"
/usr/bin/octave-cli --eval "$octcmd" --persist

Octave スクリプトのパスの設定をしてやるともう少しスマートになると思いますが、
動いているのでまぁいいかと妥協しています。

折角なので findpeaks を使ってピークの表示をしてみました。
表示例は下記。
octave-fft.png
octave スクリプト octfft.m は以下です。

#  USB に保存した TBS1052B の csv データを読み込んで
#  FFT 解析、表示させる octave スクリプト

  TBS1052Bdata=dlmread( filename ,',');
  Timeseri=[TBS1052Bdata(:,4) TBS1052Bdata(:,5)];

# 情報
    infofile=fopen( filename, 'r')
    TBS1052Binfo=fgetl(infofile);
    for i= 1:20
       infostr=fgetl(infofile);
       TBS1052Binfo=[TBS1052Binfo; infostr];
    endfor
    fclose(infofile)
    sourcech=strsplit(TBS1052Binfo( 7,:),",")
    verut   =strsplit(TBS1052Binfo( 8,:),",")
    verscl  =strsplit(TBS1052Binfo( 9,:),",")
    veroff  =strsplit(TBS1052Binfo(10,:),",")
    horut   =strsplit(TBS1052Binfo(11,:),",")
    horscl  =strsplit(TBS1052Binfo(12,:),",")
    ptfmt   =strsplit(TBS1052Binfo(13,:),",")
    y0      =strsplit(TBS1052Binfo(14,:),",")
    prbatt  =strsplit(TBS1052Binfo(15,:),",")
    mdlnum  =strsplit(TBS1052Binfo(16,:),",")
    selnum  =strsplit(TBS1052Binfo(17,:),",")
    firmver =strsplit(TBS1052Binfo(18,:),",")

    source_ch       =sourcech{[2]}
    vertical_unit   =verut{[2]}
    vertical_scale  =verscl{[2]}
    vertical_offset =veroff{[2]}
    horizontal_unit =horut{[2]}
    horizontal_scale=horscl{[2]}
    pt_fmt          =ptfmt{[2]}
    yzero           =y0{[2]}
    probe_atten     =prbatt{[2]}
    model_num       =mdlnum{[2]}
    serial_num      =selnum{[2]}
    firmware_ver    =firmver{[2]}


# サンプリング数(Record Length) 2列の1行目
  num_of_smpl=TBS1052Bdata(1,2)
# サンプリング周期(Sample Interval) 2列の2行目
  smpl_period=TBS1052Bdata(2,2)
# サンプリング長
  smpl_len=TBS1052Bdata(1,2)*TBS1052Bdata(2,2)
# FFT
  FFTcomplex=fft( Timeseri(:,2))/num_of_smpl ;
# ゼロシフト(直流分を周波数範囲の中央にもってくる)
  ZsFFTcomplex=fftshift( FFTcomplex ) ;
# 周波数軸設定
  Ax_freq=linspace(-num_of_smpl/2/(smpl_period*num_of_smpl), (num_of_smpl/2-1)/(smpl_period*num_of_smpl), num_of_smpl);
# 周波数軸を含むFFT行列
  AxFFTcomplex=[Ax_freq.' ZsFFTcomplex];
# 等価振幅と位相のFFT行列
  AxFFTamph=[  AxFFTcomplex((num_of_smpl/2+1):num_of_smpl,1) abs( AxFFTcomplex((num_of_smpl/2+1):num_of_smpl,2))*2 angle( AxFFTcomplex((num_of_smpl/2+1):num_of_smpl,2))*360/(2*pi)];
  AxFFTamph(1,:)=[ AxFFTcomplex((num_of_smpl/2+1),1) abs( AxFFTcomplex((num_of_smpl/2+1),2)) angle( AxFFTcomplex((num_of_smpl/2+1),2))*360/(2*pi)];
# 最大値

  sorAxFFT=sort( AxFFTamph(:,2), "descend")
  indxsf = find( AxFFTamph(:,2) >= sorAxFFT(5) )
  max_list = AxFFTamph(indxsf,:)

# ピーク

  [pksam idxpk] = findpeaks(AxFFTamph(:,2));
  peak_list = [pksam idxpk]
  [peakls idxpks]  = sort( peak_list(:,1), "descend")
  peaksize=size(idxpks)

  for i=1:5
     if ( i <= peaksize(1) )
        peak_list5(i,:) = AxFFTamph(peak_list(idxpks(i),2),:)
     else
        peak_list5(i,:) =  [0.0 0.0 0.0]
     endif
  endfor

# グラフ

  figure('Position',[100,100,560,630])

  subplot(4,1,1)
  plot(Timeseri(:,1),Timeseri(:,2))
  axis([min(Timeseri(:,1)), max(Timeseri(:,1)), -max(abs(Timeseri(:,2)))*1.1, max(abs(Timeseri(:,2)))*1.1])
  title(filename)
  ylabel(strcat( 'amp ','[',vertical_unit,']'))
  xlabel(strcat( 'time ','[',horizontal_unit,']'))


  subplot(4,1,2)
  plot(AxFFTamph(:,1),AxFFTamph(:,2),AxFFTamph(idxpk,1),AxFFTamph(idxpk,2),'.m');
  ylabel( strcat( 'amp ','[',vertical_unit,']'))
  hx=xlabel( strcat( 'freq ','[1/',horizontal_unit,']'))
  axis([ min(AxFFTamph(:,1)), max(AxFFTamph(:,1))])

  ph=subplot(4,1,3)
  plot(AxFFTamph(:,1),AxFFTamph(:,3));
  set(ph,"ytick",[-180 -90 0 90 180])
  ylabel('phase [deg]')
  xlabel( strcat( 'freq ','[1/',horizontal_unit,']'))
  axis([ min(AxFFTamph(:,1)), max(AxFFTamph(:,1))   ,-180,180])
  #bottom_title(strcat( 'number of smple :',sprintf("%d",num_of_smpl)),'sampling period:',sprintf("%e ",smpl_period),"sec")

  subplot(4,1,4)
  plot(1)
  axis([0, 1, 0, 1])
  text( 0, 0.9, [model_num " " firmware_ver  " S/N " serial_num  ;"Record Length "  sprintf("%d [samples] %1.3e [sec] ",num_of_smpl,smpl_len) ; "Sample Interval "  sprintf("%1.3e [sec]",smpl_period)])
  #text( 0, 0.5, [model_num " " firmware_ver ; "S/N " serial_num ;"Record Length "  num_of_smpl " Sample Interval "  smpl_period])
  #xlabel( [model_num "  " firmware_ver ; serial_num] )
  #text( 0, 0.2, [ "freq           Amp            Pha"; sprintf("%1.4e  %1.4e  %1.4e", max_list(1,1), max_list(1,2), max_list(1,3)); sprintf("%1.4e  %1.4e  %1.4e", max_list(2,1), max_list(2,2), max_list(2,3)) ])
  text( 0, 0.1, [ "peak list" ; "freq          Amp           Pha"; sprintf("%1.4e  %1.4e  %3.3f", peak_list5(1,1), peak_list5(1,2) , peak_list5(1,3)); \
                                                                   sprintf("%1.4e  %1.4e  %3.3f", peak_list5(2,1), peak_list5(2,2) , peak_list5(2,3)); \
                                                                   sprintf("%1.4e  %1.4e  %3.3f", peak_list5(3,1), peak_list5(3,2) , peak_list5(3,3)); \
                                                                   sprintf("%1.4e  %1.4e  %3.3f", peak_list5(4,1), peak_list5(4,2) , peak_list5(4,3)); \
                                                                   sprintf("%1.4e  %1.4e  %3.3f", peak_list5(5,1), peak_list5(5,2) , peak_list5(5,3))])

  axis("off")

あとは窓関数の機能を盛り込めば 1ch の FFTアナライザとして一通りの機能をもったものになります。
ここまで来るとカーソルで値を読み取る機能も欲しいですが、
それはちょっとめんどくさそう・・・


TBS1052B + octave 3.6.4 ( + Vine linux 6.3 ) [Linux]

便利だけど、個人的には使わないんだろうなぁと思っていた octave。
これまた個人的には買わないだろうなぁと思っていたデジタルオシロ Tektronix TBS1052B を買っちゃったので、測定データをパソコンに取り込んで周波数分析するために octaveを使ってみた。
データの読み込み、FFT自体は意外と簡単に出来たのだが、GUI連携とグラフで少してこずったのでメモする。
要点は下記。
(1)octave のスクリプトに値を渡すためには --eval オプションを使う。
   (zenity で取得したファイル名を --eval オプションで octave に渡した)
(2)用が済むまで octave は終了させない。--persist オプションを使う。
   (Octave の plot コマンドで表示させたグラフは octave の終了と同時に消える。)

経緯
USBにあるデータを呼び出す際、ファイル名をコマンドラインでいちいち指定するのがめんどいので zenity を使うことにし、取得したファイル名を octave のスクリプトに渡す方法をググってみたのだが、ずばりの情報がなく、argv変数とか試してみたけどうまくいかなかった。
仕方なくHelp を眺めていてこのオプションがあることに気がついた。
最初から Help を見ればよかったんだよな。でも英語なんだよ。おれ英語わかんねぇし・・・
plot できない(おそらく一瞬で消えちゃう)件はちょっとあせった。
端末から octave を起動してコマンドを対話式で操作するとちゃんとグラフを表示してくれるのに、同じ手順のスクリプトファイルを作って呼び出す形で実行するとグラフを表示してくれない。orz
なんで plot が機能しないんだろうと、plot の不具合についていろいろ調べたけど判らず、あきらめモードでしばらく試行錯誤していてやっと plot が悪いんじゃないって気づきました。
「おそらく plot コマンドを実行したあとすぐにプロセスが終了して、それと同時にグラフの表示が消えてしまう。
 plot は正常に機能していて一瞬表示されているのかもしれないが私の目には見えないのだろうな。きっと」
これに気がつくまではあせりましたよ。情報も少ないし。
ということで、--persist オプションで octave を終了させずにスクリプトを終了させることで手を打ちました。
あまり美しいやり方ではないような気はしますが、後で値の確認とかもできるのでこれはこれでいいかと・・・

表示例

Screenshot-TBS1052B.png

zenity を使った octave 起動スクリプト

 #!/bin/sh
# TBS 1052B のデータを FFT して表示
csvfile=$(zenity --file-selection --title "TBS 1052B FFT Analysis" --text "send CSV file ")
/usr/bin/octave --eval 'filename="'$csvfile'"' --persist  /home/hoge/fuga/octfft.m

TBS1052B のデータをFFTするスクリプト octfft.m

 # TBS1052B の CSV データを FFT してグラフ表示
  TBS1052Bdata=dlmread( filename ,',');
  Timeseri=[TBS1052Bdata(:,4) TBS1052Bdata(:,5)];
  TBS1052Binfo=textread( filename, '%s')

# 情報

    sourcech=strsplit(TBS1052Binfo{[22]},",")
    verut   =strsplit(TBS1052Binfo{[26]},",")
    verscl  =strsplit(TBS1052Binfo{[30]},",")
    veroff  =strsplit(TBS1052Binfo{[34]},",")
    horut   =strsplit(TBS1052Binfo{[38]},",")
    horscl  =strsplit(TBS1052Binfo{[42]},",")
    ptfmt   =strsplit(TBS1052Binfo{[46]},",")
    y0      =strsplit(TBS1052Binfo{[49]},",")
    prbatt  =strsplit(TBS1052Binfo{[53]},",")
    mdlnum  =strsplit(TBS1052Binfo{[57]},",")
    selnum  =strsplit(TBS1052Binfo{[61]},",")
    firmver =strsplit(TBS1052Binfo{[65]},",")

    source_ch       =sourcech{[2]}
    vertical_unit   =verut{[2]}
    vertical_scale  =verscl{[2]}
    vertical_offset =veroff{[2]}
    horizontal_unit =horut{[2]}
    horizontal_scale=horscl{[2]}
    pt_fmt          =ptfmt{[2]}
    yzero           =y0{[2]}
    probe_atten     =prbatt{[2]}
    model_num       =mdlnum{[2]}
    serial_num      =selnum{[2]}
    firmware_ver    =firmver{[2]}


# サンプリング数(Record Length) 2列の1行目
  num_of_smpl=TBS1052Bdata(1,2)
# サンプリング周期(Sample Interval) 2列の2行目
  smpl_period=TBS1052Bdata(2,2)
# サンプリング長
  smpl_len=TBS1052Bdata(1,2)*TBS1052Bdata(2,2)
# FFT
  FFTcomplex=fft( Timeseri(:,2))/num_of_smpl ;
# ゼロシフト(直流分を周波数範囲の中央にもってくる)
  ZsFFTcomplex=fftshift( FFTcomplex ) ;
# 周波数軸設定
  Ax_freq=linspace(-num_of_smpl/2/(smpl_period*num_of_smpl), (num_of_smpl/2-1)/(smpl_period*num_of_smpl), num_of_smpl);
# 周波数軸を含むFFT行列
  AxFFTcomplex=[Ax_freq.' ZsFFTcomplex];
# 等価振幅と位相のFFT行列
  AxFFTamph=[  AxFFTcomplex((num_of_smpl/2+1):num_of_smpl,1) abs( AxFFTcomplex((num_of_smpl/2+1):num_of_smpl,2))*2 angle( AxFFTcomplex((num_of_smpl/2+1):num_of_smpl,2))*360/(2*pi)];
#
subplot(3,1,1)
plot(Timeseri(:,1),Timeseri(:,2))
axis([min(Timeseri(:,1)), max(Timeseri(:,1)), -max(abs(Timeseri(:,2)))*1.1, max(abs(Timeseri(:,2)))*1.1])
title(filename)
ylabel(strcat( 'amp ','[',vertical_unit,']'))
xlabel(strcat( 'time ','[',horizontal_unit,']'))

subplot(3,1,2)
plot(AxFFTamph(:,1),AxFFTamph(:,2));
ylabel( strcat( 'amp ','[',vertical_unit,']'))
xlabel( strcat( 'freq ','[1/',horizontal_unit,']'))
axis([ min(AxFFTamph(:,1)), max(AxFFTamph(:,1))])
subplot(3,1,3)
gtestset=plot(AxFFTamph(:,1),AxFFTamph(:,3));
ylabel('phase [deg]')
xlabel( strcat( 'freq ','[1/',horizontal_unit,']'))
axis([ min(AxFFTamph(:,1)), max(AxFFTamph(:,1))   ,-180,180])
#bottom_title(strcat( 'number of smple :',sprintf("%d",num_of_smpl)),'sampling period:',sprintf("%e ",smpl_period),"sec")

GUIというのであれば、アイコンから起動したいですよね。
gnome だとランチャーにスクリプトのパスを設定すればいいのですが、直接 octfft.sh を指定しても動いてくれません。
どうも一旦端末を起動して、そこから octfft.sh を起動する必要があるようです。
そのためのスクリプトが下記。このスクリプトをランチャーで起動すればOK。

#!/bin/sh
# TBS 1052B のデータを FFT して表示

/usr/bin/gnome-terminal -e "/home/hoge/fuga/octfftz.sh"
まぁ、この程度ならわざわざスクリプト書かなくても、ランチャーのコマンドに直接入れてもいいでしょうけどね。

QCAD で直径寸法にΦの記号を入れる。(Vine Linux 6.3 + QCAD) [工作]

久しぶりにQCADを使ってみた。
以前の情報でフリーだったものが商用になるとかで、しばらく使っていなかったのですが、
どうもQCAD本体はオープンソースのようなので、使わせていただきます。
QCADはバージョンが3.11です。
しばらく触っていなかったけれど、何か随分使いやすくなっている印象。
属性がプロパティエディタで簡単に替えられるのが良いですね。
今では当たり前の機能なのでしょうか。
3D-CAD はFreeCADが使えるようになっているのですが、
形の決まっていない機械構造物をカットアンドトライで図面を書き進める場合は2D-CADの方が効率が良いです。
3Dはすべての体積情報を入力する必要がありますが、2Dはほとんど脳内で体積へ変換しますから。
なので、2D-CADも私にとっては必要なtoolだと思っています。
(私が3D-CADの操作に慣れていないだけなのでしょうか?^^;)

そんなQCADですが、使っている上で、意外と情報が見つからなかったものがあったので以下にメモります。

QCADで形状データから寸法を表示させる場合で、直径記号のΦを寸法値の前に入れたい場合は、
対象の寸法線を選択し、プロパティエディタの「Specific Properties」の「ラベル」に"%%c<>"と入れる。
(下図参照)
QCAD2Screenshot-1.png

"%%c"は直径記号の「Φ」をつけるための呪文で"<>"は形状データからの読み取り値のようです。
ここらへんはAutoCADと同じらしいのですが、AutoCADは使ったことがないので・・・・
ちなみに角度の「°」は"%%d"のようです。
以下はQCADのスクリーンショット
Screenshot-brg-hsg-ex.dxf * - QCAD.png


Fritzing でファイルを開こうとしたらエラーが出てコケた [工作]

Fritzing で回路図を書いていて、ライブラリに無い部品がどうしても欲しくなったので、
近い種類の部品を配置してそれを編集して新規の部品に登録しようとしたら、
なにやらエラーが出たんだけど無視して今まで書いていた回路図を登録した後に、
再起動して前述ファイルを呼び込もうとしたら、
下記のエラーが出て Fritzing 自体がこけてしまう。orz

Screenshot-Fritzing failure.png

 げっ。これまでの作業が水の泡???。あきらめないとダメ?
と思ったけど、Fritzing ってユーザデータは XML なんですよね。
ユーザファイルの *.fzz というのはどうも zip 形式のファイルのようなので、
解凍して *.fz ファイル(XML形式のテキストファイル)を読みだして、
関連しそうな所(今回の私の事例では新しく作ったパーツの部分)を探して、
削除したら何とか立ち上がってくれた。助かった。^^;

削除した場所は関連するパーツの名称のある <instance> タグの
スコープ全部を削除しました。

 悪さしてそうな<instance>から</instance>まで全部消す。
 <instance moduleIdRef="hogehoge" ・・・・
    ・
    ・
 </instance>

 消した後、XMLファイル(*.fz)をzipファイルの*.fzzに戻してやって、
Fritzing で読み直したら悪くない部分がなんとか生き残っていました。^^;

今回使った Fritzing はバージョン0.8.7。
OS は Vine Linux 6.3 です。

 


Fritzing + Vine Linux 6.3 [Linux]

Fritzing をインストールしました。
ブレッドボードの実体配線図が書けるソフトです。
Make:関連をのぞいたり、GR-KURUMI関連を調べたりしていて、
このソフトを見つけました。なんか使いやすそう。
という訳で、Vine Linux にインストールしてみました。
ただ、ちょっとだけ引っかかったところがあるのでメモします。

今回もソースからインストールしました。

(1)  Fritzing のバージョンは 0.8.7b
   少しだけ古いバージョンにしました。
   どうしてかと言うと、これより新しいのは make が通らなかったためです。
   私の環境が追いついていないのが原因だと思いますが、
   必要環境が書かれているものが見つからなかったのと、めんどいので、
   トラブルシューティングはさっさと諦め、旧版の0.8.7bをインストールしました。
(2)ソースからのインストール方法はREADME.txtを参照。(でも make install はだめだった。)
   パッケージ管理の都合上、 make install ではなく、 checkinstall してみたが、だめだった。
  まぁ、それでもとりあえずは起動できました。ランチャーを準備すれば起動に困ることはありません。
 (3)Boost-devel が必要
   事前に入れておいてください。
   今回入れたのは
       libboost-devel 1.45.0-2vl6
   で、Synaptic の簡単インストールです。

 インストールの手順は
(1) fritzing-0.8.7b.source.tar.bz2 をダウンロード、適当なディレクトリに入れ、解凍。
(2) 解凍したディレクトリに入り、
     $ qmake
     $ make
 
起動方法は、上記解凍したディレクトリの中に Fritzing という実行ファイルがあるはずなので、それを確認して、
      $./Fritzing
とやる。
毎回、解答したディレクトリに入り・・・  だとめんどいので、ランチャーで動くようにしました。

環境は下記です。
Vine linux 6.3 kernel#3.4.108
gcc 4.4.5
Qt 4.7.2
Boost 1.45.0

下記はスクリーンショット

Screenshot-LED-Matrix.fzz [READ-ONLY]  - Fritzing - [ブレッドボード ビュー].png

 


Skype + Vine Linux 6.2 [Linux]

昨日、クラブのオンエアミーティングで Skype の話題が出た。

そう言えば今のパソコンに変えてから Skype は使っていなかったので
インストールされていない。

Sype (Skype 4.3.0.37)自体は Synaptic の簡単インストールでできたのだが、
ちょっとだけ手こずったのでメモる。

まぁ、Skype のヘルプにも書いてあるのだが、Linux 版は PulseAudio と ALSA を使う。
私のパソコンには一部 devel や tool のパッケージが入っていなかった。
それなので、 PulseAudio と ALSA 関連のパッケージを Synaptic でインストールしたら、
とりあえず音が出て、Test Call もうまく行った。
ここまで来れば多分使えるだろう。


Vine Linux 6.2 + morseman モールス解読プログラム [ham]

MORSEMAN CW DECORDER を Vine Linux 6.2 で使ってみた。
いままではFldigi の CW モードでデコードしていたのだが、和文も解読できるものが欲しくて
探していたら、これがあった。
M$-windows 用だが、java だし Linux でも動くんじゃね?と思って試してみたら動いた。
  java 恐るべし。
ただし、すんなり行かない部分があったのでメモする。

Vector から、下記プログラムをダウンロード
   mm101.zip
適当なディレクトリに置いて解凍する。すると、 mm101 というディレクトリができる。
その中の morse_man というディレクトリに、java関連ファイルの他、文字テーブルの2つのファイルがあり、
このファイルのファイル名と文字コードを変更する。
対処方法は下記。
  $ mv english.tbl ".\english.tbl"
  $ nkf -Sw native.tbl > ".\native.tbl"
これで動くはずなので、同じディレクトリで下記を実行。
  $ export LD_BIND_NOW=1
  $ java -Xms256m -Xmx512m -cp morse2.jar  morse.Application2 44100 1 10
毎回上記コマンドを入力するのは面倒なので、適当なスクリプトを書いてランチャーで起動できるようにした。
スクリーンショットは下記。
Screenshot-MORSEMAN SC-CW DECODER Ver 1.01    by JM1LHG-1.png

上記対処法に至った経緯

ダウンロードしたファイルを解凍し、bat ファイルの内容を見て起動してみた。
すると、起動はされ、動作するものの、"#" の文字が表示されるだけで、
まともに文字を表示してくれない。
起動したターミナルを確認すると下記のエラーが出ていた。

  java.io.FileNotFoundException: .\english.tbl (そのようなファイルやディレクトリはありません)
  java.io.FileNotFoundException: .\native.tbl (そのようなファイルやディレクトリはありません)

 
どうやら、参照するファイルが、Windowsのディレクトリ方式の指定になっている様子。
これは困ったと一時は諦めてほったらかしにしておいたのだが、
ある時、ふと、".\"も含めたファイル名にしてしまえばいんじゃね?と思いつき、
試してみたらうまく行きました。
native.tbl は文字コードが sjis であり、そのままでは文字化けしてしまうので、
nkf でUTF-8に変換しました。

今回使用した主なソフトのバージョンは下記です。
  Vine linux 6.2 kernel 3.4.98-1vl6
  java-1.6.0-sun
  MORSEMAN SC-CW DECORDER Ver 1.01


Windows 8.1 で miniVNA PRO を Bluetooth 経由で使う [ham]

Windows 7 のノートパソコンが頓死してしまった。おそらく電源まわり。
修理しようか迷ったが、そこまで思い入れはないし、微妙に型が古く使い続けるには・・・
という事で新しいノートパソコンを買った。一番安いやつ。
それのOSがWindows 8.1 だったわけだが、
慣れないせいもあってか使いにくい。
なんでスタートメニューを無くしちゃったんだろう。
デバイスの設定もなんだがすごくやりにくい・・・

まぁ、それはさておき、この機械で miniVNA PRO を Bluetooth 経由で使うため
設定をしてみたのだが、実に手こずらせてくれたので、設定方法を下記に記す。
なかなかうまく行かず諦めかけたが、屋外で使用することを考えたらノートPCで使う以外の
選択は無いので、いろいろいじくって、やっと使えるようになった。

1. Bluetooth デバイス設定

スタート画面-[PC設定]-[PCとデバイス]-[Bluetooth] を選択。(図1)
このときminiVNA PRO のスイッチは切っておく。
fig01.png
  図1

また、接続されていなくてもドライバーとして残っているようであれば、
そのドライバーをクリックして削除する。(図2)
削除しないと、次のペアリングの作業に進めないなど、いろいろ手こずらせてくれる。
fig02.png
  図2

miniVNA PRO のスイッチを入れ、PCが miniVNA PRO を検出すると、
「ペアリングの準備完了」と表示される。(図3)
fig03.png
  図3

そのアイコンをクリックすると「ペアリング」のボタンが表示される。それをクリックすると、
パスコードを入力する画面が表示されるので、miniVNA PRO のハードウエアガイドに書かれている、
デフォルトパスワードを入れる。(図4)
fig04.png
  図4

そうすると、図5のような画面が表示され、続けて、図6の画面が表示される。
この状態で、miniVNA PRO は使えるようになっているはず。
fig05.png
  図5

fig06.png
  図6

ここで注意なのだが、図6の画面表示の後、しばらくすると「このドライバーは使用できません」(図7)の
表示が出るが、これが出ていても miniVNA PRO は動作するので無視。
気になって色々いじりたくなるがこれはとにかく無視。
fig07.png
  図7


次に[コントロールパネル]-[ハードウエアとサウンド]-[デバイスとプリンター]を開き、
miniVNA PRO に相当するデバイス(プリンター)を右クリック、プロパティを選択する。(図8)
プロパティのダイヤログが開くので「ハードウエア」のタブを選択し、シリアルポートの番号を調べる。
(図9 この例ではCOM6)
ここでわざわざ調べろと言っている意味は、なぜか、上記の接続操作の過程で、
シリアルポートが2つ用意される。ただし、その内の1つは動作せず、
vna/J で選択しても動かないばかりばかりか、プログラムが固まってしまうので注意。
以上でハードウエアの設定は終わり。
fig08.png
  図8

fig09.png
  図9


2. vna/J での操作

vna/J を起動して、[Analyzer]-[Setup・・・]を開き、「Available drivers」から「miniVNA-pro」を選択すると、
「Available ports」に有効となっているシリアルポートが表示されるので、
上記で調べたポートを選択して下の方にある「Test」ボタンをクリック。
すると、miniVNA PRO と通信を始めるが、(私がやると)最初はなぜか必ず、エラーとなる。(図10)
fig10.png
  図10

そうなってもメゲずに、再度「Test」ボタンをクリックをクリックすると、TEST OK となるので、
「Update」ボタンをクリックして設定終了(図11)。あとは通常運転です。
fig11.png
  図11


3. 外付けのUSB Bluetooth アダプタを使用する場合の設定

ポール上部の高い位置に miniVNA PRO を取り付けたり、少し離れた位置で測定をしたい場合など、
延長ケーブルの先端に USB Bluetoothアダプタを取り付けて測定する場合がある。
その時にはパソコン本体の Bluetooth デバイスは無効にする必要がある。
その場合は、[コントロールパネル]-[ハードウエアとサウンド]を開き、「デバイスとプリンター」にある、
「デバイスマネージャー」をクリックして開く。(図12)
fig12.png
  図12

Bluetooth の項目の中にパソコン本体のBluetooth のデバイスが表示されるはずなので、
それを右クックして「無効(D)」を選択する。(図13)
fig13.png
  図13

USB Bluetooth アダプタをPC本体のUSBに接続すると、
デバイスマネージャの「ユニバーサル シリアル バス コントローラー」のところに
Bluetooth アダプタが追加され、そちらのアダプタが使用出来るようになる。(図14)
fig14.png
  図14

あとは、1.の方法で Bluetooth の設定を行う。
使い終わったら、図2のようにしてデバイスは削除しておいたほうが良いように思います。


前の10件 | -

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。