温度センサーとAD変換機能を用いて温度を測定するのが目的です。電子的に温度を自動測定することで、温度に関する制御をすることができます。
T = a * Val + bとなります。ここで、二つの温度の水と標準となる温度計を用意します。温度T1のとき AD 変換した値を val1、温度T2 のとき AD 変換した値を val2 とします。
T1 = a * Val1 + bT1,T2、Val1、Val2 がわかれば、a,b をとくことができます。a,b を計算すれば、val から T への変換式が定まります。
T2 = a * Val2 + b
setup_adc_ports(AN0);//A0端子をアナログ入力AN0として利用する setup_adc(ADC_clock_div_32);//クロックは内部クロックの1/3216F873は6本のアナログ信号端子があります。まず、まず 、set_adc_channel(0) で読み込む端子(チャンネル)を指定し、少し時間を置いてから read_adc() で変換値を読み込みます。PICは10bitで読み込むことができますが、この場合、先頭で
#device ADC=10の指定が必要です。読み込む値は10bitの場合、変数は long 型で宣言します。指定なし、または、ADC=8 の場合、8bitで読み込みます。
set_adc_channel(0);//チャンネル0切り替え
delay_us(60);//60μ秒待つ aval = read_adc();
温度測定回路は次のようになります。この他に、温度の表示、測定時の時刻を知るためのRTC回路、測定値を記憶するためのメモリ回路、PCとの接続回路があれば、温度データの長期自動測定回路が完成します。図では明示していませんが、OPアンプの電源接続が必要です。4ピンをグランド、8ピンを5Vに接続します。
温度センサーの出力(3ピン)にコンデンサ 0.1 μF を接続しましたが、これは、変換時のノイズを吸収するためです。また、AD変換をするときが電源のノイズに注意する必要があります。
変換した値がばらつく場合、9Vの電源を利用し、3端子レギュレータで5Vに落として使用すると、電源のノイズを軽減できます。簡単に測定する場合、オペアンプを省略して、温度センサーの出力を直接PICのA0端子(2ピン)に接続します。
温度測定のプログラムは、普通のアナログ変換と同じです。校正をする前は、AD変換値 aval のみを表示します。二つの温度で、比例定数 a,b
を求めたら、変換式を追加します。ここでは、
tmp = 2*aval ; LM25DZの場合
tmp=3*aval-67;LM60の場合
としています。
//温度センサーをAD変換で読み込む //センサーはLM35DZまたはLM60 //AD変換は8bit //変換式はセンサーで異なる //A0にセンサーの出力Voutを接続 //センサーは 左からVCC,Vout,GND //printfで結果を表示する #include "16f873A.h" #device ADC=8 #fuses HS,NOWDT,NOLVP,put,brownout //内部クロック、WDT,LVPなし #use delay(CLOCK=20000000) #use RS232(BAUD=9600,xmit=PIN_C6,rcv=PIN_C7)//use delayの後に配置する int count; long aval; float tmp; main() { printf("nstart log\n"); setup_adc_ports(RA0_ANALOG);//アナログ入力設定 //setup_adc_ports(PIN_A0);//エラーになる場合 setup_adc(ADC_CLOCK_DIV_32);//クロック設定 set_adc_channel(0);//チャンネル0切り替え delay_us(60);//60μ秒待つ while(1){ aval = read_adc(); printf("AD input : %ld\n\r",aval); tmp = 2 * aval;//LM35DZ //tmp=3*aval-67;//LM60 printf("now temperature : %3.1f\n\r",tmp); output_toggle(PIN_B0); delay_ms(500);//500mS待つ }//while return 0; }
温度センサとして、s8100-B も利用できます。これは、下図のように、-60〜100 の間で出力電圧が直線的に変化します。電圧は5Vで利用できます。
VT=4.0*(VS-1.0)と変換するわけです。これで、VSが2VのときVTは4V、VSが1Vのとき、VSは0Vになります。VSが1Vいかになると、VTが負になりますが、気温が90度を超える心配はないでしょう。
センサーの端子は以下のようです。2ピンをグランド、1ピンを5Vの電源に接続します。3ピンにセンサー出力が得られます。
逆方向に接続すると、発熱して壊れますから、注意してください。
下図は 二つに信号の差 (IN+ - IN-) を計算し、(R2/R1) 倍するOPアンプ回路です。二つのR2とR1は同じ値にする必要があります。
IN- に1V を設定し、 R2/R1 を 4程度 に設定すれば、目的の回路になります。しかし、IN+ にセンサの信号を接続すると、センサの電圧が変化してしまいます。そこで、次のように、バッファー回路をセンサーとOP差分回路の中間に入れます。1Vの電圧は、5Vの電源電圧を二つの抵抗で分圧して作ります。