Incorrect voltage readings from ADC and op-amp
After verifying that your input voltage is what you think it is, I suggest looking directly at what's in adc[1] and adc[2], and making sure what's in there looks like what you expect.

The best way to do this kind of stuff is to use a scope or logic analyzer to look directly at the SPI bus.

If you compare figure 6-1 in the MCP3008 datasheet  (the chip the user you took code from is using) to figure 5-1 for the MCP3002 chip you're using, you'll see that the 3008 requires one more bit to be clocked in on the DIN line than the 3002 does.  It's very likely that you need to modify your spi.xfer call to reflect this.

You need to read up on these communication protocols in the respective datasheets, try to understand what values your call "  adc = spi.xfer2([1,(8+channel)&lt;&lt;4,0])" is sending out on the Din line, and modify appropriately.

First glance,  "adc = spi.xfer2([1,13&lt;&lt;3,0])" will work to give you a single ended read on CH0 if you want MSB to shift out first, or  "adc = spi.xfer2([1,12&lt;&lt;3,0])" if you need the LSB first, but I don't know exactly how spi.xfer2 works, and I've only glanced at the data sheets.