아두이노 나노 - 버튼 | Arduino Nano - Button
이 튜토리얼은 버튼을 사용하여 아두이노 나노를 사용하는 방법에 대해 지시합니다. 자세히 보면, 우리는 다음을 배우게 될 것입니다:
- 아두이노 나노에 버튼을 연결하는 방법
- 아두이노 나노로 버튼의 상태를 읽는 프로그래밍 방법
- 아두이노 나노로 버튼의 누르기와 놓기 이벤트를 감지하는 프로그래밍 방법
- 아두이노 나노와 버튼을 사용할 때 플로팅 입력 문제를 방지하는 방법
- 아두이노 나노와 버튼을 사용할 때 채터링 문제를 방지하는 방법
버튼은 푸시버튼, 택타일 버튼 또는 순간 스위치라고 불립니다. 이것은 기본적인 구성 요소이며 아두이노 프로젝트에서 자주 사용됩니다. 사용하기 쉽습니다. 그러나 기계적, 물리적 측면과 사용할 수 있는 다양한 방법 때문에 초보자에게 혼란스러울 수 있습니다. 이 튜토리얼은 초보자가 더 쉽게 이해할 수 있게 도와줍니다.
준비물
1 | × | Arduino Nano | Amazon | |
1 | × | USB A to Mini-B USB cable | 쿠팡 | Amazon | |
1 | × | Push Button | 쿠팡 | Amazon | |
1 | × | (Optional) Panel-mount Push Button | Amazon | |
1 | × | Breadboard | 쿠팡 | Amazon | |
1 | × | Jumper Wires | Amazon | |
1 | × | (Optional) 9V Power Adapter for Arduino Nano | Amazon | |
1 | × | (Recommended) Screw Terminal Expansion Board for Arduino Nano | 쿠팡 | Amazon |
버튼에 대해
초보자들이 버튼을 사용할 때 보통 두 가지 공통된 어려움에 직면하게 됩니다:
1. 부동 입력 문제:
- 증상: 입력 핀의 읽기 값이 버튼의 눌림 상태와 일치하지 않습니다.
- 원인: 입력 핀에 풀업 또는 풀다운 저항이 사용되고 있지 않습니다.
- 해결책: 풀업 또는 풀다운 저항을 사용하십시오, 그리고 그 방법은 이 튜토리얼에서 설명할 것입니다.
2. 채터링 현상:
- 증상: 버튼을 한 번만 눌렀음에도 불구하고, 아두이노 코드는 여러 번 눌린 것으로 감지합니다.
- 원인: 기계적 및 물리적 문제로 인해 버튼(또는 스위치)의 상태가 여러 번에 걸쳐 빠르게 LOW와 HIGH 사이를 전환합니다.
- 해결책: 이 문제를 해결하기 위해, 아두이노 나노-버튼-디바운스 튜토리얼에서 디바운스 기술을 다룰 예정입니다.
정밀한 횟수 감지가 필요한 애플리케이션만이 이를 고려해야 합니다.
버튼 핀배열
푸시 버튼, 촉각 버튼, 순간 스위치라고도 하는 푸시 버튼은 버튼을 누르고 있을 때 닫히고 놓으면 열리는 스위치의 한 종류입니다. 다양한 종류의 푸시 버튼이 존재하는데, 이들은 크게 두 그룹으로 분류할 수 있습니다:
- 빵판에 장착하기에 적합한 PCB용 푸시 버튼
- 패널 장착용 푸시 버튼
PCB 마운트 버튼에는 일반적으로 네 개의 핀이 있습니다.
그럼에도 불구하고, 이 핀들은 짝지어 연결되어 있습니다. 따라서 내부적으로 연결되어 있지 않은 네 개의 핀 중 두 개만 사용해야 합니다.
버튼에 연결할 수 있는 네 가지 가능한 방법이 있으며, 그중 두 가지는 대칭적입니다(이미지에서 볼 수 있듯이).
버튼에 4개의 핀이 있는데, 왜 오직 2개의 핀만 사용되나요?
PCB(인쇄 회로 기판)에 안전하게 장착되어 있으며 모든 압력을 견딜 수 있도록 하기 위해.
패널 장착 버튼에는 보통 2개의 핀이 있습니다.
작동 원리
- 버튼이 눌리지 않았을 때, 핀 A와 핀 B는 연결되어 있지 않습니다.
- 그러나 버튼이 눌렸을 때, 핀 A와 핀 B는 연결됩니다.
아두이노 나노 - 버튼
한 버튼의 핀은 VCC 또는 GND에 연결됩니다. 동일한 버튼의 다른 핀은 Arduino Nano 보드의 핀에 연결됩니다. 입력으로 설정된 Arduino Nano 핀의 상태를 조사함으로써 버튼이 눌렸는지 여부를 판단할 수 있습니다.
버튼 상태와 누르는 상태
버튼과 아두이노 나노 간의 연결, 그리고 아두이노 핀의 구성이 버튼 상태와 누르는 상태 사이의 관계를 결정할 것입니다.
아두이노에서 버튼을 사용하는 방법은 두 가지가 있습니다:
- 한 버튼의 핀이 VCC와 연결되어 있고, 다른 하나는 풀다운 저항기를 가진 아두이노의 핀에 연결되어 있습니다.
- 버튼이 눌리면 아두이노의 핀 상태는 HIGH가 됩니다. 그렇지 않으면 아두이노의 핀 상태는 LOW가 됩니다.
- 이 경우에는 외부 저항기가 필요합니다.
- 버튼이 눌리면 아두이노의 핀 상태는 LOW가 됩니다. 그렇지 않으면 아두이노의 핀 상태는 HIGH가 됩니다.
- 내부 또는 외부 저항기를 사용할 수 있습니다. 내부 저항기는 이미 아두이노 나노에 내장되어 있으며 아두이노 나노 코드를 통해 설정할 수 있습니다.
※ NOTE THAT:
- 외부 풀다운/풀업 저항을 사용하지 않으면 버튼을 누르지 않았을 때 입력 핀의 상태는 "플로팅" 상태가 됩니다. 이는 상태가 HIGH 또는 LOW(불안정, 고정되지 않음)가 될 수 있으며, 이는 잘못된 감지를 초래합니다.
- 가장 나쁜 방법: 외부 풀다운 또는 풀업 저항을 활용하지 않고 아두이노 핀을 입력으로 초기화합니다 (pinMode(BUTTON_PIN, INPUT)).
- 가장 좋은 방법: 아두이노 핀을 내부 풀업 입력으로 초기화합니다 (pinMode(BUTTON_PIN, INPUT_PULLUP)를 사용함). 외부 풀다운/풀업 저항을 사용할 필요가 없습니다.
이 튜토리얼은 처음 시작하는 사람들을 위해 단순함을 위해 가장 직관적인 접근 방식을 사용합니다: 외부 저항이 필요 없이 아두이노 나노 핀을 내부 풀업 입력으로 초기화하는 것입니다. 초보자들이 풀업/풀다운 저항을 어떻게 연결해야 하는지에 대해 걱정할 필요가 없습니다. 그들이 해야 할 일은 아두이노 나노 코드를 사용하는 것뿐입니다.
선연결
아두이노 나노와 PCB 마운트 버튼 간의 배선도
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
아두이노 나노와 패널 마운트 버튼 간의 배선 다이어그램
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
버튼 프로그래밍 방법
- pinMode() 함수를 사용하여 아두이노 나노 핀을 내부 풀업 입력으로 설정하세요.
- 예를 들어, 2번 핀:
digitalRead() 함수를 사용하여 Arduino Nano 핀의 상태를 확인합니다.
※ NOTE THAT:
다음과 같이 두 가지 주요 사용 사례가 있습니다:
- 첫 번째: 입력 상태가 HIGH일 경우 하나의 작업을 수행하고, 입력 상태가 LOW일 경우 반대 작업을 수행합니다.
- 두 번째: 입력 상태가 LOW에서 HIGH로 (또는 HIGH에서 LOW로) 변경되면 무언가를 수행합니다.
이들 중 하나를 애플리케이션에 따라 선택합니다. 예를 들어, 버튼을 사용하여 LED를 제어할 때:
- 버튼이 눌렸을 때 LED가 켜지고, 버튼이 눌리지 않았을 때 LED가 꺼지길 원한다면, 첫 번째 사용 사례를 사용해야 합니다.
- 버튼을 누를 때마다 LED가 켜지고 꺼지게 하고 싶다면, 두 번째 사용 사례를 사용해야 합니다.
LOW에서 HIGH로 상태 변경 감지하는 방법
아두이노 나노 코드
사용 방법
- 아두이노 나노를 USB 케이블을 사용하여 컴퓨터에 연결하세요.
- 아두이노 IDE를 실행하고, 올바른 보드와 포트를 선택하세요.
- 아래 코드를 복사하고 아두이노 IDE에서 열어보세요.
Arduino IDE에서 코드를 Arduino Nano로 컴파일하고 업로드하기 위해 Upload 버튼을 클릭하세요.
- 시리얼 모니터를 엽니다.
- 버튼을 여러 번 눌렀다 놓습니다.
- 시리얼 모니터에 표시된 결과를 확인하세요.
1은 HIGH이고, 0은 LOW입니다.
코드 설명
소스 코드의 주석에 포함된 줄별 설명을 확인하세요!
아두이노 나노 코드 수정하기
코드를 수정하여 누름 이벤트와 해제 이벤트를 인식할 수 있도록 합시다.
사용 방법
아래와 같이 코드를 수정하십시오:
Arduino IDE에서 Upload 버튼을 클릭하여 코드를 컴파일하고 Arduino Nano 보드에 업로드하십시오.
- 시리얼 모니터를 엽니다.
- 버튼을 누르고 계속 누르고 있습니다.
- 버튼을 놓고 시리얼 모니터에서 결과를 관찰합니다.
※ NOTE THAT:
버튼을 한 번만 누르고 놓아도 시리얼 모니터에는 여러 번 눌림과 놓임 이벤트가 표시될 수 있습니다. 이는 버튼의 전형적인 동작이며 "채터링 현상"으로 알려져 있습니다. 이 문제를 해결하려면 Arduino Nano - 버튼 디바운스 튜토리얼을 참조하십시오.
※ NOTE THAT:
우리는 막 시작하는 사람들, 특히 여러 버튼을 다룰 때 과정을 단순화하기 위해 ezButton이라는 라이브러리를 개발했습니다. ezButton 라이브러리에 대한 자세한 정보는 여기서 확인할 수 있습니다.
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.
스스로에게 도전하세요
- 버튼을 누르면 LED가 켜집니다.
- 버튼이 눌리지 않으면 LED가 꺼집니다.
- 버튼을 누를 때마다 LED는 켜짐과 꺼짐 사이를 전환합니다.
추가 지식
입력 핀에 풀다운/풀업 저항을 사용하는 것이 적절한 경우는 언제입니까? 입력 핀에 풀다운/풀업 저항을 사용하는 것이 적합하지 않은 경우는 언제입니까?
센서가 닫히거나 열린 상태를 가지는 경우, LOW와 HIGH 상태로 만들기 위해 풀업(pull-up) 또는 풀다운(pull-down) 저항이 필요합니다. 이러한 센서의 예로는 푸시 버튼(push-button), 스위치(switch), 자기 접촉 스위치(문 센서)가 있습니다.
반면에 센서가 두 가지 정의된 전압 수준(LOW와 HIGH)을 가지는 경우, 풀업(pull-up) 또는 풀다운(pull-down) 저항이 필요하지 않습니다. 이러한 센서의 예로는 모션 센서(motion sensor)와 터치 센서(touch sensor)가 있습니다.