라즈베리파이의 GPIO는 아두이노와 다르게 디지털 입력만 가능하다,
따라서 라즈베리파이에 별도의 ADC가 필요하고 이를 추가하는 방법에 대하여 알아보겠다.

MCP3008

MCP3008은 ADC, 아날로그 값을 디지털 값으로 변환해주는 컨버터 모델로


8채널로 이루어져 있으며 각각 아날로그 입력을 처리할 수 있다.

즉, 최대 8개의 센서를 연결하여 A-D 변환이 가능


하드웨어 회로도는 다음과 같다.


라즈베리파이 SPI 설정

MCP3008 칩을 이용, 변환된 아날로그 값을 전달받기 위해서 SPI통신을 활용하는데,
이에 따라 라즈베리파이에서 SPI통신을 사용하겠다는 설정이 필요하다.

sudo raspi-config
8. Advanced Options
A6 SPI
Y / OK

sudo nano /etc/modules // spidev 추가
cd ~
sudo apt-get install python-dev
git clone git://github.com/Gadgetoid/py-spidev.git
cd py-spidev/
sudo python setup.py install

// reboot

코드 실행(Py) 예제

cd ~
// home/pi로 이동
sudo nano mcp3008.py // nano 편집기 실행
import spidev, time

spi = spidev.SpiDev()
spi.open(0,0)
spi.max_speed_hz = 1350000

def analog_ read(channel):
r = spi.xfer2([1, (8 + channel) << 4, 0])
adc_out = ((r[1]&3) << 8) + r[2]
return adc_out

while True:
reading = analog_read(0)
voltage = reading * 3.3 / 1024
print("Reading=%d\tVoltage=%f" % (reading, voltage))
time.sleep(1)