[실습] 조도 센서를 이용한 조도 측정
필기자
2024-05-27 20:08
2,172
0
본문
조도 센서를 이용한 조도 측정
목 적
- 라즈베리파이에 조도 센서 사용법을 이해한다.
1. 조도 센서 모듈 설치
2. 조도 센서 모듈 구동
1. 조도 센서 모듈 설치
- 조도 센서
- 조도 센서는 빛의 강도를 측정할 수 있는 센서
- 아날로그 및 디지털 출력을 제공하여 라즈베리파이와 같은 마이크로컨트롤러와 쉽게 통합할 수 있음.
- 환경 모니터링, 스마트 홈 시스템, 자동화 시스템 등 다양한 분야에서 사용됨.
- 기본 사양
- 전원 공급: 3.3V ~ 5.5V DC
- 출력 방식: 아날로그 출력(AO), 디지털 출력(DO)
- 감도 조절: 내장된 가변 저항을 통해 감도 조절 가능
- 빛의 강도 측정 범위: 보통 0 ~ 2000 루멘 (lm) (센서에 따라 다를 수 있음)
- 아날로그(AO)와 디지털(DO) 출력 차이
- 아날로그(AO) 출력
- 빛의 강도에 따라 연속적으로 변하는 전압 신호를 출력함.
- 라즈베리파이에는 아날로그 입력 기능이 없기 때문에, 아날로그-디지털 변환기(ADC)가 필요함.
- 이를 위해 ADS1115 모듈을 사용함.
- ADS1115는 고정밀 아날로그-디지털 변환기(ADC) 모듈임.
- 라즈베리파이와 같은 디지털 장치에서 아날로그 신호를 읽기 위해 널리 사용됨.
- 디지털(DO) 출력
- 디지털 출력(DO)은 센서가 감지한 특정 조건에 따라 디지털 신호(HIGH 또는 LOW)를 출력하는 방식으로, 조도가 설정된 임계값을 초과할 때 HIGH 신호를, 그렇지 않으면 LOW 신호를 출력함.
- 센서 모듈에 있는 파란색 가변 저항(트리머)을 사용하여 임계값을 설정할 수 있음.
- 시계 방향: 임계값을 높임 (더 높은 조도에서 HIGH 출력)
- 반시계 방향: 임계값을 낮춤 (더 낮은 조도에서 HIGH 출력)
- 디지털(DO) 출력 GPIO 연결
- GND : Ground 접지(핀 14)
- VCC : 5V Power(핀 2)
- DO : GPIO 17(핀 11)
- AO : 사용하지 않음
- 아날로그(AO) 출력
2. 조도 센서 모듈 구동
- 라즈베리파이 가상환경에서 파이썬 코딩
- VSCode에서 light_sensor_digital.py 파일 생성
- 조도 센서에서 빛의 강도 데이터를 읽어 주기적으로 출력하는 코드 실습
import RPi.GPIO as GPIO
import time
# GPIO 핀 번호 설정 (조도 센서의 DO 핀 연결)
SENSOR_PIN = 17 # GPIO 17 (핀 번호 11)
# GPIO 설정
GPIO.setmode(GPIO.BCM) # GPIO 번호 모드를 BCM 모드로 설정 (GPIO 핀 번호 사용)
GPIO.setup(SENSOR_PIN, GPIO.IN) # SENSOR_PIN을 입력 모드로 설정
print('조도 센서 값 읽기 시작...')
try:
while True:
# 센서 값 읽기
sensor_value = GPIO.input(SENSOR_PIN) # SENSOR_PIN의 디지털 값을 읽음
# 조도 값에 따른 출력
if sensor_value == GPIO.HIGH:
print('조도가 높습니다.') # 조도가 임계값을 초과한 경우
else:
print('조도가 낮습니다.') # 조도가 임계값 이하인 경우
# 1초 대기
time.sleep(1)
except KeyboardInterrupt:
print("프로그램 종료")
finally:
GPIO.cleanup() # GPIO 설정 정리
- GPIO.setmode(GPIO.BCM)
- 라즈베리파이의 GPIO 핀 번호 모드를 BCM(Broadcom SOC channel) 모드로 설정함.
- BCM 모드는 핀 번호가 아닌 GPIO 번호를 사용함.
- GPIO.setup(SENSOR_PIN, GPIO.IN)
- SENSOR_PIN(여기서는 GPIO 17)을 입력 모드로 설정함.
- 이는 조도 센서의 디지털 출력(DO) 핀이 이 핀에 연결되어 있음을 의미함.
- GPIO.input(SENSOR_PIN)
- 지정된 GPIO 핀의 현재 값을 읽음.
- 값이 HIGH(1)이면 조도가 임계값을 초과한 것이고, LOW(0)이면 임계값 이하임을 나타냄.
- GPIO.cleanup()
- GPIO 설정을 정리함.
- 이를 통해 GPIO 핀이 다른 프로그램에서 재사용될 때 문제가 발생하지 않도록 함
댓글목록0