Dec 12, 2023
Raspberry Pi GPIO 핀과 함께 푸시버튼을 사용하는 방법
Raspberry Pi에서 LED를 사용해 본 적이 있다면 아마도 GPIO가 어떻게 작동하는지 알 것입니다.
Raspberry Pi에서 LED를 사용해 본 적이 있다면 아마도 GPIO 출력이 어떻게 작동하는지 알고 계실 것입니다. 코드는 GPIO(범용 입력/출력) 핀을 통해 전기가 흐르도록 하고 LED를 통과하여 조명을 켭니다. 하지만 반대로 시도해 본 적이 있나요? 푸시버튼을 사용하면 정반대의 작업을 수행할 수 있습니다. 이 튜토리얼에서는 GPIO 핀을 입력 핀으로 전환하는 방법과 버튼을 누르는 소리를 모두 듣는 방법을 보여줍니다!
푸시버튼은 스위치의 일종입니다. 여기에는 서로 분리되어 완전한 회로를 방지하는 두 개의 별도 전도성 핀이 있습니다. 푸시버튼을 누르면 실제로 두 핀을 함께 밀어 회로가 완성됩니다. 하지만 손을 놓으면 핀이 다시 분리되는 스프링 같은 메커니즘이 있습니다.
센서 키트의 일반적인 푸시버튼에는 4개의 핀이 있으며, 각 핀은 다른 핀과 분리되어 있습니다. 움직이는 금속판은 버튼 영역 바로 아래에 위치하며 푸시버튼을 아래로 누르면 아래로 내려가 다른 모든 핀을 연결합니다.
4핀 푸시버튼 안에는 두 개의 플레이트가 있습니다. 각각은 2개의 외부 핀에 연결됩니다. 두 플레이트는 서로 분리되어 있으며 세 번째 플레이트(버튼 아래의 금속 플레이트)를 눌러야만 연결할 수 있습니다.
어떤 의미에서 푸시버튼에는 항상 두 개의 핀이 연결되어 있습니다. 4핀 푸시버튼을 누르면 4개의 핀이 모두 연결됩니다.
이번에는 Raspberry Pi GPIO 핀이 푸시버튼의 버튼 누름을 감지하도록 만듭니다. 전기가 통과하면 Raspberry Pi는 작동 중임을 알리는 메시지를 인쇄합니다.
팁: 올바른 핀 번호를 찾으려면 GPIO 핀이 오른쪽 상단 모서리에 위치하도록 Raspberry Pi를 잡으세요. 왼쪽 위 핀은 핀 1이고 오른쪽은 핀 2입니다. 아래 핀 1은 핀 3이고 오른쪽은 핀 4입니다.
저항에 3.3V를, 푸시버튼 반대편에 GND를 사용하여 GND와 3.3V 핀을 전환하면 푸시버튼의 논리가 반전됩니다. 핀 7이 HIGH로 출력됩니다! 항상 버튼을 누르면 7번 핀이 LOW가 됩니다.
푸시버튼은 풀업과 풀다운이라는 두 가지 종류의 저항을 사용합니다. 저항에 3.3V가 연결된 것이 풀업 저항입니다. 전압을 위로 끌어당깁니다. 한편, 풀다운 저항은 GND 핀을 연결하여 전압을 낮춥니다.
저항 없이 푸시버튼을 사용할 수 있지만 그렇게 하면 GPIO 핀이 부동 상태가 됩니다. 플로팅 GPIO 핀은 직접적인 전하를 수신하지 않으므로 주변에서 전하를 찾습니다. 예를 들어 근처에 강한 전자기장이 있으면 대신 이를 측정합니다.
그렇기 때문에 기준점이 필요합니다. 기본적으로 GPIO 핀을 0V(GND)에 연결하면 버튼을 누르지 않는 동안 0V를 측정합니다. 하지만 그렇지 않으면 GPIO 핀의 값은 어디에나 있을 수 있습니다. 심지어 음전압도 가능합니다!
하지만 플로팅 핀은 몇 가지 흥미로운 작업을 수행할 수 있습니다. 핀을 떠 있는 채로 두면 공기 중의 전압 차이를 감지하여 손가락이 핀 근처로 움직이는 효과까지 측정할 수 있습니다. 전자기 존재 센서 같은 것입니다.
하지만 Raspberry Pi에서는 그렇게 할 수 없다는 것이 너무 안타깝습니다. 이를 유용하게 사용하려면 아날로그 핀이 필요하지만 Raspberry Pi에는 아날로그 핀이 없습니다.
이를 알면 핀 7이 3.3V 또는 0V를 통과하는지 감지한다는 것을 이해해야 합니다. 3.3V를 감지하면 HIGH로 보고됩니다. 그러나 0V를 감지하면 LOW입니다.
코드를 가져오기 명령, 설정 명령, 반복 명령의 세 부분으로 나누어 보겠습니다.
우리는 두 가지 가져오기 명령을 사용하고 있습니다.
import RPi.GPIO as GPIO는 Raspberry Pi의 GPIO 핀으로 작업을 수행할 수 있는 RPi.GPIO 모듈을 가져옵니다. 마지막에 GPIO를 추가하면 GPIO를 입력하는 것이 RPi.GPIO를 입력하는 것과 동일하다고 Python에 지시하는 것입니다. 다른 문자열로 바꿀 수도 있으며 형식을 올바르게 지정하는 한 코드는 계속 작동합니다.
반면, from time import sleep은 Python의 time 모듈 중 일부만 가져옵니다. sleep() 함수를 사용할 수 있습니다.