아두이노

아두이노 시프트 레지스터 74HC595 제어 가이드 – LED 출력 확장과 멀티 연결 완벽 설명

게임교수 2025. 4. 19. 17:32
반응형

아두이노 시프트 레지스터 74HC595 제어 가이드 – LED 출력 확장과 멀티 연결 완벽 설명

아두이노 출력 핀 부족 문제, 어떻게 해결하시나요?
프로젝트에서 여러 개의 LED나 7세그먼트를 제어하려고 할 때, 아두이노의 디지털 핀이 부족해지는 문제가 자주 발생합니다.
이럴 때 시프트 레지스터 74HC595를 사용하면 단 3개의 핀만으로 원하는 만큼 출력을 확장할 수 있습니다.

📦 준비물

  • 아두이노 UNO
  • 74HC595 시프트 레지스터 1~2개
  • LED × 8~16개
  • 330Ω 저항 × LED 수만큼
  • 브레드보드 및 점퍼 와이어

🔍 74HC595란?

74HC595는 8비트 시프트 레지스터로 시리얼 입력을 병렬 출력으로 변환하는 IC입니다. 아두이노에서 shiftOut() 함수를 이용해 8비트 데이터를 전송하면, Q0~Q7 핀을 통해 해당 상태가 출력됩니다.

⚙️ 핀 연결 요약 (단일 595)

74HC595 핀기능아두이노 핀
DS (14)데이터 입력11
SH_CP (11)시프트 클럭12
ST_CP (12)저장 클럭8
OE (13)출력 활성GND에 연결
MR (10)리셋5V에 연결
Q0~Q7출력 핀LED 연결
VCC / GND전원5V / GND

💻 기본 제어 코드 (8비트 출력)

int latchPin = 8;
int clockPin = 12;
int dataPin  = 11;

void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  for (int i = 0; i < 256; i++) {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, i);
    digitalWrite(latchPin, HIGH);
    delay(200);
  }
}

🔗 여러 개 직렬 연결하기

Q7’(핀 9)을 다음 74HC595의 DS(핀 14)에 연결하면 여러 개를 직렬로 연결할 수 있습니다.
두 개를 연결하면 16개의 출력, 세 개면 24개까지도 가능합니다.

멀티 제어 예제 코드 (2개 연결)

byte data[] = {0b10101010, 0b11001100};

void loop() {
  digitalWrite(latchPin, LOW);
  for (int i = 1; i >= 0; i--) {
    shiftOut(dataPin, clockPin, MSBFIRST, data[i]);
  }
  digitalWrite(latchPin, HIGH);
  delay(500);
}

🧠 활용 아이디어

  • LED 점등 패턴 제어
  • 7세그먼트 디스플레이 구동
  • 릴레이 모듈 다중 제어
  • 음향 시각화(LED VU 미터)

❓ 자주 묻는 질문

  • Q: shiftOut 속도 느린데 빠르게 못하나요?
    A: 직접 SPI 방식으로 제어하면 훨씬 빠르게 제어할 수 있습니다.
  • Q: shiftOut 값이 바뀌는데 LED가 반응을 안 해요.
    A: latchPin을 꼭 LOW → shiftOut → HIGH 순서로 조작해야 합니다.

✅ 마무리

74HC595는 적은 핀으로 출력을 확장할 수 있는 최고의 부품 중 하나입니다.
단일로도 충분히 유용하지만, 직렬 연결하면 무제한으로 출력 수를 늘릴 수 있어
LED 매트릭스, 디지털 디스플레이, 릴레이 확장 등에서 핵심적인 역할을 합니다.
오늘 배운 내용을 바탕으로 다양한 프로젝트에 적용해보세요!


Arduino 시리즈 | 74HC595 제어 편 – 작성자: YT

반응형