본문 바로가기

강좌/아두이노 강좌

아두이노 기초강좌 13. 조광 센서(LDR)로 LED 밝기 제어하기와 시리얼통신

드디어, 마지막 강좌입니다!

이번엔 센서를 이용해서 LED의 밝기를 제어할 차례가 왔습니다.

우리는 이번 회로를 위해 조광센서를 사용하려고 합니다. 조광센서는 어두운 곳에서의 저항 값이 크지만, 빛을 쬐여주면 저항 값이 떨어져서 전기가 잘 흐르게 됩니다. 일종의 빛에 반응하는 스위치인 셈이죠. 

회로를 한 번 구성해 볼까요?


어렵게 생각할 것 없이, 센서를 푸쉬버튼 대신 넣어주고, 신호를 A0핀으로 보내준다고 생각하시면 됩니다. 센서에 사용하는 저항은 10k옴 정도를 사용하시는 것을 추천드립니다. 


코드는 다음 코드를 사용하시면 됩니다. 


const int LED = 9;

const int SENSOR = A0;


int brightness = 0;

int val = 0;


void setup()

{

  pinMode(LED, OUTPUT);

  pinMode(SENSOR,INPUT);


  Serial.begin(9600);

}

void loop()

{

  val = analogRead(SENSOR);


  Serial.println(val);


  brightness = val/4;


  analogWrite(LED,brightness);


  delay(10);

}


보드에 코드를 업로드 하시면, 아래 동영상 처럼 주변 밝기에 따라 LED의 밝기가 변하는 것을 확인하실 수 있을 겁니다.



처음 보는 코드들이 나왔습니다. 이번에는 처음 보는 코드들에 대해서만 알려드리려고 합니다! 나머지 코드들은 앞의 강좌에서 배웠던 내용들을 되짚어보거나 복습하시면서 직접 읽을 수 있을 것입니다.


Serial.begin(9600);

Serial.println(val);


아두이노에 코드를 업로드할 때 우리는 USB포트를 이용해서 코드를 업로드 합니다. 재밌는 건, 이 포트를 통해서 아두이노에서 컴퓨터로도 데이터를 보낼 수 있고, 반대로 컴퓨터에서 아두이노로 데이터를 보낼 수도 있다는 점입니다. 이 기능을 사용하기 위해 쓰이는 것이 시리얼(Serial)객체입니다. 

아두이노 IDE를 실행해보시면 오른쪽 위 빨간 동그라미의 버튼이 보이실 텐데요, 저 버튼을 클릭하면 숫자가 계속 올라가고 있는 것이 보일겁니다. 저 모니터에 나타나는 숫자가 바로 우리가 사용한 조광센서에서 읽어온 'val'에 저장된 값입니다.

Serial.begin(9600)에서의 9600은 시리얼통신의 속도를 이야기하며 초당 9600비트를 의미합니다.

Serial.println(val)은 시리얼모니터(위의 빨간 동그라미 버튼을 클릭할 때 나타나는 창이 시리얼모니터입니다)에 val에 저장된 값을 프린트하고 다음 줄로 이동한다는 뜻입니다. 이 시리얼 통신이 중요한 이유는, 우리가 아두이노에서 센서 등으로 받아들인 값을 컴퓨터로 불러와서 컴퓨터의 다른 프로그램에서 응용할 수도 있고, 반대로 컴퓨터의 다른 프로그램에서 신호를 보내줘서 아두이노에서 특정 동작을 하게 만들 수도 있기 때문입니다.


val = analogRead(SENSOR);


analogRead는 아날로그 입력 핀으로 들어오는 센서의 값을 읽도록 하는 명령어입니다. 아날로그 핀에 들어오는 전압을읽어 0과 1023사이의 값을 반환합니다. 위 코드에서는 SENSOR핀의 값을 읽고 있는 것이죠.


brightness = val/4;


이 코드를 사용한 이유는 간단합니다. brightness는 analogWrite에 쓰일 것이기 때문에 최댓값이 255인 반면에, val의 최댓값은 1023입니다. 때문에 val에 4를 나눠줘서 최대값을 맞춰주는 겁니다. 



여기까지가 아두이노의 기초입니다. 여기까지 오시느라 고생 많으셨습니다!



이전 강좌 보기


2018/12/24 - [강좌/아두이노 강좌] - 아두이노 기초강좌 01. 아두이노란?

2018/12/24 - [강좌/아두이노 강좌] - 아두이노 기초강좌 02. 아두이노 설치하기

2018/12/24 - [강좌/아두이노 강좌] - 아두이노 기초강좌 03. 전기 이해하기, 전압, 전류, 저항

2018/12/24 - [강좌/아두이노 강좌] - 아두이노 기초강좌 04. 무작정 LED 켜보기

2018/12/24 - [강좌/아두이노 강좌] - 아두이노 기초강좌 05. 무작정 LED 켜보기 코드 분석

2018/12/29 - [강좌/아두이노 강좌] - 아두이노 기초강좌 06. 브레드보드, 빵판에 대하여

2018/12/29 - [강좌/아두이노 강좌] - 아두이노 기초강좌 07. 무작정 푸시 버튼으로 LED 제어하기

2018/12/29 - [강좌/아두이노 강좌] - 아두이노 기초강좌 08. 무작정 푸시 버튼으로 LED 제어하기 분석

2018/12/29 - [강좌/아두이노 강좌] - 아두이노 기초강좌 09. 푸쉬버튼과 저항을 써야하는 이유

2018/12/31 - [강좌/아두이노 강좌] - 아두이노 기초강좌 10. 무작정 on/off LED 만들기와 분석

2019/01/01 - [강좌/아두이노 강좌] - 아두이노 기초강좌 11. PWM을 이용해 LED밝기 제어해보기

2019/01/02 - [강좌/아두이노 강좌] - 아두이노 기초강좌 12. 푸쉬버튼과 PWM으로 LED밝기 제어해보기