초급 예제

누구나 쉽게 따라해볼 수 있는 쉬운 예제들입니다. 가볍게 도전~!

스위치-LED 켜기

2015-01-16 12:40:19

스위치란?


 

스위치(Switch)는 일상생활에서 흔히 접할 수 있는 제어 장치로써 조명이나 가전기기, 공장설비, 자동차, 항공기, 선박 등 생활 전반에 걸쳐 사용되며 간단하게는 전원을 켜거나 끌 때 사용되고 전자기기를 조작/제어할 때 스위치를 사용합니다.

 

스위치는 사람이 단순하게 물리적인 힘을 가하여 조작했을때만 상태가 변한다는 특징이 있기 때문에 사용 방법이 매우 쉽고 직관적입니다. 

스위치는 작동 방식에 따라 많은 종류가 있으나, 본 예제에서는 푸쉬 버튼 스위치(Push Button Switch)를 사용합니다. 

 

 

 

 

 

 

 

스위치 사용방법


 

푸쉬 버튼 스위치(Push Button Switch)는 버튼을 누름으로써 접점을 개폐하는 스위치를 총칭하며 상단에 단추 모양의 버튼과 하단에 4개의 단자로 구성되어 있습니다.
상단 버튼은 힘을 가하여 접점을 개폐하는 역할을 하며, 하단의 단자는 회로와 스위치를 연결하는 다리 역할을 합니다. 
 
단자 연결은 마주보는 단자끼리 서로 연결되어 있어 한 쌍으로 구성됩니다.
아래 사진으로 예를 들면 기본상태에서는 서로 마주보고 있는 A와 D가 서로 연결되어 있고 B와 C가 서로 연결되어 있습니다.
버튼을 누르지 않은 상태에서는 A, D와 B, C는 서로 떨어져 있지만 버튼을 누르게 되며 접점이 닿게되어 A, D와 B, C가 서로 연결됩니다. 
 

 
 

푸쉬 버튼 스위치도 동작방식에 따라 두 종류로 나누어집니다.
버튼을 누르는 동안 전류를 흘려주는 A type과 버튼을 누르는 동안 전류를 차단하는 B type이 있습니다.
보통 아두이노에서 사용되는 버튼스위치는 A type이며 이 예제에서도 A type의 버튼을 사용합니다. 
 

 

 

 

 

부품 목록

NO 부품명 수량 상세설명
1 오렌지 보드 1  
2 LED 1 LED(GREEN)
3 스위치 1  
4 330Ω 저항 1  
5 브레드보드 1  
6 점퍼케이블 6  

 

부품명 오렌지 보드 LED 스위치 330Ω 저항 브레드보드 점퍼케이블
파트

 

 

 

 

 

하드웨어 making

 


 

브레드 보드

1. 오렌지보드의 GND 핀을 브레드보드의 - 버스에 연결합니다.
2. 스위치를 그림과 같이 양쪽 IC영역에 걸치게 꽂습니다.
3. LED를 애노드(긴 단자)가 아래쪽으로 향하게하여 꽂습니다.
4. LED의 애노드가 연결된 행에 330Ω 저항을 연결합니다.
5. 스위치의 오른쪽 상단 단자를 오렌지보드 5번핀에 연결합니다.
6. 스위치의 왼쪽 하단 단자를 -버스에 연결합니다.
7. LED 애노드와 연결된 저항의 반대 쪽을 오렌지보드 3번핀에 연결합니다.
8. LED의 캐소드가 연결된 행을 -버스에 연결합니다. 

 

 

소프트웨어 coding


  1. /*
  2.  제목     : 스위치로 LED 제어하기
  3.  내용     : 스위치를 누르면 LED가 켜집니다.
  4.  */
  5.  
  6. // LED를 3번 핀으로 선언합니다.
  7. int led = 3;
  8. // 스위치를 5번 핀으로 설정합니다.
  9. int sw = 5;
  10.  
  11. // 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
  12. void setup() {
  13.     // LED 핀을 OUTPUT으로 설정합니다.
  14.     pinMode(led, OUTPUT);
  15.     // 스위치가 연결된 핀의 모드를 INPUT_PULLUP 상태로 설정합니다.
  16.     pinMode(sw, INPUT_PULLUP);
  17. }
  18.  
  19. // setup() 함수가 호출된 이후, loop() 함수가 호출되며,
  20. // 블록 안의 코드를 무한히 반복 실행됩니다.
  21. void loop() {
  22.     // 스위치가 연결된 핀의 로직레벨이 LOW라면, LED가 켜지도록 합니다.
  23.     if (digitalRead(sw) == LOW) {
  24.         digitalWrite(led, HIGH);
  25.     }
  26.  
  27.     // 스위치가 연결된 핀의 로직레벨이 LOW가 아닌 HIGH라면, LED가 꺼지도록 합니다.
  28.     else {
  29.         digitalWrite(led, LOW);
  30.     }
  31. }

 

TIP 일반적으로 버튼을 사용할 때는 10KΩ 정도의 크기가 큰 저항을 사용하여 PULL-UP/PULL-DOWN회로를 구성하는 것이 일반적입니다.

하지만 setup()에서 사용된 pinMode()에서 버튼과 연결된 핀을 INPUT_PULLUP으로 설정할 경우에는 별다른 저항의 연결없이 손쉽게 연결이 가능합니다.

 

 

 

 

PULL-UP과 PULL-DOWN

 

버튼을 사용할때는 항상 PULL-UP과 PULL-DOWN 두 개념이 매우 중요하며, 둘 중 하나를 선택하여 회로를 구성해야 합니다.

그러기 위해서는 저항의 연결이 필수적이지만, 위 예제에서는 하드웨어 PULL-UP/DOWN회로를 구성하지 않고, 아두이노 소프트웨어로 구현된 INPUT_PULLUP을 사용합니다.

※ pinMode에서는 INPUT_PULLUP은 있지만 INPUT_PULLDOWN은 없습니다

 

PULL-UP과 PULL-DOWN은 보통 저항이 연결된 위치에 따라 구분되며 저항이 +극(5V)에 연결되어 있다면 전압이 높은 곳에 매달려 있다하여 PULL-UP회로라 부르고 -극(GND)에 연결되어 있다면 전압이 낮은 곳에 매달려있기 때문에 PULL-DOWN회로라 부릅니다.

 

PULL-UP회로는 평상 시에 LOW(0)신호를 출력하며 PULL-DOWN은 그와 반대로 HIGH(1)신호를 출력합니다.

INPUT_PULLUP은 풀업회로와 동일한 신호를 출력합니다.

 

  버튼이 눌렸을 때 버튼이 눌리지 않았을때
PULL-UP LOW(0) HIGH(1)
PULL-DOWN HIGH(1) LOW(0)

 

 

 

 

if문(조건문)

 

아두이노뿐만 아니라 프로그래밍언어에서 가장 기본이 되는 문법 중 하나로 조건에 따라 흐름을 분기할 때 사용됩니다.

if('조건')으로 사용되며 '조건'에는 참/거짓으로 상태가 확실히 구분되는 명제가 들어갑니다.

 

if문 단독으로도 사용이 가능하며 if/else문, if/else if문, if/else if/else문 등 다양하게 사용할 수 있습니다.

 

첫 조건은 무조건 if로 시작하며 그와 연결되는 또다른 조건문은 else if로 계속 조건을 늘려서 사용이 가능합니다.

else는 옵션조건으로 사용할 경우 if('조건')에 해당하지 않는 모든 경우에 else에 해당하는 내용이 실행됩니다. 

 

 

 

 

코드 실행

 

위 코드를 실행시키면 조건문에 의해 버튼을 눌렀을 때(상태가 LOW일 경우) 디지털 3번핀에 연결된 LED가 켜지며, 누르지 않았을 경우에는 else문에 의해 LED가 꺼지게 됩니다.

 

 

 

 

활용하기

전등 스위치 만들기

 

 

  1. /*
  2.  제목     : 전등 스위치 만들기
  3.  내용     : 2개의 스위치를 통해 LED의 ON/OFF를 제어합니다.
  4.  */
  5.  
  6. //실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
  7. //변수를 선언하거나 초기화를 위한 코드를 포함합니다.
  8. void setup(){
  9.   //LED가 연결된 9, 10, 11번 핀을 출력으로 설정합니다.
  10.   pinMode(9, OUTPUT);
  11.   pinMode(10, OUTPUT);
  12.   pinMode(11, OUTPUT);
  13.   // 버튼이 연결된 5, 6번 핀을 입력(INPUT)으로 설정합니다.
  14.   pinMode(5, INPUT);
  15.   pinMode(6, INPUT);
  16. }
  17.  
  18. // setup() 함수가 호출된 이후, loop() 함수가 호출되며,
  19. // 블록 안의 코드를 무한히 반복 실행합니다.
  20. void loop(){
  21.   // 5번핀에 연결된 버튼이 눌리면 9, 10, 11번 핀에 연결된 LED를 켭니다.
  22.   if(digitalRead(5) == LOW){
  23.     digitalWrite(9, HIGH);
  24.     digitalWrite(10, HIGH);
  25.     digitalWrite(11, HIGH);
  26.   }
  27.   // 6번핀에 연결된 버튼이 눌리면 9, 10, 11번 핀에 연결된 LED를 끕니다.
  28.   else if(digitalRead(6) == LOW){
  29.     digitalWrite(9, LOW);
  30.     digitalWrite(10, LOW);
  31.     digitalWrite(11, LOW);
  32.   }
  33. }

 

 

코드 실행

 

위 코드에서는 INPUT_PULLUP이 아닌 저항을 달아 PULL-UP회로를 구성하였습니다. 회로도를 보면 저항이 5V와 연결되어 있는것을 확인할 수 있기 때문에 PULL-UP회로임을 알 수 있습니다.

버튼은 2개를 사용하여 각각 5번 핀, 6번 핀에 연결하였고 각각 버튼을 누를때마다 LED의 상태가 변하도록 하였습니다. 

 

 

 

 

 

 

 

 

버튼을 활용한 프로젝트


 

메모리 게임

 

버튼은 많은 게임기에 사용되는 소자 중 하나이기도 합니다. 

따라서 버튼을 활용하면 다양한 게임들도 제작해볼 수있습니다. 

버튼을 이용해 기억력을 테스트할 수 있는 게임을 제작한 프로젝트입니다. 

 

출처 : https://youtu.be/R2yuoImfwGk

 

 

 

kocoafabeditor

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

LED, 스위치, 아두이노, 오렌지보드

노짱 2015-04-03 00:37:31

감사합니다.^^ 잘 배우고 갑니다.

만두 2016-02-19 13:50:28

LED 두 개로도 성공했어요>ㅇ< 감사합니다!

kingseft 2017-03-07 10:20:41

감사합니다.

밝은미래샘 2023-02-15 22:21:01

풀업을 공부하다가 이 페이지를 읽게 되었습니다. 풀업에 대한 설명이 표와 글이 서로 상반됩니다. 제 생각엔 글이 잘못된 것 같습니다. 맞나요? 'PULL-UP회로는 평상 시에 LOW(0)신호를 출력하며 PULL-DOWN은 그와 반대로 HIGH(1)신호를 출력합니다.' 이 문장과 표가 상반됩니다.