日記一覧
当サイトに登録されている日記一覧
タグ 自鯖 ハード
タグ エコ ハード
今まで使っていた、(三菱)RDT1214Sの正面で仕事をしていると(消費電力66Wだけあって)暑くて扇風機だけでは作業が捗らなかったので、省エネのためもあって購入。
LEDバックライト軽くてスタンドがひ弱で心配ではあるが、ドット抜けも無さそうで、1万4千円程で買えるのは価格破壊を感じる。
...
3年続けて参加してきた、変態コース成田POPラン(ハーフ)を今年も完走してきました。
使用シューズは、先日の水戸と同じ、ズームフライSPファスト。
- スタート前の整列は、昨年より少し前方の90分以内ブロックでした
- グロス1:38:34、ネット1:38:22、自己4回中の2番目に良いタイムでした
総合 294位/2341人
50歳代 60位/492人
- 着替えちゃったけど、これ着て走りましたよ。
今回は、水戸黄門漫遊マラソンで最後失速してしまった逆ローリング走法@フォアフットのエコノミー改善に本気で取り組んだのが功を奏しました。
詳しいことは別の機会に譲りますが、今まで紹介してきた逆ローリング走法よりも、更に位相を早めて接地前に骨盤を前方に脱力し、シザースで前に出た脚に引っ張ってもらう感じにすることで、コンパクトに骨盤を使うようになり、結果的に脚のスイング速度が下がり、脛を前方に投げ出すことなく足が無理なく重心付近に落ちてくるようになりました。
この走法を更に洗練させ、体幹が負けないように走り込んで、12月1日の湘南国際でサブ3.5の自己ベストを狙っていこうと思います。
ペースと心拍数。心拍数は153前後で安定。改良版の逆ローリング走法はエコノミーもなかなか良いです。
14km以降の坂道に明らかなペースダウンも、下りをヒイヒイ言いつつ頑張って粘りました
ピッチもとても安定してました。自分史上、最も理想的な走りかも?
タグ FreeNAS ハード 自鯖 エコ
まずは現物から
- LPC1114FN28とFT232RL USB/serialコンバーターで、シリアル通信+サーボモーターを回してみる。 以下、準備から実際のプログラムソースまでメモっておきます。
まず頭に入れてくべきこと
- mbedオフィシャルサイト 全てはここから始まる。
- mbedとは:Wikiedia
- mbed と Arduino の違い
準備したもの
- mbed対応のマイコン。今回は、LPC1114FN28 を、秋月電子で購入。 1個たったの120円!(税込)
- USB-シリアル変換モジュール FT232RL 秋月で購入。
- Arduinoスターターキット SGK-ARD-KIT 千石電商で購入 arduino uno 付きで4,940円。 arduino unoの他に付属のセット品が色々入っていて、初めてには良いですね。 arduinoからいじり始めてみたものの、mbedを教えていただいたら断然そちらが面白くなってます。
配線
- 参考
- mbed LPC1114でLチカしてみた(1):しなぷすのハード製作記
マイコンとFT232RLの接続が参考になります。 プログラムを書き込んだあとリセットしなくても済みます。 なお、書き込みソフトはこのページの要領ではなく、LPC1114限定で下記ページのものが使いやすいです。 - mbed LPC1114でLチカしてみた(2):しなぷすのハード製作記
LPC1114限定で「LPCISP」というソフトを公開しておられます。USB/serialコンバーター経由で一発書き込み、即座にリセットが働くので、楽ちんです。
- mbed LPC1114でLチカしてみた(1):しなぷすのハード製作記
- ハード図
ブレッドボードを使うとテストは楽にできるけど、一度バラしたら再現するのが面倒になっちゃいますんで、ちゃんと図面を書くクセをつけたいですね。今回は資料への使いまわしがしやすいようにEXCELでこんな感じで書いてみました。- LPC1114のLED回路はソース出力(PNP)でプラスコモン、FT232RLのLEDモニタ回路は、シンク出力(NPN)でマイナスコモンになっているみたいで、ちょっと混乱します。
工業用制御部品に関していえば、日本国内やアジア圏ではシンク(NPN)でマイナスコモン、欧州ではソース出力(PNP)でプラスコモン が多いですが、欧州への輸出時にはCEマーク表示の関係で本質安全の考え方から必ずPNPにしないといけなくなるため、国内でもPNPへの変更が徐々に進んでいる・・ のかなあ?
組み込み部品での状況は全くわからずです。
- LPC1114のLED回路はソース出力(PNP)でプラスコモン、FT232RLのLEDモニタ回路は、シンク出力(NPN)でマイナスコモンになっているみたいで、ちょっと混乱します。
プログラム
mbedはarduinoと違い、ほぼ素のC/C++で書けます。 オンラインコンパイラでビルドが通ったプロジェクトをエクスポートして、外部のIDEで編集・コンパイルできることからもそれを実感できます。
とはいえまずはオンラインコンパイラで。
![]() |
使用ライブラリ
- Servo
mbedのオンラインコンパイラ上の「Import」でキーワード「Servo」で検索し、sford cstyles さんの mbed R/C Servo Libraryを試しに使ってみました。 - MySerial
自作ライブラリ MySerial です。mbed標準のRawSerialクラスを継承し、受信文字列のchar配列格納を簡単にできるようにしてみました。 現時点でのソースを貼っておきます。- GetString メソッドは、テンプレート化でオーバーロードしてあり、引数にポインタ変数指定でも char配列指定の参照でも使えるようにしました。
- Wait時間の設定を追加してあります。
その他APIは、こちらを参照。
- MySerial.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
- | | | | | | | | | ! - | | | | | | | | | | | | | | | | | | | | | ! - | | - | | | ! | | - | | | ! | | - | | | | ! | | - | | | | ! | - | ! | | | | | !
/** mbed Serial Library extend RawSerial * Copyright (c) 2014 Naoki Okino * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef MBED_MYSERIAL_H #define MBED_MYSERIAL_H #include "mbed.h" /** MySerial control class, based on a RawSerial * * Example: * @code * #include "mbed.h" * #include "MySerial.h" * * MySerial pc(USBTX,USBRX); //instance of MySerial Class * char cWord[16]; //receive chars or cWord[256], cWord[1024] etc.. * * void readbuf() * { * // int iRtn = pc.GetString(6,&cWord); //Serial received chars by pointer cWord * int iRtn = pc.GetString(6,cWord); //Serial received chars byref of cWord * } * int main() { * pc.baud(9600); //set baud rate * pc.format(8, MySerial::None, 1);//set bits for a byte, parity bit, stop bit * pc.SetRxWait(0.01, 0.001); //set wait getting chars after interrupted, each char * pc.attach( readbuf, MySerial::RxIrq ); //Set Interrupt by Serial receive * } * @endcode */ class MySerial : public RawSerial{ public: /** constructor to get chars received by serial * * @param PinName tx * @param PinName rx */ MySerial(PinName tx, PinName rx); /** set wait getting chars after interrupted * * @param float _fRxStartWait wait getting a 1st char after interrupted * @param float _fRxEachWait wait getting each char */ void SetRxWait(float _fRxStartWait, float _fRxEachWait); /** function to get chars after received chars by serial * * @param int size for get chars * @param *cWord returns got chars by pointer * @param returns success by 0 */ virtual int GetString(int size, char *cWord); /** overload function to get chars after received chars by serial * * @param int size for get chars * @param cWord returns got chars by ref * @param returns success by 0 */ template <class X> int GetString(int size, X cWord) { return GetString(size, &cWord); } protected: float fRxStartWait; float fRxEachWait; }; /* class MySerial */ #endif
- MySerial.h
- MySerial.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
- | | ! - | | ! - | | | | | | - - | ! | - | - ! | | ! !
#include "MySerial.h" MySerial::MySerial(PinName tx,PinName rx):RawSerial(tx,rx) //constructor { fRxStartWait = 0.01; //wait getting a 1st char after interrupted fRxEachWait = 0.001; //wait getting each char } void MySerial::SetRxWait(float _fRxStartWait, float _fRxEachWait) { fRxStartWait = _fRxStartWait; //wait getting a 1st char after interrupted fRxEachWait = _fRxEachWait; //wait getting each char } int MySerial::GetString(int size, char *cWord) //by pointer { int i=0; int ichar; memset(cWord, '\0', strlen(cWord)); //initialise chars wait(fRxStartWait); while(1) { if(!readable()) { break; } ichar = getc(); if(i<size) { cWord[i] =ichar; //putc(ichar); } i++; wait(fRxEachWait); } return 0; }
- MySerial.cpp
メイン
- シリアルコマンド
ただの実験なので、<STX><ETX>などの制御コマンドは一切無しです。(汗)- 「start」で開始
- 「pxxx」(xxxは角度)で位置決め
- 「stop」で停止
です。
- 受信の割り込みと、50ms定時タイマ割り込みを受けてメインで動作及びLチカさせてみました。
- 割り込みのIRQ変数名は、シリアルが「UART_IRQn」、定時タイマが「TIMER_16_0_IRQn」でしたので、割り込み優先度や割り込み禁止を個別に管理できます。 この辺の定義は、こちらに全部書いてありますね。
- まだ試していませんが、フロー制御を入れないと9600bps以外では取りこぼしが発生します。
- ソース
volatile のつけ方などわかっていないので、まだ適当です。- main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
- | | ! - - ! ! - | | - ! | - | | - | | - | | | - | ! - | | ! ! - | | - | ! | | | | | | | | | | - | | | - | | | ! | | - | - | | ! | - ! ! !
#include "mbed.h" #include "Servo.h" #include "MySerial.h" Servo myservo(dp18); MySerial pc(USBTX,USBRX); //instance of MySerial Class Ticker timer; DigitalOut led2(LED2); //alive check LED volatile int cntRx=0; volatile int cntRx_old=0; volatile int timeUp=0; volatile int timeUp_old=0; char cWord[6]; //receive chars or cWord[256], cWord[1024] etc.. char *pCword = cWord; //pointer for cword const char ccStart[6] = "start"; const char ccStop[5] = "stop"; const char ccMove_[2] = "p"; int readSize = 5; int doStatus; int iDeg; void atRx() { NVIC_DisableIRQ(UART_IRQn); cntRx++; } void atTimer() { //NVIC_DisableIRQ(TIMER_16_0_IRQn); timeUp++; } void readbuf() { pCword = cWord; //pointer for cword //int iRtn = pc.GetString( readSize, &cWord[0] ); //Serial received chars by pointer of cWord int iRtn = pc.GetString( readSize, cWord ); //Serial received chars byref of cWord if(strcmp(cWord, ccStart)==0) { // start doStatus=1; printf("started\n"); } else if(strcmp(cWord, ccStop)==0) { // stop doStatus=0; printf("stopped\n"); } else if(cWord[0]==ccMove_[0]) { // 1st char matches pCword++; // increment pointer to get after 2nd chars iDeg = atoi( pCword ); printf("%d\n",iDeg); } else { //no action except for start/stop printf(" no match %s\n" , cWord); } if ((doStatus == 1) && (0 <= iDeg) && (iDeg <= 180)) { wait(0.01); // waits for the servo to get there myservo.position(iDeg - 83.0); } } int main() { pc.baud(9600); //set baud rate pc.format(8, MySerial::Odd, 1);//set bits for a byte, parity bit, stop bit //pc.format(8, MySerial::None, 1);//set bits for a byte, parity bit, stop bit //pc.set_flow_control(MySerial::RTSCTS,dp26,dp25); pc.SetRxWait(0.01, 0.001); //set wait getting chars after interrupted, each char wait(0.25); //startup wait pc.attach( &atRx, MySerial::RxIrq ); //Set Interrupt by Serial receive NVIC_SetPriority(UART_IRQn, 120); timer.attach( &atTimer, 0.05 ); NVIC_SetPriority(TIMER_16_0_IRQn, 10); myservo.calibrate(/* range */ 0.00099, /* angle +/- */ 90.0); while(1) { wait(0.01); if(cntRx != cntRx_old) { readbuf(); cntRx_old = cntRx; NVIC_EnableIRQ(UART_IRQn); } if(timeUp != timeUp_old) { if( 10 <= timeUp ) { led2 = !led2; timeUp=0; } timeUp_old = timeUp; //NVIC_EnableIRQ(TIMER_16_0_IRQn); } } }
- main.cpp
先日発売の月刊stereo誌8月号には、なんと、デンマークの高級スピーカーユニットメーカー、scan speak 製の10cmユニットが2本付いて来ました。実質口径は8.5~9cm弱という感じです。
しばらく出張でドタバタで何もできなかったのですが、昨日やっと、Cool Biz に取り付けて試聴してみましたのでそのインプレ。



まずは外観から。
プラスチックフレームそのものが嫌いでなければ、 作りはしっかりしていますし、某所で音を出した人がいて、悪く無さそうです。 コーンはパルプコーンにコーティングです。 これでペア3千円なら納得ですね。

取り付けネジが3本しかないので、その分背面の空気抜けは抜群に良さそうです。 ダンパー背面もすかっとしていますね。
ボイスコイルボビンの色が気になる。。

最初の写真でも確認できますが、ポールピースにも背圧抜きの丸穴が空いています。
特性図をみると、Xmaxが±2.3mmと大き目で、歪感の少ない低域が期待できそうです。

Cool Bizに取り付けて、試聴とエージングを開始。 いい加減な取り付けなので、細かい部分は不正確なインプレです。
- SPL特性でもわかるけど、高域方向に上昇している感はあります。 けれども耳障りな高域ではないので、あまり気にする必要はなさそう。
- 中域が引っ込んだ感じは確かにあります。 普段Fostexの音に慣れてしまっているから尚更なのかもしれません。 けれども、音の分離などは悪くないですし、歪も少ないように思います。
一部の情報として、音場の前後感も表現されるという話もあり、確かにそれもある気もしますが、特筆するほどでは無いかなあ・・ FosのFEシリーズと良い勝負しているには及ばない感じ。
まあ、細部のプレゼンスまで表現できるかといえばそれは無理ってもので、エージングに多少期待しても多くを望みすぎないほうがいいかも。 - 低域は、最初のうちは低いほうの伸びが今一つかな、と思っていたのですが、エージングを続けているうちに段々と出るようになってきた気がします。 FostexのFEシリーズなどのXmaxの極端に小さなフルレンジユニットに比べたら、歪感は確かに少ない低域だと思います。
ただ、少し重めの低域という気がします。軽い低域が好きな私としては少々マイナス点。
以上、ざっとしたインプレですが、ことしはコンテスト用に箱(+筒)を作って応募してみようかな、と思わせてくれるユニットですね。 BGM用として見た場合に、かなりバリエーション豊かな箱に適合する、良質のユニットだと思います。これで雑誌が付いてきて3千円は、破格ですね。
構想は、少しずつ出来てきています。 
先日予約した、FOSTEXの新限定ユニット、FE103En-Sがやってきました!
早速、16年前に製作した頭部球形のSuper-Swanに取り付けてみました。
このSuper-Swanは、オリジナル設計どおりでなく、頭部の積層パイン材の接着も一部スキマができていて、ここ2年は音も出さずにいたような代物です。 
取り付けて早速音出し。
低域は、さすがにQ0=0.2と超オーバーダンピングなだけあって、FE108EΣのときには「ボンつき」が気になって聴くに堪えなかったのが、割と歪感の少ないスムーズな音程の取れる音で鳴っています。
そして中高域はどうかというと、先日コイズミ無線で視聴した際の印象通り、耳触りのないとても素直な音です。 かといって張りが無いわけでもなく、FE103E好きの私としてはかなり良い感じ。 ツイーターを付けても繋げやすそうです。
事前の情報では、FE88ES-Rと同様にメカニカル2wayとのことでしたが、実際にはセンターキャップはボイスコシルボビンに直結されているようには見えません。 微妙に位置を変えて高域の出方を調整したのかもしれませんね。 結果、FE88ES-Rほどキツくないスムーズで長時間聴いていられる高域です。 逆に言うと、FE88ES-Rのようなキレのある高域を期待するとちょっと違う感じです。
初期のSuper-Swan用の限定6N-FE108Sを以前コーン紙を張り替えて付けたとき、中高域が張りすぎてキツイものの、低域はスムーズだった記憶があり、ああこの低域でFE103Eの中高域で聴きたいなあ。。 と思っていたので、このバランスはかなり好みです。 
さて、当分はこの状態でエージングを続けますが、やっぱり新作を作りたくなりますね。 今考えているのは、kenboさん式のバックロードバスレフのポートを大口径スパイラルにするものです。 バックロードの量感とスパイラルの伸びのある低域がうまくマッチしてくれれば。
胴体は、まずは塩ビ管で。 頭部バッフルは、もちろん購入済みの18mm厚シナアピトン合板を使います。
楽しくなってきました。
この3連休、どこにも出かける予定もなく、かといって何かまとまったことをする気力もない。
そこで長年の懸案だった、DVカメラからの動画の取り込みを始めることにした。 元々DVカメラも調子が悪くてテープを早送り・巻き戻しをするとテープを巻き込んでクシャクシャにしてしまう状態だったのだが、ずいぶん放っていたので更に状況が悪化。 
おまけに、今時IEEE1394ポートを装備するPCも減って手元に無いから、拡張ボードを新調。 なんとかかんとか作業を進めている状態で、このまま30本の作業を一気に済ませて安心したい。
...

2
















