반응형
아두이노 시프트 레지스터 74HC165 입력 확장 가이드 – 버튼 8개 이상 제어하는 법
아두이노로 버튼 입력을 10개 이상 받고 싶을 때, 핀이 부족하다면?
이럴 때 사용하는 부품이 바로 74HC165 시프트 레지스터입니다.
이 IC는 8개의 병렬 입력을 시리얼 데이터로 변환해주는 입력 확장 칩으로, 아두이노의 핀 3개만으로도 다수의 버튼을 제어할 수 있게 해줍니다.
📦 준비물
- 아두이노 UNO
- 74HC165
- 푸시버튼 8개
- 10kΩ 저항 (풀업용) 또는 INPUT_PULLUP 사용
- 브레드보드, 점퍼 와이어
🔍 74HC165란?
74HC165는 병렬 입력을 시리얼 데이터로 변환해주는 8비트 시프트 레지스터입니다.
LOAD(또는 SH/LD) 핀을 통해 외부 입력을 캡처하고, CLOCK과 함께 데이터핀으로 한 비트씩 읽어올 수 있습니다.
shiftIn() 함수를 통해 아두이노에서 손쉽게 값을 받을 수 있습니다.
⚙️ 핀 연결
| 74HC165 핀 | 기능 | 아두이노 연결 |
|---|---|---|
| 1 - SH/LD | 데이터 로드 (LOW에서 캡처) | D8 |
| 2 - CLK | 시프트 클럭 | D13 |
| 9 - QH | 데이터 출력 | D12 |
| 15 - CE | 클럭 활성화 | GND |
| D0~D7 | 버튼 연결 | 푸시버튼 + 풀업저항 |
| VCC / GND | 전원 | 5V / GND |
💻 아두이노 코드 예제 (8개 버튼 읽기)
int loadPin = 8;
int clockPin = 13;
int dataPin = 12;
void setup() {
Serial.begin(9600);
pinMode(loadPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, INPUT);
}
void loop() {
digitalWrite(loadPin, LOW); // 데이터 캡처
delayMicroseconds(5);
digitalWrite(loadPin, HIGH); // 시프트 시작
byte buttons = shiftIn(dataPin, clockPin, MSBFIRST);
Serial.print("입력값: ");
Serial.println(buttons, BIN);
delay(500);
}
🔗 멀티 연결로 입력 확장하기
QH’ 핀(핀 7)을 다음 74HC165의 QH(핀 9)에 연결하면 16개 이상의 입력도 가능합니다.
shiftIn()을 2번 호출하거나, 직접 SPI 방식으로 데이터를 더 빠르게 읽을 수도 있습니다.
🧠 활용 아이디어
- 🎮 아케이드 버튼판 입력 처리
- 🎛️ 키패드 매트릭스 입력
- 📟 보드 설정용 DIP 스위치 입력
❓ 자주 묻는 질문
- Q: 버튼이 눌렸는데 값이 안 바뀝니다.
A: 풀업 저항이 빠지거나, SH/LD 핀 신호가 없을 수 있습니다. - Q: shiftIn으로 읽는 값이 거꾸로예요.
A: MSBFIRST vs LSBFIRST 설정을 확인하세요.
✅ 마무리
74HC165는 아두이노의 입력 확장을 위해 매우 유용한 IC입니다.
버튼 입력이 많은 프로젝트에서 포트를 절약하면서도 효율적으로 제어할 수 있으며,
74HC595와 함께 조합하면 완전한 입출력 확장 시스템을 만들 수 있습니다.
Arduino 시리즈 | 74HC165 제어 편 – 작성자: YT
반응형
'아두이노' 카테고리의 다른 글
| 아두이노 + USART HMI LCD 사용법 – Nextion LCD로 터치 UI 만들기 (0) | 2025.04.19 |
|---|---|
| 아두이노 전자 도어락 시스템 만들기 – RFID + 부저 + 서보모터로 출입 제어 구현하기 (0) | 2025.04.19 |
| 아두이노 시프트 레지스터 74HC595 제어 가이드 – LED 출력 확장과 멀티 연결 완벽 설명 (0) | 2025.04.19 |
| 아두이노 + MAX31855로 K-Type 써모커플 온도 측정하기 – SPI 방식 온도 센서 예제 (0) | 2025.04.19 |
| 아두이노로 MCP3202 SPI ADC 제어하기 – 12비트 아날로그 입력 읽기 예제 (0) | 2025.04.19 |