부품설명

자주 사용하는 부품들의 사용법에 대하여 알아봅니다.

푸시버튼 x LED-디지털 출력

2014-07-28 04:12:41

개요

 

LED 만큼 푸시버튼도 다양한 모양과 종류가 있습니다.
실생활에서도 계산기, 자동차, 게임기 등 어디서든지 푸시버튼을 볼 수가 있습니다.




출처 : www.directindustry.com


   
출처 : www.shopbay.kr / aving.net / www.it.co.kr


푸쉬 버튼은 누르는 간단한 동작만으로 센서를 키거나 특정 값을 전달 할 수 있기 때문에 많이 사용합니다.


출처 : www.ntrexgo.com


또한 이미 많은 부품이 푸쉬버튼이 부착된 상태로 나오고 있습니다. 
아래 부품은 아두이노 에스폴라라는 제품으로 조이스틱과 기본 버튼이 부착되어 게임기로 활용 할 수 있습니다.



출처 : artrobot.co.kr

 

또 이번 화에서는 풀업저항에 대한 내용도 나옵니다.
디지털 입력 상태에서 발생되는 문제를 방지할 수 있기 때문에 사용됩니다.
나중에 푸쉬 버튼과 같이 디지털 입력 핀과 연결해서 사용하는 센서 연결 시 응용해보세요.



 

 

 

 

 

 

부품목록

 

본 학습에는 총 7종류의 부품이 필요합니다.


 

NO 부품명 수량
1 아두이노 우노 R3 1
2 브레드보드 1
3 5mm LED  1
4 330Ω 저항 1
5 10KΩ 저항 1
6 푸시 버튼 1
7 점퍼 케이블 5

 

부품명 아두이노 우노 R3 브레드보드 5mm LED  330Ω 저항 10KΩ 저항
파트 X1 X1 X1 X1 X1

 

부품명 푸시 버튼 점퍼 케이블
파트 X1 X5

 

 

 

 

하드웨어 making

 

브레드보드

 

전자 회로도

 

 

센서 연결
 

Push button 한 쪽 GND
Push button 다른 쪽 10KΩ 저항

 

 

 

소프트웨어 coding

 

/*
 제목		: Push button으로 LED 켜기
 내용		: push button으로 LED를 제어해 봅시다.
 */

// push button을 디지털 2번 핀에 연결합니다.
const int button1Pin = 2; 
// led를 디지털 13번 핀에 연결합니다.
const int ledPin =  13;

// 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
void setup() {
	//2번 핀을 입력 핀으로 설정합니다.
	pinMode(button1Pin, INPUT);
	//13번 핀을 출력 핀으로 설정합니다.
	pinMode(ledPin, OUTPUT);	
}

// setup() 함수가 호출된 이후, loop() 함수가 호출되며,
// 블록 안의 코드를 무한히 반복 실행합니다.
void loop() {
	// 버튼에서 읽어 올 디지털 값을 저장할 변수를 선언합니다.
	int button1State;     
	// 버튼이 눌렸는 지 아닌지 버튼의 상태를 읽어와서 앞에 선언한 변수에 저장
	button1State = digitalRead(button1Pin);    
    
    // 버튼이 눌렸다면
	if(button1State == LOW){         
		// LED를 ON 시킵니다.
		digitalWrite (ledPin, HIGH);    
	} 
	// 버튼이 눌리지 않았다면
	else{         
		//LED를 OFF 시킵니다.
		digitalWrite(ledPin, LOW);      
	}
}


 

 

소프트웨어 & 하드웨어 설명

 

1. 사전설명

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

다른 한 쪽은 디지털 핀과 연결이 되어있습니다. 하지만 누르지 않을 때 무조건 HIGH로 읽히는 것은 아닙니다.
이 경우 5V or 0V 둘 다 입력 되지 않았기 때문에 칩 자체에서 어떤 값인지 읽어 올 수 없습니다.
이렇게 핀에 어떤 값이 입력이 됬는 지 모르는 경우를 플로팅(floating)이라고 합니다.
플로팅 상태가 되면 소자의 특성과 주위 환경에 따라 High, Low 상태가 수시로 변할 수 있고 여러 노이즈를 유발하여 오작동을 일으킬 수 있습니다.

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

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

 

 

2.스케치 설명

 

// push button을 디지털 2번 핀에 연결합니다.
const int button1Pin = 2; 
// led를 디지털 13번 핀에 연결합니다.
const int ledPin =  13;

// 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
void setup() {
  //2번 핀을 입력 핀으로 설정합니다.
  pinMode(button1Pin, INPUT);
  //13번 핀을 출력 핀으로 설정합니다.
  pinMode(ledPin, OUTPUT);  
}

각 핀번호를 담을 변수를 선언합니다. 
푸시 버튼과 연결된 핀은 입력용으로 사용할 것이기 때문에 pinMode( )안에 INPUT이라고 적습니다.
 

// setup() 함수가 호출된 이후, loop() 함수가 호출되며,
// 블록 안의 코드를 무한히 반복 실행합니다.
void loop() {
  // 버튼에서 읽어 올 디지털 값을 저장할 변수를 선언합니다.
  int button1State;     
  // 버튼이 눌렸는 지 아닌지 버튼의 상태를 읽어와서 앞에 선언한 변수에 저장
  button1State = digitalRead(button1Pin);    
    
    // 버튼이 눌렸다면
  if(button1State == LOW){         
    // LED를 ON 시킵니다.
    digitalWrite (ledPin, HIGH);    
  } 
  // 버튼이 눌리지 않았다면
  else{         
    //LED를 OFF 시킵니다.
    digitalWrite(ledPin, LOW);      
  }
}

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

그렇지 않으면 (HIGH 값을 읽어오면) LED를 끕니다.

 

 

 

 

 

 

 

 

 

 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

push button, LED, 아두이노