본문 바로가기

Arduino/[2] Arduino Module

[Arduino Module] #13. 조도 센서/모듈

728x90
반응형

아두이노 조도(CDS) 센서

조도센서(Photoresistor)는 빛의 세기에 따라 저항 값이 변하는 전자부품이다.

빛이 많이 들어오면 저항이 작아지고 적게 들어오면 저항이 커지는 황화카드뮴(Cadmium Sulfide)이라는 화합물을 사용한다. 아래 그림을 통해 조도센서의 모습과 아두이노 시뮬레이터에서의 조도센서 구성요소를 살펴보면 동그란 부분이 빛을 감지하기 위한 부분이며 전류가 흐르기 위한 두 개의 단자(Terminal)가 있다.

 

저항과 동일하게 극성이 없기 때문에 전원과 그라운드의 방향에 상관없이 연결할 수 있다.

출처: https://wikidocs.net/30790

회로도

조도센서의 한쪽 단자는 그라운드에 연결하고 다른 쪽 단자는 10KΩ의 저항을 지나 전원에 연결한다.

얼핏 보면 5장의 푸시버튼을 사용할 때의 회로구성과 매우 유사한다. 차이점이라면 푸시버튼의 경우 디지털 입력을 통해 값을 측정했다면 조도센서의 경우 아날로그 입력을 통해 값을 측정한다는 것이다.

회로도

스케치 코드를 보면 8번째 줄에서 analogRead() 함수를 통해 아날로그 A0핀에 연결된 조도센서의 값을 읽어 9번째 줄에서 Serial.println() 함수로 시리얼 모니터에 출력한다.

코드

void setup ( ){
	Serial. begin (9600);
	// 시리얼 통신 초기화
}
void loop(){
	int readValue = analogRead (A0) ;
	// 조도센서 값 측정
	Serial.printin(readValue) ;
	// 조도센서 값 출력
}

아두이노 조도(CDS) 센서모듈

조도센서 모듈은 CDS센서를 이용하여 빛의 감지에 따라 디지털과 아날로그 신호값을 출력하는 광량감지센서이다.

 

빛의 감지에 따라 ON/OFF 타입의 디지털 값이 출력되는 디지털 타입과 빛의 세기를 알 수 있는 아날로그 타입을 모두 제공하기 때문에 둘 중 원하는 타입을 골라서 사용할 수 있다.

 조도(CDS)센서모듈의 사용

다음 회로도에 따라 아두이노를 연결한다. 

VCC 5V
GND GND
D0 8번 PIN (디지털 수신/출력 시 사용)
A0 사용안함 (아날로그 수신/출력 시 사용)

 

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

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

3. 조도센서 모듈을 아래 그림과 같이 꽂는다.

4. 조도센서 모듈 위에 S로 표시된 핀을 A0번 핀에 연결한다.

5. 조도센서 모듈의 가운데 핀을 브레드보드의 +버스에 연결한다.

6. 조도센서 모듈의 남은 핀(-로 표시된 핀)을 브레드보드의 -버스에 연결한다.

 

 

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

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

 

조도센서도 일종의 저항이나, 빛의 양이 매우 많은 경우, 저항이 매우 작아져 과전류가 흐를 수 있다.  또한 조도센서의 저항 값에 따른 전압을 신호로 입력받기 위해서 10K 저항을 달아줘야 한다. 하지만 이번에 사용하는 조도센서는 모듈형태이므로 10K 저항이 내장되어 있어 사용할 필요는 없다.

int cds = A0;
// LED를 디지털 3핀으로 설정합니다.
int led = 13;

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

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

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

	// 조도센서로 부터 측정된 밝기 값이 50보다 크다면, 아래의 블록을 실행합니다.
    // 기준 밝기 값은 주변환경에 따라 조절해 주세요.
	if (cdsValue < 150) {
		digitalWrite(led, HIGH);
		Serial.println("LED ON (cdsValue < 150)");
	}
	// 조도센서로 부터 측정된 밝기 값이 50보다 작면, 아래의 블록을 실행합니다.
	else {
		// LED가 연결된 핀의 로직레벨을 LOW (0V)로 설정하여, LED가 꺼지도록 합니다.
		digitalWrite(led, LOW);
		// LED상태를 시리얼 모니터에 출력합니다.
		Serial.println("LED OFF (cdsValue > 150)");
	}
	delay(1000);
}
728x90
반응형
댓글