시각및인간요인 연구실 (감기택 교수 연구실) — Raspberry Pi 기반 112채널 LED 제어 시스템

시각및인간요인 연구실 (감기택 교수 연구실) — Raspberry Pi 기반 112채널 LED 제어 시스템

URL
기간
Jan 9, 2025 → Feb 18, 2025
분야
하드웨어
개발
page icon
고장 난 연구용 LED 제어기를 대신해 Raspberry Pi 5와 74HC595 14개로 112채널 제어 시스템을 새로 설계·제작하고, 강원대학교 심리학과 감기택 교수 연구실에 인계했습니다.
8→16→48→112채널로 회로와 코드를 단계적으로 확장하고, 원격 접속과 직접 조작을 모두 고려한 Python CLI·GUI 및 19장 운용 매뉴얼까지 완성했습니다.
page icon

왜 이 프로젝트를 시작했는가

감기택 교수 연구실에서 실험에 사용하던 LED SWING CONTROLLER가 고장 났습니다. 예정된 실험을 빠르게 재개해야 했지만, 기존 장치는 전용 PCB와 PIC 계열 MCU를 중심으로 구성되어 있었고 펌웨어·개발 환경·유지보수 경로를 즉시 복원하기 어려웠습니다.
연구실에서 대체 시스템을 만들 사람을 찾던 중, 제가 2024년 2학기에 임베디드 시스템 수업을 수강했고 Galaxy Watch5 연구에서 미세 납땜과 하드웨어 복구를 경험했다는 점을 바탕으로 외주를 의뢰받았습니다. 직접 연구실을 방문해 교수님·조교님과 실시간 제어 방식, LED 수, 설치 위치와 사용 흐름을 반복해서 조율했습니다.
단순히 기존 보드를 흉내 내는 대신, 운영체제가 있어 원격 접속과 사용자 인터페이스를 확장할 수 있는 Raspberry Pi를 제어 중심으로 선택했습니다. 전기적 안전, 배선 혼동과 단락 방지, 유지보수, 그리고 연구자가 실제로 어떻게 조작할지를 하나의 시스템 문제로 다뤘습니다.

PROJECT OVERVIEW

항목
내용
기간
2025.01.09–2025.02.18
수행 형태
개인 외주 · 강원대학교 심리학과 감기택 교수 연구실 · 교수·조교와 요구사항 조율 및 현장 인계
문제
고장 난 전용 LED 제어기를 긴급 대체하고, 제한된 GPIO로 기존 LED 배열을 실시간·개별 제어하면서 원격·직접 운용과 유지보수가 가능한 구조 마련
데이터·대상·환경
고장 난 PIC16F877A·74HC154 기반 제어기 · 기존 LED 배열·리본 케이블·2×10 IDC 박스헤더 · Raspberry Pi 5 · Raspberry Pi OS · 74HC595 · 브레드보드·만능기판
분석·구현 범위
현장 요구·기존 장치 분석, 출력 확장 회로 선정, 단계별 회로 시험, 112비트 GPIO 제어, CLI·GUI 구현, 연결 방식 검토, 조립·인계 문서화
결과
7개 74HC595로 구성한 56채널 보드 2개, 총 112채널 제어 시스템과 Python 프로그램·운용 매뉴얼 인계
핵심 질문 — 고장 난 전용 제어기를 빠르게 대체하면서, 제한된 GPIO 3개로 기존 LED 배열을 확장하고 연구자가 원하는 채널을 원격 또는 현장에서 안정적으로 선택·제어할 수 있는가?

Project Flow

단계
관찰·질문
판단·검증 근거
결과
0. 고장 확인
기존 장치에서 무엇을 재사용할 수 있는가
PIC16F877A·74HC154·DB9·IDC 헤더 식별
펌웨어 복원보다 신규 제어기 설계를 우선하고, 리본 케이블 규격은 보존
1. 환경·요구 분석
실시간성, 목표 수량, 설치·조작 위치는 무엇인가
교수·조교 확인: 실시간 제어, 126개 목표, PC 근처 운용
OS·UI·원격 접속을 확장할 수 있는 Raspberry Pi 방향 결정
2. 아키텍처 연구
제한된 GPIO로 개별 출력을 어떻게 확장할 것인가
74HC595의 SER·SRCLK·RCLK와 QH′ cascade 구조 검토
GPIO 3개를 유지하는 직렬 입력·병렬 출력 daisy chain 채택
3. 전기 계산
LED 저항, 출력 전류, 전체 부하는 허용 범위인가
당시 5V·Vf 3.2V·12mA 가정으로 150Ω 산출; 이후 데이터시트의 출력·패키지 전류 한계 재검토
가지 저항 계산과 IC 전체 전류 검토를 분리해야 함을 확인
4. Gate 1 — 8채널
데이터·클럭·래치와 좌우 이동이 맞는가
74HC595 1개, 1shiftreg.py, 1차 시험 영상
하나의 점등 위치를 키 입력에 따라 이동
5. Gate 2 — 16채널
칩 경계를 넘어서도 비트 순서가 유지되는가
74HC595 2개 연결 기록, 2shiftreg.py의 16비트 순환
daisy chain 결선과 경계 이동 로직 확인
6. 20개 조명 점검
기존 전등 자체의 고장과 새 제어기의 결함을 구분할 수 있는가
직접 전류를 인가해 채널별 점등 확인
기존 전등 10·15·18번 불량을 별도 기록
7. 48→112채널 확장
LSB 순서, 번호 지정, 전체 ON/OFF, 순차 스캔이 유지되는가
6shift_reg.py, ledctl.py, ledctl2.py, gui3.py
0–111 상태 모델과 좌우 순차 확인·GUI 토글 구현
8. 현장 통합
네트워크와 핀 배열을 현장에서 재현할 수 있는가
2차 답사에서 SSH·공유기·랜선·2×10 헤더 확인
원격 기능은 유지하되 기본 운용은 HDMI 직접 연결로 결정
9. 조립·인계
합선·혼선·정비 위험을 줄이고 비개발자가 운용할 수 있는가
양쪽 56채널 출력판, 중앙 중계판, 저항→점퍼→IDC 채널 매핑, 19장 매뉴얼
세 판을 결합한 112채널 장치와 프로그램을 2025.02.18 인계

ROLE

Embedded Systems Developer · Hardware/UX Prototyper
  • 담당 역할: 고장 현장 확인부터 대체 아키텍처 선정, 부품 구매, 회로 계산, 단계별 실험, Python 제어 프로그램, 조립과 인계까지 외주 전 과정을 개인으로 수행했습니다.
  • 선행 경험: 2024년 2학기 임베디드 시스템 수업에서 익힌 GPIO·레지스터 제어와 Galaxy Watch5 연구의 납땜 경험을 실제 연구 장비 복구 문제에 적용했습니다.
  • 하드웨어: 74HC595 daisy chain, 150Ω 저항, 브레드보드·만능기판, IDC 박스헤더와 리본 케이블의 연결 구조를 설계·조립했습니다.
  • 소프트웨어·UX: GPIO의 데이터·시프트 클럭·래치 신호를 제어하고, 채널 상태를 비트로 관리하는 CLI·GUI와 연구용 선택 기록 기능을 구현했습니다.
  • 협업 범위: 감기택 교수님과 조교님에게 실시간 제어 여부, 목표 LED 수, 원격 조작, 설치 환경과 실제 사용 순서를 반복해서 확인하고 설계 판단에 반영했습니다.

TECH STACK

Python · RPi.GPIO · Tkinter · curses · Raspberry Pi 5 · Raspberry Pi OS · Linux · SSH · 74HC595 · GPIO · Tinkercad

MY WORK

1. 고장 난 전용 제어기와 실험실의 실제 요구부터 다시 읽었습니다

 
고장 전까지 연구실에서 사용하던 LED SWING CONTROLLER. PIC16F877A MCU, 74HC154 디코더, DB9 직렬 연결과 다수의 IDC 헤더로 구성된 전용 제어 보드입니다.
고장 전까지 연구실에서 사용하던 LED SWING CONTROLLER. PIC16F877A MCU, 74HC154 디코더, DB9 직렬 연결과 다수의 IDC 헤더로 구성된 전용 제어 보드입니다.
기존 녹색 PCB에는 PIC16F877A MCU, 74HC154 디코더, MAX232 계열 직렬 통신 IC, DB9 커넥터와 다수의 IDC 헤더가 한 장에 통합되어 있었습니다. 회로 자체는 체계적이었지만 고장 뒤에는 펌웨어와 개발 환경을 즉시 되살리기 어려웠고, 예정된 실험 때문에 대체 시간이 제한되어 있었습니다.
처음 방문했을 때부터 교수님·조교님과 “어떤 회로를 만들 것인가”보다 “실험에서 무엇을 어떻게 조작해야 하는가”를 먼저 확인했습니다.
확인 항목
현장 요구·관찰
설계에 반영한 판단
긴급성
기존 제어기 고장 뒤 실험 재개가 필요
기존 펌웨어 복원보다 단계적으로 검증 가능한 신규 제어기 우선
제어 방식
LED를 실시간으로 개별 제어
각 채널을 하나의 비트로 보존하고 전체 출력을 한 번에 래치
목표 수량
126개 LED
GPIO 직접 연결 대신 직렬 입력·병렬 출력 확장 구조 필요
사용 흐름
PC 근처 조작과 원격 제어 가능성
운영체제·네트워크·GUI를 사용할 수 있는 Raspberry Pi 선택
기존 연결
2×10 IDC 박스헤더와 리본 케이블
기존 LED 배선을 재사용할 수 있는 중계기판과 넓은 배선 간격 설계
기존 장치의 원리를 참고하되 동일한 전용 보드를 복제하지는 않았습니다. 빠른 복구뿐 아니라 다음 사용자가 채널을 선택하고 상태를 확인하며, 문제가 생기면 어느 구간인지 추적할 수 있는 새로운 제어·유지보수 경로를 만드는 쪽을 택했습니다.
Raspberry Pi와 74HC595 한 개로 시작한 초기 LED 점등 시험. 데이터·시프트 클럭·래치와 저항값을 작은 범위에서 먼저 확인했습니다.
Raspberry Pi와 74HC595 한 개로 시작한 초기 LED 점등 시험. 데이터·시프트 클럭·래치와 저항값을 작은 범위에서 먼저 확인했습니다.
🧪

관찰을 첫 실험으로 바꾼 기준

  1. LED 한 개를 Raspberry Pi에서 직접 점등해 GPIO·GND 기준 확인
  1. 74HC595 한 개로 SER·SRCLK·RCLK의 역할 분리
  1. 점등 위치가 좌·우 입력과 같은 순서로 움직이는지 확인
  1. 이 Gate를 통과한 뒤에만 두 번째 레지스터를 연결

2. 원격 확장성과 전기적 단순성을 함께 보고 Raspberry Pi·74HC595 구조를 선택했습니다

Raspberry Pi를 선택한 이유는 GPIO 수만이 아니었습니다. Linux 기반 운영체제에서 Python 제어 프로그램, GUI, 파일 기록, SSH·Wi-Fi·Ethernet 원격 접속을 한 시스템에 묶을 수 있어 연구 절차가 바뀌어도 소프트웨어로 확장할 수 있었습니다.
출력 확장에는 SER로 데이터를 직렬 입력하고 SCK로 비트를 이동한 뒤 RCK로 출력을 동시에 갱신하는 74HC595를 사용했습니다. 다음 칩의 직렬 출력을 이어 붙이면 Raspberry Pi의 GPIO 3개를 유지한 채 8채널 단위로 늘릴 수 있습니다.
최종 하드웨어를 한 장에 몰아넣지 않고 왼쪽 56채널 출력판 · Raspberry Pi와 IDC 헤더를 올린 중앙 중계판 · 오른쪽 56채널 출력판의 세 부분으로 나눴습니다. 양쪽 판은 각각 74HC595 7개로 56개 출력을 만들고, 중앙판은 두 판의 112개 출력을 기존 리본 케이블 규격에 맞는 2×10 박스헤더 7개로 다시 배열합니다. 이 분리는 어느 레지스터·저항·리본 묶음에서 문제가 생겼는지 구간별로 추적하고 교체하기 위한 구조였습니다.
전기 설계 E-00 — Raspberry Pi와 두 56채널 뱅크의 시스템 인터커넥트
KiCad로 다시 작성하고 넷리스트로 검증한 시스템 인터커넥트. Raspberry Pi 물리 핀 15·11·13의 SER·SRCLK·RCLK와 두 56채널 뱅크의 경계를 표시합니다.
KiCad로 다시 작성하고 넷리스트로 검증한 시스템 인터커넥트. Raspberry Pi 물리 핀 15·11·13의 SER·SRCLK·RCLK와 두 56채널 뱅크의 경계를 표시합니다.
이 시트는 14개 IC를 작게 우겨 넣은 “전체 회로 그림”이 아니라 시스템 사이의 검증 가능한 연결 경계를 보여줍니다. Raspberry Pi의 물리 15번(BCM22)은 SER, 11번(BCM17)은 SRCLK, 13번(BCM27)은 RCLK에 연결됩니다. Bank A는 CH0–55, Bank B는 CH56–111을 담당하고, Bank A의 마지막 QH′가 Bank B의 SER로 이어져 하나의 112비트 체인을 이룹니다.
중앙판의 2×10 IDC 헤더 7개는 사진으로 확인했지만, 헤더 내부의 과거 채널별 핀표는 남아 있지 않습니다. 따라서 이 시트에서도 확인되지 않은 IDC 핀 번호를 만들지 않고 시스템 경계만 표시했습니다.
데이터시트에서 실제로 확인한 항목
회로 판단에는 74HC595 문서의 Pin Functions, Recommended Operating Conditions, Electrical Characteristics, Absolute Maximum Ratings를 나눠 참고해야 합니다. Pin Functions에서 SER(14), SRCLK(11), RCLK(12), QH′(9)의 역할과 연쇄 연결을 확인했고, 전기 특성 표에서는 공급 전압뿐 아니라 출력 전류가 커질 때 보장되는 VOH·VOL과 패키지 전체 전류를 함께 보았습니다. 기준 문서는 Texas Instruments SN74HC595 데이터시트입니다.
검토 항목
참고 위치
설계에 사용한 값·판단
직렬 확장
Pin Functions · Functional Block
SER로 입력, SRCLK로 이동, RCLK로 동시 갱신, QH′를 다음 칩 SER에 연결
전원·논리
Recommended Operating Conditions
74HC595 동작 전압 범위 안에서 5V 레일 사용, Raspberry Pi와 공통 GND 구성
출력 품질
Electrical Characteristics
5V 부근에서 데이터시트가 보장하는 출력 구동은 약 ±6mA 조건임을 확인
손상 한계
Absolute Maximum Ratings
출력 1개당 연속 ±35mA, VCC 또는 GND를 지나는 합계 ±70mA는 동작 목표가 아니라 넘지 말아야 할 절대 한계
LED 순방향 전압
74HC595 문서가 아닌 LED 데이터시트·실측 항목
당시 인계 문서에는 Vf≈3.2V를 가정했으나, 구매한 적색 LED의 실제 Vf는 별도 데이터시트나 다이오드 모드 측정으로 확인했어야 함
저항·전류 계산의 흐름
당시 최종 기록은 VCC = 5.0V, Vf ≈ 3.2V, 목표 전류 I = 12mA를 두고 다음과 같이 150Ω을 선택했습니다.
따라서 1/4W 저항의 정격 자체에는 여유가 있습니다. 다만 이 계산은 LED 한 갈래의 저항값만 설명합니다. 8개 출력이 각각 12mA를 직접 공급하면 칩당 이론 합계가 96mA가 되어 데이터시트의 패키지 절대 한계 70mA를 넘습니다. 또한 실제 적색 LED의 Vf가 3.2V보다 낮다면 150Ω에서 전류는 더 커집니다. 그러므로 다음 버전은 LED Vf를 먼저 실측하고, 출력당 약 6mA 수준으로 재산정하거나 ULN2803·MOSFET·정전류 LED 드라이버를 74HC595 뒤에 두는 구조가 맞습니다.
이처럼 당시 산출식데이터시트 전체를 다시 대조한 안전성 감사 결과를 구분해 기록했습니다. 작은 회로에서 점등을 확인한 사실만으로 112채널 동시 부하의 안전성이 증명되는 것은 아니기 때문입니다.
전체 LED를 동시에 켰을 때의 전류와 74HC595별 허용 전류·발열 여유를 계측으로 검증하지는 못했습니다. 인계 매뉴얼에도 브레드보드·만능기판의 발열과 노출된 납땜면을 주의하도록 명시했습니다. 따라서 이 제작물은 실험실용 프로토타입이며, 장시간 최대 부하가 검증된 양산 설계로 표현하지 않았습니다.

HARDWARE DEVELOPMENT

3. 112채널을 ‘양쪽 출력판 + 중앙 중계판’의 세 판으로 나눠 제작했습니다

112개 출력을 한 장의 만능기판에 바로 납땜하면 잘못 연결된 한 선을 찾기 어렵고, 수정 과정에서 주변 배선까지 손상시킬 가능성이 컸습니다. 그래서 반복 회로는 양쪽 브레드보드, Raspberry Pi와 기존 리본 케이블의 변환은 가운데 만능기판이 맡도록 역할을 분리했습니다.
구성
담당 역할
분리한 이유
왼쪽 출력판
74HC595 7개 · 저항 56개 · 공통 신호/전원 레일
0–55번에 해당하는 56개 출력 생성
8채널 반복 단위로 결선·교체 가능
중앙 중계판
Raspberry Pi 5 · 2×10 IDC 박스헤더 7개 · 납땜 배선
GPIO 신호 분배와 112개 출력을 기존 리본 케이블 순서로 재배열
기존 실험 장치의 커넥터 규격을 유지하고 핀맵을 한곳에서 관리
오른쪽 출력판
74HC595 7개 · 저항 56개 · 공통 신호/전원 레일
56–111번에 해당하는 56개 출력 생성
왼쪽과 같은 회로를 복제해 배선 규칙을 통일
Step 1 — 56채널 출력판 하나를 설계하고 같은 구조를 두 번 만들었습니다
74HC595 7개와 채널별 저항을 같은 간격으로 반복 배치한 두 개의 56채널 출력판.
74HC595 7개와 채널별 저항을 같은 간격으로 반복 배치한 두 개의 56채널 출력판.

양쪽 판의 반복 규칙

  • 한 판당 74HC595 7개 × 8출력 = 56채널
  • SER는 첫 칩에 넣고 QH′를 다음 칩으로 연쇄 연결
  • SRCLK·RCLK·전원·GND는 7개 칩이 공통으로 사용
  • 각 출력 뒤에 저항을 같은 방향으로 일렬 배치
  • 두 번째 판도 같은 간격과 색상 규칙으로 복제
  • 첫 판의 마지막 QH′를 둘째 판의 첫 SER에 이어 14개를 하나의 112비트 chain으로 구성
첫 번째 판에서 레지스터 간 연결과 저항 열의 간격을 정한 뒤, 두 번째 판은 동일한 패턴으로 만들었습니다. 이 방식은 좌우 판의 같은 위치가 같은 회로 역할을 갖게 하므로, 특정 채널이 동작하지 않을 때 반대편의 대응 구간과 비교할 수 있습니다.
전기 설계 E-01 — 74HC595 한 단의 독립 8채널 출력 회로
KiCad로 작성하고 넷리스트로 검증한 74HC595 한 단의 회로. QA부터 QH까지 서로 분리된 네트와 개별 150옴 저항을 표시합니다.
KiCad로 작성하고 넷리스트로 검증한 74HC595 한 단의 회로. QA부터 QH까지 서로 분리된 네트와 개별 150옴 저항을 표시합니다.
U1 한 개의 실제 핀과 네트를 확대했습니다. SER 14번, SRCLK 11번, RCLK 12번, QH′ 9번, OE 13번→GND, SRCLR 10번→5V를 기준으로 연결했습니다. QA–QH는 공통선으로 합쳐지지 않으며, 각각 자기 이름을 가진 네트와 R1–R8 중 하나를 거쳐 CH0–7로 나갑니다.
자동 검사에서는 출력 네트마다 74HC595 출력 핀 1개와 저항 입력 1개만 존재하는지, 한 네트에 QA–QH 출력이 둘 이상 섞이지 않는지를 확인했습니다.
전기 설계 E-02 — 실제 한쪽 56채널 출력판 전체
74HC595 일곱 단과 56개의 독립 150옴 분기를 모두 펼친 KiCad 회로도. 한쪽 출력판 전체를 나타내며 반대쪽에 한 번 더 반복됩니다.
74HC595 일곱 단과 56개의 독립 150옴 분기를 모두 펼친 KiCad 회로도. 한쪽 출력판 전체를 나타내며 반대쪽에 한 번 더 반복됩니다.
U1–U7의 QH′→SER 직렬 연결, 일곱 IC가 공유하는 SRCLK·RCLK·5V·GND, 그리고 CH0–55의 56개 저항 분기를 한 시트에 모두 넣었습니다. 이 시트를 한 번 더 반복하면 반대쪽 CH56–111이 됩니다. 즉 E-01은 반복 단위, E-02는 실제 한쪽 판, E-00은 판 사이의 시스템 경계입니다.
넷리스트 검사로 7단 직렬 체인, 56개 출력 네트, 56개 저항 분기와 공통 제어선을 확인했습니다.
물리 배치 P-01 — 실물 제작 사진을 기준 자료로 고정
두 개의 56채널 출력판 실물. 각 판에서 7개의 DIP-16 74HC595는 긴 축이 브레드보드 중앙 홈과 나란하고 두 핀 열이 홈 양쪽을 점유합니다. 56개의 저항은 각 소자의 긴 축이 보드의 긴 방향과 직각이 되도록 일렬 배치되어 있습니다.
두 개의 56채널 출력판 실물. 각 판에서 7개의 DIP-16 74HC595는 긴 축이 브레드보드 중앙 홈과 나란하고 두 핀 열이 홈 양쪽을 점유합니다. 56개의 저항은 각 소자의 긴 축이 보드의 긴 방향과 직각이 되도록 일렬 배치되어 있습니다.
⚠️
이 사진이 P-01의 현재 유일한 물리 배치 기준입니다.
이전에 올린 Fritzing 재구성은 사진과 홀 단위로 일치하지 않아 철회했습니다. 74HC595 방향·중앙 홈 점유·저항 방향이 실제 제작물과 달랐고, 일부 점퍼선도 실제 홀에 연결되지 않은 채 부품 몸체를 통과했습니다. 따라서 해당 그림과 FZZ/SVG 링크를 검증 자료에서 제거했습니다.
사진에서 확실히 확인되는 내용만 기록합니다.
  • 한 판에 74HC595 7개, 두 판에 총 14개가 있습니다.
  • 각 DIP-16은 긴 축이 브레드보드 중앙 홈과 나란하고, 양쪽 핀 열이 홈의 두 면에 나뉘어 꽂혀 있습니다.
  • 채널별 저항은 개별 저항의 긴 축이 브레드보드의 긴 방향과 직각입니다. 저항 56개가 나란히 놓여 하나의 긴 띠처럼 보입니다.
  • 저항 바깥쪽의 검은 열은 보드 장착형 56핀 헤더로 확인되지 않습니다. 확대 사진상 저항 리드와 색상 점퍼 하니스를 잇는 개별 Dupont 커넥터 하우징 열로 판독됩니다.
  • 점퍼 하니스에 가려진 정확한 홀 번호와 원격 끝점은 사진만으로 확정하지 않습니다.
다음 도면은 이 사진 위에 부품 중심선과 실제 홀을 먼저 표시하고, IC 핀·저항 리드·점퍼 양 끝이 모두 확인된 연결만 Fritzing에 옮긴 뒤에만 게시합니다. 전기적 네트는 E-02 KiCad 회로, 물리 위치는 위 실물 사진을 각각 기준으로 사용합니다.
Step 2 — 중앙판에서 Raspberry Pi와 일곱 개 IDC 헤더의 자리를 먼저 잡았습니다
납땜 전에 Raspberry Pi 5와 2×10 박스헤더의 위치를 먼저 잡은 중앙 중계판.
납땜 전에 Raspberry Pi 5와 2×10 박스헤더의 위치를 먼저 잡은 중앙 중계판.

중앙판 배치 기준

  • Raspberry Pi의 HDMI·USB·Ethernet 포트를 가리지 않을 것
  • 기존 리본 케이블이 꺾이지 않도록 IDC 헤더 방향을 먼저 고정할 것
  • 양쪽 출력판에서 오는 점퍼선을 짧게 묶을 수 있도록 헤더를 Pi 주변에 분산할 것
  • 납땜면을 뒤집었을 때도 채널 묶음을 추적할 공간을 남길 것
기존 장치는 16개 선을 한 묶음으로 사용하는 리본 케이블 구조였습니다. 그래서 중앙판에 2×10 박스헤더 7개를 두고, 양쪽 판에서 들어오는 112개 출력을 일곱 개의 16채널 묶음으로 다시 정리했습니다. 이 중앙판이 새 회로와 기존 실험 장치를 연결하는 어댑터 역할을 합니다.
중앙판 도면 자료의 검증 범위
⚠️
이전에 연결한 .kicad_pcb 파일은 실제 제작에 사용한 PCB 원본이나 전기 회로도가 아닙니다. 완성 사진을 보고 만능기판 외곽·Raspberry Pi·IDC 커넥터의 대략적인 상면 위치만 2.54 mm 그리드에 다시 그린 참고용 재구성이며, 배선 네트·트랙·실제 홀 좌표 검증이 없습니다. 따라서 중앙판 KiCad PCB 원본이라는 표현과 다운로드 링크를 철회했습니다.
중앙판의 물리 구조는 위 Step 2의 실제 상면 사진, 납땜 배선은 아래 Step 3의 실제 하면 사진을 기준으로 확인합니다. 사진에 남지 않은 IDC 참조 번호와 채널별 핀맵은 도면으로 만들어 채우지 않습니다.
Step 3 — 중앙판 뒷면에서 IDC 헤더별 핀맵을 직접 납땜했습니다
중앙 중계판 하부. IDC 헤더와 양쪽 출력판 연결부를 채널 묶음별로 직접 납땜했습니다.
중앙 중계판 하부. IDC 헤더와 양쪽 출력판 연결부를 채널 묶음별로 직접 납땜했습니다.

중계 배선의 역할

  • 양쪽 출력판에서 들어온 채널을 기존 IDC 핀 순서로 변환
  • 헤더마다 배선 묶음을 분리해 다른 케이블과 섞이지 않게 구성
  • 납땜 간격을 넓게 두어 브리지·합선을 육안으로 점검
  • 연결 순서를 바꿔야 할 때 해당 묶음만 다시 작업할 수 있게 함
면적을 줄이기보다 연결 지점을 눈으로 따라갈 수 있는 것을 우선했습니다. 중앙판을 크게 만든 이유도 이 납땜면에서 인접 핀의 합선, 리본 케이블 순서 혼동, 수리 시 접근 문제를 줄이기 위해서였습니다.
Step 4 — 양쪽 출력판의 저항 뒤 채널선을 중앙판에 하나씩 연결했습니다
한쪽 56채널 출력판의 저항 열과 중앙 만능기판을 색상 점퍼선으로 연결하는 실제 조립 과정.
한쪽 56채널 출력판의 저항 열과 중앙 만능기판을 색상 점퍼선으로 연결하는 실제 조립 과정.

이 사진이 보여주는 결합 단계

  • 왼쪽: 7개 74HC595와 일렬로 배치한 채널별 저항
  • 오른쪽: IDC 헤더가 납땜된 중앙 만능기판
  • 색상 점퍼선: 저항을 지난 개별 출력과 중앙판의 핀맵을 연결
  • 굵은 전원선: 출력판의 전원·공통 GND를 중앙 시스템과 공유
  • 한쪽 56채널을 연결한 뒤 같은 규칙으로 반대쪽 판을 결합
점퍼선 색상만으로 채널 번호를 결정하지 않고, 레지스터 번호 → 출력 Q0–Q7 → 저항 위치 → 중앙판 연결점 → IDC 핀의 순서로 하나씩 대응시켰습니다. 연결 뒤에는 한 비트만 이동시키는 순차 점등으로 물리 배선과 프로그램 번호가 같은 방향인지 확인했습니다.
제작 기록 — 양쪽 56채널 출력판의 저항 열과 중앙판 IDC 연결부를 가까이 촬영하며 채널별 점퍼 결선을 확인한 영상
Step 5 — 세 판의 결선을 마친 뒤 Raspberry Pi를 중앙 제어기로 고정했습니다
양쪽 출력판의 배선이 들어오는 중앙판에 Raspberry Pi 5와 일곱 개 IDC 헤더를 조립한 모습.
양쪽 출력판의 배선이 들어오는 중앙판에 Raspberry Pi 5와 일곱 개 IDC 헤더를 조립한 모습.

통합 뒤 점검 순서

  1. 세 판의 공통 GND와 전원 극성 확인
  1. SER가 첫 레지스터에서 시작해 QH′를 통해 14번째 레지스터까지 이어지는지 확인
  1. SRCLK·RCLK가 양쪽 판의 모든 레지스터에 공통으로 도달하는지 확인
  1. 중앙판을 거쳐 IDC 헤더에서 한 비트가 0→111 순서로 이동하는지 재확인
  1. 기존 리본 케이블을 연결한 뒤 실제 전등 번호와 대조
조립 기록 — 양쪽 56채널 출력판과 중앙 Raspberry Pi·IDC 중계판을 세 판 구조로 결합한 완성 하드웨어 영상

4. 영상 한 편이 아니라, 단계별 Gate와 결함 기록으로 검증했습니다

처음부터 112개를 한 번에 연결하지 않았습니다. 각 단계는 무엇을 확인해야 통과인지를 먼저 정하고, 비트 순서·클럭·래치·칩 경계·기존 전등 불량을 서로 분리해 확인했습니다.
시점·Gate
시험 대상
확인 방법
기록·판정
2025.01.23 · Gate 1
74HC595 1개 · 8비트
좌·우 키로 한 점등 비트를 이동하고 SER·SRCLK·RCLK 반응 확인
1shiftreg.py와 아래 영상. 이 영상은 완성 시스템 영상이 아니라 가장 초반의 통과 시험
Gate 2
74HC595 2개 · 16비트
QH′→SER 연결 후 한 비트가 두 칩의 경계를 넘어 순환하는지 확인
2shiftreg.py와 2차 연결 기록으로 16비트 전송 로직 분리
2025.02.04–06 · 기존 조명 검사
연구실 전등 20개
새 제어기와 분리해 일반 전류를 직접 인가하고 번호별 점등 여부 확인
GND 아래 빈 2번 뒤 3번부터 번호를 세었고, 10·15·18번 불량을 기록
Scale 1
74HC595 6개 · 48비트
LSB 우선 전송, 번호 토글, 좌·우 순차 이동, 전체 ON/OFF 확인
6shift_reg.py로 채널 수 증가 뒤에도 조작 규칙 유지
Scale 2
74HC595 14개 · 112비트
0–111을 순차 이동하며 물리 채널과 번호 대응을 확인하고 CLI·GUI에서 같은 비트 상태 사용
ledctl.py, ledctl2.py, gui3.py; 선택 채널은 select.txt에 기록
여러 74HC595와 저항을 연결해 채널 수를 늘리던 중간 프로토타입. 전체 조립 전에 반복 배선과 비트 순서를 확인했습니다.
여러 74HC595와 저항을 연결해 채널 수를 늘리던 중간 프로토타입. 전체 조립 전에 반복 배선과 비트 순서를 확인했습니다.
확장 근거 사진 — 레지스터 수를 늘리면서 신호선과 저항의 반복 구조를 먼저 확인했습니다.
Gate 1 — 74HC595 한 개에서 키 입력에 따라 점등 위치가 이동하는지 확인한 8채널 초기 시험
영상의 위치 — 전체 프로젝트 대표 영상이 아니라, 다음 단계로 넘어가기 위한 첫 번째 검증 자료입니다.
래치를 내린 상태에서 모든 비트를 순서대로 이동시키고 마지막에 RCK 펄스를 주어 출력을 동시에 갱신했습니다. 그리고 제어기 문제와 전등 자체의 고장을 섞지 않기 위해 20개 조명 점검을 별도 단계로 두었습니다. 이 분리가 없으면 10·15·18번이 켜지지 않는 원인을 배선·코드 오류로 잘못 추적할 수 있었습니다.
최종 LED 배열 검증
112채널 검증 — 완성 제어기와 긴 LED 배열을 연결하고 점등·소등 반응을 확인한 영상
전체 시스템 검증 — 중앙 제어기·리본 케이블·LED 배열을 함께 촬영하며 전체 점등 반응을 확인한 영상

5. 회로를 켜는 코드가 아니라 연구자가 조작하는 패널을 만들었습니다

사용자 입장에서 필요한 조작을 번호로 지정하기, 직접 클릭하기, 좌우로 이동하기, 선택 결과를 기록하기로 나눴습니다. 개발·배선 확인에는 키보드 중심의 curses 프로그램을, 전체 채널 상태를 한눈에 보는 용도에는 Tkinter GUI를 만들었습니다.
인터페이스
기능
사용 목적
채널 번호 CLI
0–111 입력 시 ON, 별도 번호 범위 입력 시 OFF, 현재 점등 목록 표시
배선 확인과 특정 채널 반복 시험
이동·선택 CLI
좌우 이동, 임의 위치 시작, Enter로 선택 채널을 select.txt에 기록
연구 절차에서 위치 이동과 선택 결과 저장
112채널 GUI
0–111 번호 입력, ON·OFF 버튼, 56×2 상태 표시, 각 표시를 클릭해 토글
현재 상태를 시각적으로 확인하고 직접 조작
GUI 상태와 실제 출력은 같은 led_state 비트를 공유합니다. 화면의 원형 표시를 클릭하면 해당 비트를 XOR로 토글하고, 같은 상태를 시프트 레지스터에 전송한 뒤 전체 표시를 다시 그렸습니다. 물리 채널과 화면의 번호가 어긋나지 않도록 56개씩 두 줄로 표현했습니다.
🖥️
하드웨어와 UI가 공유한 기준: 물리 출력과 화면 모두 0–111의 112비트 상태를 사용했습니다. CLI의 번호 지정·순차 이동, GUI의 56×2 클릭 토글, select.txt의 선택 기록이 같은 채널 번호를 가리키도록 구성했습니다.

6. 원격 조작을 설계하되, 현장에서 끊기지 않는 직접 제어 경로도 남겼습니다

의뢰 초기부터 원격 조정이 필요하다고 판단해 Wi-Fi·Ethernet·SSH를 검토했습니다. Raspberry Pi를 선택했기 때문에 같은 네트워크에서는 GUI나 CLI를 원격으로 실행하고 파일을 관리할 수 있었습니다.
다만 2차 현장 답사에서 공유기 사용과 유선망 확보가 어렵고 연구실마다 동일한 네트워크 구성을 재현하기 힘들다는 점을 확인했습니다. 원격 접속만을 유일한 경로로 두지 않고, microHDMI 모니터와 키보드·마우스를 연결하면 네트워크 없이도 바로 조작할 수 있도록 했습니다.
노트북·Raspberry Pi·시험 회로·기존 LED 리본 케이블을 함께 연결해 원격·유선 운용과 실제 채널 반응을 확인하던 현장 구성.
노트북·Raspberry Pi·시험 회로·기존 LED 리본 케이블을 함께 연결해 원격·유선 운용과 실제 채널 반응을 확인하던 현장 구성.
📍

2차 현장 답사의 의사결정 로그

  • 확인: SSH 가능 여부, 연구실 네트워크, 기존 핀 배열
  • 발견: 공유기와 랜선 확보가 쉽지 않아 원격 접속 재현성이 낮음
  • 결정: 원격 기능은 유지하되 실험의 기본 경로는 HDMI 직접 조작
  • 연결: 기존 리본 케이블은 2×10 박스헤더 단위로 수용
인계 매뉴얼에는 직접 HDMI, Ethernet, Wi-Fi·SSH 세 방식을 모두 설명하고, 현장 상황에 따라 선택하도록 했습니다. 원격 기능을 남기면서도 실험 직전에 네트워크 문제 때문에 장비를 켜지 못하는 상황을 피한 설계입니다.

7. 크게 만든 배선 구조와 운용 매뉴얼까지 하나의 납품물로 완성했습니다

최소 면적보다 단락 방지, 신호선 구분, 유지보수 시 접근성을 우선해 두 개의 LED 뱅크와 중앙 중계기판을 여유 있게 배치했습니다. 색이 다른 점퍼선, 반복되는 레지스터·저항 구조와 분리된 커넥터 묶음으로 어느 채널군에 문제가 생겼는지 육안으로 추적할 수 있도록 했습니다.
두 개의 56채널 74HC595 뱅크와 중앙 Raspberry Pi 제어기를 연결한 최종 시스템. 리본 케이블을 통해 기존 LED 배열과 이어집니다.
두 개의 56채널 74HC595 뱅크와 중앙 Raspberry Pi 제어기를 연결한 최종 시스템. 리본 케이블을 통해 기존 LED 배열과 이어집니다.

인계 시 함께 넘긴 것

  • 56채널 뱅크 2개와 중앙 Raspberry Pi 5 제어기
  • 112채널 Python CLI·GUI
  • HDMI·Ethernet·Wi-Fi/SSH 연결 절차
  • 박스헤더 방향·GPIO·저항·납땜면 사진
  • 과열·노출 배선·연결 순서 주의사항을 포함한 19장 매뉴얼
최종 매뉴얼에는 Raspberry Pi 5와 GPIO 위치, 두 56채널 뱅크의 방향, 박스헤더 연결 순서, 74HC595 배열, 저항 구간과 납땜면을 사진과 함께 정리했습니다. 기존 리본 케이블의 순서를 유지해야 하는 박스헤더, 전류가 직접 흐르는 만능기판 하부, 과열 발생 시 즉시 동작을 멈춰야 한다는 주의사항도 명시했습니다.
2025년 2월 18일 완성품과 19장 매뉴얼을 감기택 교수 연구실에 인계했습니다. 회로가 동작하는 순간이 아니라 다음 사용자가 연결·조작·점검·중단 조건을 판단할 수 있는 상태를 완료 기준으로 삼았습니다.

RESULTS

  • 긴급 대체: 고장 난 전용 PIC 기반 제어기를 단순 수리하는 대신, 운영체제와 사용자 인터페이스를 갖춘 Raspberry Pi 기반 시스템으로 다시 설계했습니다.
  • 하드웨어 결과: 74HC595 7개로 56개 출력을 만드는 뱅크 2개를 조립해 총 112채널의 독립 출력 구조를 완성했습니다.
  • 소프트웨어 결과: 112비트 상태를 기준으로 특정 LED ON·OFF, 순차 이동, 전체 상태 확인, GUI 클릭 토글과 선택 기록이 가능한 Python 프로그램을 구현했습니다.
  • 운용 결과: Wi-Fi·Ethernet·SSH 원격 접속 가능성을 유지하면서 네트워크 없이도 사용할 수 있는 직접 HDMI 제어 경로를 함께 제공했습니다.
  • 협업·인계: 교수님·조교님과 요구사항과 현장 제약을 반복 확인하고, 완성 장치와 연결·사용·주의사항을 담은 19장 매뉴얼을 2025년 2월 18일 감기택 교수 연구실에 전달했습니다.
  • 범위 차이: 최초 요구는 126개였으나 최종 코드와 하드웨어의 검증된 제어 범위는 112개입니다. 남은 14채널은 구현되지 않았으므로 126개 목표를 완전히 달성한 것으로 표현하지 않았습니다.
  • 한계: 최대 동시 점등 시 전류·전압 강하·IC별 발열을 계측하지 않았고, 외부 정전류 드라이버·보호 회로와 제작 PCB를 사용하지 않았습니다. 브레드보드·만능기판과 노출 납땜면을 사용한 프로토타입이므로 장시간 운용과 안전 여유에 대한 추가 검증이 필요합니다.
page icon

배운 점과 다음 단계

임베디드 시스템 수업에서 배운 GPIO·레지스터 개념과 Galaxy Watch5 프로젝트에서 익힌 납땜 경험이 실제 연구실의 긴급한 문제를 해결하는 기반이 됐습니다. 그러나 기술 지식만으로는 충분하지 않았습니다. 교수님·조교님이 어떤 실험을 어떻게 수행하는지 계속 확인하면서, 원격 접속·GUI·직접 제어·유지보수라는 요구가 회로 선택만큼 중요하다는 것을 배웠습니다.
또한 “126개를 켜는 장치”라는 목표와 실제로 검증한 112채널을 구분하고, 작은 회로부터 영상을 남기며 확장하는 방식이 하드웨어 프로젝트의 신뢰성을 만든다는 점을 확인했습니다.
다음 단계에서는 전용 LED·정전류 드라이버로 126개 이상을 설계하고, 채널별 전류·전압 강하·온도·전체 동시 점등을 자동 계측하겠습니다. 브레드보드 대신 절연·스트레인 릴리프·퓨즈가 포함된 PCB와 케이스를 제작하고, 커넥터 핀맵과 채널 번호를 자동 검증하는 self-test도 추가하겠습니다.

전체 기록과 원본