조도센서는 아날로그 핀에 연결해야 하는데 라즈베리파이는 ADC가 없다.
그래서 라즈베리파이에서 조도센서를 제어하기 위해서는 따로 프로그램 설치와 아날로그-디지털 변환 소자 연결 작업이 필요하다.
1) Raspberry Pi Configuration 클릭
2) 순서대로 클릭
📌 SPI, I2C를 Enable한 후 Shutdown
기판에 MCP3008(아날로그-디지털 변환 소자)과 조도센서를 연결 (MCP3208로도 가능)
1) 연결 다친 후 다시 VNC 열기
💻 터미널 열고 명령어 입력
sudo nano /etc/modules
✍ spidev
추가하고 Ctrl+X -> Y하면 저장된다.
2) 프로그램 설치
중간에 [Y/n] 물어보면, y
입력
sudo apt-get install python-dev
git clone https://github.com/doceme/py-spidev.git
cd py-spidev // 설치한 py-spidev 폴더로 들어간 후
sudo python3 setup.py install // 설치
import spidev
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
LED = 18
GPIO.setup(LED, GPIO.OUT, initial=GPIO.LOW)
# 딜레이 시간(센서 측정 간격)
delay = 1
# MCP3208 채널 중 센서에 연결한 채널 설정
pot_channel = 0
# SPI 인스턴스 spi통신을 하기 위한 객체 생성
spi = spidev.SpiDev()
# SPI 통신 시작하기
spi.open(0, 0)
# SPI 통신 속도 설정
spi.max_speed_hz = 100000
# 0 ~7 까지 8개의 채널에서 SPI 데이터 읽기
def readadc(adcnum):
if adcnum < 0 or adcnum > 7:
return -1
# MCP3208과 통신하기 위한 패킷을 설정하는 작업
r = spi.xfer2([1, 8+adcnum <<4, 0])
# SPI를 통신을 통해서 받아온 센서 데이터는 8bit짜리 이고 이를 16bit로
# 통합하는 과정
data = ((r[1] & 3) << 8) + r[2]
return data
while True:
# readadc 함수로 pot_channel의 SPI 데이터를 읽기
pot_value = readadc(pot_channel)
if pot_value < 100 :
GPIO.output(LED, GPIO.HIGH)
else :
GPIO.output(LED, GPIO.LOW)
print("---------------------------")
print("POT value: %d" % pot_value)
time.sleep(delay)