CDS에 해당하는 글 1

[아두이노] 조도센서 제어

IOT/아두이노|2019. 2. 11. 13:34

[아두이노] 조도센서 제어



오늘은 간단히 조도센서를 제어하는 실험을 해보겠습니다. 조도 센서는 빛의 밝기에 따라서 전류값이 달라지는데 이 전류값을 아날로그핀에서 입력으로 받아서 빛에 의해서 어떤 행동을 하기 위한 곳에서 사용할 수 있는 재밌는 센서입니다. 쉽게 생각하시면 가로등을 예로 들 수 있겠죠. 밤이되면 조도센서를 이용해서 가로등을 자동으로 켜지게 할 수 있겠죠.

1. 회로도 구성


  • 준비물 : green led 1개, 조도센서 1개, 저항(220옴) 1개, 저항(10k옴) 1개, 아두이노우노, 뻥판
  • 내용 : 특정 조도센서값을 기준으로 green led에 불이 들어오게 한다.

A모델(-)방향 입력값B모델(+) 방향 입력값



어둠(0) ~ 밝음(255)
어둠(255) ~ 밝음(0)

2. 코딩


  • 사용함수 : Serial.begin( ), Serial.print( ), Serial.println( ), map( ), analogRead( ), pinMode( ), digitalWrite( )
  • 내용 : A모델을 기반으로 조도값이 100이하면 불이 들어오게 코딩을 해보자

  • 시리얼모니터 출력 :
    Serial.begin(9600)으로 시리얼통신을 사용하겠다고 선언
    Serial.print(출력값)은 출력값을 아두이노 IDE 시리얼모니터에 값을 출력하고 새로운 라인으로 안넘어감
    Serial.println(출력값)은 출력값을 출력하고 새로운 라인으로 넘어감

자세히 알고싶다면 => 출처 : https://www.arduino.cc/en/Serial/Println

  • green led 제어 :
    pinMode(핀, 모드)으로 전류를 출력할 핀 13번을 출력모드(OUTPUT) 사용하겠다고 선언
    digitalWrite(핀, 상태)은 13번핀을 HIGH(5V) or LOW(0V)로 전류를 출력할지 말지를 결정

  • 조도센서 입력 :
    map(입력값,입력최소값,입력최대값,변환최소값,변환최대값)으로 입력(0~1023)값을 자동으로 매핑시켜 (0~255)으로 변환시킨다. 즉, 알아서 크기에 맞게 값을 잡아준다고 생각하시면 됨.
    analogRead(아날로그입력핀) 전류의 값을 읽어옴

설계

  1. 조도센서를 읽어옴
    int m_cds = map(analogRead(cdspin),0,1023,0,255);
  2. 조도센서의 값이 100이하면 led가 켜지게 한다.
    if(m_cds){
    digitalWrite(greenpin, HIGH);
    }
    else {
    digitalWrite(greenpin, LOW);
    }

A모델 코딩을 실제 하면은

int greenpin = 13;
int cdspin = A0;

void setup()
{
  Serial.begin(9600);
  pinMode(greenpin, OUTPUT);
}

void loop()
{
  int m_cds = map(analogRead(cdspin),0,1023,0,255);
  
  Serial.print("CDS =  ");
  Serial.println(m_cds);
  
  if(m_cds<100) { 
     digitalWrite(greenpin, HIGH);  
  }
  else {
      digitalWrite(greenpin, LOW);  
  }
  
}

0~1023으로 잡고 시작하고 싶다면 map()함수는 필요 없겠죠. 입력값을 자신이 원하는 값(0~255)의 범위로 추가로 만들어 보았어요.

그냥 아날로핀값을 읽어서 그 값을 if문으로 해서 led에 불이 들어오게 할지 말지만 정하면 되니깐 위 코딩에서 절반이상 코딩량을 줄어 듭니다. 정확히 실험을 하기 위해서 그 값을 시리얼모니터에 줄력하기 위해 코딩이 늘어나고 또 입력된 값을 특정값의 범위로 맞추고 싶을때 map()함수가 추가되었을뿐 제어는 간단합니다.

if(analogRead(cdspin) < 300) digitalWrite(greenpin, HIGH);  

else  digitalWrite(greenpin, LOW);  

딱 두문장으로 끝낼 수 있죠. 원리는 이 두문장이고 약간 조미료를 추가한것이 A모델 코딩입니다. 원리만 이해하셔도 돼요.

결과



마무리


오늘은 간단한 실험을 해 보았습니다. 조도센서는 빛에 따라서 값의 변화가 일어납니다. 실제로 전류의 변화가 일어납니다. 이 전류값은 아날로핀으로 0~1023사이의 값으로 읽어오게 됩니다. 이 값을 기반으로 아두이노에서 제어를 하게 됩니다. 쉽게 떠오르는 것은 가로등이 있겠죠.

여러분들은 조도센서로 뭘 하고 싶으신가요. 예술가를 예를 들어볼께요. 어떤 작품을 만들었는데 그 작품에 빛에 반응한다고 생각해보세요. 그리고 RGB led를 작품에 부착한다면 조도센서값들에 따라서 작품은 다체로운 색상들을 만들어 낼 수 있다면 관람객과 소통하는 작품을 구현할 수 있겠죠.

또는 조도센서를 언제쯤 어두워지고 언제쯤 밝아지는지 데이터를 매일 수집하면 빅데이터로 활용도 가능해지겠죠.

한번 조도센서를 사용한다면 어디에다 사용할지 상상의 나래를 펼처보세요.


댓글()