SWITCH

스위치는 전자제품의 전원을 켜거나 끌 때, 혹은 전자기기를 조작할 때 사용하는 제어장치.

스위치 사용법 : PUSH버튼

단추 모양의 버튼은 스위치를 동작시키는 역할을 하며, 하단의 4개 단자는 회로와 스위치를 연결하는 다리 역할을 합니다.

단자연결은 대각선 방향이 한 쌍으로 연결되어있음. 전류는 좌측상단단자에서 우하단 단자로 흘러들어감.

버튼을 누르는 동안 전류를 흘려주는 A type
버튼을 누르는 동안 전류를 차단하는 B type
부품명 수량
아두이노 우노 R3 1
브레드보드 1
330Ω 저항 1
10KΩ 저항 1
포토 레지스터 1
5mm LED 1
푸쉬 버튼 1
점퍼케이블 5

회로도

브레드보드 레이아웃

센서연결

PUSH Button 한 쪽 GND
PUSH Button 다른 쪽 10KΩ 저항

coding

/* push button 연결하기
   누르면 LED가 켜지도록 만들어 봅시다.
*/
const int button1Pin = 2;  //푸시버튼과 연결된 핀 번호(2)를 저장할 변수 선언
const int ledPin =  13;    //LED와 연결된 핀 번호(13)를 저장할 변수 선언


void setup()
{
  //2번 핀을 입력용으로 설정
  pinMode(button1Pin, INPUT);

  //13번 핀을 출력용으로 설정
  pinMode(ledPin, OUTPUT);      
}

void loop()
{
  int button1State;     //읽어 올 디지털 값을 저장할 변수 선언

  button1State = digitalRead(button1Pin);    //버튼이 눌렸는 지 아닌지를 읽어와서 앞에 선언한 변수에 저장

  if(button1State == LOW) {         //눌렸다면
    digitalWrite (ledPin, HIGH);    //LED를 ON
  } else {                          //눌리지 않았다면
    digitalWrite(ledPin, LOW);      //LED를 OFF
  }
}
  1. 사전설명

푸시 버튼 한 쪽은 GND와 연결 되어 있습니다. 푸시 버튼을 누르면 GND와 연결되게 됩니다. digitalRead로 값을 읽으면 LOW로 읽히게 됩니다. 즉, 입력핀에 0V 값을 입력 한 것입니다.

다른 한 쪽은 디지털 핀과 연결이 되어있습니다. 하지만 누르지 않을 때 무조건 HIGH로 읽히는 것은 아닙니다. 이 경우 5V or 0V 둘 다 입력 되지 않았기 때문에 칩 자체에서 어떤 값인지 읽어 올 수 없습니다. 이렇게 핀에 어떤 값이 입력이 됬는 지 모르는 경우를 플로팅(floating)이라고 합니다.

플로팅 상태가 되면 소자의 특성과 주위 환경에 따라 High, Low 상태가 수시로 변할 수 있고 여러 노이즈를 유발하여 오작동을 일으킬 수 있습니다.

이런 경우 풀업 저항(pullup resister)를 사용합니다. 2번 핀과 푸쉬 버튼 사이 연결된 10KΩ 저항이 바로 풀업저항입니다. 이 사이에 저항을 연결 하므로써 항상 5V 전압이 걸려있는 HIGH 상태가 됩니다. 핀을 높은 저항인 상태로 매달아 둔다는 뜻으로 풀업 저항이라고 합니다.

정리하면, 누르면 LOW상태, 평상시는 HIGH 상태입니다.

  1. 스케치 설명
const int button1Pin = 2;  //푸시버튼과 연결된 핀 번호(2)를 저장할 변수 선언
const int ledPin =  13;    //LED와 연결된 핀 번호(13)를 저장할 변수 선언

void setup()
{
  //2번 핀을 입력용으로 설정
  pinMode(button1Pin, INPUT);

  //13번 핀을 출력용으로 설정
  pinMode(ledPin, OUTPUT);      
}

각 핀 번호를 담을 변수를 선언.

푸시 버튼과 연결된 핀은 입력용으로 사용할 것이기 때문에 pinMode()안에 INPUT이라고 적습니다.

void loop()
{
  int button1State;     //읽어 올 디지털 값을 저장할 변수 선언

  button1State = digitalRead(button1Pin);    //버튼이 눌렸는 지 아닌지를 읽어와서 앞에 선언한 변수에 저장

  if(button1State == LOW) {         //눌렸다면
    digitalWrite (ledPin, HIGH);    //LED를 ON
  } else {                          //눌리지 않았다면
    digitalWrite(ledPin, LOW);      //LED를 OFF
  }
}

if 구문을 사용해서 푸시버튼과 연결된 2번핀에서 읽어온 디지털 값이 LOW이면 LED를 킵니다.

즉, LOW (버튼을 누르면) LED가 켜지고 HIGH (버튼 안누른상태) LED가 꺼집니다.