라즈베리 파이 버튼
이 튜토리얼은 버튼을 사용하여 Raspberry Pi를 사용하는 방법을 안내합니다. 자세히는, 우리는 배울 것입니다:
- 버튼을 Raspberry Pi에 연결하는 방법
- Raspberry Pi에서 버튼의 상태를 읽도록 프로그래밍하는 방법
- 버튼의 눌림 및 놓임 이벤트를 감지하도록 Raspberry Pi를 프로그래밍하는 방법
- Raspberry Pi에서 버튼 사용 시 부동 입력 문제를 예방하는 방법
- Raspberry Pi에서 버튼 사용 시 채터링 문제를 예방하는 방법
버튼은 푸시버튼, 촉각 버튼 또는 순간 스위치라고 불립니다. 이는 기본적인 구성 요소이며 많은 Raspberry Pi 프로젝트에서 사용됩니다. 사용하기 쉽습니다. 그러나 기계적, 물리적 측면과 사용 방법으로 인해 초보자에게 혼란스러울 수 있습니다. 이 튜토리얼은 초보자를 위해 이를 간단히 설명합니다.
Hardware Preparation
1 | × | Raspberry Pi 4 Model B | Amazon | |
1 | × | Breadboard-mount Button with Cap | 쿠팡 | Amazon | |
1 | × | Breadboard-mount Button Kit | 쿠팡 | Amazon | |
1 | × | Panel-mount Push Button | Amazon | |
1 | × | Breadboard | 쿠팡 | Amazon | |
1 | × | Jumper Wires | Amazon | |
1 | × | (추천) Screw Terminal Block Shield for Raspberry Pi | 쿠팡 | Amazon | |
1 | × | (추천) USB-C Power Cable with On/Off Switch for Raspberry Pi 4B | Amazon | |
1 | × | (추천) Plastic Case and Cooling Fan for Raspberry Pi 4B | Amazon | |
1 | × | (추천) HDMI Touch Screen Monitor for Raspberry Pi | Amazon |
버튼 정보
버튼을 사용할 때, 초보자들은 종종 두 가지 일반적인 어려움에 직면합니다:
1. 부유 입력 문제:
- 증상: 입력 핀에서 읽은 값이 버튼 눌림 상태와 일치하지 않습니다.
- 원인: 입력 핀에 풀업 또는 풀다운 저항이 사용되지 않았습니다.
- 해결책: 이 튜토리얼에서 다룰 풀업 또는 풀다운 저항을 사용하십시오.
2. 채터링 현상:
- 증상: Raspberry Pi 코드가 버튼을 한 번만 눌러도 여러 번 눌림으로 감지됩니다.
- 원인: 기계적 및 물리적 문제로 인해 버튼(또는 스위치)의 상태가 LOW와 HIGH 사이를 여러 번 빠르게 전환하고 있습니다.
- 해결책: 이 문제를 해결하기 위해 Raspberry Pi - 버튼 - 바운스 방지 튜토리얼에서 바운스 방지 기법을 사용하는 방법을 설명할 것입니다.
정확한 압력 감지가 필요한 애플리케이션의 경우, 이는 고려되어야 할 사항입니다.
버튼 핀아웃
푸시 버튼에는 다양한 유형이 있으며, 크게 두 그룹으로 분류할 수 있습니다:
- PCB 장착 푸시 버튼 (브레드보드에 장착 가능)
- 패널 장착 푸시 버튼
PCB 장착 버튼은 일반적으로 네 개의 핀이 있습니다.
그럼에도 불구하고, 이 핀들은 내부적으로 쌍으로 연결되어 있습니다. 결과적으로, 내부적으로 연결되지 않은 네 개의 핀 중 두 개만 사용하면 됩니다.
버튼에 연결하는 방법은 네 가지가 있으며, 그 중 두 가지는 대칭적입니다 (이미지를 참조하세요).
왜 버튼에는 네 개의 핀이 있지만, 우리는 두 개의 핀만을 사용하는 걸까요?
PCB(인쇄 회로 기판)에 안전하게 고정되고 어떤 압력이 가해져도 견딜 수 있도록 하기 위해서입니다.
패널 장착 버튼은 보통 두 개의 핀이 있습니다.
작동 방식
- 버튼이 눌리지 않았을 때, 핀 A와 핀 B는 연결되지 않습니다.
- 그러나 버튼이 눌리면, 핀 A와 핀 B가 연결됩니다.
라즈베리 파이 - 버튼
하나의 버튼 핀은 VCC 또는 GND에 연결되어 있습니다. 동일한 버튼의 다른 핀은 Raspberry Pi 핀에 연결되어 있습니다. 입력으로 설정된 Raspberry Pi 핀의 상태를 확인하여 버튼이 눌렸는지 여부를 확인할 수 있습니다.
버튼 상태 및 누름 상태
버튼과 라즈베리 파이의 연결, 그리고 라즈베리 파이의 핀 구성은 버튼 상태와 누름 상태 간의 관계를 결정합니다.
Raspberry Pi에서 버튼을 사용하는 두 가지 방법이 있습니다:
- 하나의 버튼 핀을 VCC에 연결하고 다른 핀을 풀다운 저항과 함께 Raspberry Pi 핀에 연결합니다.
- 버튼을 누르면 Raspberry Pi 핀 상태가 HIGH가 됩니다. 그렇지 않으면 LOW가 됩니다.
- 내부 또는 외부 저항을 사용할 수 있습니다. 내부 저항은 Raspberry Pi에 내장되어 있으며, 코드로 설정할 수 있습니다.
- 하나의 버튼 핀을 GND에 연결하고 다른 핀을 풀업 저항과 함께 Raspberry Pi 핀에 연결합니다.
- 버튼을 누르면 Raspberry Pi 핀 상태가 LOW가 됩니다. 그렇지 않으면 HIGH가 됩니다.
- 내부 또는 외부 저항을 사용할 수 있습니다. 내부 저항은 Raspberry Pi에 내장되어 있으며, 코드로 설정할 수 있습니다.
- 최악의 방법: Raspberry Pi 핀을 입력으로 초기화하고(pinMode(BUTTON_PIN, INPUT) 사용) 외부 풀다운/풀업 저항을 사용하지 않습니다.
- 최고의 방법: Raspberry Pi 핀을 내부 풀업 입력으로 초기화하고(pinMode(BUTTON_PIN, INPUT_PULLUP) 사용) 외부 풀다운/풀업 저항을 사용할 필요가 없습니다.
※ NOTE THAT:
풀다운 저항이나 풀업 저항을 사용하지 않으면 버튼이 눌리지 않았을 때 입력 핀이 "플로팅" 상태에 들어가게 되어, 상태가 HIGH 또는 LOW(불안정)일 수 있으며 잘못된 감지를 초래할 수 있습니다.
초보자를 위해 이 튜토리얼은 가장 간단한 접근 방식을 사용합니다: 외부 저항 없이 내부 풀업 입력으로 Raspberry Pi 핀을 설정합니다. 풀업/풀다운 저항을 어떻게 연결해야 하는지 걱정할 필요가 없습니다. 필요한 것은 Raspberry Pi 코드만 사용하는 것입니다.
Wiring Diagram
- Raspberry Pi와 PCB 장착 버튼 간의 배선도
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
- 라즈베리 파이와 패널 장착 버튼 간의 연결 다이어그램
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
배선 구성을 간단하고 체계적으로 만들기 위해, Raspberry Pi용 스크루 터미널 블록 실드 사용을 권장합니다. 이 실드는 아래와 같이 더욱 안정적이고 관리하기 쉬운 연결을 제공합니다:
버튼 프로그래밍 방법
- GPIO.setup() 함수를 사용하여 Raspberry Pi 핀을 내부 풀업 입력으로 초기화합니다. 예를 들어, 핀 16:
- Raspberry Pi 핀의 상태를 결정하기 위해 GPIO.input() 함수를 사용합니다.
※ NOTE THAT:
두 가지 일반적인 사용 사례가 있습니다:
- 첫 번째: 입력 상태가 HIGH인 경우 한 가지 동작을 수행하고, 입력 상태가 LOW인 경우 반대 동작을 수행합니다.
- 두 번째: 입력 상태가 LOW에서 HIGH로 (또는 HIGH에서 LOW로) 변경되면 어떤 동작을 수행합니다.
우리는 애플리케이션에 따라 이 중 하나를 선택합니다. 예를 들어, 버튼을 사용하여 LED를 제어할 때:
- 버튼을 눌렀을 때 LED가 켜지고, 버튼이 눌리지 않았을 때 꺼지기를 원하면 첫 번째 사용 사례를 사용해야 합니다.
- 버튼을 누를 때마다 LED가 켜짐과 꺼짐으로 전환되기를 원하면 두 번째 사용 사례를 사용해야 합니다.
Raspberry Pi 코드 - 버튼 상태 읽기
Detailed Instructions
- Raspberry Pi에 Raspbian 또는 다른 Raspberry Pi 호환 운영 체제가 설치되어 있는지 확인하세요.
- Raspberry Pi가 PC와 같은 로컬 네트워크에 연결되어 있는지 확인하세요.
- 라이브러리를 설치해야 하는 경우 Raspberry Pi가 인터넷에 연결되어 있는지 확인하세요.
- 처음으로 Raspberry Pi를 사용하는 경우, Raspberry Pi 설정 방법을 참조하세요.
- Linux와 macOS에서는 내장된 SSH 클라이언트를 사용하거나 Windows에서는 PuTTY를 사용하여 SSH를 통해 PC를 Raspberry Pi에 연결하세요. PC를 Raspberry Pi에 SSH로 연결하는 방법은 여기를 참조하세요.
- RPi.GPIO 라이브러리가 설치되어 있는지 확인하세요. 설치되어 있지 않으면, 다음 명령어를 사용하여 설치하세요:
- button.py 파일을 생성하고 다음 코드를 추가하세요.
- 파일을 저장하고 터미널에서 다음 명령을 실행하여 Python 스크립트를 실행하세요.
- 버튼을 여러 번 눌렀다가 놓으세요.
- 시리얼 모니터에서 출력을 확인하세요.
1은 높음, 0은 낮음.
이 스크립트는 터미널에서 Ctrl + C를 누를 때까지 무한 루프에서 계속 실행됩니다.
코드 설명
소스 코드의 주석에 포함된 줄별 설명을 확인하세요!
Raspberry Pi 코드 - 버튼 누름 이벤트 감지
Detailed Instructions
- 다음 코드를 추가하여 button_pressed.py라는 Python 스크립트 파일을 생성하십시오.
- 파일을 저장하고 터미널에서 다음 명령을 실행하여 Python 스크립트를 실행하세요:
- 버튼을 누른 상태로 잠시 유지하세요.
- 시리얼 모니터에서 출력을 확인하세요.
스크립트는 터미널에서 Ctrl + C를 누를 때까지 무한 루프에서 계속 실행됩니다.
코드 설명
소스 코드의 주석에 포함된 줄별 설명을 확인하세요!
※ NOTE THAT:
버튼을 한 번만 눌렀다가 놓아도, 터미널의 출력에 여러 번 눌림 및 놓임 이벤트가 표시될 수 있습니다. 이것은 버튼의 예상되는 동작입니다. 이러한 현상을 “채터링”이라고 합니다. 이에 대해 더 알고 싶다면, Raspberry Pi - Button Debounce tutorial을 참조하십시오.
Video Tutorial
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.
자신에게 도전하세요
- 버튼을 누르면 LED가 켜져야 합니다.
- 버튼을 누르지 않으면 LED가 꺼져야 합니다.
- 버튼을 누를 때마다 LED가 켜짐과 꺼짐 사이에서 전환되어야 합니다.
추가 지식
입력 핀에 풀다운/풀업 저항을 사용해야 할 경우와 사용하지 말아야 할 경우는 언제인가요?
- 센서가 닫힘 또는 열림 상태 중 하나를 가지고 있다면, 풀업 또는 풀다운 저항이 필요하며, 이를 통해 이러한 상태를 LOW 및 HIGH로 만듭니다. 이러한 센서의 예로는 푸시버튼, 스위치, 자기 접촉 스위치(문 센서)가 있습니다.
- 반면, 센서에 LOW 및 HIGH라는 두 가지 정의된 전압 레벨이 있다면, 풀업 또는 풀다운 저항이 필요하지 않습니다. 이러한 센서의 예로는 동작 센서와 터치 센서가 있습니다.