728x90

Arduino millis()와 STM32 HAL_GetTick()을 이용해 LED를 제어하고 블로킹, 상태 머신, 타이밍 한계, 인터럽트와 DMA의 역할을 이해합니다.

LED를 기다리는 동안 버튼도 기다린다

LED를 켜고 delay(500), 끄고 delay(500)를 실행하면 눈에는 깜빡이는 LED가 보인다. 하지만 그 루프에서 버튼 읽기나 통신 처리를 함께 한다면 기다리는 시간이 기능의 응답을 늦춘다.

delay() 중에도 플랫폼의 인터럽트는 동작할 수 있다. 따라서 ‘CPU의 모든 기능이 정지한다’는 설명은 정확하지 않다. 핵심은 현재 실행 흐름이 다음 애플리케이션 작업으로 진행하지 못한다는 점이다.

여러 일을 해야 한다면 ‘500 ms를 기다린다’를 ‘500 ms가 지났는지 확인한다’로 바꿔보자. Arduino의 Blink Without Delay 공식 예제도 같은 원리를 설명한다. 

Arduino UNO에서 시간 차이를 계산하기

아래 스케치는 Arduino UNO Rev3의 내장 LED를 500 ms마다 토글한다. ON·OFF 한 주기는 약 1초다.

#include 

 

const uint32_t ledToggleIntervalMs = 500;

uint32_t lastLedToggleMs = 0;

bool ledIsOn = false;

 

void setup() {

  pinMode(LED_BUILTIN, OUTPUT);

  digitalWrite(LED_BUILTIN, LOW);

  lastLedToggleMs = millis();

}

 

void loop() {

  const uint32_t currentTimeMs = millis();

 

  if (static_cast(currentTimeMs - lastLedToggleMs)

      >= ledToggleIntervalMs) {

    lastLedToggleMs = currentTimeMs;

    ledIsOn = !ledIsOn;

    digitalWrite(LED_BUILTIN, ledIsOn ? HIGH : LOW);

  }

 

  // 여기서 버튼 확인 등 짧은 작업을 수행한다.

}

부호 없는 정수의 차이를 사용하는 이유는 타이머 카운터가 최댓값을 지나 0으로 돌아오는 상황을 처리하기 위해서다. 
이 방식은 시간 차이가 표현 가능한 범위 안에 있고 충분히 자주 확인한다는 전제에서 사용한다. 영원히 호출하지 않아도 정확하다는 뜻은 아니다.

이 예제는 실제 처리 시각을 다음 기준으로 삼으므로 루프의 지연이 누적되면 주기가 조금씩 밀릴 수 있다. 엄격한 일정이 필요하다면 절대 마감 시각을 관리하거나 하드웨어 타이머를 검토한다. 지연 후 밀린 작업을 모두 따라잡을지, 오래된 작업을 건너뛸지도 정책으로 정해야 한다.

STM32에서도 원리는 같다

다음은 STM32Cube HAL 프로젝트의 코드 조각이다. NUCLEO-F401RE의 LD2가 연결된 PA5를 출력으로 초기화한 조건을 가정한다. HAL_Init(), SystemClock_Config(), MX_GPIO_Init() 등 생성된 초기화 흐름은 유지한다. 전체 프로젝트를 대신하는 파일은 아니다.

/* 생성된 GPIO 초기화 이후, main()의 while(1) 앞 */

uint32_t lastLedToggleMs = HAL_GetTick();

const uint32_t ledToggleIntervalMs = 500U;

 

while (1)

{

    const uint32_t currentTimeMs = HAL_GetTick();

 

    if ((uint32_t)(currentTimeMs - lastLedToggleMs)

        >= ledToggleIntervalMs)

    {

        lastLedToggleMs = currentTimeMs;

        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);

    }

 

    /* 짧은 버튼 확인, 수신 데이터 처리 등을 배치 */

}

HAL_GetTick()의 기본 시간 기준은 보통 1 ms지만 프로젝트에서 시간 기준을 변경할 수 있다. 저전력 모드에서 tick을 중지하는 경우도 있다. 따라서 시간 함수의 숫자가 실제 경과 시간과 어떻게 대응하는지 확인해야 한다.

두 코드를 비교하면 시간 읽기와 GPIO 접근 함수만 바뀌고 애플리케이션의 판단 구조는 거의 같다. 이 부분이 하드웨어에 의존하는 코드와 제품 동작을 분리하는 출발점이다.

애플리케이션·서비스·드라이버·HAL/레지스터를 분리하는 개념도. 자체 제작. 분리는 폴더를 늘리는 작업이 아니라 변경 이유가 다른 코드를 나누는 작업이다.


delay()만 지웠다고 전부 논블로킹은 아니다

센서 읽기 함수가 응답을 기다리거나 직렬 출력 버퍼가 가득 찬다면 여전히 오래 걸릴 수 있다. 통신 함수의 timeout이 1초라면 LED 코드가 논블로킹이어도 버튼 반응이 늦어질 수 있다.

확인할 것은 각 작업의 최악 실행 시간이다. 센서 변환에 시간이 필요하면 ‘변환 시작 → 다른 작업 수행 → 완료 확인 → 결과 읽기’로 나눌 수 있다. 
긴 데이터 전송은 인터럽트나 DMA 기반 처리로 옮기고, 완료 콜백에서는 상태를 기록한 뒤 메인 흐름에서 후속 처리를 수행한다.

인터럽트는 짧게 끝내는 것이 좋다. 
긴 로그 출력과 복잡한 연산을 인터럽트 안에 모으면 다른 이벤트의 지연이 커진다. 
또한 volatile은 공유 데이터의 원자성이나 상호 배제를 보장하지 않는다.
 ISR과 메인 루프가 같은 데이터를 다룰 때에는 읽기·쓰기 크기, 경쟁 상태, 필요한 임계구역을 따로 검토한다.


상태 머신은 기다림을 상태로 바꾸는 도구다

센서를 읽는 동작을 IDLE, WAITING, READY, ERROR로 나눠보자. IDLE에서는 변환을 시작하고 시작 시간을 기록한다. WAITING에서는 완료 여부와 timeout을 확인한다. READY에서는 결과를 처리하고, ERROR에서는 재시도나 오류 보고 정책을 실행한다.

이렇게 하면 ‘응답이 올 때까지 붙잡고 있기’보다 각 단계가 언제 끝났는지 관찰하기 쉽다. 통신 장치의 재연결, 모터의 준비·가동·정지, 사용자 인터페이스에도 같은 방식이 적용된다.

다만 상태 머신을 만들었다고 자동으로 실시간성이 보장되지는 않는다. 각 상태 안의 처리 시간이 길면 루프 전체가 느려진다. 실제 요구 응답 시간과 측정 결과를 기준으로 평가한다.


동작하는 코드에서 검증 가능한 제품으로

시제품·PCB·검증·생산으로 이어지는 개발 흐름. 자체 제작. 각 단계에서 기능뿐 아니라 고장 관찰과 반복 생산 조건을 확인한다.


버튼 응답 시간이 요구사항에 맞는지, 통신이 끊겼을 때 timeout과 복구가 동작하는지, tick 카운터의 래핑을 처리하는지, 센서 오류가 다른 기능까지 멈추게 하는지 확인해 보자. 
긴 구간의 실행 시간을 GPIO 펄스나 시간 기록으로 측정하면 개선할 위치를 찾을 수 있다.

코드를 바꾸는 이유는 ‘고급스럽게 보이기’가 아니다. 장치가 기다리는 동안 다른 일을 하고, 실패했을 때도 다음 행동을 결정하기 위해서다. 

728x90
728x90

코드에서 기판으로: 소형 제품 개발 자료를 한 패키지로 정리하기

LED의 밝기를 버튼으로 바꾸는 코드는 비교적 짧게 만들 수 있다. 하지만 이 기능을 제품에 넣으려면 전원, LED 구동 회로, 커넥터, 펌웨어 다운로드 방법, 기판 고정 위치까지 함께 정해야 한다.

이번 글에서는 LED 미용 거울에 사용할 컨트롤러의 KiCad 설계 패키지를 살펴본다. 회로도와 PCB 원본뿐 아니라 제조 출력 파일, 부품 목록, 펌웨어, 시험 기록표가 어떤 역할을 하는지 정리했다. 처음 PCB 프로젝트를 열어보는 개발자도 파일의 사용 순서를 이해하는 것이 목표다.

이 프로젝트는 LED 조명 제어용이다. 피부에 전기 자극을 주거나 치료 기능을 구현하는 장치는 아니다. 현재 상태는 제작 전 검토용 Prototype A이며, 실물 제작·계측과 양산 승인은 완료하지 않았다.

1. 어떤 제품을 위한 설계인가?

항목  현재 설계 조건
제어 MCU ATmega328P-PU, DIP-28
동작 조건 5V 로직, 외부 16MHz 클록
기판 80×50mm, 구리 2층
전원 안정화된 외부 5V를 J1로 공급
LED 부하 5V, 2선식, 전류 제한 포함, 전원 PWM 허용 모듈을 전제로 최대 300mA
사용자 입력 외부 순간 버튼
기능 OFF·LOW·MID·HIGH 전환, 밝기 페이드, 자동 종료
PC 연결 외부 USB-UART 어댑터
최초 프로그래밍·복구 AVR ISP

80×50mm는 첫 설계를 위한 가정이다. 실제 거울 케이스를 측정해 확정한 크기는 아니다. 외부 LED 모듈의 판매 모델도 아직 확정하지 않았다.

LED 모듈에 필요한 전류와 제어 조건을 먼저 확인해야 한다. 전류 제한이 없는 LED를 그대로 연결하는 설계로 이해하면 안 된다. PCB에는 USB 데이터 커넥터, USB-C CC 회로, 배터리 충전 회로, 역극성·과전압 보호가 구현되어 있지 않다.

2. 처음에는 어떤 파일을 열어야 할까?

압축을 풀면 led-mirror-cad 폴더가 나온다. 먼저 README-KO.md를 읽고, KiCad에서 mirror.kicad_pro를 연다. 이후 회로도 편집기와 PCB 편집기를 차례로 확인하면 된다.

파일 역할 언제 사용하는가?
README-KO.md 설계 조건, 배선, 업데이트, 미검증 항목 안내 프로젝트를 처음 볼 때
mirror.kicad_pro KiCad 프로젝트 설정 프로젝트를 열고 검사 조건 등을 확인할 때
mirror.kicad_sch 수정 가능한 회로도 원본 부품의 전기적 연결과 회로 기능을 검토할 때
mirror.kicad_pcb 수정 가능한 PCB 원본 부품 배치, 배선, 외곽, 고정홀을 확인할 때
schematic.pdf 회로도 열람용 PDF KiCad 없이 회로를 읽거나 공유할 때
pcb-top.svg PCB 앞면 검토 이미지 앞면 배치·배선을 설명할 때
pcb-bottom.svg PCB 뒷면 검토 이미지 뒷면 배선을 설명할 때
fp-lib-table 프로젝트 풋프린트 라이브러리 연결 정보 포함된 풋프린트를 프로젝트에서 찾을 때
libs/ 프로젝트에 포함한 풋프린트 파일 다른 PC에서 프로젝트를 열거나 부품 형상을 검토할 때

이 패키지는 KiCad 7 형식으로 생성했다. 다른 버전에서 수정했다면 그 버전에서 회로도와 PCB를 다시 검사하고 제조 파일도 새로 출력해야 한다.

프로젝트 폴더를 공유할 때는 mirror.kicad_pcb만 보내기보다 libs/와 fp-lib-table까지 함께 유지하는 편이 좋다. .kicad_mod는 부품의 패드·외곽선 등 PCB 풋프린트를 정의하며, .pretty는 이 풋프린트들을 담는 라이브러리 폴더다. 포함된 풋프린트는 일부 외곽선을 Fab 레이어로 옮겼으므로 기본 라이브러리의 모습과 다를 수 있다.

3. 회로도에서는 무엇을 봐야 할까?

mirror.kicad_sch는 전기적인 연결을 설명하는 원본이다. 부품이 기판의 어느 위치에 있는지를 나타내는 PCB와 구분해서 읽는다.

이번 회로는 전원 입력, MCU·클록·리셋, 버튼 입력, LED 구동, 통신·프로그래밍 연결로 나누어 볼 수 있다.

회로 영역 주요 역할
전원 입력과 F1 외부 5V를 내부 전원으로 공급하고 PTC 퓨즈를 배치
ATmega328P와 주변 부품 버튼 입력, PWM 출력, UART 명령 처리
크리스털과 커패시터 MCU의 외부 클록 구성
리셋 회로 재시작과 프로그래밍에 필요한 RESET 연결
버튼 입력 내부 풀업을 사용해 누름 상태 읽기
AO3400A MOSFET LED의 음극 쪽 전류 경로를 PWM으로 스위칭
ISP·UART 커넥터 펌웨어 기록, PC 통신, 업데이트 경로 제공

PTC 퓨즈가 있다고 해서 모든 잘못된 전원 연결이 보호되는 것은 아니다. 역극성이나 과전압 보호는 별도의 설계 항목이다.

이미지 2 삽입: schematic.pdf의 전체 회로도.

캡션: 전원·MCU·LED 구동·통신 회로를 한눈에 보는 전체 회로도. 상세 설명에서는 해당 부분을 확대해 보여준다.

이미지 3 삽입: 회로도의 Q1과 게이트 저항 부분 확대.

캡션: MCU D3 출력이 저항을 통해 MOSFET 게이트를 제어한다. 풀다운 저항은 게이트가 떠 있는 상태를 방지하며, LED_NEG는 스위칭되는 노드이므로 상시 GND로 취급하지 않는다.

4. PCB 원본과 제조 파일은 역할이 다르다

mirror.kicad_pcb에는 실제 부품 위치, 구리 배선, 비아, 기판 외곽과 고정홀이 들어 있다. 기능이나 기구 조건이 바뀌면 이 원본을 수정한다.

반면 fabrication-PROTOTYPE 폴더에는 기판 제작에 사용할 출력물이 들어 있다. Gerber는 각 층의 형상을 전달하고, 드릴 파일은 구멍 위치와 크기를 전달한다. 설계를 수정한 뒤 예전 Gerber를 보내면 변경 사항이 제작에 반영되지 않으므로 출력물도 함께 갱신해야 한다.

실제 파일 의미
mirror-F_Cu.gtl 앞면 구리 패턴
mirror-B_Cu.gbl 뒷면 구리 패턴
mirror-F_Mask.gts / mirror-B_Mask.gbs 앞·뒷면 솔더마스크 개구 형상
mirror-F_Silkscreen.gto / mirror-B_Silkscreen.gbo 앞·뒷면 인쇄 표기
mirror-F_Paste.gtp / mirror-B_Paste.gbp 솔더페이스트 개구 형상, 스텐실·조립 검토에 사용
mirror-Edge_Cuts.gm1 기판 외곽
mirror-PTH.drl 도금 구멍용 드릴 정보
mirror-NPTH.drl 비도금 구멍용 드릴 정보
mirror-PTH-drl_map.pdf / mirror-NPTH-drl_map.pdf 구멍 위치와 종류를 읽기 쉽게 표시한 도면
mirror-job.gbrjob Gerber 층과 작업 정보를 설명하는 파일

실제 제출 파일과 압축 방식은 제작 업체의 안내에 맞춘다. 페이스트 파일은 맨 기판 제작과 조립·스텐실 작업에서 쓰임이 다르다. 파일을 업로드하기 전 Gerber Viewer로 외곽, 구리, 마스크, 드릴의 겹침을 확인한다.

제조 검토 시작 조건은 FR-4, 1.6mm 두께, 1oz 구리이며, 최종 두께·마감·제조 규칙은 업체 및 제품 요구사항과 대조해야 한다. 현재 출력물은 발주 승인을 받은 양산 자료가 아니다.

이미지 4 삽입: Gerber Viewer에서 구리층·외곽·드릴을 함께 표시한 화면.

캡션: PCB 원본과 별도로 제조 출력물을 확인한다. 층의 방향, 기판 외곽, 드릴 위치가 맞는지 제작 전에 대조한다.

5. BOM과 부품 배치표 읽기

 

파일 설명 현재 확인할 부분
bom.csv 부품 참조번호, 값, 후보 제조사 부품번호, 풋프린트 등의 부품 목록 구매 승인용 확정 BOM이 아님
placement.csv 부품의 위치·회전 등의 배치 정보 조립 업체 원점·회전·SMD/THT 처리 기준과 대조 필요

예를 들어 회로도에서 Q1이라고 표시한 부품을 BOM에서 찾아 후보 부품번호를 확인하고, PCB에서 Q1의 패드와 실물 단자 배열을 대조한다. 부품 값이 같아도 패키지 크기나 핀 배열이 다를 수 있기 때문이다.

이번 BOM에는 외부 LED 모듈, 전원 공급기, 외부 버튼, 케이블, 케이스, 나사와 스페이서가 포함되지 않는다. 전체 제품을 만들려면 이 부품들도 별도로 선정해야 한다. 특히 크리스털의 부하 조건, 전해커패시터의 실물 크기, 헤더와 커넥터 형상은 주문 전에 확인할 항목이다.

6. 펌웨어 파일이 구현한 기능

firmware/mirror/mirror.ino는 Arduino 형식의 소스다. ATmega328P, 5V, 16MHz의 UNO 호환 구성을 전제로 한다. 현재 코드는 호스트 모의 시험을 거쳤지만 AVR 타깃 컴파일과 실제 기판 실행은 수행하지 않았다.

기능 구현 내용
버튼 Arduino D2, 내부 풀업, 약 30ms 디바운싱
밝기 출력 Arduino D3 PWM, MOSFET 제어
밝기 단계 OFF → LOW → MID → HIGH → OFF
PWM 값 0, 64, 128, 255
밝기 변화 주기적으로 출력값을 변화시켜 페이드 처리
부팅·리셋 기본 OFF
자동 종료 기본 600초, 비영 밝기 설정 시점을 기준으로 시간 계산
시리얼 통신 115200bps, 8N1
설정 유지 RAM에 저장, 리셋하면 기본값 복귀

PWM 숫자는 듀티를 정하는 값이며 실제 조도나 사람이 느끼는 밝기를 보증하지 않는다. 조도와 촬영 플리커는 최종 LED를 연결한 뒤 측정해야 한다.

PC에서는 개행으로 끝나는 다음 명령을 전송할 수 있다.

VERSION
STATUS
LEVEL 1
LEVEL 3
TIMEOUT 600
LEVEL 0

VERSION은 버전, STATUS는 상태를 요청한다. LEVEL은 0~3, TIMEOUT은 30~3600초 범위다. 이 명령으로 밝기와 시간을 변경하는 것은 실행 중 제어이며, 새로운 프로그램을 기록하는 펌웨어 업데이트와는 구분한다.

7. PC 연결과 펌웨어 업데이트

보드에 USB 데이터 포트가 없으므로 J4에 외부 USB-UART를 연결한다. 이 보드는 5V 로직이므로 어댑터의 실제 신호 전압과 입력 허용 전압을 확인해야 한다. 전원 선택 스위치가 신호 레벨까지 바꾸는지는 어댑터 사양으로 확인한다.

보드 J4 외부 USB-UART
1: GND GND
2: RXD TX
3: TXD RX

어댑터 VCC는 연결하지 않고 J1에서 별도로 전원을 공급한다. TX와 RX는 서로 교차 연결하며 GND는 공통으로 연결한다.

새 칩을 처음 준비하거나 부트로더를 복구할 때는 J3의 AVR ISP 경로를 사용한다. J3 핀은 1=MISO, 2=+5V, 3=SCK, 4=MOSI, 5=RESET, 6=GND다. 프로그래머와 J1에서 전원을 중복 공급하지 않는다.

UART 업로드에는 적절한 부트로더가 필요하다. 현재 보드는 DTR/RTS 자동 리셋 회로가 없으므로 J5를 이용해 수동 리셋 타이밍을 맞춰야 한다. 실패할 때는 ISP 경로로 기록·복구한다. 부트로더 및 fuse 설정은 정확한 칩과 클록 조건에 맞춰야 한다.

8. 검사 기록은 무엇을 증명하는가?

파일 기록 내용
drc-report.txt PCB 설계 규칙 검사 결과
validation.json CAD 로드·출력, 연결 대조, 검사·실물 시험 상태
physical-test-sheet.csv 실물 시험 항목과 측정 결과를 기록할 양식
manufacturing-and-test-guide.docx 제작·연결·업데이트·검증 안내를 담은 문서

KiCad 7.0.11에서 기록한 결과는 DRC 위반 0건, 미연결 패드 0개, 풋프린트 오류 0건이다. 회로도 연결 목록, 설계 핀 표, PCB 패드 연결도 대조했다.

이는 설정된 PCB 규칙과 연결 조건에 대한 검사 결과다. 회로가 실제로 정상 동작하거나 발열·내구성 요구사항을 충족한다는 의미는 아니다. 네이티브 ERC 엔진 검사는 수행하지 않았고, 실물 시험도 미실시 상태다.

physical-test-sheet.csv의 측정값·시험자·시험일·판정은 비어 있다. 여기에 실제 기판의 전원, 소비전류, 버튼, PWM, LED 부하, 발열, 통신, 업데이트와 복구 결과를 기록한다. 양식의 목표 기준이 법규나 인증 합격을 의미하지는 않는다.

9. 나머지 보조 파일의 역할

파일 설명
design.json 연결 대조에 사용한 설계·핀 정보
netlist.xml 회로도에서 출력한 전기적 연결 목록
routing-result.json 배선 생성 과정의 결과 기록
SHA256.json 파일 변경 여부 대조에 사용하는 해시 목록

이 파일들은 검토와 추적을 돕는다. 일반적인 기판 제작 요청에서 제조 형상을 전달하는 주된 자료는 Gerber와 드릴 파일이며, 조립에는 확정 BOM과 업체 기준에 맞춘 배치 자료 등이 추가로 필요하다. 해시가 일치한다고 회로의 성능이나 안전성이 검증되는 것은 아니다.

10. 실제 제작으로 넘어가는 순서

  1. 실제 케이스와 LED·전원·버튼·하네스를 선정한다.
  2. BOM 후보의 핀 배열·패키지 치수·전기적 조건을 확인한다.
  3. KiCad에서 ERC·DRC를 실행하고 문제를 수정한다.
  4. Gerber와 드릴을 다시 출력해 Viewer로 확인한다.
  5. 제조 업체의 규칙과 파일 요구사항에 맞춰 소량 시제품을 제작한다.
  6. 조립 후 전원 연결 전 단락·극성·납땜 상태를 점검한다.
  7. 전류 제한이 가능한 전원으로 확인하고 MCU를 프로그래밍한다.
  8. 작은 LED 부하부터 동작을 확인한 뒤 최대 부하·발열·통신·업데이트·복구를 시험한다.
  9. 케이스 조립과 반복 사용을 확인하고 결과에 따라 설계를 수정한다.

KiCad 원본, 제조 출력물, 펌웨어는 서로 같은 설계 버전을 가리켜야 한다. 변경이 생기면 관련 파일과 시험 기록도 함께 갱신한다. 현재 패키지의 릴리스 상태는 PROTOTYPE_NOT_PRODUCTION_RELEASED다.

설계 패키지는 여기서 받을 수 있습니다.

led-mirror-cad-prototype-A.zip
0.27MB

 

728x90
728x90

MCU 전원, 디커플링, GPIO 입력·출력, LED 저항과 전류를 이해하고 개발 보드를 제품 회로로 옮길 때 확인할 조건을 정리합니다.

프로그램이 멀쩡해도 전원이 흔들리면 멈춘다

LED를 한 번 켜는 실습은 쉽게 성공한다. 그런데 모터나 통신 모듈을 붙이면 갑자기 MCU가 재시작하기도 한다. 이때 코드부터 바꾸면 원인을 놓칠 수 있다.

부하가 순간적으로 큰 전류를 요구하면 전원 공급기의 응답, 배선 저항과 인덕턴스 때문에 MCU 근처의 전압이 내려갈 수 있다. 리셋 원인은 소프트웨어 오류, 워치독, 외부 리셋, 저전압 등 여러 가지다. 재부팅 흔적만으로 원인을 단정하지 말고 리셋 원인 플래그와 전원 파형을 함께 관찰한다.

멀티미터가 안정적인 평균값을 보여도 짧은 전압 강하는 놓칠 수 있다. 오실로스코프를 쓴다면 MCU 전원 핀 가까이에서 짧은 접지 경로로 측정하고, 프로브 연결이 파형에 주는 영향도 고려한다. 아래 내용은 설계 원리이며 실제 불량 보드의 측정 결과를 주장하는 것은 아니다.

MCU가 동작하는 데에는 칩 외에도 전원·클록·리셋·프로그래밍 경로가 필요하다. UNO Rev3 공식 사진을 다시 보며 개발 보드가 제공하는 기반을 살펴보자.


디커플링은 값과 위치를 함께 설계한다

디커플링 커패시터는 MCU가 빠르게 전류를 요구할 때 가까운 곳에서 전하를 공급하는 역할을 한다. 용량만 맞추고 긴 배선 끝에 배치하면 고주파 전류 경로의 임피던스가 커질 수 있다.

실무에서는 전원 핀 주변의 작은 세라믹 커패시터와 전원 영역의 벌크 커패시터를 함께 고려한다. 100 nF는 흔한 예시지만 모든 핀에 같은 값 하나를 쓰면 끝나는 규칙은 아니다. 해당 칩의 전원 연결 권장사항, 레귤레이터 안정성 조건, PCB 배치를 기준으로 설계한다.

MCU의 특수 전원 핀에도 주의한다. 아날로그 전원, 백업 전원, 내부 레귤레이터용 핀은 일반 GPIO가 아니다. 정확한 칩과 패키지의 데이터시트·하드웨어 설계 가이드를 확인해야 한다.

LED를 연결하며 전압과 전류를 구분해 보자

GPIO를 High로 설정하면 핀에 출력 전압이 형성된다. 그러나 핀이 원하는 만큼의 전류를 공급하는 만능 전원은 아니다. LED를 직결하면 LED와 핀의 전류가 적절히 제한되지 않을 수 있어 직렬 저항이 필요하다.

3.3V 출력, LED 순방향 전압 2.0V, 목표 전류 3 mA라는 가정이라면 저항의 첫 계산은 다음과 같다.

R = (3.3 − 2.0) / 0.003 ≈ 433 Ω

이상적인 조건에서 470 Ω을 사용하면 약 2.8 mA가 흐른다. 실제로는 LED 전압 편차, GPIO 출력 전압의 부하 의존성, 저항 오차를 반영해야 한다. 
433 Ω이라는 숫자는 계산 예시이지 모든 LED의 정답이 아니다.

MCU 데이터시트에서는 핀별 전류와 포트·칩 전체 전류 조건, 해당 부하에서 보장되는 출력 전압을 확인한다. 
Absolute maximum rating은 정상 설계 목표가 아니다. 모터·릴레이 등은 적절한 드라이버를 사용하고, 유도성 부하의 역기전력과 전원 경로도 설계한다.

입력 핀은 연결을 안 하면 0일까?

입력이 떠 있는 상태를 floating이라고 부른다. 디지털 입력은 외부 잡음이나 누설에 의해 불안정하게 읽힐 수 있다. 버튼을 연결할 때 풀업 또는 풀다운으로 기본 상태를 정하는 이유다.

버튼 한쪽을 GND에 연결하고 입력을 풀업하면 평소에는 High, 누르면 Low다. 

소프트웨어에서는 이 논리 방향을 명확하게 표현해야 한다. 
예를 들어 pressed = (input == LOW)처럼 버튼의 의미와 전압 상태를 구분한다.

버튼의 접점은 한 번 눌러도 짧은 시간 동안 여러 번 변할 수 있다. 디바운스는 이 변화를 안정된 입력으로 해석하는 과정이다. 20 ms 같은 값은 예시일 뿐 실제 버튼 특성과 요구 응답 시간에 맞춰 정한다.

PCB 뒷면을 보면 배선도 회로의 일부라는 사실이 보인다

Arduino UNO Rev3 뒷면. 출처: Arduino 공식 제품 페이지. 실제 측정 결과가 아니라 PCB 패턴·납땜부·연결 경로를 관찰하기 위한 사진이다.


회로도에서 선은 전기적 연결을 뜻한다. 
PCB에서는 그 연결에 길이, 폭, 인접 신호, 접지 귀환 경로가 생긴다. 
두 회로의 논리적 연결이 같아도 배치와 배선이 다르면 노이즈와 전원 품질이 달라질 수 있다.

시제품에서 제품으로 넘어갈 때에는 전원·리셋·프로그래밍 연결을 최소 확인 항목으로 삼는다. 완제품 조립 후에도 펌웨어를 넣고 고장 원인을 볼 수 있도록 디버그 연결과 테스트 포인트를 확보한다.

첫 전원 인가에서 확인할 것

전원을 넣기 전 단락과 극성을 확인하고, 전원 사양에 맞는 전류 제한을 설정한다. 
전원 인가 후에는 레일별 전압, 소비 전류, 비정상 발열, 리셋 상태를 확인한다. 
이후 디버거 연결과 최소 GPIO 동작을 검증하고 센서와 통신 기능을 순서대로 추가한다.

이 과정에서 ‘정상 전압’과 ‘정상 전류’를 기록해 두면 다음 보드와 비교할 기준이 생긴다. 
잘 돌아가는 회로 한 장보다, 무엇이 정상인지 설명할 수 있는 회로가 제품 개발에 더 유용하다.

 

 

 

728x90
728x90

최근 코엑스에서 열린 AI FESTA 2026에 다녀왔다.

요즘 AI 관련 행사나 뉴스에서 가장 많이 등장하는 건 아무래도 생성형 AI와 LLM이다. ChatGPT를 시작으로 이미지·영상 생성, AI Agent, 코딩 에이전트까지 정말 빠르게 발전하고 있다.

그래서 이번 전시도 비슷한 서비스들이 주를 이루지 않을까 생각했는데, 직접 둘러보니 개인적으로 더 눈에 들어온 건 따로 있었다.

바로 Physical AI, 로봇, 디지털 트윈 그리고 산업 현장에 실제로 적용되고 있는 AI 기술이었다.

개발자로 일하면서 XR과 디지털 트윈 관련 프로젝트를 경험해왔기 때문인지, 단순히 새로운 AI 서비스를 보는 것보다

“AI가 현실 세계와 어떻게 연결되고 있는가?”

이 부분이 가장 흥미로웠다.


AI가 이제 화면 밖으로 나오기 시작했다

전시장에서 가장 먼저 눈에 들어왔던 문구 중 하나가 Physical AI였다.

지금까지 우리가 많이 사용해온 생성형 AI는 대부분 디지털 세계 안에서 움직인다.

사용자가 질문하면 답변을 생성하고, 이미지를 만들고, 코드를 작성하고, 데이터를 분석한다.

하지만 Physical AI는 여기서 한 단계 더 나아간다.

AI가 현실 세계를 인식하고 판단한 뒤 실제 기계나 로봇의 행동으로 연결되는 것이다.

개발 구조로 단순화해보면 이런 형태로 볼 수 있다.

Sensor → Data → AI → Decision → Robot / Machine → Physical World

그리고 로봇이나 설비가 움직이면서 발생한 데이터가 다시 센서를 통해 AI로 들어간다.

결국 한 번의 입력과 출력으로 끝나는 게 아니라,

현실 → 데이터 → AI 판단 → 행동 → 현실 변화 → 새로운 데이터

라는 하나의 반복적인 루프가 만들어진다.

개발자 관점에서는 이 부분이 꽤 중요하게 느껴졌다.

AI 모델만 잘 만든다고 완성되는 시스템이 아니기 때문이다.

센서, 카메라, IoT, 네트워크, 실시간 데이터 처리, 컴퓨터 비전, 로봇 제어, 시뮬레이션 등 여러 기술이 함께 움직여야 한다.


AI FESTA에서 보인 'AI 인프라'

전시장에는 AI 인프라 특별관도 별도로 구성되어 있었다.

AI 서비스를 사용하다 보면 아무래도 모델 자체에 관심이 집중되기 쉽다.

어떤 LLM을 사용할지, 모델 성능은 얼마나 좋은지, RAG를 어떻게 구성할지 같은 부분이다.

하지만 실제 산업 시스템을 구축하려면 그 아래에 있는 인프라가 굉장히 중요하다.

AI 모델을 운영하기 위한 GPU와 서버뿐 아니라 데이터 수집·저장·처리, 네트워크, 엣지 컴퓨팅, 디바이스까지 결국 하나의 시스템으로 연결되어야 한다.

특히 Physical AI가 확대될수록 Cloud AI + Edge AI 구조가 더 중요해질 것 같았다.

모든 센서 데이터를 클라우드로 보내고 결과가 돌아오기를 기다리는 방식으로는 실시간 제어가 필요한 산업 환경에서 한계가 있기 때문이다.

결국 앞으로는

Device / Sensor → Edge → AI → Cloud → Digital Twin

같은 구조를 더 자주 접하게 되지 않을까 싶다.


발전소에도 들어가기 시작한 AI와 로봇

이번 전시에서 흥미롭게 본 곳 중 하나는 발전 분야였다.

한국남부발전 전시에서는 발전 운영부터 운전, 안전관리, 설비 점검, 재생에너지까지 AI가 활용되는 모습을 볼 수 있었다.

그리고 실제 로봇을 이용한 점검 시스템도 전시되어 있었다.

이런 산업 환경에서는 Physical AI가 필요한 이유가 상당히 명확하다.

발전소나 대규모 산업 시설에는 사람이 지속적으로 접근하기 어렵거나 위험한 장소가 존재한다.

이곳을 로봇이 이동하면서 카메라, 열화상, 각종 센서를 이용해 데이터를 수집하고 AI가 이상 여부를 분석할 수 있다.

예를 들어,

Robot → Camera / Sensor → AI 분석 → 이상 감지 → 관리자 알림

같은 구조가 가능하다.

여기서 한 단계 더 발전하면 단순한 이상 감지를 넘어 예지보전(Predictive Maintenance)으로 연결된다.

장비가 고장 난 다음 수리하는 것이 아니라 온도, 진동, 소음 등의 데이터를 지속적으로 분석해 고장이 발생할 가능성을 미리 예측하는 것이다.

이 부분은 개인적으로 더 관심 있게 봤다. 2024년 발표한 논문 「디지털 트윈 기술로 협동 로봇의 고장 또는 결합 원인을 효율적으로 파악하는 시스템에 대한 연구」에서 나 역시 협동로봇과 제어설비에서 발생하는 고장이나 결함의 원인을 보다 빠르게 파악하기 위한 디지털 트윈 기반 시스템을 연구했기 때문이다.

당시 연구에서는 협동로봇에서 발생하는 데이터를 처리·분석하고 현실의 장비와 가상공간을 연결함으로써, 사용자가 로봇의 충돌이나 설비 이상 원인을 보다 쉽게 파악할 수 있는 플랫폼을 제안했다. 특히 데이터베이스, Modbus, 로봇 부하 데이터와 디지털 트윈을 연결한다는 점이 중요한 부분이었다.

그런 경험이 있어서 이번 AI FESTA에서 발전소 설비의 디지털 트윈이나 실제 현장을 돌아다니는 점검 로봇을 봤을 때 더욱 흥미로웠다.

내가 연구했던 구조가 협동로봇 → 데이터 수집 → 디지털 트윈 → 고장·결함 원인 분석에 초점을 맞췄다면, 여기에 최근의 AI 기술을 결합하면 한 단계 더 확장할 수 있다.

Robot / Equipment
→ Sensor & Controller
→ Data Platform
→ Digital Twin
→ AI Analysis
→ 이상 탐지·원인 분석
→ 예측 및 유지보수

즉, 기존에는 사람이 데이터를 확인해 고장이나 충돌의 원인을 빠르게 찾아내는 것이 중요한 목표였다면, 앞으로는 축적된 데이터를 AI가 분석해 이상이 발생하기 전에 징후를 찾아내는 예지보전(Predictive Maintenance)까지 자연스럽게 발전할 수 있다.

그래서 이번 전시에서 본 Physical AI와 디지털 트윈은 완전히 낯선 기술이라기보다, 내가 논문에서 연구했던 디지털 트윈 기반 로봇 데이터 분석이 AI와 만나 다음 단계로 확장되고 있는 모습처럼 느껴졌다.
https://www.kci.go.kr/kciportal/ci/sereArticleSearch/ciSereArtiView.kci?sereArticleSearchBean.artiId=ART003068220

 


개인적으로 가장 눈에 들어왔던 디지털 트윈

그리고 역시 가장 오래 보게 된 건 디지털 트윈이었다.

화면에는 발전소의 설비가 3D 공간으로 구현되어 있었고 가스터빈의 상태를 실시간으로 확인할 수 있도록 구성되어 있었다.

진동 속도, 베어링 온도, 설비 상태, 이벤트 발생 정보 등이 3D 모델과 함께 표시되는 형태였다.

이 부분은 개발자 입장에서 꽤 익숙하면서도 반가웠다.

디지털 트윈을 이야기하면 종종 “현실 공간을 3D로 똑같이 만드는 기술” 정도로 생각하기 쉽다.

하지만 실제 산업용 디지털 트윈에서는 3D 그래픽 자체보다 더 중요한 것이 있다.

바로 현실의 데이터를 어떻게 연결하느냐다.

구조를 단순하게 표현하면,

Physical Asset

↓

Sensor / PLC / IoT

↓

Data Platform

↓

Digital Twin

↓

AI Analysis

↓

Prediction / Control

형태가 된다.

3D 모델은 결국 사용자가 복잡한 산업 데이터를 공간적으로 쉽게 이해할 수 있도록 만들어주는 인터페이스 역할을 한다.

진짜 핵심은 그 안에서 움직이는 데이터다.


AI를 만나면서 디지털 트윈도 달라지고 있다

예전 디지털 트윈의 중요한 역할 중 하나는 현재 상태를 보여주는 것이었다.

예를 들어 센서에서 측정된 데이터를 받아

현재 가스터빈 베어링 온도 71.8℃

라고 표시하는 방식이다.

물론 이것만으로도 충분히 가치가 있다.

하지만 AI가 들어오면 여기서 한 단계 더 나아갈 수 있다.

현재 온도뿐만 아니라 과거 온도 변화, 진동 패턴, 설비 운전 시간, 주변 환경 등의 데이터를 AI가 함께 분석한다.

그러면 시스템이 단순히

“현재 온도가 높습니다.”

라고 알려주는 것을 넘어,

“현재 진동 패턴과 온도 상승 추세를 분석했을 때 일정 시간 이후 이상이 발생할 가능성이 있습니다.”

라는 예측을 할 수 있게 된다.

여기에 시뮬레이션까지 결합하면 더 재미있어진다.

현실의 설비에서 바로 실험하는 대신 디지털 트윈 환경에서 여러 조건을 먼저 시뮬레이션해보고 가장 효율적인 방법을 현실 설비에 적용할 수 있기 때문이다.

즉,

현실 데이터 → Digital Twin → AI → Simulation → Optimization → 현실 적용

이라는 구조가 가능해진다.

그래서 AI 시대에 오히려 디지털 트윈의 역할이 더 커질 가능성이 있다고 생각한다.


Physical AI 풀스택이라는 개념

개발자에게 Full Stack이라고 하면 보통 프론트엔드와 백엔드를 모두 다루는 개발자를 먼저 떠올리게 된다.

하지만 Physical AI에서 말하는 풀스택은 범위가 훨씬 넓다.

대략적으로 보면,

Hardware / Sensor

↓

Edge Computing

↓

Network

↓

Data Platform

↓

AI Model

↓

Simulation / Digital Twin

↓

Application

↓

Robot / Physical System

까지 이어진다.

결국 Physical AI는 AI 모델 하나의 문제가 아니라 하드웨어부터 소프트웨어까지 연결되는 시스템 엔지니어링에 가까운 영역이라는 생각이 들었다.

그래서 개인적으로 이 분야가 더 재미있다.

AI가 발전한다고 해서 기존 개발 기술이 전부 사라지는 것이 아니라 오히려 AI를 현실 세계에 연결하기 위해 기존 기술들이 다시 조합되고 있기 때문이다.


개발자 입장에서 AI FESTA 2026을 보고 느낀 점

이번 전시를 돌아보면서 가장 크게 느낀 변화는 AI의 경쟁 영역이 점점 현실 세계로 확장되고 있다는 것이었다.

지난 몇 년 동안은 누가 더 좋은 LLM을 만들고, 더 자연스러운 이미지와 영상을 생성하고, 더 좋은 AI 서비스를 만드는지가 큰 관심사였다.

물론 이 경쟁은 앞으로도 계속될 것이다.

하지만 산업 현장에서는 조금 다른 문제가 기다리고 있다.

AI가 카메라를 통해 현실을 보고,

센서 데이터를 이해하고,

공간을 인식하고,

물리적인 움직임을 예측하고,

결국 로봇이나 기계를 움직여야 한다.

그 과정에서 필요한 것이 Physical AI, Robotics, Digital Twin, Computer Vision, Edge AI, IoT 같은 기술들이다.

특히 개발자로서는 앞으로 AI를 공부할 때 LLM이나 Agent만 보는 것보다 이런 기술들이 어떻게 연결되는지도 함께 봐야겠다는 생각이 들었다.


AI의 다음 무대는 현실 세계일지도 모른다

AI FESTA 2026을 다녀오면서 개인적으로 가장 인상 깊었던 건 엄청나게 새로운 AI 모델 하나가 아니었다.

오히려 기존에 존재하던 기술들이 AI를 중심으로 다시 연결되고 있다는 것이었다.

로봇도 예전부터 있었고,

디지털 트윈도 있었고,

IoT와 스마트팩토리도 있었다.

하지만 AI의 성능이 빠르게 발전하면서 이 기술들을 하나의 시스템으로 연결할 수 있는 가능성이 커지고 있다.

예전의 디지털 트윈이

현실 → 데이터 → 3D 시각화

에 가까웠다면,

앞으로는

현실 → 데이터 → 디지털 트윈 → AI 추론 → 시뮬레이션 → 최적화 → 현실 제어

까지 이어질 수 있다.

개인적으로는 이 변화가 상당히 기대된다.

AI가 글을 작성하고 이미지를 만드는 시대를 넘어,

공장을 이해하고, 발전소를 관리하고, 로봇을 움직이며 현실 세계의 문제를 해결하는 AI.

이번 코엑스 AI FESTA 2026에서는 그 변화가 이미 조금씩 시작되고 있다는 것을 직접 볼 수 있었다.

개발자로서 앞으로도 AI × Digital Twin × Robotics가 어떻게 연결되는지 계속 지켜보고 직접 만들어보고 싶은 분야다.

728x90
728x90

ATmega328P와 STM32F401RE를 비교하며 MCU·개발 보드의 차이, 메모리, 전압, 디버깅, 제품 요구사항에 따른 선택 기준을 알아봅니다.

 

웹에서는 API를 호출하지만, 하드웨어에서는 전압을 읽는다

웹 개발자는 버튼을 누르면 이벤트가 발생하고 서버에 요청이 전달되는 흐름에 익숙하다. 
하드웨어 개발에도 같은 흐름이 있다.
다만 첫 이벤트가 마우스 클릭 대신 스위치 접점이나 센서의 전압 변화다.

온도 센서의 출력을 읽고, 기준을 넘으면 팬을 돌리고, 측정 결과를 서버로 보내는 장치를 생각해 보자.
이 장치에는 입력을 읽는 회로, 동작을 판단하는 프로그램, 팬을 구동하는 출력 회로가 함께 필요하다.

MCU는 이 작은 장치 안에서 프로그램을 실행하는 컴퓨터다. 
CPU뿐 아니라 프로그램 저장용 Flash, 실행 중 사용하는 RAM, GPIO와 타이머 같은 주변장치를 한 칩에 담는다. 
PC처럼 큰 운영체제가 반드시 필요한 것은 아니다. 
전원이 들어오면 초기화 코드를 거쳐 반복 루프나 스케줄러가 실행된다.

Arduino UNO Rev3 실물 보드. 출처: Arduino 공식 제품 페이지. 오른쪽 아래의 긴 DIP 패키지가 ATmega328P다. USB 포트 옆의 별도 칩은 USB와 직렬 통신을 연결하는 역할을 맡는다.

 

사진에서 봐야 할 것은 칩 한 개보다 그 주변이다. 
USB 연결부, 전원 입력, 리셋 버튼, 핀 헤더가 함께 있어야 손쉽게 개발할 수 있다. 
개발 보드는 MCU가 동작하도록 필요한 기반을 제공한다.

 

ATmega는 칩 계열이고, Arduino는 개발 플랫폼이다

ATmega는 AVR 계열의 MCU 제품군이다. STM32는 STMicroelectronics의 32비트 MCU 제품군이다. 
흔히 말하는 ‘STM’은 이 글에서는 STM32를 뜻한다. STM32 내부에도 서로 다른 코어와 주변장치를 가진 많은 모델이 있다.

Arduino는 보드와 소프트웨어 생태계다. 
UNO Rev3는 ATmega328P를 사용하지만, Arduino라는 이름이 모든 보드의 CPU 구조를 뜻하지는 않는다. 
예를 들어 UNO R4는 다른 MCU를 사용한다. 따라서 ‘Arduino와 STM32 중 무엇이 더 좋나요?’보다 ‘어떤 MCU와 보드, 개발 환경을 비교하나요?’라고 질문하면 선택이 명확해진다.

8비트와 32비트는 무엇을 바꿀까?

8비트 CPU도 큰 정수를 계산할 수 있다. 다만 8비트보다 큰 값의 연산을 여러 명령으로 처리할 수 있다. 
32비트 CPU는 32비트 연산과 주소 처리를 자연스럽게 수행한다. 
그렇다고 모든 프로그램이 정확히 네 배 빨라지는 것은 아니다. 
명령어, 클록, 메모리 접근, 컴파일러, 주변장치 사용 방식이 함께 영향을 준다.

스위치 입력과 LED 제어에서는 CPU 비트 수가 큰 차이를 만들지 않을 수 있다. 
반면 여러 센서의 데이터를 쌓고 필터링하며 통신 패킷까지 만드는 장치에서는 RAM과 연산 여유가 설계에 직접 영향을 준다.

 

비교 항목 ATmega328P / UNO Rev3 예시 STM32F401RE / Nucleo 예시
CPU 8비트 AVR 32비트 Arm Cortex-M4, FPU
클록 UNO Rev3에서 16 MHz MCU 최대 84 MHz
Flash 32 KB, 부트로더 사용 공간 별도 고려 512 KB
SRAM 2 KB 96 KB
ADC 10비트 12비트
전압 관점 UNO Rev3는 5V 로직 Nucleo의 타깃 MCU는 통상 3.3V 로직
디버깅 UNO 기본 구성에서는 직렬 로그를 주로 활용 NUCLEO-F401RE에 ST-LINK 내장
학습 포인트 작은 메모리·레지스터·기본 주변장치 클록 트리·핀 다중화·DMA·디버거

표의 기준은 두 모델이다. 
칩의 허용 클록은 공급 전압 등 데이터시트의 조건과 함께 확인해야 한다.

클록보다 먼저 RAM을 계산해 보자

센서 데이터 한 샘플을 16비트 정수로 저장하고 1,000개를 모으면 데이터만 2,000바이트다. 여기에 스택, 통신 버퍼, 전역변수가 더 필요하다. SRAM이 2 KB인 MCU에서는 이미 매우 빡빡하다.

따라서 ‘CPU가 느리니까 더 빠른 칩을 쓰자’ 전에 데이터가 얼마나 쌓이는지 계산해야 한다. 모든 원시 데이터를 보관할 필요가 없다면 샘플을 읽는 즉시 누적하거나 작은 순환 버퍼를 사용하는 방법도 있다. 
저장 전략을 바꾸면 같은 MCU로 해결되는 문제가 있다.

타이밍도 수치로 바꿔보자. 1 kHz로 샘플링한다면 샘플 간격은 1 ms다. 이 시간 안에 읽기·처리·버퍼 기록을 끝낼 수 있는지, 다른 인터럽트가 겹칠 때 최악의 지연은 얼마인지 측정해야 한다. 
평균 속도가 충분해도 가끔 마감 시간을 놓치면 제어 품질이 나빠질 수 있다.

5V와 3.3V, 코드보다 먼저 확인해야 하는 차이

UNO에서 사용한 5V 센서를 STM32 보드에 그대로 연결해도 될까? 센서의 공급 전압과 출력 신호 전압을 따로 확인해야 한다. 5V로 전원을 공급하더라도 출력은 3.3V일 수 있고, 반대 조건도 제품마다 다르다.

STM32에는 5V 입력을 허용하는 일부 디지털 핀이 있지만, 모든 핀과 모든 동작 모드가 같은 것은 아니다. 
ADC 아날로그 입력은 디지털 입력의 5V 허용 표시만 보고 연결해서는 안 된다. 정확한 핀 표, 전원 조건, 입력 전압 범위는 해당 MCU 데이터시트를 기준으로 판단한다. 

통신에서는 수신 측의 VIH·VIL, 출력 측의 VOH·VOL도 확인한다. 두 보드의 전원 숫자가 다르다는 이유만으로 연결 가능 여부가 자동 결정되지는 않는다. 필요하면 신호 방향과 속도에 맞는 레벨 변환 회로를 사용한다.


제품의 전체 흐름을 보면 MCU 선택이 달라진다

그림 2. 센서 → MCU → 게이트웨이 → 애플리케이션으로 이어지는 개념도. 자체 제작. MCU는 현장의 측정과 제어를, 상위 시스템은 기록과 분석을 담당할 수 있다.

 

예를 들어 스마트팩토리 센서 데이터를 디지털 트윈으로 보내는 경우, 화면 렌더링과 장기간 이력 저장을 MCU가 모두 맡을 필요는 없다. MCU는 센서를 일정한 주기로 읽고, 게이트웨이는 데이터를 네트워크 메시지로 바꾸고, 웹이나 Unity는 상태를 시각화할 수 있다.

이 구조에서 먼저 정할 것은 MCU 모델보다 역할 분담이다. 네트워크가 끊겼을 때도 필요한 현장 동작이 계속되는지, 서버의 오래된 명령을 어떻게 처리하는지, 샘플마다 어떤 시간 정보를 붙이는지가 제품의 신뢰성을 결정한다.

8비트에서 32비트로, 그리고 엣지 AI로

STM32는 2007년 첫 제품군을 선보였다. 이후 MCU 개발에서는 고성능 코어뿐 아니라 주변장치, 디버깅 도구, 코드 생성 환경, 연결 기능도 중요한 선택 요소가 됐다. 

그러나 8비트 MCU가 모두 사라지는 흐름은 아니다. Microchip은 현재도 AVR 계열을 제공하며, 현대 AVR에는 CPU 개입을 줄이는 주변장치와 이벤트 시스템을 갖춘 제품도 있다. 오래된 ATmega328P 하나로 오늘날 8비트 MCU 전체를 평가하면 놓치는 부분이 많다. 

최근 방향 중 하나는 장치 내부에서 AI 추론을 수행하는 엣지 AI다. STM32N6에는 Neural-ART NPU가 탑재돼 있다. 이는 이 글에서 비교한 F401RE와 다른 제품군이다. 모든 STM32에 NPU가 있는 것은 아니다. 

제품 개발 관점에서는 ‘AI 지원’이라는 이름보다 모델이 차지하는 메모리, 지원 연산, 입력 전처리, 추론 지연, 전력, 정확도를 확인해야 한다. 진동 이상 탐지와 카메라 객체 탐지는 필요한 자원이 크게 다르다. 이 구분은 12편에서 더 자세히 다룬다.

무엇부터 시작하면 좋을까?

레지스터와 작은 자원 안에서 동작을 이해하려면 ATmega 기반 실습이 유용하다. 센서·통신·디버깅을 함께 익히고 확장하려면 STM32 Nucleo 같은 개발 보드를 기준으로 프로젝트를 구성할 수 있다. 여기서 NUCLEO-F401RE는 비교·학습용 예시이며 모든 신규 제품의 기본 선택을 뜻하지 않는다.

MCU 선정표에는 최소한 입력·출력 수, 필요한 통신, 샘플링 주기, RAM·Flash 예상치, 소비 전력, 동작 환경, 디버그 방법을 적어보자. 다음으로 정확한 부품 번호의 공급 조건과 수명주기, 팀의 개발 경험, 테스트 방법을 확인한다.

좋은 MCU는 사양표에서 가장 큰 숫자를 가진 칩이 아니다. 제품의 요구사항을 만족시키고, 문제를 관찰하고 고치기 쉬운 칩이다. 
다음 편에서는 이 칩이 안정적으로 동작하기 위해 필요한 전원과 GPIO를 살펴본다.

 

728x90
728x90

AI와 가상융합 기술이 만나는 현장, 대한민국 가상융합산업대전

최근 대한민국 가상융합산업대전(KMF 2026)에 다녀왔습니다.

이번 전시회를 둘러보며 가장 크게 느낀 점은 '가상융합'이라는 이름처럼 기술들이 하나의 산업으로 자연스럽게 연결되고 있다는 것이었습니다.

예전에는 AI, 디지털트윈, XR, 로봇, 스마트팩토리를 각각 독립적인 분야로 바라보는 경우가 많았습니다.

하지만 이제는 이러한 기술들이 하나의 생태계를 이루며 함께 발전하고 있습니다.

스마트팩토리를 구축하다 보면 자연스럽게 디지털트윈을 만나게 되고, 생산 데이터를 AI가 분석하며, 협동로봇과 휴머노이드가 실제 작업을 수행합니다. 여기에 XR 기술이 더해져 설비 유지보수와 작업 교육까지 이루어지는 시대가 되었습니다.

'가상융합'이라는 단어가 더 이상 미래의 이야기가 아니라 현재 산업 현장에서 구현되고 있다는 점을 직접 확인할 수 있었습니다.

7년간 스마트팩토리와 디지털트윈 교육 현장에서 바라본 변화

저는 약 7년 동안 스마트팩토리, 디지털트윈, 제조 교육 분야에서 근무했습니다.

교육용 스마트팩토리 구축, 제조 자동화 교육, 디지털트윈 실습 환경 등을 경험했던 만큼 이번 전시는 더욱 의미 있게 다가왔습니다.

과거에는 "자동화를 어떻게 구현할 것인가"가 가장 큰 관심사였다면,

이제는

  • AI
  • Digital Twin
  • XR
  • Robotics

를 어떻게 하나의 플랫폼으로 연결할 것인지가 산업의 핵심 과제가 되어가고 있다는 것을 느낄 수 있었습니다.


 


스마트팩토리 교육 시장도 빠르게 성장하고 있다

이번 전시에서 인상 깊었던 부분 중 하나는 스마트팩토리 교육 시장의 성장이었습니다.

전시장에는

  • 스마트공장 국가기술자격 훈련장비
  • PLC/HMI 실습 시스템
  • 제조 자동화 교육장비
  • 디지털트윈 실습 플랫폼

등을 선보이는 기업들이 많이 참가하고 있었습니다.

예전에는 교육용 장비를 구축한 기관이 많지 않았지만,

이제는 학교와 교육기관에서도 실제 산업 환경과 유사한 실습이 가능하도록 다양한 플랫폼이 개발되고 있다는 점이 매우 인상적이었습니다.

기술 발전도 중요하지만 결국 산업을 움직이는 것은 사람입니다.

좋은 기술은 결국 좋은 교육을 통해 더 큰 가치를 만들어낸다는 사실을 다시 한번 느낄 수 있었습니다.

 


산업용 로봇에서 휴머노이드로

이번 전시에서 가장 큰 변화를 느낀 것은 역시 로봇 기술이었습니다.

몇 년 전만 해도 산업 전시회의 중심은 산업용 다관절 로봇이었습니다.

하지만 올해는 분위기가 달랐습니다.

전시장 곳곳에서

  • 양팔 협동로봇
  • 이동형 매니퓰레이터
  • 휴머노이드(이족보행) 로봇

들을 쉽게 볼 수 있었습니다.

단순히 반복 작업을 수행하는 로봇이 아니라,

사람과 같은 공간에서 이동하고 다양한 작업을 수행하는 로봇들이 산업 현장으로 빠르게 들어오고 있다는 것을 실감할 수 있었습니다.

특히 휴머노이드 로봇 시연을 보면서 앞으로 제조업뿐 아니라 물류, 서비스, 유지보수 분야까지 활용 범위가 더욱 확대될 것이라는 기대가 들었습니다.



자동화를 넘어 자율화(Autonomy)의 시대

스마트팩토리 프로젝트를 진행하던 시절에는 설비 자동화가 가장 중요한 목표였습니다.

하지만 지금은 AI와 디지털트윈, 그리고 로봇 기술이 결합하면서 산업은 자동화(Automation)를 넘어 자율화(Autonomy)라는 새로운 방향으로 발전하고 있습니다.

데이터를 기반으로 스스로 판단하고,

디지털트윈에서 시뮬레이션하고,

AI가 분석하며,

로봇이 실제 작업을 수행하는 구조.

이러한 변화는 제조업뿐 아니라 다양한 산업으로 확장될 것이라고 생각합니다.



대한민국 가상융합산업대전을 다녀오며

이번 대한민국 가상융합산업대전은 단순히 새로운 기술을 보는 전시회가 아니었습니다.

산업이 어떤 방향으로 변화하고 있는지,

그리고 앞으로 어떤 기술을 준비해야 하는지를 직접 확인할 수 있었던 시간이었습니다.

7년간 스마트팩토리와 디지털트윈 교육 현장에서 경험했던 시간들이 떠올랐고,

현재 공부하고 있는 AI 기술이 제조업과 어떻게 연결될 수 있는지 다시 한번 생각해 보는 계기가 되었습니다.

기술은 계속 발전합니다.

하지만 결국 중요한 것은 기술을 이해하고, 현장에 적용할 수 있는 사람을 키우는 것이라는 점은 변하지 않는 것 같습니다.

앞으로도 AI, 디지털트윈, XR, 로봇이 만들어 갈 미래 제조 산업의 변화를 계속 관심 있게 지켜보고 배우며 성장해 나가고 싶습니다.

728x90
728x90

AW 2026 전시회 관람 후기

최근 열린 AW 2026 (Automation World 2026) 전시회를 다녀왔다.
자동화, AI, 로봇, 스마트팩토리 기술을 한 자리에서 볼 수 있는 국내 대표 산업 자동화 전시회다.

올해 전시회를 관람하면서 가장 크게 느낀 점은 두 가지였다.

  • 휴머노이드 로봇 기술의 빠른 발전
  • 피지컬 AI(Physical AI) 기반 제품 증가

AI가 단순한 소프트웨어 기술을 넘어 실제 물리 세계에서 동작하는 기술로 빠르게 확장되고 있다는 것을 현장에서 직접 확인할 수 있었다.


휴머노이드 로봇 기술 트렌드

이번 전시회에서 특히 눈에 띄었던 분야는 휴머노이드 로봇(Humanoid Robot) 이었다.

휴머노이드 로봇은 인간과 유사한 형태를 가진 로봇으로 다음과 같은 특징을 가진다.

주요 특징

  1. 인간형 구조
    • 팔, 다리, 관절을 활용한 동작 가능
    • 기존 인간 환경에서 작업 가능
  2. AI 기반 인지 시스템
    • 카메라 + 센서 기반 환경 인식
    • 객체 인식 및 상황 판단
  3. 자율 작업 능력
    • 물건 집기
    • 이동 및 작업 수행

이러한 기술 덕분에 앞으로 물류, 제조, 서비스 산업에서 휴머노이드 활용이 빠르게 늘어날 것으로 예상된다.

특히 몇몇 부스에서는 실제로 물건을 집거나 이동하는 데모를 보여주어 관람객들의 관심이 매우 높았다.


피지컬 AI (Physical AI) 기술

또 하나 인상적이었던 기술은 피지컬 AI(Physical AI) 였다.

피지컬 AI란?

피지컬 AI는 AI가 실제 물리 환경과 상호작용하는 기술을 의미한다.

기존 AI는

  • 데이터 분석
  • 이미지 인식
  • 텍스트 처리

같은 디지털 영역 중심이었다.

하지만 피지컬 AI는

  • 로봇
  • 자율 시스템
  • 자동화 장비

와 결합하여 현실 세계에서 직접 행동하는 AI라고 볼 수 있다.

적용 사례

전시회에서 확인할 수 있었던 주요 사례는 다음과 같다.

  • AI 기반 로봇 팔 자동 조립
  • 비전 AI 기반 검사 시스템
  • 자율 이동 로봇(AMR)
  • 스마트 물류 자동화

특히 AI 비전 + 로봇 + 자동화 시스템이 결합된 형태의 제품들이 많았다.

이는 스마트팩토리 기술이 AI 중심으로 빠르게 진화하고 있다는 신호로 보인다.


전시회를 보며 느낀 점

이번 AW 2026 전시회를 보면서 느낀 점은 AI와 로봇 기술의 경계가 빠르게 사라지고 있다는 것이었다.

과거에는

  • AI = 소프트웨어
  • 로봇 = 하드웨어

라는 인식이 강했다.

하지만 이제는

AI + 로봇 + 자동화 + 데이터

가 하나의 생태계처럼 결합하고 있었다.

특히 휴머노이드 로봇은 아직 초기 단계이지만, 기술 발전 속도를 보면 앞으로 산업 현장에서도 실제 활용되는 시점이 멀지 않았다고 느껴졌다.

728x90
728x90

3축 서보 부하율 수집부터 클라우드 연동까지 – MCT 데이터 통합의 모든 것

**MCT(머시닝 센터)**와 같은 고정밀 공작기계는 실시간 데이터를 수집하고 분석하는 것이 생산성 향상과 예지보전의 핵심입니다.
이번 사례에서는 MCT의 서보 로드 정보 및 3축 부하율을 실시간으로 수집하고, 이를 다양한 **플랫폼(Grafana, 클라우드, 대시보드 등)**에서 활용하기 위한 구조를 정리합니다.


✅ 프로젝트 개요

항목 내용
대상 설비 머시닝 센터 (CNC 기반)
주요 데이터 서보 모터 부하율, 3축(X/Y/Z) 부하 상태, 스핀들 속도 등
수집 방식 OPC UA / MTConnect / CNC API 연동
개발 환경 Python, Node-RED, MQTT, InfluxDB, Grafana
활용 목적 실시간 시각화, 상태 진단, 클라우드 플랫폼 연동, 디지털 트윈 구축

1️⃣ 실시간 데이터 수집 구성도

 
[MCT] → [CNC Controller] → [OPC UA / MTConnect Adapter] → [Edge Gateway]  
                                     ↓  
                           [InfluxDB / MQTT Broker]  
                                     ↓  
                          [Grafana / Cloud Dashboard / MES]

MCT에서 서보 드라이브와 컨트롤러(CNC, FANUC, SIEMENS 등)를 통해 부하 정보, 위치, 속도 등 데이터를 추출합니다.


2️⃣ 서보 로드 및 3축 부하율 정보

항목 설명
Servo Load (%) 각 축 모터의 현재 부하 비율
Axis Load X/Y/Z 각각의 축에서 현재 작업 중인 부하율
Spindle Load 가공 중 스핀들에 가해지는 토크 비율
Feed Rate, Position 공정 중 위치 및 이송 속도 정보 포함 가능
 
{
  "timestamp": "2024-02-11T10:15:30Z",
  "axis": {
    "X": {"load": 45.3},
    "Y": {"load": 38.7},
    "Z": {"load": 51.2}
  },
  "servo": {
    "spindleLoad": 63.5
  }
}

📌 Tip: 대부분의 컨트롤러는 위 정보를 OPC UA 노드 또는 MTConnect의 XML 스트림으로 제공함


3️⃣ 다양한 플랫폼을 위한 수집 구성

① Edge → DB 구조

  • 수집기: Python or Node-RED 기반 OPC UA/MTConnect 클라이언트
  • 저장소: InfluxDB, PostgreSQL 등 시계열/관계형 DB
  • 시각화: Grafana (실시간 부하율 트렌드 확인)

② MQTT + 클라우드 연동

  • MQTT Broker로 실시간 스트림 전송
  • AWS IoT Core / Azure IoT Hub 연계 가능
  • 클라우드에서 대시보드 구성 또는 예지보전 모델 접목

4️⃣ 실시간 시각화 예시 (Grafana)

  • 서보 로드 변화율 (시간대별 그래프)
  • 3축 동시 부하율 모니터링
  • 알람 조건: 특정 축이 80% 이상 부하 시 경고

🛠️ 실무 노하우

 

항목 팁
컨트롤러 종류 확인 FANUC/Siemens/Mitsubishi는 각기 다른 OPC 노드 구성
네트워크 지연 대응 MQTT QoS 조정 또는 버퍼 처리 로직 구현
DB 선택 기준 InfluxDB는 시계열 데이터에 최적, 알림 기능도 내장
데이터 병합 처리 서보/위치/알람을 하나의 JSON 패킷으로 통합 추천
클라우드 연동 팁 JSON 포맷 유지 & 장비 ID 명시 필수 (멀티 설비 구분)

https://www.youtube.com/watch?v=Pok7VcZDBUY

 

728x90
728x90

C#으로 G코드 전송하고 실시간 위치 제어까지!

3D 프린터를 디지털 트윈 환경에서 제어하거나 모니터링하려면, 프린터와의 실시간 통신과 상태 업데이트 체계가 필수입니다.
본 사례에서는 Visual Studio + C# 환경에서 시리얼 통신을 설정하고, G-code 명령어를 전송해 프린터를 직접 제어하는 구조를 소개합니다.


✅ 프로젝트 개요

항목 내용
대상 장비 FDM 방식 3D 프린터 (Marlin 펌웨어 기준)
통신 방식 Serial (USB/COM 포트)
개발 환경 Visual Studio 2022+, C# .NET 6
제어 명령 G-code (온도 설정, XY 이동, 홈 복귀 등)
활용 목적 디지털 트윈 기반 원격 제어, 프린터 상태 실시간 반영

1. 시리얼 통신 연결 설정 (C#)

 
using System.IO.Ports;

SerialPort serial = new SerialPort("COM3", 115200); // 포트 & 속도 설정
serial.Open();
serial.WriteLine("M115"); // 펌웨어 정보 요청 G코드 전송

📌 Tip: 3D 프린터 대부분은 115200 또는 250000 bps 속도를 사용하며, Arduino 기반이면 COM 포트 자동 설정 로직을 넣는 것이 좋습니다.


2. 기본 G-code 명령어 예제

명령 기능 예시
M105 현재 온도 요청 M105
M104 S200 노즐 온도 설정 M104 S200 (200도)
G28 홈 위치 이동 G28
G1 X50 Y50 F3000 X,Y 위치 이동 X=50, Y=50으로 이동
M140 S60 히팅 배드 온도 설정 M140 S60

3. 실시간 위치 제어 예제

void MoveToPosition(float x, float y, int speed = 3000)
{
    string gcode = $"G1 X{x} Y{y} F{speed}";
    serial.WriteLine(gcode);
}
 

📌 실무 팁:

  • 프린터는 명령 처리 후 ok 응답을 반환함 → 응답을 기다리는 로직 필요
  • G-code 전송 후 딜레이(Thread.Sleep) 또는 수신 확인 필요

4. 프린터 상태 모니터링 구조

serial.WriteLine("M105"); // 현재 온도 요청
string response = serial.ReadLine();
Console.WriteLine($"프린터 응답: {response}");

📌 디지털 트윈 적용 사례:

  • 프린터 실제 온도와 위치 → 가상 시뮬레이션 모델에 반영
  • G코드 동기화 기반 양방향 제어 인터페이스 구축

🛠 실무 노하우

항목 팁
전송 안정성 전송 후 \n 또는 \r\n 필수 (펌웨어 설정 확인)
응답 수신 타이밍 DataReceived 이벤트 활용 또는 폴링 방식
포트 충돌 방지 앱 종료 시 .Close() 필수 호출
다중 프린터 제어 포트별 쓰레드 분기 or 큐 처리 방식 구현
G코드 테스트 Pronterface, OctoPrint로 사전 테스트 후 적용 권장

https://www.youtube.com/watch?v=3adLFtTPAT4

 

728x90
728x90

현장 제어부터 복잡한 데이터 처리까지, 상황에 맞는 언어 선택 가이드

PLC를 처음 접하거나 새로운 프로젝트를 설계할 때 가장 많이 하는 고민 중 하나가 바로 **“어떤 언어로 짜야 하지?”**입니다.
과거에는 래더(LD) 중심이었지만, 최근에는 ST, SFC 등 고급 언어도 점점 중요해지고 있습니다.


✅ IEC 61131-3에서 정의한 5가지 표준 PLC 언어

언어 이름 주요 특징 추천 사용 환경
LD Ladder Diagram (래더 다이어그램) 전기 회로와 유사, 가시성 우수 기계 자동화, 유지보수
ST Structured Text (구조화 텍스트) C/파스칼 계열, 복잡한 연산 가능 수학 처리, 조건문, 데이터 조작
FBD Function Block Diagram (기능 블록) 블록 기반 시각화 논리 제어, PID, 모듈화
SFC Sequential Function Chart (순차 기능 차트) 순차 흐름 제어 공정 제어, 상태 기반 로직
IL Instruction List (명령어 목록) 어셈블리와 유사, 저수준 성능 최적화 (현재는 점차 폐지됨)

📌 IL은 IEC 61131-3 3rd Edition에서 사용 중단(deprecated) 되었지만, 일부 구형 PLC에서는 여전히 지원됩니다.

 


🧩 각 언어별 구조 및 예제

 

1️⃣ LD (Ladder Diagram)

: 전기 회로도와 유사한 형태로 가로줄(Rung)과 접점/코일로 구성된 가장 전통적인 언어

📌 누구나 쉽게 시각적으로 이해 가능하며 유지보수가 쉬움

예제: 버튼을 눌렀을 때 모터 작동

[ X00 ] --------( )--------[  Y10 ]
   |                           |
  버튼                       모터 ON

🛠 사용 팁:

  • 직관적 표현이 중요
  • 자기유지 회로, 인터록, 타이머 제어에 적합
  • 논리 흐름이 많아지면 복잡도 증가

2️⃣ ST (Structured Text)

: 고급 프로그래밍 언어처럼 if/for/while 구조를 지원하며, 코드 중심의 언어

📌 복잡한 계산, 배열 처리, 사용자 정의 함수 구현에 최적화

예제: 온도 조건에 따라 히터 작동

IF Temperature < 25 THEN
    Heater := TRUE;
ELSE
    Heater := FALSE;
END_IF;

🛠 사용 팁:

  • 데이터 처리, 수식 연산에 매우 강력
  • 개발자는 C 언어 또는 Python 경험자면 빠르게 적응 가능
  • 디버깅 편의성 ↑, 시각화는 부족

3️⃣ FBD (Function Block Diagram)

: 논리 블록(AND, OR, Timer 등)을 시각적으로 연결해 구성

📌 시각적이지만, 재사용 가능한 블록 지향적 로직 설계에 적합

예제: 타이머를 이용한 펌프 제어

(Start) ──[TON]──> (Pump)
         (IN)
         (PT := T#5s)

🛠 사용 팁:

  • 타이머, PID, 계산 블록 등 표준 기능 사용 시 유리
  • 재사용성이 높은 설계 가능
  • 복잡한 로직은 블록 트리 구조가 난해할 수 있음

4️⃣ SFC (Sequential Function Chart)

: 상태 기반 제어(Flowchart 형식)의 절차형 로직에 적합

📌 제조 공정의 단계별 흐름 정의 시 유리

예제: 공정 순서 – 대기 → 투입 → 가열 → 배출

[Step1: Wait] → [Step2: Input] → [Step3: Heat] → [Step4: Output]

🛠 사용 팁:

  • **상태 전이 조건(Transition)**과 액션을 명확히 설계해야 함
  • 공정 흐름 문서와 1:1 매칭 가능 → 디버깅에 강함
  • 조건 복잡도 증가 시 유지보수 부담

5️⃣ IL (Instruction List)

: 어셈블리 형태의 저수준 명령어 기반

📌 컴팩트하지만 가독성이 낮고 학습 난이도 높음

예제: 버튼 → 모터 ON

 
LD     I0.0
OUT    Q0.0

🛠 사용 팁:

  • CPU 자원 아끼는 초정밀 제어에 적합 (구형 장비에서 활용)
  • 디버깅과 유지보수 난이도 높음
  • 대부분의 최신 PLC는 더 이상 IL을 사용하지 않음

🔍 언어 선택 가이드 요약

상황 추천 언어
유지보수와 협업이 중요 LD, FBD
수식/조건/데이터 위주 제어 ST
공정 단계 제어 SFC
구형 시스템 마이그레이션 IL (임시 사용)

📌 마무리 팁

 

 

728x90

+ Recent posts