2012年11月4日日曜日

Carbon Ring Finger Strap を買って改造してみる


  • Xperia SXの使用感
Xperia SXに変えて二週間ほど経ちました。 

目当て通りのサイズと軽さに大満足です。
太めの指と画面の右縁付近との相性が少し悪いですが、それ以外はフリック入力等も問題無いです。
重量も、以前のGalaxySに比べてとても軽く感じ、今まで使ってきたスマホの中で一番持っていて楽な機種です。
唯一心配だったバッテリーの持ちも、意外と悪くありませんでした。(LTEオフ設定)

  • ストラップ
所謂ケースはもさいと言うか...無駄にサイズを大きくしてる感じが嫌なのですが、SXがあんまり小さいのとさらさらとした感触ですべり易そうなのでストラップは付けることにしました。
どこかでリング型のストラップが便利!流行ってる!っていう事を聞き、カーボン製のリングというロードバイク乗りなら一撃で撃ち抜かれるであろう商品を発見しそのまま購入しました。



購入したストラップは、Deff社のCarbon Ring Finger Strapです。
Amazonで購入した時は2400円程と、ちょっと何考えてるのか分からない価格ですが、完全にロードバイクのパーツの感覚で買いました。
ストラップとして考えたら、やはりどうかしてると思います。

事前に読んだレビューには、ネジが甘いや紐の強度が気になるという物がありましたので、その辺りには軽く手を加えようと思います。


アーレンキーでバラバラです。カーボン模様がかっこいい。

ネジは届いた状態ではそこまで緩くは無いと思いますが、アルミの部分が可動する事を考えると、気づかず緩んでバラバラになってると言う事も確かにあるかもと思います。
時々増し締めするか、Amazonのレビューにもありますがロックタイトなどのネジのゆるみ止めを使用する方が良いと思います。

紐はよくあるストラップに使われている普通の紐でしょうか。
手持ちのノギスで測ってみると、紐の太さは約0.5mmでした。こう見るとストラップって結構細いんですね。
一重結びで玉にして、アルミのパーツの中に引っ掛けてあります。

  • ちょっと改造
せっかく2400円という安くはないストラップなので、紐を交換したいと思います。
素材屋さんからケブラー糸を芯にした紐を購入したので、交換してみます。
アラミド繊維のケブラーというと、防弾チョッキとかにも使用されていますよね。
ちなみに、今回購入した約1mmの紐に使われているケブラー芯糸の断裂強度は約58kgだそうで、糸が切れる前に結び目が解けるかカーボンが割れそうです。


スタンダードな黒色と、白色も一緒に購入しました。
線自体の太さは1mm以上あるのでそんなに柔らかく無いですが、芯糸はとても柔らかいです。

[11/5追記]

紐が太くて一本しか通らないんですね。
元々付いてる紐が大体0.5mmなのに、1mmちょっとある紐だと二本通りませんよねー
一本だけ通して携帯側で結びつけるような使い方にでもしようかとも思いましたが、それもどうかと思うので穴を広げる方向で調節しました。アルミで良かった。

その辺のドライバーで2mm程のサイズに穴を拡張し紐を通した後も、どうやって玉を作って固定しようかとか次々問題が出てきながらも紐交換できました。
ネジは、予定通り接着剤で固定させました。


ふむむ....どうなんでしょうね。シリコンチューブつけた方が良いかな?

まぁ、ケブラー云々は置いておいても紐は太くなって、固定の玉も強化したので紐の部分に関して心配は無くなったかな、と。何も考えずに引っ張って、ぶら下げられます。
カバーはポリエステルなので、毛羽立ちは防げません。



ちなみに、白色の紐も買ったのでアルミの色にあわせて赤色の染色にトライしました。


唯一見つけたコールダイ ホットのレッドを使用しました。
染料を買った時に店員さんと相談すると、ポリなので淡く染まると思いますという事なので加熱しながら3度染めてみました。

コンロ周りが汚いですけど、お鍋で紐をコトコト煮込んでいます。



上から、染める前, 染めた後, 元々ついていた紐です。
赤, ピンクというより、茶色というか薄めのあずき色になりました。

並べると元々の紐と今回使った紐の太さが分かります。赤の紐は外皮が緩くなって更に太くなってますが。
ヘアゴムにしか見えないレベル。

染色は諦めます。

[ここまで]

そういえば、このストラップならコナン君の映画であったブレスレットでコナン君の体重を支え吊るという事もできそうです。
あの金メダルのブレスレットは、そういう繊維で作られた糸を使っているのかもしれないですねー

メモ
ストラップに使われてる金具の付いた紐って松葉紐って言うそう。

2012年10月30日火曜日

[Java][AVR]MacのJavaでAVRとシリアル通信したい

AVRで作ってるI/Oボードで取得したセンサーのデータを扱うのは、現状JavaでやりたいのでMac上のJavaでシリアル通信出来るようにする。

Javaでシリアル通信を行うライブラリにRxTxという物があるのでこれを使います。GNUライセンスです。

まず、古い方の公式サイトからrxtx-2.1-7-bins-r2.zip (Final)をダウンロードしてきます。
さらっと少し上にダウンロードサイトが移動した旨が書いてありましたが気づきませんでした。
新しい方のサイトも見てみましたが、書いている時点で安定版のバージョンは同じ様です。

ダウンロードしたzipファイルを解凍して出来たディレクトリの中のINSTALLの内容の

Mac OS X (x86 and ppc) (there is an Installer with the source)
RXTXcomm.jar goes in /Library/Java/Extensions
librxtxSerial.jnilib goes in /Library/Java/Extensions
Run fixperm.sh thats in the directory. Fix perms is in the Mac_OS_X
subdirectory.

に従って、
解凍したディレクトリの中にあるRXTXcomm.jarと、Mac_OS_Xディレクトリの中にあるlibrxtxSerial.jnilibを、
/Library/Java/Extensionsにコピーします。
最後のfixperm.shを実行するよう言ってますが、無いので飛ばします。

とりあえず前準備は終わったので、Eclipseでサンプルプロジェクトを作ってみます。
適当なプロジェクトを作成し、プロジェクトのプロパティの Javaのビルドパス-ライブラリー外部Jarの追加で先程コピーしたRXTXcomm.jarを指定してあげます。

ポートを開き、受信した文字を出力するだけのプログラムを書いてみます。
AVRのプログラムは、ただHello World!!を出力し続けるだけです。
import java.io.IOException;
import java.io.InputStream;
import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.UnsupportedCommOperationException;


public class Sample {
 
 public static final void main(String[] args){
  try{
   
   CommPortIdentifier portID = CommPortIdentifier.getPortIdentifier("/dev/tty.usbserial-A400FMPJ");
   SerialPort port = (SerialPort)portID.open("Sample", 5000); //waiting5000ms
      
   port.setSerialPortParams(19200, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
   port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
   
   InputStream is = port.getInputStream();
   
   int c;
   while((c = is.read()) != -1){
      Calendar cal = Calendar.getInstance();
      System.out.print(cal.get(Calendar.SECOND) + "." + cal.get(Calendar.MILLISECOND));
      System.out.println("->" + (char)c);
   }
   is.close();
   port.close();
  }catch(NoSuchPortException e){
   System.err.println("Can Not Find Device");
   e.printStackTrace();
  }catch(PortInUseException e){
   System.err.println("Can Not Open Device");
   e.printStackTrace();
  }catch(UnsupportedCommOperationException e){
   System.err.println("Invalid Parameter");
   e.printStackTrace();
  }catch(IOException e){
   e.printStackTrace();
  }catch(Exception e){
   e.printStackTrace();
  }
 }
}


簡単に説明を行うと
15行目
CommPortIdentifier portID = CommPortIdentifier.getPortIdentifier("/dev/tty.usbserial-A400FMPJ");
getPortIdentifierの引数には下の画像にあるように、開きたいデバイスのパスを与えます。



16行目
SerialPort port = (SerialPort)portID.open("Sample", 5000);
第一引数にはポートを開くアプリケーション名, 第二引数にはポートが他のアプリケーションに使用されていた場合にポートが解放されるのを待つ待ち時間(ms)です。

18行目
port.setSerialPortParams(19200, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
第一引数から、ボーレート, データビット数, ストップビット数, パリティの種類です。

19行目
port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
フロー制御の設定を行います。

あとは、通常のJavaの通常の入出力プログラムです。 それぞれの例外は、エラーメッセージの通りだと思います。

実行してみると、
java.lang.UnsatisfiedLinkError: /Library/Java/Extensions/librxtxSerial.jnilib:  no suitable image found.  Did find:  /Library/Java/Extensions/librxtxSerial.jnilib: no matching architecture in universal wrapper thrown while loading gnu.io.RXTXCommDriver
Exception in thread "main" java.lang.UnsatisfiedLinkError: /Library/Java/Extensions/librxtxSerial.jnilib:  no suitable image found.  Did find:  /Library/Java/Extensions/librxtxSerial.jnilib: no matching architecture in universal wrapper
ってエラーを吐きました。
調べてみると、先程ダウンロードしたlibrxtxSerial.jnilibは32bit用でJavaは64bitで実行される事によるエラーのようです。
なので、実行の構成からVM引数-d32を与えて32bitで実行してあげると解決します。
また、根本的な解決として64bit対応のライブラリに置き換える方法もあります。
arduinoのgoogle codeに、64bit用のライブラリがありましたのでダウンロードし置き換えてあげて下さい。

先程のエラーは解決できましたが、
gnu.io.PortInUseException: Unknown Application
 というエラーが出ました。
調べるとRxTxの排他制御の為のディレクトリが必要という情報がありましたので、ターミナルで
sudo mkdir /var/lock
sudo chmod 777 /var/lock
でディレクトリを作成してあげて、再度実行すると


無事、データの受信を確認しました。


Java Communications APIの使い方

2012年10月26日金曜日

[Android]Xperia SXに変えました

Galaxy SIIが出た頃に型落ちしてたGalaxy Sに変えてからの、二台目Android
Symbianを使ってた頃には考えもしなかった世界になってますね!

iPhone 3GS以来のiPhone5か, WM6.1以来のWindows Phoneか, Galaxy SIII miniか?とか迷いながらサイズだけ見てXperia SXをチョイス。
12年夏モデルで生産も多くないみたいで、中々在庫も無くロードバイクでお散歩ついでに近隣の市のshopを見て回って買ってきました。
冬にはXperia AXも出ますが、スペックはほぼ変わらず画面サイズは大きくなってるので...


以下メモ
ホームアプリ
 └Docomo palette ui, Xperiaホーム は痒い所に手が届かなかったので、4.0以降で使えるApex, Nova, Atom Launcherを入れてみたけど、どれも微妙
 └結局、Galaxyの時と同じでGo Launcherを。Xperiaホームのページ数を減らせればそれで良かったのに...

ブラウザとメッセンジャー系
 └Chrome
 └Kakao talk
 └Viper
 └Lineはバッテリーを良く食べるみたいなのでちょっと様子を見てから..
 └Skypeもまた今度

ツールとか
 └GTasks(ToDoと簡易メモ)
 └Solid Explorer(ファイラ)
 └AirDroid(wifiを使ってPCとファイルのやりとり)
 └3G Watchdog(通信料監視, 今回は要らない気もする)
 └Google Play music(google play music クライアント)

とりあえず、必要最低限だけ
あとは、プリインストールのアプリをいくつかアンインストール, 無効化

2012年10月18日木曜日

[AVR]AVRを始める(3)-USBで通信

赤外線カメラが早速ほこりを被りました

そして、盗まれた一代目ロードのTrek君に変わって二代目Corratecのバイクを買いました(*´ω`*)
Trekのより鍵のグレードは上げないといけないですが、鍵なんて所詮無力です...置いておくのが悪いんです...


また間が空いて、今回はUSBを使って通信をします。
USB変換モジュールは、秋月のFT232RLを使います。
COMポートもUSBも同じシリアルなのに、どのあたりが変換なのかよく分かりません。

前回までで、SP3232ECPを用いたシリアル通信はできたので、それをFT232RLに変えるだけです。
回路図は以下の通りです。


FT232RLとAVRの接続はデータの送受信に用いるTXDとRXDの二本だけです。
また、FT232RLはUSBから5V(または、3.3V)電源を出力する事ができますので、AVRへの電源供給に用います。簡単便利!


シリアル通信のソフトによってシリアルポートが開けなかった為、sanahi氏のAcknowrichでキャプチャしてテストを行いました。良さ気ですかね。

とりあえず、ここまででCOMポートの無いmacbook proに戻れそう。

次はJavaでシリアル通信をしたいと思います。

2012年10月4日木曜日

赤外線カメラの作り方

赤外線カメラを作りました。赤外線照射器と一緒に
SEALsの本 を読んでナイトビジョンに憧れて...本は凄く面白かったです

新しいデジカメをそろそろ買いたかったので、4年くらい前に購入したカメラを利用する事にします。

用意するもの
    1. デジカメ

      今回は、大分古くなったNikon COOLPIX P60を利用します。
      分解・改造するので、亡くなっても構わない物を用意しましょう。

    2. 光吸収・赤外透過フィルタ (IRフィルタ)

      IRフィルタは可視光領域をカットするフィルタです。暗闇で照射器と組み合わせて使うなら必要ないと思いますが、お昼に赤外線写真を撮影したい人は必要です。
      今回は富士フィルムのIRフィルタを使用しました。IR-xxと号数が振ってあり、号数の10倍の波長をカットします。JIS曰く、可視光の波長の上界は760-830nmらしいです。
      先人の方達は76号を使っている場合が多いように感じますが、近くのお店の在庫と相談して 80号 を使用しました。昨日の時点で近くのビックカメラには80号82号の2枚だけ在庫がありました。お店によって無いことも多そうです。
デジカメの改造
    1. カメラを分解します
      写真はP60のものですが、工程は似たようなものでしょう。
      フラッシュ用の大容量のキャパシタが内蔵されています。感電したら痛いです。気をつけましょう。
      筺体の底部, 側部のネジを外しカバーを開きます。
      液晶やアルミのシールド(? 放熱板?)を取り除き、イメージセンサにアクセスできる所まで分解します。
      二枚目の画像でAと書かれた、フレキシケーブルの接続されたシルバーのボードを開けるとCCD素子があります。

    2. フィルタの交換
      画像は撮り忘れましたが、CCD素子の前に光の当たる角度でピンク色に見えるガラス板があり、これがローパスフィルタです。このフィルタが赤外線領域をカットしています。
      ローパスフィルタを取り除き、そのフィルタと同サイズにIRフィルタをカットしローパスフィルタのあった場所に収めます。

    3. 元に戻す
      液晶等を基盤に接続し仮組みを行い、電源が入ること, (場所によるかもしれませんが)紫色の画像が液晶に表示される事を確認しデジカメを元に戻します。
      又開ける事もあると思いますので、ネジが2, 3本余っても気にしないでいきます。

      ローパスフィルタとIRフィルタは厚さが異なるため、取り替えるとピントが合わなくなると思います。同じ厚さになる様にガラス(アクリル)板を加える方も居るようです。
これで、赤外線カメラのできあがりです。
試しに手作りの赤外線照射器を使って真っ暗な部屋を撮影してみます。

肉眼では真っ暗ですが、撮影は出来てますね。残念なのは思ったより照射器の光量が小さい事ですね...
また、IRフィルタを少しカットし、デジカメのフラッシュをフィルタでカバーすると赤外線フラッシュになります。夜間の写真撮影ならばこれで十分です。照射器は必要ありません。

せっかくの赤外線カメラなのでスノー効果(?)など赤外線独特な写真も...?
画像の加工の仕方が分からないので、macのプレビューで適当に...これも練習ですね。

赤外線カメラは出来ましたが、ナイトビジョンはまだ達成できていないので赤外線照射器と一緒にまた後で...

*最後に、カメラの改造は自己責任です。どんな不具合が起きても対応する事はできません。撮影についても同様です。
ちなみに、透けたりムフフな事にはなりませんので、あしからず

2012年9月7日金曜日

[AVR]AVRを始める(2) - USART通信

少し間が開いて、AVRについて。

I/Oボードという事で、AVRとPC間で通信をさせたいです。
STK600にはUSBポートとRS-232Cが載っていますので、どちらかを使えばPCとの通信のテストが出来ると思っていました。
以下のコードでひたすらデータを吐き出し続けさせ、PCで観測させようと考えましたが全くできないので、諦めました...
STK600での方法をご存知の方が居られたら、是非ご教示下さい。


#define F_CPU 1000000UL // Clock Speed
#define BAUD 9600
#define MYUBRR ((F_CPU/16/BAUD)-1) //Asynchronous Normal mode

#include <avr/io.h>
#include <util/delay.h>

int main(void){
  unsigned char data = 0x01;
 
  UBRR0H = (unsigned char)(MYUBRR >> 8);
  UBRR0L = (unsigned char)MYUBRR;
  
  UCSR0B = (1 << RXEN0)|(1 << TXEN0);
  /* Stop bit:1, Parity: None, Data bits:8*/
  UCSR0C = (1 << UCSZ01)|(1 << UCSZ00);
 
  while(1){
    while(!(UCSR0A & (1 << UDRE0))){}
    //put data into buffer, send the data
    UDR0 = data;
    delay_ms(50);
    data = data + 0x01;
  }
}

仕方が無いので、一緒に買ったATMEGA328Pを使ってテストを行います。
STK600からISPのピンを引っ張ってフレッドボード上に組んだチップにプログラムします。
Atmel Studio上からプログラムする方法が判らなかった為、Avrdudeを用いて書き込みました。

AVRからRS-232Cを用いて通信する為のトランシーバにSP3232ECPを使います。
回路図は以下の通り。ISPを用いる事で、チップが基盤に実装されていてもプログラムする事が出来ます。(今回はピンの重複がないので、実際どうなるか分かりませんが...)
今回は電源は、ISPのピンから頂いています。
トランシーバIC周りのキャパシタや接地は省略しています。

上記のコードをプログラムし、PCのシリアルポートと通信させ受信を確認しました。

今日はここまで。
次は、送信とUSB変換について...

久しぶりにスパゲティコード

#回路図の作成にはBSch3を利用させて頂きました。

2012年8月30日木曜日

[AVR]AVRを始める(1)

センサーのデータを取得する為に、I/OボードをAVRで作る事にしました。
PICよりAVRの方が、研究室の中で人気らしいです。

まず、AVRを始めるにあたって評価ボードのAtmel社 STK600を使用することにしました。

チップはひとまず、STK600に付いてきたATMEGA2560を用いることにし、開発環境はAtmel Studio 6を使用します。
Atmel StudioはVisual Studioなんですね。

プロジェクトのプロパティでProgrammer(Tool)はSTK600を、DeviceはATmega2560に設定します。

STK600には、USBポートが載っているので簡単にライトできます。シリアルポート無くても良いんですね!

また、LED・タクトスイッチが8個載ってるので、入門用のプログラムを書いてみます。

まず、Hello World的に、LEDの点滅をさせます。PortBピンにLEDを接続しています。

#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
  unsigned char a = 0b00000001;

  DDRB = 0xFF;
  PORTB = 0xFF;

  while(1){
    PORTB = ~a;
    _delay_ms(500);
    PORTB = 0xFF;
    _delay_ms(500);

    if(a != 0b10000000){
      a = a << 1;
    }else{
      a = 0x00000001;
    }
  }
}

次に、タクトスイッチを押下した時対応したLEDを点灯させます。
PortAピンにタクトスイッチを、PortBにLEDを接続します。

#include <avr/io.h>
int main(void)
{
  unsigned char a;
  unsigned char x;
  
  
  DDRB = 0xFF;
  PORTA = 0xFF;
  PORTB = 0xFF;
  
  while(1){
    x = PINA;
    a = 0xFF & x;
    PORTB = a;
  }  
}


無事、LEDの点滅・点灯ができました。
今日はここまで。

Syntax Highlighterが使えない...