投稿

7月, 2013の投稿を表示しています

ArduinoのインターフェイスとしてのRaspberryPi ノ巻

イメージ
Arduinoにロガーとしての機能を持たせるためにSDカードを接続したが、やはりネットでリアルタイムに見れた方が良い。というか、そうで無いと意味が無い。しかしEthernetシールドを持ってないし、調べてないが、端子がかぶる可能性も高そうだ。Arduinoの規模でウェブサーバーというのも、頼りない気もするし。 ということで、RaspberryPiにシールドを接続して環境を再構築かとも考えたが、端子の割り当てを考えたり、変換シールドの作成が必要で、せっかく動いているのに、すんなり移植できないRaspPi上でやり直すのも面倒くさい。これでは稼働が遠のくばかり(それが必要かは置いといて)。 そこで代案として、RaspPiをサブとして使う方法を思いついた。USBでArduinoをRaspPiに接続すればシリアルに認証されるはず。ログをシリアルにも出しているのでこれをファイルに保存して、後は適当に加工してウェブで表示すれば出来上がり。 シリアルならパソコン通信の原理で、スクリプトでexpectを使ったArduinoとのやり取りを定義できるし、現在時刻のepochにタイムゾーンを計算した値を 渡せるし一石二鳥な気がしてきた。 これならUSBハブで接続すれば、複数のArduinoを一つのRaspPiで管理すれば拡張性も高いかもしれない。 α700 + Minolta AF100mm MACRO F2.8

Arduinoの時刻合わせと浮動小数点数 ノ巻

イメージ
Arduinoを線量ロガーとして使うにあたり、やっぱり時刻が欲しいよね… ってことで、とりあえずTimeライブラリで時計機能を持たせてみる。問題はその時刻合わせでRTCがないため、起動するごとに時刻を設定し直す必要がある。 時刻合わせの方法はTimeライブラリでいくつか提供されているが、外付けハードウェアが必要なものは手間かお金がかかってしまう… プログラム内に初期値を持たせるのも後で調整できないので、正確さと手間の点でイマイチ。というわけで、消去法的ににシリアルからの設定を選択となる。 サンプルスケッチでは'T'に続けて時刻をUNIX Epoch時間で設定する。ググれば 現在時刻のEpoch時間を表示するサイトがいくつかあるので、ここからコピペでいける。サンプルはloop内で随時時刻合わせを受け付けるが、これを起動時に正しく受け取るまで待たせるように変更して取り込み。そのままでは時刻はGMTグリニッジ時間になるが、どこかで+9時間しておけば良いので気にしない。シリアルとログファイルに時刻を出すようにして出来上がり。 だが、USBを抜くとArduinoも電源が落ちて終了してしまう。これはUSBがシリアル通信と電源の供給を兼ねているので仕方がない。DCジャックのほうに電源供給してからUSBを接続すれば、後でUSBを抜いても大丈夫だが、シリアルが認識されなかったり多少あやしい… しかし、時刻さえ合えば、後は測定したいところに放置しておけば、どんどんログファイルに記録されていく。 ふとログをみていてcpmの値がいつも整数(小数点以下が00)なことに気づいた。Cのつもりで演算結果を浮動小数点数(float)変数で受けているので大丈夫と思ったが、これではダメらしく演算に使う変数をfloatにキャストしておかなければならなかったようだ。printfの件もあるが、Arduinoは浮動小数点数関連が弱そうだ。アナログとか測定では不可欠に思われるのだが… そう考えていくと、測定系になるとRaspberryPiが適している?と思って悩ましい。いっそ、RaspPi用のArduino互換シールドを作れば解決!? α700 + Minolta AF100mm MACRO F2.8

Nexus7改めNexus7(2012)とAndroid4.3手動アップデート完了 ノ巻

イメージ
Googleから新しいNexus7とAndroid4.3の発表があり、Nexus機向けのファクトリーイメージもダウンロードできるようになった。 さっそくダウンロードしてアップデートしてみた。マイナーアップデートなので、それほど変わった気はしない。字が少し太くなったかな?くらいw アップデートするとRoot化が解除されてしまうので、再度Root化も実施。いつもはToolkitを使用しているが、今回は手動で。一応/sdcardフォルダにSuperSUのZIPを置いて、TWRPから探させたが、いつも通り見つからないので、adb sideloadという方法で実施した。adb経由で送付されそのままインストールもされて、こっちのほうが手間がかからず確実だった。 userdataの上書きはしていないので、これまでインストールしていたアプリもそのまま残っているので、このまま使い続けることになる。 α700 + Minolta AF100mm MACRO F2.8

ポケットガイガー(Type1)ロガー完成と感度調整 ノ巻

イメージ
ブレッドボード上に作った回路を、シールドボードに半田付けする。 4端子のジャックは2.54mmのピンではないので、足をはんだ付けで固定することに。多少の配線漏れでハマるも、なんとかガイガーカウンターの出力を拾えるようになり、定期的に測定するようにソフトのほうに着手した。タイマーはMsTimer2というライブラリでタイマー割り込みが使えるようなので、これを使うことにした。 サンプルを見ながらやれば簡単にできてしまう。ただ、一度に20分とか指定しようとするとmsオーダーでカウントしているため、intの範囲を超えていると怒られるので1秒単位の割り込みとして、その中でカウンタを持たせた。 これで1分間単位で測れるようにして、測定値を見てみるとそれなりにカウントされているみたい。 このカウント値をある係数で割ってやればuSv/hになる。ではその係数は?と調べたらポケットガイガーでもTypeによって値が異なる。type5の値ではとてつもない値になる。値はどうするか?答えは簡単で、iPhoneアプリの設定値にこれが記載されている。デフォルト値として10.3700となっているので、この値を使用している。 この状態でいつものアトムレンズ(Super-Takumar 50/1.4)で測定してみると、iPhone比で4倍くらいの数値となっている。まずは割り込みのトリガーが"CHANGE"となっているのを”FALLING"として方エッジのみ拾うようにする。さらにコンパレータに設置している半固定抵抗の値を変えてみる。5kΩが初期値だが、さらに大きめの8kΩあたりでiPhoneと同等になった。 オシロが無いので想像だが、ノイズを拾わないように高めの電圧で拾うようにして改善したのかもしれない。 以前に作成したLCD+SDシールドも割り込み端子とかぶらないように修正しており、ポケットガイガーシールドの上にスタックさせた。これでLCDに最終測定値(uSv/h)を、各回の測定値はSDのログファイルに記録する。というところも、サンプルアプリであっさり出来てしまった。 測定値の正確さはともかく、ログファイルを見ていて、時刻も要るかな?とおもったが、ArduinoにはRTCがなく、外付けするか内蔵タイマに刻ませるかになる。内蔵タイマ方式の場合現在時刻の設定

単電源オペアンプとポケットガイガーと半田付け ノ巻

イメージ
手持ちのポケットガイガーType1は組み込み向けのType5に比べると増幅とコンパレータが少ないようで、Arduinoなどと直結しても値が読み取れないようだ。これをオペアンプで追加してやればType5と同等性能になるのでArduino用のシールドボードを作成する。両電源のオペアンプでの実験はしていたので、単電源オペアンプでもブレッドボード上で確認をしてから、ボードへの半田付けをする。というわけでブレッドボードで接続するが、なぜかパルスを全く拾ってくれない。iPhoneにポケットガイガーをつなげばしっかり検出するので、こっちは大丈夫。いつものようにアトムレンズで確認しているので、数分待たなくてもどんどん放射線(?)が検出される… コンパレータが初めてで、可変抵抗も使っているのでここを疑い、抵抗値を変えてみるが一向に変わらない。ちなみにコンパレータとは入力値がある値以上検出された時に、電源電圧の高さのバルスを出力してくれる回路で、増幅されたポケットガイガーの出力をさらにArduinoで拾いやすくする仕掛けだ。分圧抵抗で0.5V〜1.0V位でパルスが立つように調整するつもりでここに半固定抵抗を入れているが、どちらに回しても反応なし。次に増幅段の増幅率を倍にしてみるが変化なし。配線ミスもありうるので、非反転増幅とコンパレータに使用していたオペアンプ(二回路入り)を入れ替えて配線し直すが変わらない。 最後に残ったのは、ポケットガイガーのプラグを受けるジャックだが、ブレッドボードに挿すための端子を配線しているが、ピンソケットに半田付けして熱収縮チューブでカバーしてあるもので、PCマザーボードのHDD用LEDを流用したものだった。片方の端子が短くなっていたので、テスターであたってみると、ジャックの内側の端子に導通がない… 熱収縮チューブをはいでみると、しっかり半田付けしたところがが剥がれている。 またこうならないように今度は圧着端子でコネクタとしてつけなおした。修理後は無事パルスが拾えるようになり、ポケットガイガーシールドを組み立てるメドが立った。 この実験をしていて、ポケットガイガーのパルスを割り込みで受けるように考えていたが、先日作ったLCD+SDカードのシールドで 割り込みに使える端子 (UNOの2,3番端子)を LCDの配線で使ってしまっていた。これは配線し直

ハイレゾvs大音量とオーディオのアップグレード ノ巻

イメージ
オーディオの音質について触れているが、人によって評価ポイントが違うと思うので、自分の場合は音の分解能または解像感の高いものを良しとしているので注意して欲しい。 今は使っていないが、PS3でCDをアップサンプリングして176.4kHzでDACに入れて聴くというのをやっていた。アップサンプリングするだけで、細かい音まで聞き分けられるようになり、今まで塊として聞いていたところが丁寧に音が作り込まれていたのが分かったりして新鮮だった。音を聴き取るということなら音量を上げれば小さい音も聞こえるようになるが、周りの音が小さい音を埋れさせているようで、聞こえ方としてはは変わらない。 この経験からオーディオの入力、つまり上流を改善すれば格段に改善することがわかった。改善の仕方も44.1kHzのまま高い機材に置き換えるより176.4kHz化する方が効果の度合いが高い。iPodからデジタル出力しただけではあまり変わった気がしなかった。偽物でも良いので、サンプリングレートコンバータでアップサンプリングしてDACに接続したいが、単体のサンプリングレートコンバータはベリンガーSRC2496しか見当たらず、これも96kHzまでしか対応しておらずラックマウント用のため無駄にでかいので、 値段的には魅力的だが 買う気がしない。 で、最近これと似たような音質改善を経験したのだが、それがCMoyアンプだった。対象がヘッドホン出力が眠いと悪評の高いiPodClassicなので改善の度合いも高かったのかもしれない。 この場合、ヘッドホン端子からDOCKのラインアウトへ出し方を変えているので、上流と中流の改善となっている。下流のスピーカー、ヘッドホンにそれなりのものを持ってくる必要はあるが、出力段だけ一点豪華主義にしても上流が伴わないと宝の持ち腐れとなりかねないので、結論としては上流からアップグレードしていくのが良いのではないかということになる。 α700 + MINOLTA AF 100mm MACRO F2.8

ArduinoのSDシールド自作と、シールドスタック構造の謎 ノ巻

イメージ
パーツも揃い、ブレッドボードでの動作確認もできたので、シールド(Arduinoでは基板のことをこう言う、英語?)に半田付けで組み立てることにした。aitendo.ccの安いArduino用ユニバーサル基板で作る。SDカードだけでは余るので、キャラクターLCD(を取付けるピンソケット)も付けてしまった。 SDからのデータ入力端子だけが直結で気持ち悪かったので逆接保護のため、ショットキーバリアダイオードを噛ましてみた。配線はうろ覚えで付けてたら微妙に間違えてハマったので回路図や配線図をよく見ながら作業するべきと思った。 また、使用したシールドがUnoと同じ大きさだったが、Arduinoボードとスタック(積み重ね)するためにコネクタを挿し込もうとするとUSBコネクタに干渉する。しかもその上にSDコネクタの配線をしていたため、ショートの危険性も…(事前の調査不足) なぜこのような配置になっているのか、USBコネクタに当たらないような短いシールドでないといけないのか、コネクタの高さからしようがないといえばしようがないのだが、なかなか使いづらい。今回のシールドは基本的には別のシールドのさらに上に挿して使うことを想定しているので、下には短いボードを使えば問題はなさそう。 簡易的な回避策としては、空の短いシールドを噛まして取り付けるか、半田付けされてないコネクタだけを延長のために付けてもいいかと思った。見た目にも、バランスが悪そうだが… 二段目用にはポケットガイガーTypeI用増幅機能付き接続シールドを作成する予定。 α700 + MINOLTA AF 100mm MACRO F2.8

UbuntuのGUIでデフォルトルートの設定をする ノ巻

イメージ
Ubuntuの設定で少しハマったので記録しておく。 Linuxでネットワークの設定はファイルに記述するのが普通だったが、UbuntuはGUIの設定になっていて、下手に設定ファイルをいじるとGUIと衝突してしまう。 たとえば /etc/network/interfeces にデフォルトルートの設定を追記する(route add default gw ...てやつ)とGUIのネットワーク設定ツールがエラーで動かなくなる。そうするとIPアドレスの設定から全て設定ファイル(CUI)になってしまって少々悲しい物がある。ぐぐっても微妙にGUIの設定が見当たらない。 今回USB-Etherを追加してプライベートアドレスを作ったが、元々のネットでのアクセスがおかしくなったので調べたら、USB-Ether側にデフォルトルートが設定されてしまっていた。直そうとしたが、CUIではできるが、GUIから怒られてしまうので試行錯誤してデフォルトルートの設定を編み出した(大袈裟)w いきなり本題に入ると、System Settings >> Network >> Wired(デフォルトルートを設定するネットワークI/F) >> Options... >> IPv4 Settings >> Routes... で Editing IPv4 routes for Wired connection 1 というダイアログにたどり着く。ここでAddボタンを押下。Address, Netmask, Gateway, Metric の項目が記入できるようになる。これらの意味がよくわからなかったが、とりあえず Address = I/FのIPアドレス、Netmask = I/Fのネットマスク、Gateway = I/Fのゲートウェイ(デフォルトgwになる)、Metric = (空欄)で期待する設定ができた。 あとはコマンドラインでnetstat -nrしなくてもGUIでNetwork Toolsというのがあったり、うざいSDカードのオートマウントの切り方がわかったので有意義だった。そのおまじないは gsettings set org.gnome.desktop.media-handling automount false だ!w