본문 바로가기

ARDUINO

Arduino #04 Switch (작성중)

 

 

본격 아두이노 다루기를 해보자!

 

 

 

이번에는 스위치의 입력에 따라 LED가 켜지는 동작을 하는 회로를 만들어 보겠다.

 

 

필요한 준비물은 아래와 같다.

  1. Arduino

  2. 브레드 보드

  3. Tact switch (TS-1212T-KNOB)

  4. LED (BL-B2134(333GD))

  5. 저항 (MFR 1/4W 1% 270ohm)

  6. 전선

 

 

우선 작업의 결과물은 아래와 같다.

 

 

완성된 회로도는 아래와 같다.

 

 

 

참고1. 브레드 보드에 대해..

  이제 브레드 보드의 사용법에 대해 알아야 할때가 되었다. 브레드 보드는 보통 대칭형태로 생겼다.

  중앙부가 두부분으로 나뉘어 있고, 양 옆으로는 빨란색(+)과 파란색(-)라인이 두줄씩 있다.

  양 옆의 라인은 가로로 이어져 있고, 중앙의 라인은 세로로 연결되어 있다.

    · 녹색: 파란색(-)라인에 GRD를 연결하면 한쪽의 파란색(-)라인은 모두 GND를 띄게 된다.

    · 자색: A, B, C, D, E 중 한군데에 연결을하면 A, B, C, D, E 어디든 해당 Pin과 연결이 된다.

   

 

참고2. 텍트 스위치에 대해..

  텍트 스위치는 초등학교 전기실험 때, 쓰는 스위치와 동작방식이 동일하다. (요즘도 하는지는 모르겠다..)

  스위치를 누르면 전류가 흐르고, 스위치를 떼면 전류가 흐르지 않는다.

  스위치를 구매할때는 노브(KNOB)가 있는 것을 구입하는 것이 편리하다. 노브는 스위치 덮개라고 생각하면 된다.

  텍트 스위치에는 보통 4개의 연결선이 있다. 같은 방향에 있는 두개의 Pin에 (+), (-)를 연결하면 작동한다.

 

 

 

완성된 스케치는 아래와 같다.

void setup() {
  //Serial.begin(9600);
  pinMode(2, OUTPUT);        // 2번 Pin을 출력용으로 사용
  pinMode(8, INPUT);           // 8번 Pin을 입력용으로 사용
}
void loop() {
  if (digitalRead(8) == 1) {     // 8번 Pin을 읽어 '1'인 경우 {} 안의 내용 실행 > 스위치가 눌렸는가?
    digitalWrite(2, 1);             // 2번 Pin에 1을 입력 > 2번 Pin에 전류를 흘림 > LED ON 
  } else {                           // 8번 Pin에서 읽은 값이 '1'이 아닌 경우 {} 안의 내용 실행 > 스위치가 꺼졌는가?
    digitalWrite(2, 0);             // 2번 Pin에 0을 입력 > 2번 Pin에 전류를 흘리지 않음 > LED OFF
  }
  delay(300);                       // 300 milli-second 동안 정지
  //Serial.print(digitalRead(8));
}

 

 

<참고1>에 의거해 스위치의 회로도를 분석해 보면,

스위치의 왼쪽 다리가 5V와 연결되었고, 오른쪽 다리가 저항이 연결된 GND와 8번 Digtal I/O와 연결되었다.

스위치의 왼쪽 다리는 5V가 흘러나온다는 것은 간단히 알 수 있다. 이 전류는 스위치가 닫혀 있으면 차단되고, 스위치가 눌려있으면 오른쪽 다리를 통해 8번 Digital I/O를 통해 흘러들어 간다. 이 아두이노 8번 Pin을 통해 스위치가 눌려있는지 확인하는 작업을 할 것이다.

문제는 왜 중간에 저항이 GND에 연결되어 있는가이다. 저항을 연결한 이유는 5V 전류가 흐르지 않을 때, 잉여값을 읽지 않기 위해서 이다. 잉여값이 무엇인지는 회로 구성을 완료하고, 저항을 제거해 보면 알 수 있다. 버튼을 누르지 않아도 전구가 깜박이는 것을 볼 수 있다. 저항없이 8번 Input으로 잉여값을 읽으면 값이 불규칙적으로 변화한다. 스위치를 눌러 오른쪽 다리로 5V를 흘린다면, 확실히 1이다. 그렇지만 스위치를 누르지 않아 5V를 오른쪽 다리로 흘리지 않는다면, 그냥 현재의 값을 읽게 된다. 1이 될 수도 있고, 0이 될 수도 있다. 8번 Pin에 연결된 전선의 연결부를 만져주면 변화가 더 무쌍하다.

저항이 하는 역할은...

 

!! 이부분은 설명이 좀 어렵다.. 저항은 설명이 어렵네...

 

 

LED 회로는 이전 실험과 다를바 없다. digitalRead(8)로 8번 digital I/O Pin의 값을 읽어, 결과값에 따라 1, 0을 써줘서 켜고, 끄는 동작을 지정해 준다.

 

마지막으로 delay(300);은 너무 빨리 동작할 필요가 없기 때문에 넣어줬다.

또, 저항을 제거하고 주석을 풀어주면 값이 항상 0이 아니라는 것을 확인 할 수 있다.

값은 Arduino IDE의 도구 > 시리얼 모니터를 통해 확인할 수 있다.

 

 

 

 

 

저항에 대해 추가 설명 필요

저항 읽는법, 사용법, 계산법,

 

 

 

 

 

 

 

 

 

 

 

 

 

'ARDUINO' 카테고리의 다른 글

Arduino #03 software  (2) 2012.08.13
Arduino #02 LED 다루기  (0) 2012.08.12
Arduino #01 시작하기  (2) 2012.08.11