1. 개요
택트 스위치(Tactile Switch)는 우리가 주변에서 흔히 보는 '눌렀다 떼는' 버튼입니다.
아두이노에게 "지금 눌렀어(1)" 또는 "안 눌렀어(0)"라는 디지털 신호를 보내는 가장 기본적인 디지털 입력 센서입니다.

원리는 스위치 내부에는 떨어져 있는 두 금속판이 있습니다. 버튼을 누르면 두 금속판이 붙으면서 전기가 통하는 단순한 구조입니다.
2. 하드웨어 구조

학생들이 가장 먼저 헷갈려 하는 것이 "선생님, 다리가 4개인데 어디에 연결해요?"입니다.
내부 구조:
4개의 다리가 모두 따로따로가 아닙니다. "스위치의 다리는 4개지만 실제로는 2개씩 한 쌍입니다."

버튼을 뒤집어 보면 몸통을 관통해서 마주 보고 있는 다리끼리는 서로 연결되어 있으니 주의해야 합니다.

가장 안전한 방법은 대각선 방향의 다리 두 개를 사용하는 것입니다.
3. 핵심 이론: 플로팅(Floating) , 풀다운(Pull-down), 풀업(Pull-up)
문제 상황 (플로팅 현상)

스위치를 그냥 선으로만 연결하고 코드를 짜 후에 업로드하면 버튼을 안 눌렀는데도 0과 1이(불이 켜졌다, 꺼졌다) 미친 듯이 왔다 갔다 합니다.
핀이 연결되지 않은 상태(버튼을 안 누른 상태)에서는 공기 중의 정전기나 잡음 때문에 전압이 둥둥 떠다니기 때문입니다. 이것을 '유령 신호(Floating)'라고 합니다.

const int buttonPin = 7; // 버튼은 7번 핀
const int ledPin = 13; // 내장 LED는 13번 핀
int buttonState = 0; // 버튼 상태를 저장할 변수 (그릇)
void setup() {
pinMode(ledPin, OUTPUT); // LED는 출력 (보여주는 것)
pinMode(buttonPin, INPUT); // 버튼은 입력 (읽는 것)
Serial.begin(9600); // 상태 확인용 시리얼 통신
}
void loop() {
// 1. 버튼 상태 읽기
buttonState = digitalRead(buttonPin);
// 2. 상태 확인 (디버깅)
// 버튼을 누르면 1, 안 누르면 0이 나오는지 시리얼 모니터로 보세요.
Serial.println(buttonState);
// 3. 조건문 (만약 ~라면)
if (buttonState == HIGH) {
// 버튼이 눌렸다면 (HIGH = 1)
digitalWrite(ledPin, HIGH); // LED 켜기
}
else {
// 버튼이 안 눌렸다면 (LOW = 0)
digitalWrite(ledPin, LOW); // LED 끄기
}
}
4. 해결책: 풀다운(Pull-down) 연결하기


- 버튼 꽂기: 브레드보드 가운데 홈을 가로질러 버튼을 꽂습니다.
- 전원 연결 (5V): 버튼의 한쪽 다리에 아두이노 5V를 연결합니다.
- 신호선 연결 (입력): 버튼의 반대쪽 다리에서 선을 뽑아 아두이노 7번 핀에 연결합니다.
- 저항 연결 (GND): 3번에서 연결한 다리(7번 핀과 연결된 다리)**와 같은 줄에 10kΩ 저항을 꽂고, 저항의 반대쪽을 GND에 연결합니다.
[전기의 흐름]
안 눌렀을 때: 7번 핀은 저항을 통해 GND와 연결됨 ➡ LOW (0)
눌렀을 때: 5V 전기가 강하게 흘러 들어와 7번 핀으로 감 ➡ HIGH (1) (저항 쪽으로도 일부 흐르지만 7번 핀으로 가는 신호가 우선됨)
5. 또 다른 해결책 풀업(Pull-up)

이 유령 신호를 없애려면 저항을 달아서 전압을 꽉 잡아줘야 합니다. 하지만 저항 다는 것이 복잡해서 풀업 저항을 사용해 보겠습니다.
여러분, 저항을 직접 달지 마세요.
아두이노 칩 안에는 이미 숨겨진 저항이 들어있답니다.
우리는 코드로 이 기능을 켜기만 하면 돼요.
이걸 '내부 풀업(Input Pull-up)'이라고 합니다."

가장 간단하고, 배선 실수가 적으며, 부품도 절약되는 '배선법'입니다.
한쪽 다리: 아두이노 GND에 연결
반대쪽 다리: 아두이노 **디지털 핀(예: 7번)**에 연결
끝! (5V 전원선은 연결하지 않습니다. GND와 신호선만 있으면 됩니다.)
내부 풀업을 사용하면 논리가 반대가 됩니다.
스위치 안 누름 (평소): 내부 저항 덕분에 5V와 연결됨 HIGH (1)
스위치 누름 (작동): GND와 연결되어 0V가 됨 LOW (0)
const int BUTTON_PIN = 7; // 버튼 연결 핀
const int LED_PIN = 13; // 내장 LED
void setup() {
Serial.begin(9600); // 시리얼 모니터로 확인하기 위해
// [핵심] INPUT이 아니라 INPUT_PULLUP으로 설정!
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
// 버튼 상태 읽기
int buttonState = digitalRead(BUTTON_PIN);
// [중요] 풀업 모드에서는 눌렀을 때가 LOW(0)입니다!
if (buttonState == LOW) {
Serial.println("버튼 눌림!");
digitalWrite(LED_PIN, HIGH); // LED 켜기
}
else {
Serial.println("버튼 안 눌림");
digitalWrite(LED_PIN, LOW); // LED 끄기
}
delay(10); // 약간의 대기 (안정성을 위해)
}
#아두이노 #택트스위치 #택트
'컴퓨터' 카테고리의 다른 글
| ARDUINO [강의 1강] 빛의 시작: LED와 LED 모듈 완전 정복 (0) | 2025.12.14 |
|---|---|
| 라즈베리파이 5로 배우는 AI 인공지능 자율주행 자동차 (1) | 2024.07.08 |
| 노래를 만들어 주는 인공지능 서비스 suno.ai (0) | 2024.01.09 |
| 오다시티 녹음 파일 가져오기 FFmpeg 라이브러리 에러 뜰때 (1) | 2023.05.13 |
| 오디오 편집프로그램 오다시티 Audacity 설치 및 사용법과 단축키 (0) | 2023.05.13 |