[아두이노 강좌] 15. 아날로그 신호 입력받기 / 조도센서로 밝기 측정하기 / analogRead()

dd8457f7720c52a9512181cc3c4d2350_1462685
 

 

dd8457f7720c52a9512181cc3c4d2350_1462685 개요

 

아두이노는 아래 사진과 같이 A0~A5 총 6개의 핀을 통해 아날로그 신호를 입력받을 수 

있습니다. 이번 글에서는 아날로그 신호에 대해 다시 한번 되짚어보고, 아날로그 센서를

통해 직접 신호를 입력받아 보도록 할게요.


dd8457f7720c52a9512181cc3c4d2350_1462685

    그림1. 아날로그 신호 입력핀


 dd8457f7720c52a9512181cc3c4d2350_1462685

 

 

dd8457f7720c52a9512181cc3c4d2350_1462685 아날로그 신호

 

디지털 신호와 마찬가지로 아날로그 신호는 기기들간의 통신을 위한 전기적 신호입니다.

아날로그 신호는 여러개의 신호로 이루어지며, 아래 그림과 같이 연속적인 물리량 변화를

나타낼 수 있습니다. 

 

dd8457f7720c52a9512181cc3c4d2350_1462685 

          그림2. 아날로그 신호 

 

아두이노와 아날로그 신호를 연관지어보자면, 아두이노 우노의 아날로그 입력핀은 5V를 

인식할 경우 1023을 반환합니다. 그리고 0V를 인식하면 0을, 중간인 2.5V를 인식하면 

1023값의 중간인 512를 반환합니다. 이처럼 아두이노 우노는 0~5V의 전기적 신호를 

0~1023 총 1024가지의 신호로 반환합니다. (기본적으로 1024가지이지만 프로그래밍을

통해 조절할 수도 있어요. ^^)


dd8457f7720c52a9512181cc3c4d2350_1462686

 

dd8457f7720c52a9512181cc3c4d2350_1462686 조도센서란?

 

조도센서(황화 카드뮴셀:CDS)는 저항의 일종으로 외부 빛의 조도에 의해 저항값이 결정

됩니다. 빛이 강하면 저항 값이 낮아지고, 빛이 약하면 저항 값이 높아지죠. 이러한 성질을

이용하면 아두이노의 5V 전압에 밝기에 따른 저항(조도센서)을 연결하여 아날로그성 신호를

만들 수 있으며, 결국 밝기를 측정할 수 있습니다. CDS는 저렴하기때문에 가장 보편적으로

사용되고 있으며, 자동차 헤드라이트나 밝기에 따라 켜지는 조명등 여러 실생활에서 사용

되고 있습니다. 

dd8457f7720c52a9512181cc3c4d2350_1462686 

 그림3. 황화 카드뮴 셀 CDS 


 

dd8457f7720c52a9512181cc3c4d2350_1462687

 


dd8457f7720c52a9512181cc3c4d2350_1462687 아두이노와 조도센서 사용하기

 

아두이노의 아날로그 핀과 아날로그 센서(CDS)를 사용하여 밝기를 측정해봅시다.


dd8457f7720c52a9512181cc3c4d2350_1462687 준비물

dd8457f7720c52a9512181cc3c4d2350_1462687

dd8457f7720c52a9512181cc3c4d2350_1462687


dd8457f7720c52a9512181cc3c4d2350_1462687 회로도 연결

dd8457f7720c52a9512181cc3c4d2350_1462687
조도센서에 5V와 GND를 연결해줍니다. (10K저항 사용)

저항이 연결된 5V쪽에 A0을 연결해줍니다.

 

dd8457f7720c52a9512181cc3c4d2350_1462687

dd8457f7720c52a9512181cc3c4d2350_1462687 프로그램 코드 (5)


int cds = A0;       // 변수 cds를 선언하고, A0을 대입

 

void setup() {                     

Serial.begin(9600);  // 시리얼 통신을 시작하며, 속도는 9600으로 설정.

}


void loop() {                                

int val= analogRead(cds);  // 변수 val을 선언, cds(A0) 아날로그 값을 저장

Serial.println(val);   // 변수 val에 저장된 값을 시리얼 통신을 통해 출력.

delay(1000);     // 1초 동안 딜레이.

 }


dd8457f7720c52a9512181cc3c4d2350_1462687

 

dd8457f7720c52a9512181cc3c4d2350_1462687 프로그램 해석

변수 val에 아두이노 A0핀에 입력되는 아날로그 센서 값을 저장한 후 이를 시리얼 모니터로

출력하기 위한 프로그램입니다. 통합개발환경 우측 상단의 시리얼모니터로 센싱값을

확인해봅시다.



dd8457f7720c52a9512181cc3c4d2350_1462687

 그림4. 아날로그 신호 통신 과정

 

dd8457f7720c52a9512181cc3c4d2350_1462687

 

dd8457f7720c52a9512181cc3c4d2350_1462687 관련 함수 정리하기


■analogRead(핀번호)

아날로그 신호를 읽기위한 함수입니다.

매개변수

핀번호 - 아날로그 신호를 읽어들일 아두이노 핀번호 (A0~A5)를 설정합니다.

 

dd8457f7720c52a9512181cc3c4d2350_1462689 


여기서 잠깐~! 본 예제에서 활용된 회로를 보면 10k저항이 연결된것을 확인할 수 있습니다.

이 저항의 용도는 무엇일까요? (이 또한 전기의 성질과 연관이 있어요..)


dd8457f7720c52a9512181cc3c4d2350_1462689

자세한 내용은 여기를 클릭하여 확인해주세요. (옴의법칙, 전압분배법칙 알아보기)

메카리워즈 Image Map


모바일 버전으로 보기