아두이노 나노 - 버튼 - 디바운스 | Arduino Nano - Button - Debounce
버튼이 눌리거나 놓이거나 스위치가 전환될 때, 초보자들은 종종 그 상태가 LOW에서 HIGH 또는 HIGH에서 LOW로 변경된다고 가정합니다. 실제로는 항상 그런 것은 아닙니다. 기계적이고 물리적 특성으로 인해, 버튼(또는 스위치)의 상태가 단일 이벤트에 대해 LOW와 HIGH 사이에서 여러 번 빠르게 전환될 수 있습니다. 이 현상을 차터링이라고 합니다. 차터링은 단일 누름이 여러 번 눌린 것처럼 읽혀져 특정 응용 프로그램에서 오작동을 일으킬 수 있습니다.
이 문제를 제거하는 방법은 디바운싱 혹은 디바운스로 언급됩니다. 이 튜토리얼에서는 아두이노 나노와 함께 버튼을 사용할 때 어떻게 하는지 알려드립니다. 아래 단계를 통해 배울 것입니다:
- 디바운싱 없는 아두이노 나노 코드.
- 디바운싱이 있는 아두이노 나노 코드.
- EzButton 라이브러리를 사용하여 디바운싱이 있는 아두이노 나노 코드.
- 여러 버튼을 위한 디바운싱이 있는 아두이노 나노 코드.
준비물
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 |
버튼 정보
버튼(핀배열, 기능, 프로그래밍 등)에 익숙하지 않다면, 다음 튜토리얼이 도움이 될 수 있습니다:
아두이노 나노 - 버튼 튜토리얼
선연결
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
데바운스가 있는 경우와 없는 경우를 비교하여 아두이노 나노 코드와 각각의 행동을 관찰해 봅시다.
디바운스 없는 읽기 버튼
디바운싱 개념에 들어가기 전에, 디바운싱 없이 작성된 코드를 보고 그 동작을 관찰해보세요.
사용 방법
- 아두이노 나노와 PC에 USB 케이블을 연결하십시오.
- 아두이노 IDE를 실행하고, 올바른 보드와 포트를 선택하십시오.
- 아래의 코드를 복사하고 아두이노 IDE에서 열십시오.
아두이노 IDE에서 Upload 버튼을 클릭하여 코드를 컴파일하고 아두이노 나노 보드에 업로드하세요.
- 시리얼 모니터를 엽니다.
- 몇 초 동안 버튼을 누르고 있었다가 놓습니다.
- 몇 번 시도해보세요.
- 시리얼 모니터에서 결과를 확인하세요.
때로는 버튼을 단 한 번만 눌렀다가 놓았을 뿐인데도, 아두이노 나노가 여러 번 누르고 놓은 것으로 해석합니다. 이것이 바로 튜토리얼 초반에 언급된 채터링 현상입니다. 다음 파트에서 이를 어떻게 해결하는지 살펴봅시다.
디바운스를 사용하는 읽기 버튼
아래 코드는 디바운스라는 방법을 적용하여 채터링 현상을 방지합니다.
사용 방법
- 위의 코드를 복사하고 Arduino IDE로 열어주세요.
- Arduino IDE에서 Upload 버튼을 클릭하여 코드를 컴파일하고 Arduino Nano에 업로드하세요.
- 시리얼 모니터를 엽니다.
- 몇 초 동안 버튼을 계속 누른 후에 놓습니다.
- 시리얼 모니터에서 결과를 확인하세요.
당신이 관찰할 수 있듯이, 당신은 버튼을 한 번만 누르고 놓았습니다. Arduino Nano는 이를 단일 푸시와 릴리스로 감지합니다. 잡음이 제거되었습니다.
우리는 이것을 간단하게 만들었습니다 - 라이브러리를 사용한 아두이노 나노 버튼 디바운스 코드
우리는 특히 여러 개의 버튼을 다룰 때, 막 시작하는 사람들에게 더 간단하게 만들기 위해 ezButton이라는 라이브러리를 디자인했습니다. 여기에서 ezButton 라이브러리에 대해 더 알아볼 수 있습니다.
아두이노 나노 단일 버튼 디바운스 코드
아두이노 나노 멀티 버튼 디바운스 코드
위의 코드에 대한 개략도: 코드의 배선을 나타낸 도해. 코드의 배선에 대한 시각적 표현:
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.
추가 지식
DEBOUNCE_DELAY의 값은 각 버튼의 물리적 특성에 따라 달라질 수 있습니다. 다른 버튼들이 다른 값을 사용할 수도 있습니다.
확장성
디바운스 기법은 스위치, 터치 센서 등과 함께 사용될 수 있습니다.