The MCP3008 ADC is pretty cheap and easy to use with the Pi, so I bagged myself one.
Raspberry Pi Spy has got a really good tutorial on setting up an MCP3008 to read analogue sensors which I followed to get everything running, but the code didn't fit my needs so I created a python class for reading data from the MCP3008.
from spidev import SpiDev class MCP3008: def __init__(self, bus = 0, device = 0, channel = 0): self.bus, self.device, self.channel = bus, device, channel self.spi = SpiDev() def __enter__(self): self.open() return self def open(self): self.spi.open(self.bus, self.device) def read(self): adc = self.spi.xfer2([1, (8 + self.channel) << 4, 0]) data = ((adc & 3) << 8) + adc return data def __exit__(self, type, value, traceback): self.close() def close(self): self.spi.close()
The class is really easy to use, using Python's 'with' statement to control it:
with MCP3008(channel = 0) as ch0: print ch0.read()The code is here - github.com/martinohanlon/mcp3008