温度をとってパソコンに渡す

XBeeが簡単にいったので気をよくして、温度センサに手を出す。
スイッチサイエンスさんが出されてる "Prototyping Lab Kit Vol.2" というのを入手しています。しかしこれは書籍「Prototyping Lab ―『作りながら考える』ためのArduino実践レシピ」が無いといけない。しかしまだ買ってなかったりする…。
それは今のところはともかく、このキットに LM35DZ という温度センサがあります。
これを使って、温度を取ってXBee経由でパソコンに飛ばす、というのをやってみました。
ピン配置、コードともに、全面的に
http://pscmpf.blogspot.com/2008/12/arduino-lm35-sensor.html を参照。
LM35DZ 一本でどうにかなります。

材料

  • LM35DZ
  • ジャンパ線 * 3
  • ブレッドボード * 1

本体に温度センサをつなげる

Vs, Vout, GND の配置も参照サイトにあるので、その通りに繋げる。Vsは5Vでつなげました。

コード

http://pscmpf.blogspot.com/2008/12/arduino-lm35-sensor.html をほぼまるうつし。
とりあえず確認したいだけなので、もとプログラムを一か所変更して、シリアルへの出力には println() を使用。

//declare variables
float tempC;
int tempPin = 0;

void setup()
{
  Serial.begin(9600); //opens serial port, sets data rate to 9600 bps
}

void loop()
{
  tempC = analogRead(tempPin);           //read the value from the sensor
  tempC = (5.0 * tempC * 100.0)/1024.0;  //convert the analog data to temperature

  // Serial.print((byte)tempC);             //send the data to the computer

  Serial.println(tempC);
  delay(1000);                           //wait one second before sending new data
}

これをコンパイル、アップデートしてやります。
"Serial Monitor" を開くと、1秒に1回、温度らしきものがずらずらっと出てきます。

なんで 5 かけて 1024 で割ってか

5.0 * tempC * 100.0 / 1024.0 について。
analogRead() の返り値が 0-5V を 0-1023 に変えたものなんだそうです。
http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=1874
"5.0 * tempC / 1024.0" で、返り値を電圧にしていると。
LM35DZは、温度係数が 10.0 mV/C と秋月さんのサイトに書かれてました。なので、Vに 100.0 をかけると、気温が出ます。

XBeeシールドをつなげる

問題は、パワー部がシールドに妨害されます。ある程度の空間があるので、ジャンパ線を突っ込んで曲げました。
あと、アナログ入力は本体は塞がりますが、シールドのアナログ入力に相当するところに刺せばOKです。
前述の通り、シリアルへのアウトがそのままXBeeに乗りますので、コードを変更せずに、そのまま送信受信できました。