Raspberry Pi 3 で USBオーディオ変換アダプタを使用する [Linux]
使用したアダプタは SANWA の MM-ADUSBTC1 で、これ自体は繋ぐだけですぐ使えた。
1.以下動作確認
(1)録音デバイスの確認。LXTerminalを起動して arecord コマンド実行。
# arecord -l
**** ハードウェアデバイス CAPTURE のリスト ****
カード 1: Device [USB Audio Device], デバイス 0: USB Audio [USB Audio]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
(2)音声出力デバイスの確認。aplay コマンド実行。
# aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: ALSA [bcm2835 ALSA], デバイス 0: bcm2835 ALSA [bcm2835 ALSA]
サブデバイス: 7/7
サブデバイス #0: subdevice #0
サブデバイス #1: subdevice #1
サブデバイス #2: subdevice #2
サブデバイス #3: subdevice #3
サブデバイス #4: subdevice #4
サブデバイス #5: subdevice #5
サブデバイス #6: subdevice #6
カード 0: ALSA [bcm2835 ALSA], デバイス 1: bcm2835 IEC958/HDMI [bcm2835 IEC958/HDMI]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
カード 0: ALSA [bcm2835 ALSA], デバイス 2: bcm2835 IEC958/HDMI1 [bcm2835 IEC958/HDMI1]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
カード 1: Device [USB Audio Device], デバイス 0: USB Audio [USB Audio]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
(3)録音のテスト(Cntl-Cで録音終了)
# arecord -D plughw:1,0 -d 10 -f cd test.wav
録音中 WAVE 'test.wav' : Signed 16 bit Little Endian, レート 44100 Hz, ステレオ
(4)再生のテスト
# aplay -D plughw:1,0 test.wav
再生中 WAVE 'test.wav' : Signed 16 bit Little Endian, レート 44100 Hz, ステレオ
注)aplay arecord とも "-D plughw:1,0" でデバイスを指定する必要がる。
2.ユーザの権限
ユーザが root や pi ではない一般のユーザだと権限の問題があり aplay,arecord が動作しないので、一般ユーザで音声入出力を扱いたい場合は権限を付与する必要がある。下記を実行。
$ sudo adduser 使用したいユーザ名 audio
Raspberry Pi 3 のキーボード設定 (英語配列になってしまうトラブル) [Linux]
ほったらかしになっていたのでいじってみた。
すんなり行かない部分があったのでメモ。
キーボードの設定(英語配列になってしまうトラブル)
シェルで下記を実行
$ sudo raspi-config
図01〜図07で設定。
次に、デスクトップからパネルに表示されているキーボーのアイコンを右クリック(図A1)
「入力メソッドの設定」のウィンドウが開くので、
そのウィンドウの下側に「+」のボタンがあるのでクリックし、
入力メソッドを追加する(この場合「日本語(OADG 109A」図A2)
経緯
当初 図03を図91の如く「標準105キー」で設定したのだが、
JISの配列にならず、記号"|"が打てなかった。
試しに「Logitec 標準キーボード」にしたらうまく行った。
Release: 9.11
Vine 6.5 に Canon PIXUS TS6330 のドライバをインストールする [Linux]
なので、Vine Linux 6.5 にプリンターとスキャナーのドライバーをインストールした。
1.ドライバーのダウンロード
Canon の web ページから下記 Linux ソースファイルをダウンロード。
cnijfilter2-source-5.90-1.tar.gz
scangearmp2-source-3.90-1.tar.gz
(Ubuntu 向けとか Fedora 用の rpm もあるけど、ここではソースファイルを使う)
2.ドライバーのインストール
(1)プリンタードライバー
cnijfilter2-source-5.90-1.tar.gz を適当なディレクトリに置いて下記実行。
$ rpmbuild -tb cnijfilter2-source-5.90-1.tar.gz --with build_common_package
/home/hoge/rpm/RPMS/x86_64 に cnijfilter2-5.90-1.x86_64.rpm ができるので
/home/hoge/rpm/RPMS/x86_64へ移動して以下を実行
$ sudo rpm -ivh cnijfilter2-5.90-1.x86_64.rpm
前のバージョンは common とプリンターのモデルごとのドライバーのrpmが生成されたので、
common とモデルに合ったドライバーを複数インストールする必要が有ったが、
このバージョンは cnijfilter2-5.90-1 の一つだけのようだ。
(2)スキャナードライバー
scangearmp2-source-3.90-1.tar.gz を適当なディレクトリに置いて下記実行。
$ rpmbuild -tb scangearmp2-source-3.90-1.tar.gz --with build_common_package
プリンターと同様に/home/hoge/rpm/RPMS/x86_64 に移動して
scangearmp2-3.90-1.x86_64.rpmができているので以下を実行
$ sudo rpm -ivh scangearmp2-3.90-1.x86_64.rpm
プリンターは Wi-Fi ルーター経由で今のところ特に問題無く動作しているのだが、
スキャナーの方はうまく行っていない。
USB接続での scangearmp2 は動作確認できたのだが、LAN 経由だとうまく行かない。
xsane との連携もできないし、Linux の PC でスキャンするのは諦めるか・・・
スマホで操作できるから、わざわざ PC でスキャナーを操作すること自体あまり無さそうだし・・
と言う事でスキャナーの方は放おっておくことになりそう。^^;
しばらくブログの更新をサボっていた件 [Linux]
webに書き込むネタがなくなってしまったからだ。
と言うのも、
2017年の5月頃からポケモンGoをやり始めた。
新調したタブレットになんの気なしにポケモンGoをインストールしたことが災いした。
タブレットを買うことになったきっかけは、
帰省した際、妹がタブレットを持ってきていたのでちょっと触らせてもらったんだけど、
自分も欲しくなっちゃって買った。
それまでタブレットはiPadかWindowsのものしか無いと思い込んでいて(何たる情弱orz)、
android のタブレットがあることを知らなかった。
もっともこの時はガラ携を使っていたので android も良くは知らなかった。
ただ、android が linux だと言う事は知っていたので親近感はあったし、
妹のタブレットの android の日本語入力システムが wnn だったことに驚き
感動してコレ欲しい!となりました。
wnn は linux を始めた頃ちょっと使ったこともありなんか懐かしかった。
ここで会えるとは思わなかった。
帰省先から戻ってからも、タブレットほしいの思いは変わらず、
「家内はパソコンを使わないので、これがあるとnet検索もできるよな!」とか
都合のいい理由も考えついたりして、ほどなく購入したわけです。
無線の移動運用でも使えるように SIM が挿せる奴がいいと思ってそのモデルを買いました。
しかし、それが運の尽きでした。
こうしてこのタブレットはポケモンGo専用となりましたとさ・・・
その後、スマホに変え、2018年7月頃からはingressもやり始めて、
結局それらに時間を取られて、webに書き込むネタがなくなってしまって、
と言うのが真相です。
この度、ingress の Sojourner のメダルが Onyx になったので、
まぁ、ここらあたりが一段落か。また無線と Make に戻るかなぁ。
とか思い始めています。
ポケモンGo や ingress は娯楽でしか無いんだよなぁ・・・
ただ、これをきっかけに、祠や地蔵や庚申塔とかに興味が沸き始めてはいるんだよなぁ・・・
NHK-FM きらクラ! 「ご自愛☆ステッカー」いただきました。 [ham]
来ました。前回の放送からその週のうちに届きましたので早かったですね。
ドンのコーナーに応募して、チャイコフスキーのアンダンテ・カンタービレを正解で読んでもらえました。
実は2月にもドンに応募して一度投稿を読んでいただいたのですが、
その時はニアピンで、ニアピン競争にも負けてステッカーはもらえませんでした。
でも、ふかわさんが"わたしもそう思った"といってくださったことや
その投稿に書いた絶滅した鳥ドードーの話で盛り上がっていただいたので、
それはそれでいいかと思うことにしました。(くやしいけど)
まぁ、結局、今回ステッカーをいただけたので今はもう満足してしまっています。hihi
ブログのカテゴリー(ham)が合ってないって?
そんなことはないですよ。なにせラジオネームを"QNV"で投稿していますから。
ラジオも無線ですし。
回転体アンバランス振動の模型を作ってみた [工作]
いろいろ思うところがあって、回転体アンバランス振動の模型を作ってみることにしました。
錘を模型のモータで振り回して振動させ、それを加速度センサーで測って、
不釣合いの振動ベクトルを計算して、モード円を画いてみると言うものです。
装置の製作から、振動ベクトルの計算、結果表示と、ひととおり出来上がったのでwebページに纏めました。今回は、機械工作、電子工作、プログラミングとメイカー臭を撒き散らしたものになっています。(残念ながら裁縫は無い)
https://jq1qnv.sakura.ne.jp/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 スクリプト 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 を終了させずにスクリプトを終了させることで手を打ちました。
あまり美しいやり方ではないような気はしますが、後で値の確認とかもできるのでこれはこれでいいかと・・・
表示例
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です。
しばらく触っていなかったけれど、何か随分使いやすくなっている印象。
属性がプロパティエディタで簡単に替えられるのが良いですね。
今では当たり前の機能なのでしょうか。
私のPCでは3D-CAD はFreeCADが使えるようになっているのですが、
形の決まっていない機械構造物をカットアンドトライで図面を書き進める場合は2D-CADの方が効率が良いです。
3Dはすべての体積情報を入力する必要がありますが、2Dはほとんど脳内で体積へ変換しますから。
なので、2D-CADも私にとっては必要なtoolだと思っています。
(私が3D-CADの操作に慣れていないだけなのでしょうか?^^;)
そんなQCADですが、使っている上で、意外と情報が見つからなかったものがあったので以下にメモります。
QCADで形状データから寸法を表示させる場合で、直径記号のΦを寸法値の前に入れたい場合は、
対象の寸法線を選択し、プロパティエディタの「Specific Properties」の「ラベル」に"%%c<>"と入れる。
(下図参照)
"%%c"は直径記号の「Φ」をつけるための呪文で"<>"は形状データからの読み取り値のようです。
ここらへんはAutoCADと同じらしいのですが、AutoCADは使ったことがないので・・・・
ちなみに角度の「°」は"%%d"のようです。
以下はQCADのスクリーンショット
Fritzing でファイルを開こうとしたらエラーが出てコケた [工作]
Fritzing で回路図を書いていて、ライブラリに無い部品がどうしても欲しくなったので、
近い種類の部品を配置してそれを編集して新規の部品に登録しようとしたら、
なにやらエラーが出たんだけど無視して今まで書いていた回路図を登録した後に、
再起動して前述ファイルを呼び込もうとしたら、
下記のエラーが出て Fritzing 自体がこけてしまう。orz
げっ。これまでの作業が水の泡???。あきらめないとダメ?
と思ったけど、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 です。