A PHP Error was encountered

Severity: Notice

Message: Undefined index: HTTP_ACCEPT_LANGUAGE

Filename: core/KF_Controller.php

Line Number: 155

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

초급 예제

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

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

2015-01-16 14:40:06

개요

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Ω 저항 브레드 보드  점퍼 케이블
파트

 

하드웨어 making

브레드 보드

1. 오렌지보드의  5V핀을 브레드보드의 +버스에 연결합니다.

2. 오렌지보드의 GND핀을 브레드보드의 -버스에 연결합니다.

3. 조도센서를 그림과 같이 세로로 꽂습니다.

4. 10K 저항을 조도센서의 상단 단자에 연결합니다.

5. LED를 애노드 (긴 단자)가 아래쪽으로 향하게하여 꽂습니다.

6. LED의 애노드에 330Ω 저항을 연결합니다.

7. 조도센서의 하단 단자를 -버스에 연결합니다.

8. 10K 저항의 반대편 단자를 +버스에 연결합니다.

9. 조도센서의 상단 단자를 오렌지보드 A1번핀에 연결합니다.

10. LED 애노드와 연결된 저항의 반대 쪽을 오렌지보드 A0번핀에 연결합니다.

11. LED의 캐소드 (짧은 단자)를  -버스에 연결합니다.



 

전자 회로도



소프트웨어 coding

/*
 제목		: 조도센서로 어두워지면 LED 켜기
 내용		: 조도센서를 손으로 가려 어둡게 만들면 LED가 켜지도록 해봅시다.
 */

// 조도센서는 빛의 밝기에 대하여 전기저인 성질로 변환시켜주는 센서입니다.
// 조도센서를 아날로그 A1핀으로 설정합니다.
int cds = A1;
// LED를 A0핀으로 설정합니다.
int led = A0;

// 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
// 변수를 선언하거나 초기화를 위한 코드를 포함합니다.
void setup() {
	// 조도센서의 동작 상태를 확인하기 위하여 시리얼 통신을 설정합니다. (전송속도 9600bps)
	// 메뉴 Tool -> Serial Monitor 클릭
	Serial.begin(9600);
	// LED 핀을 OUTPUT으로 설정합니다.
	pinMode(led, OUTPUT);
}

// setup() 함수가 호출된 이후, loop() 함수가 호출되며,
// 블록 안의 코드를 무한히 반복 실행됩니다.
void loop() {
	// 조도센서로 부터 측정된 밝기 값을 읽습니다.
	// 조도센서로 부터 입력되어지는 전압의 크기 (0~5V)에 따라 0~1023 범위의 값으로 변환되어 반환합니다.
	int cdsValue = analogRead(cds);

	// 측정된 밝기 값를 시리얼 모니터에 출력합니다.
	Serial.print("cds =  ");
	Serial.println(cdsValue);

	// 조도센서로 부터 측정된 밝기 값이 50보다 크다면, 아래의 블록을 실행합니다.
	if (cdsValue > 50) {
		// LED가 연결된 핀의 로직레벨을 HIGH (5V)로 설정하여, LED가 켜지도록 합니다.
		digitalWrite(led, HIGH);
		// LED상태를 시리얼 모니터에 출력합니다.
		Serial.println("LED ON (cds > 50)");
	}
	// 조도센서로 부터 측정된 밝기 값이 50보다 작면, 아래의 블록을 실행합니다.
	else {
		// LED가 연결된 핀의 로직레벨을 LOW (0V)로 설정하여, LED가 꺼지도록 합니다.
		digitalWrite(led, LOW);
		// LED상태를 시리얼 모니터에 출력합니다.
		Serial.println("LED OFF (cds < 50)");
	}
	// 0.2초 동안 대기합니다.
	delay(200);
}

 

 

kocoafabeditor

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

오렌지 보드, 조도 센서, LED

김연주 2015-12-29 16:25:36

if(cdsValue>50) 이부분, cdsValue>500 정도로 하여야 손으로 가리고 안가리고에 따라 LED가 껐다가,켜졌다가 하더라구요. 그리고 else {
// LED가 연결된 핀의 로직레벨을 LOW (0V)로 설정하여, LED가 꺼지도록 합니다.
digitalWrite(led, LOW);
// LED상태를 시리얼 모니터에 출력합니다.
Serial.println("LED ON (cds < 50)");
} 이부분은 LED OFF가 맞을것 같네요!

kocoafab 2015-12-30 18:22:39

@김연주 감사합니다. ^^

kocoafab 2015-12-30 18:23:59

cdsValue의 경우 환경에 따라 오차가 있어, 조정이 좀 필요합니다.