초급 예제

누구나 쉽게 따라해볼 수 있는 쉬운 예제들입니다. 가볍게 도전~!

조도센서로 어두워지면 LED 제어하기

2018-11-30 14:28:58

개요

 

1) 조도센서란 무엇인가?


조도센서 (Photo Resistor)는 주변의 밝기를 측정하는 센서입니다.

광에너지 (빛)를 받으면 내부에 움직이는 전자가 발생하여 전도율이 변하는 광전효과를 가지는 소자를 사용합니다황화카드뮴을 (Cds)를 소자로 사용한 경우CdS 센서라고 합니다.
 

CdS센서는 작고 저렴하기 때문에 가장 보편적으로 사용되고 있습니다.

어두워지면 자동으로 켜지는 가로등자동차의 헤드라이트밝기에 따라 변하는 핸드폰 화면 액정 등 실생활에서도 쉽게 찾아 볼 수 있습니다.
 



 

2) 조도센서 사용방법


조도센서는 극성은 없으나 빛의 양에 따라 전도율이 변합니다빛의 양이 많아질 수록 전도율이 높아져 저항이 낮아집니다.
그러나
 전도율이 밝기에 비례하여 선형적으로 증가하는 것이 아니기 때문에 정확한 Lux 값을 구하기보다는 밝고 어두운 정도만을 판별하기에 적합합니다.
 

이 예제에서 사용된 조도센서 (CdS)는 옥외주차장휴식중의 극장 객석 정도의 빛의 양 (10 Lux) 에서 약 10KΩ의 저항을 가지며아무런 빛이 없는 암실에서약 200KΩ의 저항을 가집니다.
 

조도센서도 일종의 저항이나빛의 양이 매우 많은 경우저항이 매우 작아저 과전류가 흐를수 있습니다 , 또한 조도센서의 저항 값에 따른 전압을 신호로 입력받기 위해서 10K 저항을 달아줍니다. (2.4 저항의 용도 참고)
 

이 예제에서는 풀업 저항을 사용합니다풀업 저항 사용시조도센서의 저항값에 따라 전압 분배가 일어나며빛의 양이 많을 수 록 (밝을 수록측정되는 전압의 크기는 작아집니다
 

 

 

부품 목록

 

NO

부품명

수량

상세설명

1

오렌지 보드

1

 

2

조도센서

1

PGM5537

3

LED

1

LED(RED)

4

10KΩ 저항

1

 

5

330Ω 저항

1

 

6

브레드 보드

1

 

7

점퍼 케이블

7

 

 

부품명

오렌지 보드

조도 센서

LED

파트

 

부품명

10KΩ 저항

330Ω 저항

브레드 보드 

점퍼 케이블

파트

 

 

하드웨어 연결

브레드 보드 

 

1. 오렌지보드의 5V핀을 브레드보드의 중간쯤 연결합니다. 

2. 오렌지보드의 GND핀을 위에서 연결한 5V핀 아래에 연결합니다. 

3. 아래 그림과 같이 조도 센서의 한 쪽 다리 라인에 10kΩ 저항을 연결하고, 같은 라인에 오렌지보드 A0번 핀을 연결합니다.

4. 조도 센서 반대쪽 다리는 오렌지보드 GND핀이 연결된 라인에 연결합니다.

5. 10kΩ 저항의 반대쪽 다리는 오렌지보드 5V핀이 연결된 라인에 연결합니다.

6. LED 긴 다리가(+극) 아래를 향하도록 브레드보드에 연결해줍니다.

7. LED 긴 다리가 연결된 라인에 330Ω 저항을 연결해주고, 저항 반대쪽은 오렌지보드 3번 핀에 연결해 줍니다.

8. LED의 짧은 다리을(-극) 오렌지보드 GND핀에 연결해줍니다.

 

 

 

 

소프트웨어 코딩

// 조도센서를 아날로그 0핀(A0)에 연결합니다.
int cds = A0;
// LED를 3번핀에 연결합니다.
int led = 3
 
void setup() {
        pinMode(led, OUTPUT);
}
 
void loop() {
        // 조도센서로 부터 측정된 밝기 값을 읽습니다.
        // 조도센서로 부터 입력되어지는 전압의 크기 (0~5V)에 따라 0~1023 범위의 값으로 변환되어 반환합니다.
        int cdsValue = analogRead(cds);
 
        // 측정된 밝기 값를 시리얼 모니터에 출력합니다.
        Serial.print("cds =  ");
        Serial.println(cdsValue);
 
        // 조도센서로 부터 측정된 밝기 값이 220보다 크다면, 아래의 블록을 실행합니다.
        if (cdsValue > 220) {    
                // LED가 연결된 핀의 로직레벨을 HIGH (5V)로 설정하여, LED가 켜지도록 합니다.
                digitalWrite(led, HIGH);     
                
        // 조도센서로 부터 측정된 밝기 값이 50보다 작면, 아래의 블록을 실행합니다.
        } else {    
                // LED가 연결된 핀의 로직레벨을 LOW (0V)로 설정하여, LED가 꺼지도록 합니다.
                digitalWrite(led, LOW);      
        }
}
 
cs

<조도 센서를 이용해 LED 제어하기 소스1>

 

 

 

조도 센서를 사용해 조금 더 재밌게 LED를 제어해 봅시다. 

아래 코드는 map 함수의 기능을 활용합니다

센서를 통해 들어오는 값의 범위를 사용자가 지정한 값의 범위로 선형 변환 해주는 기능을 합니다. 

예를들어 센서 값의 범위가 100~200인데 이 값들을 10~20으로 변환하여 사용하고 싶을 때 map 함수를 활용하면 됩니다. 

 

 

// 조도센서를 아날로그 0핀(A0)에 연결합니다. 
const int cds = A0; 
// LED를 3번에 연결합니다. 
const int led = 3;  
// 조도 센서로 부터 측정된 밝기 값을 담을 변수를 선언합니다.
int cdsVal;  
 
void setup() {
        pinMode(led,OUTPUT);
}
 
void loop() {
        //조도 센서로 부터 측정된 밝기 값을 시리얼 모니터에 출력합니다. 
        Serial.println(analogRead(cds)); 
        //조도 센서로 측정된 센서값의 범위를 0~255까지의 범위로 선형 변환합니다.
        cdsVal = map(analogRead(cds),140,410,0,255); 
        //선형 변환된 값의 범위를 0부터 255까지로 제한합니다.
        cdsVal = constrain(cdsVal,0,255); 
  
        //조도 센서로 부터 측정된 밝기에 따라 LED의 밝기를 제어합니다.
        analogWrite(led,cdsVal); 
        delay(10);  
}
 
cs

 

 

<조도 센서를 이용해 LED 제어하기 소스2>

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

엔트리,코코아팹,오렌지보드,조도센서,entry,kocoafab,orangeboard,photoresistor,cds cell

박성진 2023-03-18 01:33:49

안녕하세요, 핸드폰 화면처럼, 주변이 밝아지면 더 밝아지고, 주변이 어두워지면 더 어둡게 만들 수도 있을까요?