I got a couple of new types of temperature sensors: LM92 (2-wire) and LM35 (analog). The LM35 was a drop-in replacement for the TMP36 I was already using, so that was easy enough. The LM92 required a bit more finesse, and learning about the Spark core libraries. I eventually found the built-in I2C library, and with some finagling eventually got it working. I'll leave it logging temperatures for the next 24 hours or so so I can get a good comparison. My initial impressions are:
1. The LM35 is a big improvement over the TMP36 in terms of noise. It might be enough to just go with the LM35, since it's super easy to use.
2. All three sensors are relatively self-consistent, but have huge amounts of error between each other: the TMP36, LM35, and LM92 think it's 25C, 28C, 31.5C respectively.
3. Comparing against my IR thermometer and the thermometer in my clock, the LM35 seems to be the most accurate so far. That makes it the most accurate, easiest to use, most reliable (LM92 doesn't always come up correctly on the bus, not sure why), and it uses the fewest pins. I'll collect data overnight, but so far it's looking like the LM35 is going to be the winner here.
18 hour Update:
I found a boolean math bug in my Spark code around parsing the LM92 results, which caused the graph to look like this:
I fixed the bug (I think). Maybe that will help the error margins. Other than that, the new sensors are looking good. (Note that while the TMP36 and LM35 have smoothing and the LM92 has none, the LM92 is still the smoothest.)