HOME > natural science Laboratory > 学会へ行こう!プロジェクト > Event Driven Science > コンピュータ・サイエンス講座 > 講座内容

第5回 インターフェイス:センサからの入力によるA/D変換

文責:林 叔克 (2008年12月30日) カテゴリ:講座内容(5)


Figure:自然界とコンピュータ

自然界は、時間や物理量が連続的な値をとる世界です。ところがコンピュータは、時間や物理量を離散的にしか扱うことができません。そこで、連続的な量を離散的に扱う変換が必要になります。アナログからデジタルへの変換を行うさいには、連続的なデータをある離散的な区分に区切って、各区間ごとの代表点をサンプルします。ここでA/D コンバータが必要になります。A/D コンバータはアナログ信号をデジタル信号に変換する「変換器」の名称です。

例えば、入力可能なアナログ電圧が0~5V に対して、A/D コンバータが10 ビットである場合、1024 個の数を扱うことができるので、デジタルに変換したときの最小の電圧区分は、5/1024 = 5mV になります。ATMega168 には10 ビットのA/D コンバータが6 チャンネル用意されています。

A/D 変換の手順は

  • 1. レジスタA にAD 使用のためのビット情報を書き込む
  • 2. チャネルを選択する
  • 3. AD スターとのビットをたてる
  • 4. 変換完了ビットをみて、データレジスタ内の値を取り込む

AVR のA/D コンバータには内部基準電圧が用意されています。この内部基準電圧をA/D コンバータ内の基準電圧として使用します。
A/D 変換の変換値は、


で計算されます。


Figure:AD 変換の概念図

A/D 変換プログラミング

#include <avr/io.h>
int main()
{
	int x;
	DDRB= 0xFF; //PORTB はすべて出力
	DDRC= 0x00; //PORTC はすべて入力
	ADCSRA= 0x80; //AD コンバータ機能をON
	ADMUX= 0x01; //ch1 を選択(cds がつながっている)
	while(1){
		ADCSRA |= 0x40; //AD 変換スタート
		while(ADCSRA & 0x40); //変換終了待ち
		x=ADC; //変換した値をADC から取得
		PORTB= (x>>2); //上位8bit を表示
	}
	return 0;
}

光センサを使ったI/O プログラミング

光センサ

光センサとしてCds を用います。これは硫化カドミウムセルの略です。Cds は当たる光の量に従って抵抗値が変化する電子ディバイスです。光の量は抵抗値に変換され、セルに当たる光が多ければ、抵抗値は低くなります。約数百~数MΩ の広いレンジで電気抵抗が変化します。ただし反応速度は低いので、光通信には向きませんが、街灯を自動的にオン・オフさせるスイッチとしてよく使われています。


Figure:AD 変換の概念図

課題

手を光センサにかざしたら、音楽が鳴り始めるプログラムを書こう。スイッチからの入力の時に使ったif 構文による条件分岐を使います。センサからの入力であるADC をx に読み取って、x に関する条件分岐の構文を作ります。

赤外線センサを使ったI/O プログラミング

赤外線センサ

赤外線リモコン受信モジュールを使って、赤外線による信号を受信します。このもモジュールは、変調された赤外線信号を増幅・成形出力まで行うデバイスうです。市販品では38kHZ~40kHz あたりに変調された赤外線に対して受信感度のピークをもつものが多い。出力端子には、デジタル信号[0][1] に対応して、[0V][5V]が出力されます。

A/D 変換プログラミング

#include <avr/io.h>
int main()
{
	int l;
	DDRB= 0xFF; //PORTB はすべて出力に設定し、LED を点灯させる
	DDRC= 0x00; //PORTC はすべて入力に設定し、スイッチ類からの入力に使う
	DDRD= 0xFB; //D ポート2 番ピンにモジュールがあるので、そこを入力に使う
	while(1){
		if((PIND&0x04)!= 0) PORTB= 0;
		else{
			PORTB= 0xFF;
			for(l=0; l<10000; l++);
		}
	}
	return 0;
}

以下は毎回使うプログラムのコンパイルと転送コマンドです。いずれもスーパーユーザになってから実行します。スーパーユーザになるためにはsu と入力します。whoami と入力して「root」と表示されればスーパーユーザになっていることが確認できます。

  • 1. コンパイル命令:途中に小文字のo と大文字のOがありますが、いずれも「オー」です。avr-gcc -mmcu=atmega168 -o t
  • 2. 実行ファイルへの変換:大文字のオーがあることに注意してください。avr-objcopy -O ihex test1.elf test1.hex
  • 3. プログラムをボードに転送する命令:ep00 は「ゼロゼロ」です。avrdude /dev/usbdev1.1_ep00 -c usbasp -p m168 -


▲このページのトップNPO法人 natural science トップ

▲このページのトップNPO法人 natural science トップ




Warning: mysqli_connect(): (28000/1045): Access denied for user 'xsvx1015071_ri'@'sv102.xserver.jp' (using password: YES) in /home/xsvx1015071/include/natural-science/include_counter-d.php on line 8
MySQL DBとの接続に失敗しました