본문으로 바로가기



스위치


우리가 흔히 사용하는 스위치는 전등, TV, 스마트폰등에 다양하게 쓰이고, 접하기 쉬운 제어장치 이다.

스위치의 종류로는 푸쉬버튼 스위치, 슬라이딩 스위치, 토글 스위치, 딥 스위치 등등 수많은 스위치들이 있다.


<이미지 출처 : google image>


우리는 이 중에서 푸쉬버튼 스위치(push button switch)를 사용하여 led를 제어해 보자.


주의점


푸쉬버튼 스위치를 사용할 경우에 1번과 3번, 2번과 4번으로 꽂지 않도록 주의한다.

1번과 3번, 2번과 4번은 서로 연결되어 있는 구조이므로 버튼을 누르지 않아도 쇼트 상태가 된다. 그러므로 푸쉬버튼 스위치를 사용할 경우에는 대각선으로 (1번에 꽂았으면 4번에, 2번에 꽂았으면 3번에)꽂으면 실수할 일이 없어진다.

pinMode에서 INPUT_PULLUP은 아두이노 내부적으로 풀업저항을 사용하겠다는 말이다. INPUT_PULLUP대신 INPUT만 사용하여도 되지만, INPUT만 사용할 경우 회로적으로 풀업저항을 만들어 주어야 한다. 이는 플로팅 현상을 방지하고자 달아주는 것으로 직접 회로를 만들기 보다는 아두이노 자체적인 풀업저항을 사용하면 편리하므로 INPUT_PULLUP을 사용한다.


플로팅 현상?


플로팅은 사전적 의미로 '유동적인'이라는 의미를 가지고 있다. 우리가 5V혹은 0V를 칩에 입력하였을 때 칩은 정확하게 HIGH와 LOW신호를 구분하지 못하는 애매한 상태가 있다. 이를 플로팅 현상이라 하며 주변의 전기장 상태에 따라 입력값이 불안정하기 때문에 칩이 정확하게 전압을 인식하지 못하여 오류가 발생한다. 이를 해결하기 위한 것이 풀업저항, 풀다운저항이다.


풀 업(PULL-UP), 풀 다운(PULL-DOWN)


<풀 업 회로도>

풀 업 회로도의 경우 스위치를 누르지 않을 경우에 전기적인 신호 1을 보내므로 LED가 켜지게 된다.

스위치를 누를 경우에는 바로 일직선에 있는 GND로 전류가 흐르게 되므로 전기적인 신호는 0을 나타낸다.


<풀 다운 회로도>

<이미지 출처 : http://egloos.zum.com/saruchi/v/2082600>

풀 다운 회로도는 풀 업 회로도와 반대로 생각하면 된다.

스위치를 누르지 않을 경우에는 전기적인 신호는 0, 스위치를 누를 경우에는 1을 나타내어 led를 켜주게 된다.


준비물


아두이노, 브레드보드, 점퍼케이블 7개, LED2개, 저항300Ω(330Ω) 2개, 푸쉬버튼 스위치 2개


회로도




소스 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int sw1 = 12;
int led1 = 10;
int sw2 = 5
int led2 = 3;
 
void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(sw1, INPUT_PULLUP);
  pinMode(sw2, INPUT_PULLUP);
  //sw를 인풋_풀업으로 하여 스위치가 열려있다면 HIGH
  //스위치가 닫혀있다면 LOW값을 반환
}
 
void loop() {
  if(digitalRead(sw1) == LOW) //스위치가 눌리면
    digitalWrite(led1, HIGH); //led On
  else
    digitalWrite(led1, LOW);  //스위치가 닫히면 Off
  
  if(digitalRead(sw2) == LOW)
    digitalWrite(led2, HIGH);
  else
    digitalWrite(led2, LOW);
}
cs

ex2_Switch_led.ino


결과 영상