NOMOTO Tomonori(PGP Public Key)

2006年02月10日

10円と20円のチロルチョコレート

Introduction

 チロルチョコレートといえば駄菓子屋さんで売っているチョコレートの定番だ。このチロルチョコ、元々発売当初は今のような1個ずつではなく3つ山だったそうで*1、最近復刻版が売っている。のもとも復刻版をこないだ試してみたのだが、普通にヌガーのチロルチョコレートだった。最近は「きなこもち」味のチロルチョコなど、変わった味もいろいろあって、神大生協でも何故か箱で売っていたりする。この「きなこもち」味は本当に…というか何故チョコレートできなこ餅を食べるんだ…というくらいきなこ餅の味がすると思う。

 さて、最近はコンビニでもチロルチョコレートが売られているが、何故か20円もする*2。なんか高くなったな…なんて思っていたのだけれど、よくよく見てみると10円のチロルチョコレートよりもだいぶ大きい。数日前たまたま10円と20円の両方のチロルチョコレートを買ってきたので、2つを比べてみることにした。

Experimental

20円のチロルチョコレートはミルク味で、ファミリーマートで21円で購入したもの。10円のチロルチョコレートも同じくミルク味、神大生協LANS2F売店で10円で購入したものだ。これら2個のチロルチョコレートについて、外観、重さを比べてみることにする。外観は普通にデジカメで撮影して縮小している。重さは電子天秤で測定して小数点2桁まで読んだ。

Results and Discussion

まずは外観から。

Fig.1 左側が10円のチロルチョコ、右側が20円のチロルチョコレート.

やはり20円のチロルが明らかに大きい。体積的には2倍くらいの雰囲気だ。そこでためしに重さを天秤で測ってみたところ、

  • 10円チロルチョコ(ミルク):6.94グラム
  • 20円チロルチョコ(ミルク):11.50グラム

となった*1。確かに2倍くらいだ。

正確には20円チロルは10円チロルの倍より2グラムほど少し軽いのだけれども、チロルチョコは外側・内側の2層構造であるし、包装紙の重さのことも考えると、2倍と言っても良いように感じられる。

Conclusion

…そんなわけで、チロルの10円と20円は大体価格相応の大きさだと言うことがよく分かった。


ちゃんちゃん。(さいごのほう腰砕け。(^_^;; )

*1: なお、製品にはばらつきがあるはずなので、実際には小数点以下2桁でもおそらく多すぎるだろうね。

投稿者 nomoto : 23:58 | いろいろ | コメント (14)

2006年02月09日

NOMOTO.ORG掲示板運用終了

これまで、HippLinerMolStatのサポートも兼ねてNOMOTO.ORG BBSというものを作っていましたが、書き込みが少ない上に、数日おきにスパム攻撃にさらされている*1ことから、運用を終了します。

今後はのもとに直接メール頂くか、該当する日記項目にコメント頂ければと思います。

これまで書き込んでくださった皆様、ありがとうございました。

*1: 不思議なのは、メールアドレスもURLもなくて、もはや宣伝の体をなしていないスパム投稿がいくつもあること…。

投稿者 nomoto : 23:13 | いろいろ | コメント (0)

2006年02月08日

とある分光器とIGOR XOP(その2)

2/7のつづき…。

MC-10Nを制御するに至るための第2の関門は、分光器コントローラ内蔵の計測技研USBDAQからデジタル信号を入出力できるようにすること。

USBDAQには流石にサンプルソースが添付されていたのでまだ分かりやすかったのだけれど、のもとはDAQというものを使ったことなかったし、それにサンプルの内容は1種類の処理をするプログラムでしかなかったので、結局分からなくなってメーカーに電話することに…。

計測技研は普通に分かりやすく教えてくれたので感謝。

(中略)…こうしてUSBDAQから読み書きができるようになり、そしてなんとか分光器も動かせるようになったのだった。

ここまでくればあとはIGOR XOPにするだけ。*1

XOPは作ったことあったしサンプルは豊富に添付されているので、数時間で作成完了。

無事、IgorProからMC-10Nが動かせるようになったのだった。

めでたしめでたし。


折角なので、今後MC-10N&DU-2もしくはUSBDAQを使う人のために、サンプルを載せておく*2

たったこれだけの処理をするだけなのに、サンプルソースが添付されていなかったばかりに資料集めから始めてTTLで幅3μ秒以上のパルスをDAQから送るには…とかなんとか考えながらやることになってしまったのが如何ともしがたい。

/*
 * MC10N & DU-2 monochromator with USBDAQ test program
 * 7th February 2006 by Tomonori NOMOTO
 */

#include<stdio.h>
#include<windows.h>
#include<tchar.h>

#include"usbdaq.h"

#define USBDAQ_ENUM_FAILURE      1
#define USBDAQ_OPEN_FAILURE      2
#define USBDAQ_WRITEPAGE_FAILURE 3
#define MC10N_LOWER_LIMIT        4
#define MC10N_UPPER_LIMIT        5

// Prototypes
int initialize();
int finalize();
int init_300nm();
int send_pulses(int number, int interval);
int marker_state_300nm();
int marker_state_100nm();
int is_0nm_limit();
int is_1300nm_limit();

/* Global Variables */
HANDLE hdl;

int main (int argc, TCHAR **argv)
{
	initialize();
	// 各関数を使用するときはコメントを外す
	//init_300nm();		// 300nm 位置にイニシャライズするとき
	//send_pulses(100, 30);	// 正転方向に100パルス送信(10nm動かす)。間隔:30(わりとゆっくり)
	finalize();
	return 0;
}


int initialize()
{
	TCHAR dev_id[64];
	TCHAR *dev_name;
	dev_name = NULL;
	hdl = NULL;

	usbdaq_init ();
	if (usbdaq_enum (0, dev_id, sizeof (dev_id) / sizeof (TCHAR))) return USBDAQ_ENUM_FAILURE;	// IDを取得できない場合エラー
	dev_name = strdup (dev_id);

	if(!usbdaq_open(&hdl, dev_name) && hdl) return 0;	// USBDAQをオープンできればreturn 0
	return USBDAQ_OPEN_FAILURE; // オープンできない場合エラー
}

int finalize()
{
	if(hdl) usbdaq_close (hdl);
	usbdaq_final ();
	return 0;
}

int init_300nm()
{
	int markerL=0;
	int error_code;

	while(!marker_state_300nm())	// 300nmイニシャルマーカーがHである間
	{
		if(error_code = send_pulses(-50, 2)) return error_code;	// 高速で50パルス(5nm)逆転方向に動かす
	}
	
	while(!markerL)		// 100nm毎マーカーがH→Lになるまで
	{
		if(error_code = send_pulses(+1, 30)) return error_code;	// 低速で1パルス(0.1nm)正転方向に動かす
		if(marker_state_100nm()==1) markerL=1;	// 100nm毎マーカーの状態読出
	}
	return 0;
}

int send_pulses(int pulses, int interval)
{

	int sign;	// pulsesの正負判定用
	if(pulses > 0) sign = 1;	// 正転パルス
	else if(pulses < 0) sign = -1;	// 逆転パルス
	else return 0;	// なにもしない

	if(interval < 1) interval = 1;	// intervalの下限
	if(interval > 1000) interval = 1000;	// intervalの上限
	if(pulses > 6000) pulses = 6000;	// pulsesの上限
	if(sign < 0 && !is_0nm_limit())     return MC10N_LOWER_LIMIT;	// 0nmリミットから逆転する場合エラー
	if(sign > 0 && !is_1300nm_limit())  return MC10N_UPPER_LIMIT;	// 1300nmリミットから正転する場合エラー

	{
	struct usbdaq_page pPage;
	memset(&pPage, 0, sizeof (pPage));	// pPageを0で埋めてアロケート

	// ページ0:デジタル出力に予め0を送ってHにする
	if(usbdaq_writepage(hdl, 0, &pPage)) return USBDAQ_WRITEPAGE_FAILURE;	// 失敗すればエラー

	// パルス送信
	{
	int i;
	for(i=0;i<sign*pulses;i++) // 10パルスで約1nm移動
	{
		// L出力
		if(sign == 1)
		{
			// 正転パルスL出力(0000000000000001)
			pPage.value[0]=0x0001;
		}
		else if(sign == -1)
		{
			// 逆転パルスL出力(0000000000000010)
			pPage.value[0]=0x0002;
		}
		if(usbdaq_writepage(hdl, 0, &pPage)) return USBDAQ_WRITEPAGE_FAILURE;

		// H出力(intervalで指定した回数だけHを出力して間隔を開ける)
		{
		int j;
		for(j=0;j<=interval;j++)
		{
			// H出力
			pPage.value[0]=0x0000;
			if(usbdaq_writepage(hdl, 0, &pPage)) return USBDAQ_WRITEPAGE_FAILURE;
		}
		}
		// 波長位置チェック
		if(sign < 0 && !is_0nm_limit())     return MC10N_LOWER_LIMIT;	// 0nmリミットから逆転する場合エラー
		if(sign > 0 && !is_1300nm_limit())  return MC10N_UPPER_LIMIT;	// 1300nmリミットから正転する場合エラー
	}
	}
	}
	return 0; // 正常終了で0を返す
}

int marker_state_300nm()	// H=0, L=1(270〜290nm以下でL, 以上ならH)
{
	struct usbdaq_page pPage;
	memset(&pPage, 0, sizeof (pPage));
	// ページ12:デジタル入力の読み出し
	if(usbdaq_readpage(hdl, 12, &pPage)) return -1;	// 読み出し失敗
	if((pPage.value[0] & 8)==0) // 8(00001000)はIN4:300nmイニシャルマーカー出力
		return 0;	// 300nm marker 'H' = over 300nm
	else
		return 1;	// 300nm marker 'L' = under 300nm
}

int marker_state_100nm()	// H=0, L=1(マーカー出力の状態)
{
	struct usbdaq_page pPage;
	memset(&pPage, 0, sizeof (pPage));
	if(usbdaq_readpage(hdl, 12, &pPage)) return -1; // 読み出し失敗
	if((pPage.value[0] & 4)==0) // 4(00000100)はIN3:100nm毎マーカー出力
		return 0;	// 100nm marker 'H'
	else
		return 1;	// 100nm marker 'L'
}

int is_0nm_limit()	// H=0, L=1(Hならリミット)
{
	struct usbdaq_page pPage;
	memset(&pPage, 0, sizeof (pPage));
	if(usbdaq_readpage(hdl, 12, &pPage)) return -1; // 読み出し失敗
	if((pPage.value[0] & 2)==0) // 2(00000010)はIN2:下限リミット出力
		return 0;	// 0nm limit 'H'
	else
		return 1;	// 0nm limit 'L'
}

int is_1300nm_limit()	// H=0, L=1(Hならリミット)
{
	struct usbdaq_page pPage;
	memset(&pPage, 0, sizeof (pPage));
	if(usbdaq_readpage(hdl, 12, &pPage)) return -1; // 読み出し失敗
	if((pPage.value[0] & 1)==0) // 1(00000001)はIN1:上限リミット出力
		return 0;	// 1300nm limit 'H'
	else
		return 1;	// 1300nm limit 'L'
}

*1: IgorProとXOPについては別の機会に…。

*2: XOPそのものがほしければのもとまでどうぞ。

投稿者 nomoto : 00:05 | 実験 | コメント (5)

2006年02月07日

とある分光器とIGOR XOP(その1)

大西研にリツー応用光学という会社のMC-10Nという分光器(モノクロメータ)がある。

最近、この分光器をIgorProから制御するためのXOPを作った。

この分光器、コンパクトな分光器(f=10cm)で悪くはないものだとは思うのだけれど、PCから制御できるようになるまでの道のりは長かった。

なんせ納品時にはハードウェア類(分光器&PCと通信する用のUSB接続DAQユニットとステッピングモータを制御する回路入りの箱)と、内蔵のUSBDAQのドライバ類一式、動作確認用サンプルプログラムしか入っていなかったのだ。

動作確認用サンプルプログラムが入っているし何が問題なの?…と思われるかもしれない。

ところが、このプログラムはバイナリだけのサンプル。ソースコードは添付されていない。

しかも、USBDAQとその先のステッピングモータを制御するための信号の資料も何一つ添付されていなかった。

まかりなりにも計測機器のPC制御用ハードウェアなんだから、普通なら実際の装置を動かす分光器アクセス用ライブラリやサンプルソースの1つや2つ、添付されて然るべきだよねー。

正直、「これでどうやってプログラム作れというのジャ!! 箱開いてこっちで回路解析して、動くようにプログラム作れとでも言うのか?」と思った。

そこでメーカーに電話して聞いてみた。そしたら、

「USBDAQのドライバとサンプルプログラムが入っているから動かせると思いますが…。」

で、サンプルプログラムのソースは契約上出せないと…。

ご冗談でしょう。…と思いながら、

「そうですか、ソース出せないですか。でもDAQユニットがステッピングモータを動かすためには電気信号を送らないといけないですよね。そのための信号の資料が全然添付されていないんですけど、なんとかならんのですか??」

とかなんとか、いまいち通じない相手に話すこと数十分。やっとこさ信号資料を送ってもらうことに成功した。

こうして、制御に至る第1関門はなんとかクリアした。

投稿者 nomoto : 23:52 | 実験 | コメント (0)

2006年02月05日

Distagon 35mm F2.8

1/30に書いたとおり、のもとはYashica FX-3 Super2000を所持しているのでZeissのレンズが使いたければヤシカコンタックスのレンズを買えばよい。

そんなわけで本日、コンタックスのレンズを手に入れた。

↑Yashica FX3 Super 2000とDistagon 35mm F2.8

考えてみると、コンタックスのレンズは15年越しの買い物だ。

はじめてコンタックスのレンズ&カメラで撮影したプリントを見たのは中学校の修学旅行のとき。同行の写真屋さんのカメラがコンタックス*1で、スナップ写真の色がびっくりするくらい綺麗だった。金閣寺の写真が見事に決まっていたのを覚えている。

だから、安価にコンタックスレンズが使えるヤシカブランドのカメラ、FX-3 Super 2000が出たときには買おうかどうか思い悩み、結局市場からFX3が消滅する寸前、やっと手に入れたのだった(5年くらい前)。

↑Yashica FX3 Super 2000とML50mm F1.9

ところが、肝心のツァイスのレンズを一本も買っていなかった。

…というのも、のもとが買ったFX3にはヤシカのML50mmF1.9が付属していたので、Planar50mmF1.4やTessar45mmF2.8を買うにはちょっとバリアが大きすぎたのだ*2

そして、どうしようかなぁ…なんて考えているうちに、京セラがカメラ事業撤退、気がつけば量販店からヤシカコンタックスのレンズは消えていた。


今日はカメラ店を数軒回ってやっとDistagon 35mm F2.8を見つけた。

新品のDistagon 35mmF1.4が残っている店もあったけど、FX-3でスナップを撮るのにF1.4はちょっと大きすぎるし、16万は高すぎる。

購入したDistagon 35mm F2.8 MMはちょっと高め(中古,¥30000)だったけど、レンズ自体はすごく綺麗な個体だったからまあ良しとする*3

次のターゲットは、いつになるかわからないけどPlanar 85mm F1.4の予定*4

まぁ今日買った広角側標準レンズ:35mmを使い込みながら、ゆっくりと探していくことにしよう。

*1: 今考えると139Qあたりかなと思う。すごくコンパクトな機種だったから。

*2: 初期のFX3 Super2000のように付属レンズがズームレンズだったら、真っ先にPlanar50mmF1.4を買ったのだけれどねー。

*3: 実は3本在庫があって、MMが¥30000×1、AEが¥22000×2あった。ただ、AEの1本にはレンズカビがあって、もう1本は絞りリングが良く使い込まれていた。

*4: Tessar 45mm F2.8もほしい。

投稿者 nomoto : 22:33 | いろいろ | コメント (0)