13.2.アナログ温度センサーによる温度計測
プロジェクト概要
Texas Instruments社の代表的なアナログ温度センサLM35DZ、またはLM61BIZを使用した温度計測プロジェクトです。LM35DZとLM61BIZとの違いは動作温度範囲、動作電圧、精度です。LM61BIZはマイナス温度が計測可能です。以下、基本仕様です。
LM35DZ LM61BIZ
動作温度範囲 0~100℃ -25~+85℃
動作電圧 4~30 V 2.7~10 V
出力電圧 10.0 mV/℃ 10.0 mV/℃
精度 ±0.75℃(室温±0.25℃) ±3℃(室温±2℃)
今回はLM35DZを使用しました。回路図、プログラムはLM35DZです。
LM35DZは動作電圧4V以上なので、電源は5Vに接続します。また
最大範囲は0~100℃で、出力電圧は0~1Vになり、ADCの入力範囲内になります。
LM35DZ(TO-92)は品番刻印側を正面に見て、左から1pin-5V 2pin-VOUT 3pin-GNDです。接続は以下です。
Pico LM35DZ
VSYS(5V) 1pin 5V
ADC0(GPIO26) 2pin VOUT
GND 3pin GND
温度の求め方はまず、バイナリ12bitのADデータを電圧に変換します。
const float ConversionFactor = 3.3f / (1 << 12);
float adVolt = (float)adc_read() * ConversionFactor;
1℃が10mVなので、以下で温度に変換します。
float ctemp = adVolt/0.01f;
部品リスト
LM35DZ 温度センサIC 1 アマゾン
GROVEの16 x 2 LCD 1 スイッチサイエンス
配線図

ソースリスト
float ReadLmTemperature()
{
adc_select_input(0);
float adVolt = (float)adc_read() * ConversionFactor;
float ctemp = adVolt/0.01f;
return ctemp;
}
int main()
{
stdio_init_all();
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
gpio_put(LED_PIN, 0);
i2c_init(I2C_PORT, 400*1000);
gpio_set_function(I2C_SDA, GPIO_FUNC_I2C);
gpio_set_function(I2C_SCL, GPIO_FUNC_I2C);
gpio_pull_up(I2C_SDA);
gpio_pull_up(I2C_SCL);
WaitTerminalStartup(30*1000);
printf("\nTerminal connected\n");
ScanI2CBus();
printf("I2C Scan completed\n");
lcd_init();
InitAdc();
InitRtc();
char buf[128];
datetime_t nowdt;
int presec = -1;
while (1) {
rtc_get_datetime(&nowdt);
if(presec != nowdt.sec)
{
sprintf(buf, "%02d/%02d %02d:%02d:%02d", nowdt.month, nowdt.day, nowdt.hour,nowdt.min, nowdt.sec);
lcd_set_cursor(0, 0);
lcd_string(buf);
float btemp = ReadOnBoardTemperature();
float ttemp = ReadLmTemperature();
sprintf(buf, "LM:%4.1f ADC:%4.1f", ttemp, btemp);
lcd_set_cursor(1, 0);
lcd_string(buf);
printf("%4d/%02d/%02d %02d:%02d:%02d Lm:%4.1f onborad:%4.1f\n", nowdt.year, nowdt.month, nowdt.day,
nowdt.hour,nowdt.min, nowdt.sec, ttemp, btemp);
}
presec = nowdt.sec;
sleep_ms(200);
}
return 0;
}
ソースリストは前章13.1のサーミスタとほぼ同じです。ReadLmTemperature()関数が追加され、mainでReadThermistorTemperature関数の代わりに呼び出されています。

上記画面にみるように、オンボード温度センサーと比較すると8℃程度高く、また変動も大きいです。これは12bit フルスケール3.3Vのところ0-1Vで取り込んでおり、精度が悪くなっています。対策としてLM35DZからPicoへの間にOPアンプ等でのレンジ変換、ノイズ対策の回路が必要になります。
コメントをお書きください