ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 아두이노 레시피 : 조도센서(CDS) 사용하기 - 기초편
    아두이노 레시피 2025. 2. 21. 15:20

    # Recipe 2. CDS 셀 (기초 편)

    CDS셀을 이용한 DIY 태양추적기(SolarTracker) by Giannis Arvanitakis hackster.io

    안녕하세요~ 아두이노 셰프입니다. 아두이노 스타터키트들을 보면 항상 빠지지 않고 등장하는 몇몇의 센서들이 있는데요. 오늘은 그중 빛의 양을 감지하는 센서인 CDS 셀을 사용하는 방법에 대해서 알아보겠습니다. 이 CDS셀은 여러 전자제품에서 밤낮을 감지하는 용도로 사용되고, 솔라트랙커를 만들 때도 사용할 수 있습니다. 여러 프로젝트에서 활용도가 좋은 이 센서, 그럼 한 번 사용해 볼까요?

    오늘의 재료 Ingredients


    <메인 재료>

    CDS 셀

    <그 외 재료>

    아두이노 우노

    수-수 점퍼케이블(5개)

    브레드 보드

    1kΩ 저항(1개)


    메이킹 방법 Steps

    Step 1. 선 연결하기 Wiring

    a. 먼저 CDS셀을 빵판에 연결해 주세요.(극성이 없으니 아무렇게 꽂아도 돼요)

    b. CDS셀 한쪽은 +에 다른 한쪽은 아두이노 A0번 핀에 연결해 주세요.

    c. CDS셀의 아두이노 A0번핀 연결된 극에, 1KΩ 저항을 연결해 주세요.

    d. 연결한 저항은 -에 연결해 주면 됩니다.

    (헷갈리신다고요? 그림 그대로 연결하시면 돼요ㅋ)

    - - - - - - - - - -

    Step 2. 아두이노 코드 Code review

    여러분의 요리가 훨씬 간편해질 수 있도록, 숙성이 필요한 코드는 언제나 제가 준비할게요ㅎㅎ

    #define cds A0
    //앞으로 A0핀을 ‘cds’이라 부르겠습니다. 선언합니다.
    
    void setup() { //여기 안에 있는 코드는 딱 한번만 실행됩니다.
    
    Serial.begin(9600);
    //9600의 속도로 시리얼 통신을 시작합니다.
    pinMode(cds,INPUT);
    //아두이노의 A0핀을 INPUT 모드로 설정합니다.
    //이제 A0핀에서 전기신호를 읽을 수 있습니다.
    
    }
    
    void loop() { //위의 Setup() 실행 이후, 여기 안에 있는 코드는 무한히 반복실행됩니다. 
    
    int data = analogRead(cds); 
    //여기 loop안에서만, ‘cds’에서 읽히는 정보를 ‘data’라 부르겠습니다.
    Serial.println(data); 
    //시리얼 모니터에 ‘data’의 값을 출력합니다.
    delay(500); 
    //0.5초 동안 아무것도 하지 않고 기다립니다. (1000 = 1초)    
    }

     

    Step 3. 동작시키기 Working

    ● 코드를 아두이노 우노에 업로드해 주세요.(업로드 완료 후에도 USB선은 뽑지 않고 유지합니다.)

    ● 시리얼 모니터를 열어주세요.(값이 표시될 거예요.)

    ● 손으로 센서 위를 가려보기도 하고, 위에 빛을 비춰보면서 값이 어떻게 바뀌는지 확인해 보세요.

    - - - - - - - - - -

    Step 4. 아두이노 코드 Code review

    읽기만 하기는 뭔가 아쉬우니, 코드만 살짝 바꿔서 조도센서로 LED를 조절해 볼게요!

    #define cds A0
    //앞으로 A0핀을 ‘cds’이라 부르겠습니다. 선언합니다.
    
    void setup(){  //여기 안에 있는 코드는 딱 한번만 실행됩니다.
    Serial.begin(9600); //9600의 속도로 시리얼 통신을 시작합니다.
    pinMode(cds, INPUT); //아두이노의 A0핀을 INPUT 모드로 설정합니다. 이제 값을 읽을 수 있어요.
    pinMode(LED_BUILTIN, OUTPUT); //내장된 LED를 OUTPUT 모드로 설정합니다. 이제 켜고 끌수 있어요. 
    }
    
    void loop(){ //위의 Setup() 실행 이후, 여기 안에 있는 코드는 무한히 반복실행됩니다. 
    int data = analogRead(cds); //여기 loop안에서만, ‘cds’에서 읽히는 정보를 ‘data’라 부르겠습니다.
    Serial.println(data); //시리얼 모니터에 ‘data’의 값을 출력합니다. 
    delay(500); //0.5초 동안 아무것도 하지 않고 기다립니다. (1000 = 1초)    
    
    if(data > 500){ //만약 센서의 값이 500보다 크면
    digitalWrite(LED_BUILTIN, HIGH);} //내장된 LED를 켜고
    else{ //그게 아니라면
    digitalWrite(LED_BUILTIN, LOW);} //내장된 LED를 끕니다.
    }

     

    Step 5. 동작시키기 Working

    ● 코드를 업로드해 주세요.

    ● 전처럼 손으로 센서를 가려보고, 또 빛을 비춰보세요.

    ● 변화에 따라 아두이노의 LED가 어떻게 변하는지 확인해 보세요.

    (아두이노의 LED는 ‘아두이노 로고’ 왼쪽에 있는 L 표시예요! )


    오늘의 레시피는 여기까지입니다~ 더 깊은 맛을 원하시는 분은 아래 과학시즈닝을 참고해 주세요!


    과학으로 양념하기” Seasoning

    센서에 대한 과학적 원리와 세부내용으로 레시피에 더 깊은 맛을 넣어봅시다.

    - - - - - - - - - -

    센서에 대하여

    과학원리

    CDS셀은 조도센서의 일종으로 빛의 양을 감지할 수 있는 센서입니다.

    이 이름은 어떤 약자가 아닌

    CD(카드뮴) S(황)이라는 황화카드뮴 그 자체를 의미합니다.

    이 황화카드뮴은 빛을 받는 양에 따라서 전기저항도가 달라져요.

    빛을 많이 받으면 전기저항도가 낮아져서 전기가 잘 통하게 되고,

    빛을 적게 받으면 전기저항도가 높아져서 전기가 잘 안 통하게 됩니다.

    이 특성 때문에 조도센서, 광센서로 많이 사용되고 있어요.

    동작원리

    저항(Registor)은 전류의 흐름을 방해하는 소자인데

    그 값에 따라서 방해하는 정도가 달라집니다.

    설명했다시피, CDS셀은 빛의 양에 따라서 저항값이 변하게 되는데

    즉, 이 CDS셀을 통과하는 전류의 양이 달라집니다.

    아두이노가 100%의 전류를 보내면

    CDS셀을 거쳐서 나머지 돌아오는 전류의 양을 A0번 핀에서 측정하게 되는 거죠.

    이렇게 빛의 양에 따라 달라지는 전류를 측정해서

    조도값을 표시할 수 있어요.

    CDS셀에 1kΩ 저항을 연결한 이유는

    A0핀에서 값을 읽을 때 생기는 ‘노이즈’를 방지하기 위해선데요,

    풀업저항, 풀다운저항을 이해해야 합니다.

    이 이야기는 다음에 해볼게요~

    - - - - - - - - - -

    코드의 동작 알고리즘

    알고리즘은 쉬운 말로 ‘진행절차’라고 할 수 있습니다.

    코드가 어떻게 동작되는지 알아볼까요?

    오늘 코드의 진행절차는 간단합니다.

    "읽는다." → "출력한다."→

    "값이 500이 넘으면 LED를 켜고" → "아니면 끈다."

    이번 코드에서는 아날로그값을 읽기 위해서 analogRead라는 함수를 사용했어요.

    아날로그를 간단히 설명하자면

    1과 0(전기가 통한다, 통하지 않는다.) 밖에 없는

    디지털과 달리, 전기의 세기를 나타내기 위해서

    디지털을 1024개로 나눈 값이에요.

    때문에 아날로그 값은 0~1023까지의 범위를 가진답니다.

    if조건문을 이용해서

    “A0번 핀에서 읽은 값이 500 이상이면 LED를 켜고”,

    else문을 이용해서

    “아니라면 LED를 꺼라”라는 명령문을 만들었어요.

    digitalWrite를 보면

    원래라면 핀번호가 있어야 할 자리에

    ‘LED_BUILTIN’이라는 녀석이 있는데요,

    아두이노에 있는 '내장형 LED'입니다.

    코드에서 지정해 주려면 LED_BUILTIN이라는 이름으로 사용해야 돼요.

    재밌는 점은 D13번 핀 하고 연동이 되어있어서

    LED_BUILTIN 대신 13으로 써도 된답니다ㅎㅎ

    - - - - - - - - - -

     

    센서요약 카드

    이름 : CDS 셀
    설명 : 빛의 양을 측정하는 센서이다. 빛이 많으면 저항값이 작아지고, 빛이 적으면 저항값이 커진다.

    센서의 구성 : (극성 없는) 두 극[핀]으로 구성되어 있다.

     

Designed by Tistory.