조도 센서를 이용한 조도 측정 > IoT 사물인터넷 유무선제어

본문 바로가기

[실습] 조도 센서를 이용한 조도 측정

필기자
2024-05-27 20:08 795 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 : 사용하지 않음

20240527200530_8c1bc2265a499b6fee8ef24b3ee416f1_ulle.png
20240527200544_8c1bc2265a499b6fee8ef24b3ee416f1_meim.png

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 핀이 다른 프로그램에서 재사용될 때 문제가 발생하지 않도록 함

 
20240527205555_8c1bc2265a499b6fee8ef24b3ee416f1_0x64.gif


 

댓글목록0

등록된 댓글이 없습니다.
게시판 전체검색