LM35DZという三端子の温度センサを使ってみた。
高精度IC温度センサ LM35DZ 0~100℃ [秋月電子]
【LM35DZ-N】高精度・摂氏直読温度センサーIC [マルツ]
 1℃あたり10mVの出力で、外付け部品なしの測定範囲は+2℃〜。Arduinoだとアナログ入力が使える。
作例はたくさんあるのでLCDに表示してみた。つかったのはLCDシールド
2012LM35DZ

ソースはこちら。https://gist.github.com/3724141 
→ https://gist.github.com/3725477

※A/D入力を℃に変換する箇所:ain*330/1024を修正。(ドライヤーで温めたらマイナス表示になってしまった)
float temp3v3(int ain) { // analog 0-1023 10mV/Celsius,3.3V*100/1024
  return ain*3.3*100/1024;
}



 今回使用したのはArduino UNO R3とArduino IDE1.0.1。A/Dコンバータの基準電圧に外部3.3Vを使用している。AREFピンと3V3ピンを接続し、スケッチ内でanalogReference(EXTERNAL); と指定した。

 ここでちょっと引っかかったのがanalogReference(INTERNAL)の指定。
http://arduino.cc/en/Reference/AnalogReference
これによるとATmega328でINTERNAL指定すると基準電圧は2.56V1.1Vになるらしいのだが、指定してみたらどうも3.3Vみたい。AREFピンに3V3を接続していたが、これを外すと値がおかしくなる。INTERNAL指定のままでAREFを5Vに接続したらそれが基準電圧みたいな動作をする。
Arduino UNO R3/Arduino IDE1.0.1ではINTERNAL指定もEXTERNAL指定も同じみたいだ。 

追記:MacOSXのArduino IDE1.0 と 0023でも同じだった。
解決:INTERNAL指定の時はAREFをつないじゃいけない。

ATmega328Pのデータシート、p.251 Figure 23-1. Analog to Digital Converter Block Schematic OperationをみるとA/Dコンバータの基準電圧はAREF端子に直に出ているので、INTERNALで1.1V指定していてもここに3.3Vをつなぐとそっちが勝つ。