본문 바로가기
Study/Arduino

arduino] 오토라이트컨트롤(LED+CDS)

by Answer Choi 2016. 10. 24.
반응형
요즘 대다수의 자동차에 달려있는 오토라이트 컨트롤 시스템

어두운곳에서는 라이트를 자동으려 켜주고, 밝은 곳에서는 자동으로 꺼주는 기능입니다.


원리는 간단합니다.


CDS센서로 조도를 측정한 후, 기준값을 잡아 기준보다 어두우면 라이트를 켜고,


기준보다 밝으면 라이트를 꺼줍니다.


아두이노를 이용해 간단하게 만들어 보겠습니다.^^




회로는 위 그림과 같이 연결합니다.


CDS의 경우 위 그림과 같이 연결하면 어두울수록 값이 높아지고, 


저항과 위치를 바꾸면 어두울수록 값이 낮아집니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define LED 13
int cdsVal=0;
 
void setup() {
  Serial.begin(9600);
  pinMode(LED,OUTPUT);
  digitalWrite(LED,HIGH);
}
void loop() {  
  cdsVal=analogRead(0);
  Serial.print("cds : ");
  Serial.println(cdsVal);
  if(cdsVal>600)
    digitalWrite(LED,LOW);
  else
    digitalWrite(LED,HIGH);  
  cdsVal=0;
  delay(1000);  
}
cs


위 코드는 1초마다 cds값을 읽는 구조입니다.


1초마다 cds값(조도)을 읽어 어두우면 LED를 켜주고, 밝으면 꺼줍니다.


아무래도 1초마다 측정을하고 제어를 하니 반응시간이 느립니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#define LED 13
int cdsVal=0;
int cdsSum=0;
int cnt=0;
 
void setup() {
  Serial.begin(9600);
  pinMode(LED,OUTPUT);
  digitalWrite(LED,HIGH);
}
void loop() {  
  cdsVal=analogRead(0);
  
  cnt++;
  cdsSum+=cdsVal;
  if(cnt==10){
    cnt=0;
    cdsSum=cdsSum/10;
    Serial.print("cds : ");
    Serial.println(cdsVal);
     if(cdsVal>600)
      digitalWrite(LED,LOW);
    else
      digitalWrite(LED,HIGH);  
    cdsVal=0;
  }    
}
cs


이 코드는 위의 코드에서 1초마다 딜레이 발생하는걸 없애 좀 더 빠릅니다.


매 순간 측정을 하여 LED를 제어하는데 너무 순식간이라 10번을 더해 평균값을


측정합니다. 


이유는 순간적으로 튀는 값을 잡아주기 위해서 입니다.




반응형

인기글