반응형

[아두이노 실습] 밝기(조도) 측정하기

이번 글에서는 빛의 밝기를 측정하는 실습을 진행하겠습니다.

 

 

이 글에서는 아날로그 센서를 사용할 것 입니다. 아날로그와 디지털 신호는 일반적으로 전기적 신호를 통해 정보를 전송하는데 사용됩니다.  2가지 기술에서, 오디오 또는 비디오와 같은 정보는 전기 신호로 변환됩니다. 아날로그 기술과 디지털 기술의 차이점은, 아날로그 기술에서는 정보가 연속되는 진폭의 전기 펄스로 변환된다는 것입니다. 반면에 디지털 기술에서 정보의 변환은 각 비트가 2개의 다른 진폭을 나타내는 바이너리 형식 (0또는 1)으로 이루어집니다.

그런데 센서를 사용하게 되면 센서가 우리 주변의 아날로그 데이터들을 수집하는 역할을 합니다. 그리고 그 아날로그 데이터들을 디지털 데이터로 변환해주어 우리가 읽을 수 있게 합니다. 이번 글에서 다룰 센서는 photoresistor 라는 센서입니다. 다른 용어로는 light-dependent resistor, LDR 이라고도 합니다. 이 센서는 빛의 양에 따라 저항의 값이 증감하는 센서입니다

그래서 이번에 구성할 회로는 다음과 같은 특징을 가집니다. 주변환경의 밝기에 따라 LED의 밝기가 변화하는 회로를 구성할 것입니다. 만약 주변이 어둡다면, LED도 역시 어두워지고, 주변이 밝아지면 LED의 빛도 밝아지게 될 것입니다.

 

회로 구성은 그림과 같습니다. 지난 실습과 비교했을 때 조금 복잡해 졌습니다. 2k 1개와 220 이 필요합니다. 회로는 이렇게 작동합니다. 우선 아두이노 보드 하단에 빨간색 POWER 에서 전류가 흐르기 시작합니다. 전류가 photoresistor2k ohm을 지나면서 Ground(GND)로 들어가고 주변의 빛의 양을 측정합니다. 그리고 그 빛의 양에 따라 10번 디지털 핀에서 OUTPUT 모드로 전류가 나와 LED를 지납니다. LED를 지나면서 측정한 빛의 양만큼 LED 밝기 켜집니다.

 

스케치작성해보겠습니다. Setup 함수에서 10번 디지털 핀을 OUTPUT모드로 설정합니다. LED에 빛을 켜고 조절하는 역할을 10번 디지털 핀에서 하게끔 회로를 구성했기 때문입니다그리고 Serial.begin 명령을 합니다. 이는 시리얼 통신을 준비하는 단계입니다. 센서가 빛의 양을 측정해서 PC로 데이터를 전송하기 위해서는 시리얼 통신이 필수이기 때문입니다. 9600시리얼 통신 속도를 의미합니다.

시리얼 통신은 시간당 1비트를 연속해서 보내는 과정을 의미합니다. 만약 Serial.print(“Hello world”)를 작성한다면, 시리얼 콘솔 창에 “Hello World” 글자가 출력되는 것을 확인할 수 있을 겁니다. 그러나 Serial.begin(9600)은 아무것도 출력하지 않습니다. 이것은 초당 9600 비트로 시리얼 통신을 초기화합니다. 시리얼통신의 양 측(예를 들면, 아두이노 컴퓨터)은 동일한 시리얼 통신 속도를 사용하도록 설정해야 합니다. 만약 양 측이 처리하는 속도가 다르다면, 데이터를 잘 알아 들을 수 없게 됩니다. 그래서 전송하는 쪽과 전송 받는 쪽 모두 어느 속도로 사용할 것인지를 합의해야 합니다. 초당 9600비트가 아두이노 기본값이며, 대다수의 사용자에게 완벽하지만 다른 속도로 변경할 수 있습니다. Serial.begin (57600)은 초당 57600 비트로 전송하도록 아두이노 설정합니다. 전송할 데이터를 확인하기 위해 아두이노 IDE의 시리얼 모니터와 같이 컴퓨터에서 사용하는 소프트웨어의 속도를 모두 동일한 속도로 설정해야 합니다.

 

다음으로 Loop 함수를 보겠습니다. 아날로그 값을 읽는 아두이노 명령은 analogRead()입니다. 회로 구성을 할 때, Analog input A4 핀에 센서를 연결했기 때문에 analogReadA4로 설정합니다그리고 10번 디지털 핀이 analogWrite 명령을 통해 LED를 켜게 합니다. 이것은 HIGH(점등) 또는 LOW(소등) 값만 가지는 digitalWrite()과는 다른 작업입니다. analogWrite()는 주변의 밝기에 따라 LED 밝기를 설정하는데 사용될 수 있습니다이때, 4로 나눈 값을 설정하는 이유는 아날로그 핀은 10bit를 사용해서 값을 읽지만, 디지털 핀은 8 bit로 값을 표현하기 때문입니다. 10 bit로 나타낼 수 있는 수는 210제곱인 1024 이지만, 8 bit로 나타낼 수 있는 수는 28제곱인 256으로 4배 차이가 납니다. 따라서 아날로그 핀에서 읽은 데이터 값을 4로 나누어 디지털 값으로 사용합니다.

 

이제, 측정된 밝기가 얼마인지 모니터를 통해 쉽게 보기 방법을 설명하겠습니다Serial.print()Serial.println() 함수를 통해 가능합니다.

측정을 10ms마다 하게끔 delay를 설정해야 합니다이렇게 스케치 작성이 완료되면 컴파일을 하고 아두이노 보드업로드합니다.

 

위 그림은 빛의 밝기를 측정하고 그 결과를 시리얼 모니터에 계속 출력하는 것을 나타내고 있습니다

이 때 센서에 손전등을 비추면 LED의 밝기와 serial monitor 값이 변화하는 것을 확인할 수 있습니다. 반대로 센서를 손이나 종이로 가려봅시다. 이번에는 반대로 serial monitor에 프린트 되는 숫자의 값이 작아지는 것과 LED의 밝기 어두워지는 것을 확인할 수 있습니다.

 

이번 글에서는 photoresistor가 빛의 밝기를 측정하고 밝기에 따라 LED의 밝기를 조절하는 재밌는 실습을 진행했습니다.

댓글

Designed by JB FACTORY