やりたいこと
Arduino Uno R3と LM35DZ (温度センサー)を使ってシリアルモニタに室温を表示したい。
使うもの
- Arduino Uno R3(ここで実際に使用しているのはArduino Uno互換の DFRduino UNO R3)
- LM35DZ
- ジャンパワイヤ3本
- ブレッドボード
配線
LM35DZからの信号はA0のアナログピンで受け取る。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/* * LM35DZ_Temprature_Sensor.ino */ #define PIN_TEMPERATURE 0 void setup() { Serial.begin(9600); Serial.println("## LM35DZ Temprature Sensor ##"); } void loop() { //アナログ入力の信号強度を取得する int inputLevel = analogRead(PIN_TEMPERATURE); // ----(1) //信号強度を電圧に換算する float inputVoltage = (5.0 / 1024.0) * inputLevel; // ----(2) //10(mV) : 1(℃) = inputVoltage(V) : temperature(℃) float temperature = inputVoltage / (10 / 1000.0); // ----(3) Serial.print("InputLevel="); Serial.print(inputLevel); Serial.print(' '); Serial.print("InputVoltage="); Serial.print(inputVoltage); Serial.print(' '); Serial.print("Temperature="); Serial.println(temperature); delay(1000); } |
温度の求め方
Voutから出力される電圧(V)を温度(℃)に換算する。
Arduinoのアナログ入力は、0から1023までの1024段階(10ビット)の信号を受け取ることができる。
この信号の強さ(信号強度)をソースコードの(1)の部分で(A0のアナログ入力として)取得する。
「5V / 1024段階」を信号強度1単位として、信号強度から電圧を求める。(ソースコードの(2)の部分)
LM35DZは温度1℃の変化を10.0mVとしてVoutから出すようになっている。(LM35DZのデータシートを参照)
ので、「10(mV) : 1(℃) = inputVoltage(V) : temperature(℃)」の比から「temperature(℃)」を求める。
1(℃) * inputVoltage(V) = 10(mV) * temperature(℃)
↓ 展開して
temperature(℃) = (1(℃) * inputVoltage(V)) / 10(mV)
↓ 10mV を V 単位に変換して
temperature(℃) = (1(℃) * inputVoltage(V)) / (10(mV) / 1000(mV))
これがソースコード(3)の式になる。