고장 난 연구용 LED 제어기를 대신해 Raspberry Pi 5와 74HC595 14개로 112채널 제어 시스템을 새로 설계·제작하고, 강원대학교 심리학과 감기택 교수 연구실에 인계했습니다.
8→16→48→112채널로 회로와 코드를 단계적으로 확장하고, 원격 접속과 직접 조작을 모두 고려한 Python CLI·GUI 및 19장 운용 매뉴얼까지 완성했습니다.
왜 이 프로젝트를 시작했는가
감기택 교수 연구실에서 실험에 사용하던 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 · TinkercadMY WORK
1. 고장 난 전용 제어기와 실험실의 실제 요구부터 다시 읽었습니다

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

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채널 뱅크의 시스템 인터커넥트

이 시트는 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채널 출력판 하나를 설계하고 같은 구조를 두 번 만들었습니다

첫 번째 판에서 레지스터 간 연결과 저항 열의 간격을 정한 뒤, 두 번째 판은 동일한 패턴으로 만들었습니다. 이 방식은 좌우 판의 같은 위치가 같은 회로 역할을 갖게 하므로, 특정 채널이 동작하지 않을 때 반대편의 대응 구간과 비교할 수 있습니다.
전기 설계 E-01 — 74HC595 한 단의 독립 8채널 출력 회로

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채널 출력판 전체

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 — 실물 제작 사진을 기준 자료로 고정

이 사진이 P-01의 현재 유일한 물리 배치 기준입니다.
이전에 올린 Fritzing 재구성은 사진과 홀 단위로 일치하지 않아 철회했습니다. 74HC595 방향·중앙 홈 점유·저항 방향이 실제 제작물과 달랐고, 일부 점퍼선도 실제 홀에 연결되지 않은 채 부품 몸체를 통과했습니다. 따라서 해당 그림과 FZZ/SVG 링크를 검증 자료에서 제거했습니다.
사진에서 확실히 확인되는 내용만 기록합니다.
- 한 판에 74HC595 7개, 두 판에 총 14개가 있습니다.
- 각 DIP-16은 긴 축이 브레드보드 중앙 홈과 나란하고, 양쪽 핀 열이 홈의 두 면에 나뉘어 꽂혀 있습니다.
- 채널별 저항은 개별 저항의 긴 축이 브레드보드의 긴 방향과 직각입니다. 저항 56개가 나란히 놓여 하나의 긴 띠처럼 보입니다.
- 저항 바깥쪽의 검은 열은 보드 장착형 56핀 헤더로 확인되지 않습니다. 확대 사진상 저항 리드와 색상 점퍼 하니스를 잇는 개별 Dupont 커넥터 하우징 열로 판독됩니다.
- 점퍼 하니스에 가려진 정확한 홀 번호와 원격 끝점은 사진만으로 확정하지 않습니다.
다음 도면은 이 사진 위에 부품 중심선과 실제 홀을 먼저 표시하고, IC 핀·저항 리드·점퍼 양 끝이 모두 확인된 연결만 Fritzing에 옮긴 뒤에만 게시합니다. 전기적 네트는 E-02 KiCad 회로, 물리 위치는 위 실물 사진을 각각 기준으로 사용합니다.
Step 2 — 중앙판에서 Raspberry Pi와 일곱 개 IDC 헤더의 자리를 먼저 잡았습니다

기존 장치는 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 헤더별 핀맵을 직접 납땜했습니다

면적을 줄이기보다 연결 지점을 눈으로 따라갈 수 있는 것을 우선했습니다. 중앙판을 크게 만든 이유도 이 납땜면에서 인접 핀의 합선, 리본 케이블 순서 혼동, 수리 시 접근 문제를 줄이기 위해서였습니다.
Step 4 — 양쪽 출력판의 저항 뒤 채널선을 중앙판에 하나씩 연결했습니다

점퍼선 색상만으로 채널 번호를 결정하지 않고, 레지스터 번호 → 출력 Q0–Q7 → 저항 위치 → 중앙판 연결점 → IDC 핀의 순서로 하나씩 대응시켰습니다. 연결 뒤에는 한 비트만 이동시키는 순차 점등으로 물리 배선과 프로그램 번호가 같은 방향인지 확인했습니다.
Step 5 — 세 판의 결선을 마친 뒤 Raspberry Pi를 중앙 제어기로 고정했습니다

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에 기록 |

확장 근거 사진 — 레지스터 수를 늘리면서 신호선과 저항의 반복 구조를 먼저 확인했습니다.
영상의 위치 — 전체 프로젝트 대표 영상이 아니라, 다음 단계로 넘어가기 위한 첫 번째 검증 자료입니다.
래치를 내린 상태에서 모든 비트를 순서대로 이동시키고 마지막에 RCK 펄스를 주어 출력을 동시에 갱신했습니다. 그리고 제어기 문제와 전등 자체의 고장을 섞지 않기 위해 20개 조명 점검을 별도 단계로 두었습니다. 이 분리가 없으면 10·15·18번이 켜지지 않는 원인을 배선·코드 오류로 잘못 추적할 수 있었습니다.
최종 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 모니터와 키보드·마우스를 연결하면 네트워크 없이도 바로 조작할 수 있도록 했습니다.

인계 매뉴얼에는 직접 HDMI, Ethernet, Wi-Fi·SSH 세 방식을 모두 설명하고, 현장 상황에 따라 선택하도록 했습니다. 원격 기능을 남기면서도 실험 직전에 네트워크 문제 때문에 장비를 켜지 못하는 상황을 피한 설계입니다.
7. 크게 만든 배선 구조와 운용 매뉴얼까지 하나의 납품물로 완성했습니다
최소 면적보다 단락 방지, 신호선 구분, 유지보수 시 접근성을 우선해 두 개의 LED 뱅크와 중앙 중계기판을 여유 있게 배치했습니다. 색이 다른 점퍼선, 반복되는 레지스터·저항 구조와 분리된 커넥터 묶음으로 어느 채널군에 문제가 생겼는지 육안으로 추적할 수 있도록 했습니다.

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