준비물 프링글스 1통, 아듀이노 우노, LED 2개(눈알로 쓸것들?), full LED 1개, usb연결 단자, 포토레지스터(빛센서), 컴퓨터, 인두 세트, 공구 및 기타 등등

준비물은 첫째날과 동일합니다. 단지 하는 일만 달라질 뿐! 지난 시간에 했던것들만 잊어버리지 않으신다면 진행하는데 문제없으실 거에요.

빛센서저 빨간 물결 치는 모양의 동글이가 바로 빛센서

지금 사진에 보이는 물결 모양에 동글동글한게 빛 센서인데 요걸로 LED를 켜는 신호를 주거나 끄는 신호를 줄 수 있는데요. 예를들면 센서를 가려서 빛에 노출 되는 양을 줄여서 불이 켜지게하거나 반대로 꺼지게 하거나하는 방식으로 쓸 수 있는 거죠.

요 녀석 역시 LED와 동일하게 긴다리가 (+) 짧은 다리가 (-)입니다. 지난 시간에 인두질(!)에 좀 익숙해지셨을테니 선을 각 다리에 연결하세요. 편의상 (+)는 빨강선을 GND에 연결할 (-)는 검은색선으로 땜질해서 연결해주세요. 저는 검은색선이 없어서 그냥 초록색 선으로 연결해 놓았어요.

다 하셨나요? 여기서 중요한 포인트가 있습니다! 센서같은 경우에는 작동하기 위해 필요한 단자들에는 뭐가 있을까요? 첫번째는 센서에서 보내준 신호를 받아줄 단자, 두번째는 GND단자, 또 한가지는 작동을 하기위해서 전원으로 쓸 단자가 필요하죠. 다리는 2개인데 써야할 단자는 3개인 거죠.4. 우선 전원 부분에 대해 더 이야기해 볼까요?

아듀이노왼쪽부분을 자세히보면 3.3v, 5v 단자가 보인다

아듀이노 왼쪽을 보면 3.3V, 5V라고 쓰여있는 단자가 있는데, 이부분이 바로 전원으로 쓸 단자들입니다. 이 단자를 통해서 직접 작동하기 위한 전류를 보내주기 때문에 이부분이 (+)부분 즉, 빨강선을 직접 연결해주시면 되는거죠.

우선 빨강선을 5V부분 단자에 직접 연결해주세요.

이제 남은 (-)선으로 두 단자를 연결해 주어야 하는데 이럴땐 어떻게 해야할까요? 그림에 보이는 것처럼 (-)에 연결된 선에 저항을 연결해 단자를 두개 만들어 한쪽은 GND에, 한쪽은 신호를 체크해줄 단자에 연결해 줘야합니다. 그리고 센서다 보니 값이 0,1뿐이 아니니 ANALOG 단자에 연결해주어야 합니다. 지난글에 이야기 했듯이 아날로그 신호 단자는 숫자 앞에 ~가 붙어있거나 A가 붙어있답니다. 사진처럼 해주시면 됩니다

이제 신호가 잘 들어오는 지 체크해야겠죠? 그림에서 보이 듯이 아듀이노 예제에서 01.Basics> AnalogReadSerial을 선택해서 화면을 체크해볼까요?

예제가 나오죠? 여기서 포트 번호만 아까전에 신호를 체크하기로 한 포트를 입력해주면 되는데요. 저는 A2로 했기때문에 A2로 하고 실행시켜보았습니다. 업로드는 지난글에 해보았으니 쉬울거에요.

void setup() {
 Serial.begin(9600);
}
void loop() {
 int sesorValue = analog(A2);
 Serial.printIn(sensorValue);
 delay(1);
}

이제 도구>시리얼 모니터를 확인해볼까요? 숫자가 막 나열되는데 이게 무슨 의미일까요? 빛센서를 손으로 가려보면 쉽게 알 수 있답니다. 손으로 빛센서를 가리니 숫자가 줄어들고 완전히 밀폐하니 0이 되네요. 반대로 손을 치우고 빛을 들어오게 하니 숫자가 올라가는 것을 알 수 있네요. 한마디로 나열되는 숫자는 빛센서가 감지하는 빛의 양이라고 이해하시면 쉬울 듯 해요. 이제 대충 어느정도에서 신호를 할지 정하시고 그 숫자를 기억해 놓습니다.

저같은 경우에는 살짝 손으로 가리면 신호를 주려고 40정도를 기준점으로 생각했습니다. 좀더 확실하게 완전 밀폐된 상태에서만 신호를 주려면 0을 기준을 놓으셔도 무방합니다.

모니터모니터의 숫자가 클수록 빛에 노출된 양을 의미한다는 것!

이제 남은 것은 코딩입니다. 예로 전에 깜빡거리게 했던 예제 LED 소스를 가지고 한번 해보도록 하죠. 전에는 단지 전원이 연결될때마다 깜빡거리게 했지만 이번에는 전원을 연결해도 빛센서를 손으로 가릴때만 구동되게 해볼 것입니다. 지난 예제 소스입니다.

/*
Blink 
Turns on an LED on for one second, then off for one second, repeatedly. 
This example code is in the public domain. 
*/
// Pin 13 has an LED connected on most Arduino boards. 
// give it a name: 
int left_eye = 5;
int right_eye = 7;
// the setup routine runs once when you press reset: 
void setup() {
 // initialize the digital pin as an output. 
 pinMode(left_eye, OUTPUT);
 pinMode(right_eye, OUTPUT);
}
// the loop routine runs over and over again forever: 
void loop() {
 digitalWrite(left_eye, HIGH); // turn the LED on (HIGH is the voltage level)
 digitalWrite(right_eye, HIGH);
 delay(2000); // wait for a second 
 digitalWrite(left_eye, LOW); // turn the LED off by making the voltage LOW
 digitalWrite(right_eye, LOW);
 delay(2000); // wait for a second 
}

첫번째로 빛센서를 연결해 놓았으니 빛 센서 포트가 어디인지 정의해줘야겠죠. 양쪽눈 포트를 정의해둔 곳 밑에 이런 식으로 정의해줍니다.

int light_sensor = A2;

void setup()의 경우 따로 건드릴 필요가 없습니다. 어쨋든 신호가 나가서 불이 켜질 대상은 두개의 LED니깐요.

이제 마지막 void loop()부분인데요. 여기서는 간단하게 if문을 써서 해결하도록 하죠.

// the loop routine runs over and over again forever: 
void loop() {
 if (light_sensor <= 40) {
  digitalWrite(left_eye, HIGH); // turn the LED on (HIGH is the voltage level)
  digitalWrite(right_eye, HIGH);
  delay(2000); // wait for a second 
  digitalWrite(left_eye, LOW); // turn the LED off by making the voltage LOW
  digitalWrite(right_eye, LOW);
  delay(2000); // wait for a second 
 };
}

다 되었네요! 이 if문의 의미는 light_sensor의 값이 40 이하일때만 깜빡거리게 한다는 것인데요. 이때 40은 아까전에 임의로 설정한 값이 되겠습니다.

이제 아듀이노 보드에 직접 업로드해보고 결과를 볼까요? 손으로 가리니 눈이 깜빡거리는 것을 볼 수 있네요^^.

이로서 아듀이노 두번째 날을 끝났습니다.

다음은 마지막으로 full Led를 갖고 노는 것을 설명할 예정입니다.



WRITTEN BY
강수명 Vanns Kang
하고 싶은거 하고 사는 조금은 잘 빡치는 평화주의자