[Session 02]_'빛'으로 'Arduino'와 친해지기

by Steve | 2017-03-15 19:35
LED 메이커 아두이노

재료

  • 가변저항(10K옴) 1개
  • Arduino Uno USB 케이블 1개
  • 저항(330옴, 1K옴) 1개
  • 점퍼선 1개
  • Breadboard 1개
  • 버튼 1개
  • Arduino UNO 1개
  • LED 1개



안녕하세요~

Steve입니다.


저번 [Session 01]에서는 Autodesk에서 제공하는  'Circuits'이라는 tool 사용법과 

Arduino의 기본 작동을 알아봤는데요.


이번 [Session 02]에서는 다양한 센서들을 활용해서

LED를 밝혀볼꺼에요~~

물론, 기본적인 부품을 활용하기에 Circuits을 그대로 사용할겁니다!!!


음... 그렇다면 센서들은 어떤걸 말하는 걸까요?

쉽게 말해서 사람의 눈, 코  입 등과 같이 말그대로 감각을 느낄수 있는 역할을 해준다고 생각하시면 된답니다!!!


자, 그럼 이번 Session에 필요한 부품들을 준비해 볼까요?!

[준비물]

01. Arduino UNO

02. Arduino UNO USB 케이블

03. Breadboard

04. LED

05. 저항(330옴, 1K옴)

06. 버튼

07. 가변저항(10K옴)

08. 점퍼선


첫 번째,

Arduino에 LED를 연결해서 빛을 내볼거에요~

저번 Session에서 Arduino를 연결하고,

코드를 업로드 했을때 Arduino 자체적으로 내장되어 있는 LED가 깜빡~깜빡 하는걸 확인해 보았죠?!

그 동작을 이번에는 LED를 직접 연결해서 확인해 볼거에요!!!


[회로도]


회로도의 구성은 이렇게 되구요~ 쉽죠잉~?? (Components에서 부품을 가져오시면 되요~)

LED를 연결할 때 극성 (+),(-)을 잘 보고 연결하셔야 해요~

LED 긴다리: (+) -> Arduino digital 13번 핀

LED 짧은다리: (-) -> 저항 330옴(주주갈)과 Arduino GND  


<주의사항>

Arduino와 부품을 연결할 때에는 

항상 컴퓨터와 Arduino를 연결해주는 USB 케이블을 뽑고 진행해주세요~

안그러면... 무슨일이 벌어질지 장담 못한답니다!!!


[코드 소스]

int led = 13; // LED 변수 설정 Digital 13번 핀


void setup(){ // 초기 설정(처음에만 실행 됨)

  pinMode(led, OUTPUT); // LED 출력

}


void loop() { // 무한 반복 실행 

  digitalWrite(led, HIGH); // LED 출력_ LED ON 

  delay(1000);             // 1초 지연(1000밀리초=1초)

  digitalWrite(led, LOW);  // LED 출력_ LED OFF

  delay(1000);             // 1초 지연

}


저번 Session과 같은 코드를 작성하고 Simulation을 해볼까요?!


[시뮬레이션]


Simulation을 누르면,

연결된 LED가 깜빡~깜빡하는걸 확인할 수 있나요?! (링크참조)

https://circuits.io/circuits/4183902-led_basic/embed#breadboard


아참!!

그리고 저번 Session에서 Mission 드렸던건 해보셨나요?!

위의 코드 중 노랑색 부분을 2000으로 바꾼다면,

LED가 깜빡~깜빡 했던 시간이 더 길어지는 걸 알 수 있죠?! (1000밀리초=1초)  




그렇다면 내가 원할때만 LED를 켜고 끌수는 없을까요?!

당연히, 가능하지요~~~

우리에겐 버튼이 준비되어있으니까요~~


자, 그럼

두번째,

버튼을 이용하여 LED를 켜고 꺼볼까요??


[회로도]


기존에 연결되었던 LED와 저항(330옴)은 그대로 두시고~

버튼만 새로 연결할거에요!!!

버튼은 안에 회로가 'H'로 생겼어요, 연결 할 때 주의하시구요~

한쪽에는 저항(1K옴), 다른 한쪽에는 Arduino digital 2번 핀에 연결해주시면 됩니다!!!


[코드 소스]

int BUTTON = 2; //디지털 입력, 버튼 변수 설정 2번 핀

int LED = 13; //디지털 출력, LED 변수 설정 13번 핀


void setup() {

  pinMode(BUTTON,  INPUT);

  pinMode(LED,  OUTPUT);

  //초기 설정_ 버튼 :디지털 입력, LED :디지털 출력

}


void loop() {

  int buttonState=digitalRead(BUTTON);

  

  if (buttonState==HIGH) {

    digitalWrite(LED, HIGH); // 만약 버튼이 눌렸을때, 디지털 출력 LED ON

  } else {

    digitalWrite(LED, LOW); // 그렇지 않고 버튼을 누르지 않았을때, 디지털 출력 LED OFF 

  }

}


[시뮬레이션]

Simulation을 했을 때,

버튼을 클릭할 때마다 LED가 켜졌다 꺼졌다하는 걸 확인할 수 있죠?! (링크 참조)

https://circuits.io/circuits/4184052-led_button/embed#breadboard




벌써 마지막이에요~ ㅠ.ㅠ

이번에는 LED가 단순히 ON_OFF되는 것이 아닌,

원하는 밝기로 조절해보는 단계입니다~~

물론 마지막 남은 가변저항을 이용하겠죠?!?!


그럼, 가변저항을 이용해서 LED의 밝기를 조절해 볼까요??


[회로도]


기존의 LED를 연결했던 부분은 그대로 남기고,

가변저항을 추가로 연결해 본 모습이에요~


가변저항의 가운데 핀: 아날로그 핀  A0

가변저항의 위쪽 핀: Arduino 5V

가변저항의 아랫쪽 핀: Breadboard (-) 라인

이처럼 연결이 되셨나요?!?!


[코드 소스]

int potentiometer = A0; // 가변저항을 A0핀으로 설정

int led = 13; //  LED를 13핀으로 설정(PWM)


void setup() {

Serial.begin(9600); // 시리얼 통신

pinMode(led, OUTPUT); // LED가 연결된 11번 핀을 OUTPUT으로 설정

}


void loop() {

int Value = analogRead(potentiometer);

         // 가변저항으로 측정된 값을 읽는다.

// 가변저항으로부터 입력되어지는 전압의 크기(0~5V)에 따라 0~1023 범위의 값으로 변환되어 반환


Serial.print("potentiometer = ");// 측정된 밝기 값를 시리얼 모니터에 출력

Serial.println(Value);// 밝기 값을 세로로 출력


Value = map(Value, 0, 1023, 0, 255);

        // 가변저항으로부터 측정된 값 (0~1023)을 아날로그 출력 값 (0~255) 범위로 변환

// LED가 연결된 핀으로, 변환된 값 만큼의 밝기로 켜지도록 설정

// 만일 측정된 값이 500 이라면, 디지털 핀으로 출력 할 수 있는 최대값 255의 절반에 해당되므로,

// LED가 5V 전류로 낼 수 있는 최대 밝기의 절반으로 해석 할 수 있다.

// 이는 디지털로 아날로그 신호를 보내는 펄스 폭 모듈레이션(PWM)에서 duty-cycle이 50%인 것으로 설정

// 디지털 핀의 PWM 주파수를 약 500Hz로 가정하면, 1초에 255번만 HIGH 신호를 보내는 것과 같습니다.

analogWrite(led, Value); // 아날로그 값 출력

delay(100);// 0.1초 동안 지연

}


주석이 정말 길죠?! 

하지만, 여기서 중요한건!!!

가변저항을 이용해 저항 값을 바꿀때마다'시리얼 모니터'에 밝기의 값이 아날로그 값으로 찍혀서 나온다는거에요!! 


즉,  가변저항을 움직일때마다

LED의 밝기는 어두워졌다~ 밝아졌다~

시리얼 모니터에는 밝기의 값이 출력!!! 이라는 한줄 정리입니다~~~

코드는 자꾸 보면 볼수록,

아~~아... 아!!!! 이런 반응이 나올거에요 ㅋㅋㅋㅋㅋㅋ 저도 그랬거든요~


하지만 아마 여러분은 금방 이 부분이 무엇을 뜻하는지 캐치해내실 수 있을 겁니다!!!


[시뮬레이션]


어때요?!

가변저항을 움직일 때마다 빛의 밝기가 달라지나요?!!

또, 옆에 시리얼 모니터를 클릭하면 밝기의 값이 출력하는걸 확인해 보셨나요?! (링크 참조)

https://circuits.io/circuits/4225097-led_10ktrimpot/embed#breadboard


총 정리를 해보면~~

01. Arduino와 LED 연결 (디지털 출력)

02. 버튼을 이용한 LED_ON_OFF (디지털 입력, 디지털 출력)

03. 가변저항을 이용한 LED 밝기 조절 (아날로그 출력)


오늘 벌써 3가지나 배워봤어요!!!

그렇다면, 


[Mission 02]

오늘 알아본 부품들을 활용해 무엇을 만들수 있을까?!


다음 Session에서는 좀 더 다양한 센서들을 이용해 LED의 빛을 내 볼 생각이에요~

오늘도 고생 많으셨구요~

행복한 하루 보내세요!!! 우리 다같이 화이팅!!!


to be continue... 

Techtreespace
http://techtree.space/

댓글 2

MADE BY

Steve

3d printing, design thinking, diy, 아두이노, 앱인벤터2
[Session 02]_'빛'으로 'Arduino'와 친해지기현재글 [Session 01]_'빛'으로 'Arduino'와 친해지기 이전글