전자 공학에 있어서 스위치는 가장 기본적 기능으로 쓰이기도 하지만 많은 전자기기에서 없어서는 안될 기능입니다.
그 스위치에 관한 글을 작성합니다.
1. 풀업(Pull-up)과 풀다운(Pull-down) 저항
스위치는 단순히 전선을 연결하거나 끊는 역할을 하지만, 단순히 스위치를 GND(0V)와 VCC(5V)에 연결한다고 해서 안정적인 신호가 생성되는 것은 아닙니다.
부유 전압(Floating Voltage)이 발생할 수 있으며, 이를 해결하기 위해 풀업(Pull-up) 또는 풀다운(Pull-down) 저항이 사용됩니다.
1) 풀업 저항 (Pull-up Resistor)
스위치가 열려 있을 때, 입력 핀을 VCC(5V)로 유지하기 위해 사용됩니다.
스위치가 닫히면 GND로 연결되어 LOW(0V) 신호가 됩니다.
회로도
VCC(5V)
|
[R] (10kΩ)
|
|------> 입력핀 (HIGH 상태)
|
/ <---- 스위치
|
GND(0V)
- 특징
스위치가 열려 있으면 입력이 HIGH(1) = 5V.
스위치가 닫히면 입력이 LOW(0) = 0V.
내부 풀업 저항(Arduino INPUT_PULLUP 기능)도 활용 가능
2) 풀다운 저항 (Pull-down Resistor)
스위치가 열려 있을 때, 입력 핀을 GND(0V)로 유지하기 위해 사용됩니다.
스위치가 닫히면 VCC로 연결되어 HIGH(5V) 신호가 됩니다.
회로도
VCC(5V)
|
/ <---- 스위치
|
|------> 입력핀 (LOW 상태)
|
[R] (10kΩ)
|
GND(0V)
- 특징
스위치가 열려 있으면 입력이 LOW(0) = 0V.
스위치가 닫히면 입력이 HIGH(1) = 5V.
왜 저항을 kΩ 단위로 쓰는가?
너무 작은 저항(예: 100Ω)을 사용하면 불필요한 전류 소모가 커지고, 회로 동작에영향을 줄 수 있습니다.
너무 큰 저항(예: 1MΩ 이상)을 사용하면 노이즈에 취약하여 신호가 불안정해질 수 있습니다.
일반적으로 4.7kΩ ~ 10kΩ 저항이 가장 적절한 값으로 사용됩니다.
-> 적당히 노이즈도 상세도 되고 적당히 전류도 흘려주는 10 kΩ의 사용은 MCU 등에서 인식하기 좋은 적당한 전류 값이 인가 됩니다.
2. 릴레이(Relay)란 무엇인가?
1) 릴레이의 개념
릴레이는 작은 전압으로 큰 전압을 제어할 수 있는 전자기기입니다.
내부에 전자기 코일(솔레노이드)이 있어 전류가 흐르면 자석 역할을 하며, 스위치를 기계적으로 동작 시킵니다.
전기 절연이 필요할 때 유용하게 사용됩니다.
2) 노멀 오픈(Normally Open, NO) vs 노멀 클로즈(Normally Closed, NC)
NO(Normally Open, 평소에 열려 있음): 기본적으로 회로가 열려 있으며, 릴레이가 동작할 때 회로가 닫힙니다.
NC(Normally Closed, 평소에 닫혀 있음): 기본적으로 회로가 닫혀 있으며, 릴레이가 동작하면 회로가 열립니다.
-> 내부의 코일은 일반적으로 5VDC, 12VDC, 24VDC, 110VAC, 220VAC 등의 전압 인가로 구동 됩니다.
아두이노로 구현을 한다 치면 단순하게 열고 닫고를 해주는 기능만 있으면 됩니다.
#define RELAY_PIN 7
void setup() {
pinMode(RELAY_PIN, OUTPUT);
}
void loop() {
digitalWrite(RELAY_PIN, HIGH); // 릴레이 ON
delay(1000);
digitalWrite(RELAY_PIN, LOW); // 릴레이 OFF
delay(1000);
}
3. 하나의 아날로그 입력 핀으로 여러 개의 스위치 연결하기
디지털 핀 수가 제한된 경우, 하나의 아날로그 입력 핀을 사용하여 여러 개의 스위치를 감지할 수 있습니다. 이를 위해 전압 분배 방식을 활용합니다.
회로 예시
VCC (5V)
|
[R1] (1kΩ) --> 스위치 1
|
[R2] (2kΩ) --> 스위치 2
|
[R3] (4kΩ) --> 스위치 3
|
GND (0V)
각 스위치가 눌리면 다른 전압이 아날로그 입력에 전달되며, 이를 통해 어떤 스위치가 눌렸는지 감지할 수 있습니다.
#define SWITCH_PIN A0
void setup() {
Serial.begin(9600);
}
void loop() {
int value = analogRead(SWITCH_PIN);
Serial.println(value);
delay(500);
}
4. 3x4 키패드 (Matrix Keypad)
1) 행렬 방식으로 키 입력 처리
키패드는 많은 스위치를 적은 수의 핀으로 처리하기 위해 행(Row)과 열(Column)을 조합하여 신호를 읽습니다.
3x4 키패드 배선
C1 C2 C3
R1 1 2 3
R2 4 5 6
R3 7 8 9
R4 * 0 #
행(Row, R1~R4): 출력 핀으로 설정.
열(Column, C1~C3): 입력 핀으로 설정.
2) 아두이노 코드
#include <Keypad.h>
const byte ROWS = 4; // 4개 행
const byte COLS = 3; // 3개 열
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; // 행 핀
byte colPins[COLS] = {5, 4, 3}; // 열 핀
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
Serial.begin(9600);
}
void loop() {
char key = keypad.getKey();
if (key) {
Serial.print("Key Pressed: ");
Serial.println(key);
}
}
5. 결론
스위치는 단순한 전기 부품처럼 보이지만, 풀업/풀다운 저항을 이해하고, 릴레이를 활용하면 강력한 기능을 수행할 수 있습니다. 또한 아날로그 입력을 이용하여 여러 개의 스위치를 하나의 핀으로 처리하는 기법이나 키패드를 이용한 입력 방식도 가능하므로, 하드웨어 설계에서 효과적으로 응용할 수 있습니다
'전자공학' 카테고리의 다른 글
57. 크리스탈 (0) | 2025.03.06 |
---|---|
56.고전력 출력 (0) | 2025.03.04 |
55. ADC, DAC (0) | 2025.03.03 |
54. 스위치2 (0) | 2025.03.02 |
52. 온도 측정 (0) | 2025.02.28 |
51. 모터와 예제 (0) | 2025.02.27 |
50. 아두이노 (0) | 2025.02.26 |
49. RAM (0) | 2025.02.25 |