[Raspberry Pi] 조도센서 제어를 위한 프로그램 설치

amudomolla·2022년 5월 13일
0

Raspberry Pi

목록 보기
16/18

조도센서는 아날로그 핀에 연결해야 하는데 라즈베리파이는 ADC가 없다.
그래서 라즈베리파이에서 조도센서를 제어하기 위해서는 따로 프로그램 설치와 아날로그-디지털 변환 소자 연결 작업이 필요하다.

1. VNC 열기

1) Raspberry Pi Configuration 클릭

2) 순서대로 클릭

📌 SPI, I2C를 Enable한 후 Shutdown

2. 회로 연결

기판에 MCP3008(아날로그-디지털 변환 소자)과 조도센서를 연결 (MCP3208로도 가능)

3. 프로그램 설치

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   // 설치

4. 조도센서 테스트

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)
profile
👩‍💻 기록 및 복습을 위함

0개의 댓글