Skip to content

필사 모드: FingerScore 하드웨어 2 — 전자공학 기초(전압·전류·저항부터 디지털 신호까지)

한국어
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.
원문 렌더가 준비되기 전까지 텍스트 가이드로 표시합니다.

들어가며 — 코드만 짜던 개발자가 전자공학을 만나면

FingerScore 시리즈의 첫 글에서 우리는 "라켓 스포츠 점수를 손가락 제스처로 기록하는 BLE 링"이라는 제품의 큰 그림을 그렸습니다. 마이크로컨트롤러(MCU)를 고르고, 배터리와 IMU 센서, BLE 무선 칩을 어떻게 조합할지 부품 수준에서 살펴봤습니다. 그런데 막상 부품을 손에 쥐고 브레드보드에 꽂으려는 순간, 많은 소프트웨어 개발자들이 똑같은 벽에 부딪힙니다. "이 저항은 왜 끼우는 거지? 핀에 직접 LED를 연결하면 안 되나? 3.3V랑 5V를 섞으면 무슨 일이 일어나지?"

이 글은 바로 그 벽을 넘기 위한 글입니다. 코드를 짜본 적은 있지만 전자공학은 처음인 분들을 대상으로, FingerScore 같은 작은 임베디드 기기를 만들 때 실제로 필요한 전자공학 기초만 추려서 설명합니다. 대학 회로이론 교과서처럼 미분방정식을 풀지는 않습니다. 대신 "왜 이 부품이 필요한가", "이 숫자는 어떻게 나오는가"를 직관적으로 이해하는 데 집중합니다.

소프트웨어 개발자에게는 좋은 비유가 하나 있습니다. 전기 회로는 물이 흐르는 배관과 비슷합니다. 전압은 수압, 전류는 물의 양, 저항은 파이프의 좁아짐입니다. 이 비유 하나만 머릿속에 잘 심어두면 이 글의 절반은 이해한 셈입니다. 그럼 시작해 보겠습니다.

전압, 전류, 저항 — 세 가지 기본량

전자공학의 출발점은 세 가지 양입니다. 이 셋의 관계만 확실히 잡으면 나머지는 응용입니다.

- 전압(Voltage, 단위 V 볼트): 두 지점 사이의 전위차입니다. 물로 치면 수압, 즉 물을 밀어내는 힘입니다. 배터리의 플러스와 마이너스 사이에 전압이 있습니다.

- 전류(Current, 단위 A 암페어): 단위 시간당 흐르는 전하의 양입니다. 물로 치면 파이프를 통과하는 물의 양입니다. 임베디드 기기에서는 보통 밀리암페어(mA)나 마이크로암페어(uA) 단위를 씁니다.

- 저항(Resistance, 단위 옴): 전류의 흐름을 방해하는 정도입니다. 물로 치면 파이프가 좁아지는 부분입니다. 저항이 크면 같은 전압에서도 전류가 적게 흐릅니다.

물 비유를 표로 정리하면 다음과 같습니다.

| 전기 개념 | 단위 | 물 비유 | FingerScore에서 |

| --- | --- | --- | --- |

| 전압 | V 볼트 | 수압 | 배터리 3.7V, 로직 3.3V |

| 전류 | A 암페어 | 물의 양 | LED 약 5mA, 슬립 시 수십 uA |

| 저항 | 옴 | 파이프 좁아짐 | LED 전류 제한 저항, 풀업 저항 |

여기서 한 가지 중요한 직관이 있습니다. 전압은 "걸리는 것"이고 전류는 "흐르는 것"입니다. 배터리는 전압원이라서 항상 일정한 전압을 공급하려 하고, 전류는 회로가 얼마나 잘 통하느냐에 따라 결정됩니다. 그래서 "핀에 LED를 직접 꽂으면 안 되나요"라는 질문의 답이 나옵니다. 저항으로 흐름을 막아주지 않으면 전류가 과도하게 흘러 부품이 타버리기 때문입니다.

옴의 법칙 — 전자공학의 F=ma

세 가지 양을 하나로 묶는 식이 옴의 법칙입니다. 전자공학에서 가장 많이 쓰는 공식이고, 사실상 이것 하나로 회로 계산의 80%가 끝납니다.

옴의 법칙

V = I * R

V : 전압 (볼트)

I : 전류 (암페어)

R : 저항 (옴)

변형하면

I = V / R (저항이 클수록 전류는 작아진다)

R = V / I (원하는 전류를 위해 필요한 저항을 구한다)

이 식의 의미는 명확합니다. 같은 저항에서 전압을 올리면 전류가 비례해서 늘고, 같은 전압에서 저항을 올리면 전류가 반비례해서 줄어듭니다. 물 비유로는 "수압을 높이면 물이 더 많이 흐르고, 파이프를 더 좁히면 물이 덜 흐른다"는 당연한 이야기입니다.

전력(소비되는 에너지)도 함께 알아두면 좋습니다. 배터리 수명을 계산할 때 꼭 필요합니다.

전력 공식

P = V * I

P : 전력 (와트)

옴의 법칙과 결합하면

P = I * I * R

P = V * V / R

예를 들어 LED 하나에 2V가 걸리고 5mA가 흐른다면, 그 LED가 소비하는 전력은 다음과 같이 계산합니다.

P = V * I

P = 2 * 0.005

P = 0.01 와트 = 10 밀리와트

작은 숫자처럼 보이지만, 코인 배터리로 동작하는 FingerScore 링에서는 이런 작은 소비도 누적되면 배터리 수명을 좌우합니다. 그래서 임베디드에서는 항상 전류 예산(current budget)을 따집니다.

LED와 전류 제한 저항 — 가장 처음 만드는 계산

전자공학을 처음 배울 때 거의 모두가 하는 첫 실습이 "LED 켜기"입니다. 그런데 LED를 그냥 전원에 연결하면 안 됩니다. LED는 정해진 전압(순방향 전압, Vf)이 걸리면 그 이상 전압을 받으려 하지 않고, 대신 전류를 한없이 빨아들이려 합니다. 제한 장치 없이 연결하면 과전류로 LED가 즉시 타버립니다. 그래서 전류 제한 저항을 직렬로 넣어 흐름을 막아줍니다.

계산은 옴의 법칙의 변형입니다.

전류 제한 저항 계산

R = (Vsupply - Vled) / I

Vsupply : 공급 전압 (예: 3.3V)

Vled : LED 순방향 전압 (빨강 약 2.0V, 파랑 약 3.0V)

I : 흘리고 싶은 전류 (예: 5mA = 0.005A)

FingerScore의 상태 표시용 빨강 LED를 3.3V 로직 전원에 연결하고 5mA를 흘린다고 해봅시다.

R = (3.3 - 2.0) / 0.005

R = 1.3 / 0.005

R = 260 옴

계산 결과는 260옴인데, 실제 부품은 정해진 표준값(E series)으로만 팝니다. 260옴에 가장 가까운 표준값은 270옴이므로 270옴을 씁니다. 저항을 약간 크게 잡으면 전류가 살짝 줄어들 뿐 LED는 멀쩡히 켜집니다. 임베디드에서는 "조금 보수적으로(전류를 약간 적게)" 잡는 것이 안전합니다.

브레드보드에 올린 회로를 ASCII로 그리면 다음과 같습니다.

LED 점등 회로

3.3V ----[ R1 270옴 ]----|>|---- GND

LED1

(긴 다리 = +)

R1 : 전류 제한 저항

LED1 : 표시용 LED, 긴 다리(애노드)가 전원 쪽

여기서 흔한 실수 두 가지를 짚고 넘어가겠습니다. 첫째, LED는 극성이 있습니다. 다리가 긴 쪽이 플러스(애노드)이고 짧은 쪽이 마이너스(캐소드)입니다. 거꾸로 꽂으면 켜지지 않습니다. 둘째, 저항을 빼먹으면 LED가 타거나 MCU 핀이 손상됩니다. "왜 저항을 끼우지?"의 답은 바로 이 전류 제한 때문입니다.

버튼 입력과 풀업/풀다운 저항

FingerScore는 손가락 제스처를 센서로 감지하지만, 개발 단계에서는 단순한 버튼으로 입력을 테스트하는 경우가 많습니다. 그런데 버튼을 MCU 핀에 그냥 연결하면 또 문제가 생깁니다. 버튼을 누르지 않은 상태에서 핀이 "공중에 떠 있는(floating)" 상태가 되기 때문입니다.

플로팅 핀은 주변 전기 노이즈를 주워서 0과 1 사이를 멋대로 오갑니다. 그러면 누르지도 않았는데 입력이 들어온 것처럼 읽힙니다. 이걸 막으려면 핀을 안정된 기준 전압에 약하게 묶어두는 저항이 필요합니다. 이것이 풀업(pull-up)과 풀다운(pull-down) 저항입니다.

- 풀업 저항: 핀을 전원(3.3V) 쪽에 약하게 묶습니다. 평소에는 1(HIGH)로 읽히고, 버튼을 누르면 핀이 GND로 연결되어 0(LOW)으로 읽힙니다.

- 풀다운 저항: 핀을 GND 쪽에 약하게 묶습니다. 평소에는 0(LOW)으로 읽히고, 버튼을 누르면 1(HIGH)로 읽힙니다.

| 구분 | 평소 상태 | 버튼 누름 | 저항 연결 위치 |

| --- | --- | --- | --- |

| 풀업 | HIGH (1) | LOW (0) | 핀과 전원 사이 |

| 풀다운 | LOW (0) | HIGH (1) | 핀과 GND 사이 |

가장 흔한 풀업 방식 버튼 회로를 ASCII로 그리면 다음과 같습니다.

풀업 버튼 회로

3.3V ----[ R1 10k옴 ]----+---- GPIO2 (MCU 입력)

|

SW1 (버튼)

|

GND

R1 : 풀업 저항, 보통 10k옴

SW1 : 버튼. 누르면 GPIO2가 GND에 연결되어 LOW

저항값으로 보통 10k옴을 쓰는 데에는 이유가 있습니다. 너무 작으면 버튼을 눌렀을 때 전원에서 GND로 큰 전류가 새서 전력이 낭비됩니다. 너무 크면 노이즈를 막는 힘이 약해집니다. 10k옴은 그 균형점으로 오래 검증된 값입니다.

좋은 소식이 하나 있습니다. 대부분의 MCU는 칩 내부에 풀업/풀다운 저항을 내장하고 있어서, 코드로 켜기만 하면 외부 저항 없이도 동작합니다. FingerScore처럼 부품 수를 줄여야 하는 작은 기기에서는 이 내부 풀업을 적극 활용합니다. 다만 내부 풀업은 값이 정확하지 않고 보통 수십 k옴으로 크기 때문에, 노이즈가 심한 환경에서는 외부 저항이 더 안정적입니다.

커패시터 — 디커플링과 디바운싱

저항 다음으로 자주 만나는 부품이 커패시터(콘덴서)입니다. 커패시터는 전하를 잠깐 저장했다 내놓는 부품으로, 물 비유로는 작은 물탱크입니다. 전압이 갑자기 출렁일 때 탱크가 물을 채우거나 빼서 충격을 완충해 줍니다.

임베디드에서 커패시터가 쓰이는 대표적인 두 가지 용도가 있습니다.

첫째, 디커플링(decoupling) 또는 바이패스 커패시터입니다. MCU나 센서 같은 칩은 동작할 때 순간적으로 전류를 확 끌어다 씁니다. 이때 전원 전압이 잠깐 푹 꺼지는데, 칩 바로 옆에 작은 커패시터(보통 0.1uF)를 붙여두면 이 커패시터가 순간 전류를 공급해 전압을 안정시킵니다. 거의 모든 칩의 전원 핀 옆에는 디커플링 커패시터를 붙이는 것이 정석입니다. 이것을 빼먹으면 칩이 가끔 이유 없이 리셋되거나 오작동합니다.

디커플링 커패시터 배치

3.3V ----+-------------- VCC (칩 전원 핀)

|

C1 0.1uF

|

GND -----+-------------- GND

C1 : 디커플링 커패시터, 칩 전원 핀에 최대한 가깝게

둘째, 디바운싱(debouncing)입니다. 기계식 버튼은 누르는 순간 접점이 미세하게 여러 번 튕깁니다(바운스). 그러면 한 번 눌렀는데 MCU는 여러 번 눌린 것으로 읽습니다. 버튼 핀에 작은 커패시터를 붙이면 이 튕김이 완만하게 다듬어져 한 번의 깔끔한 신호로 읽힙니다. 다만 실무에서는 하드웨어 디바운싱보다 소프트웨어 디바운싱(코드에서 일정 시간 내 중복 입력 무시)을 더 많이 씁니다. FingerScore의 제스처 인식도 결국 소프트웨어에서 신호를 다듬는 작업입니다.

| 용도 | 커패시터 값 | 위치 | 효과 |

| --- | --- | --- | --- |

| 디커플링 | 0.1uF | 칩 전원 핀 옆 | 전압 안정화 |

| 벌크 디커플링 | 10uF 이상 | 전원 입구 | 큰 전류 변동 흡수 |

| 디바운싱 | 0.1uF | 버튼 핀과 GND 사이 | 접점 튕김 완화 |

전압 분배 — 두 저항으로 전압 나누기

가끔 어떤 전압을 절반으로, 또는 특정 비율로 낮춰야 할 때가 있습니다. 예를 들어 배터리 전압(3.7V)을 MCU의 ADC로 측정하려는데 ADC 입력 한계가 3.3V라면, 전압을 살짝 낮춰서 넣어야 합니다. 이때 쓰는 가장 간단한 회로가 전압 분배기(voltage divider)입니다. 저항 두 개를 직렬로 놓고 그 사이에서 전압을 뽑아내는 방식입니다.

전압 분배기

Vin ----[ R1 ]----+----[ R2 ]---- GND

|

Vout (R1과 R2 사이)

Vout = Vin * R2 / (R1 + R2)

R1과 R2가 같으면 Vout은 Vin의 정확히 절반이 됩니다. 비율을 조절하면 원하는 전압을 만들 수 있습니다. 예를 들어 3.7V를 약 1.85V로 절반 만들고 싶다면 같은 값의 저항 두 개를 쓰면 됩니다.

Vout = 3.7 * 10k / (10k + 10k)

Vout = 3.7 * 0.5

Vout = 1.85V

주의할 점이 있습니다. 전압 분배기는 항상 전류가 R1과 R2를 통해 GND로 새기 때문에 전력을 소모합니다. 배터리 기기에서는 이 손실을 줄이려고 저항값을 크게(수십 k옴 이상) 잡습니다. 또 분배기 출력에서 큰 전류를 끌어가면 비율이 무너지므로, 분배기는 "신호를 읽는" 용도(예: ADC 측정)로만 쓰고 "전원을 공급하는" 용도로는 쓰지 않습니다.

디지털과 아날로그 — 두 세계의 차이

여기서 잠깐 큰 그림을 정리하겠습니다. 전자 신호에는 크게 두 종류가 있습니다.

- 디지털 신호: 0과 1, 두 가지 값만 갖습니다. 정확히는 LOW(0V 근처)와 HIGH(전원 전압 근처)입니다. 버튼이 눌렸는지, LED를 켤지 끌지 같은 on/off 정보가 디지털입니다. 잡음에 강하고 정확합니다.

- 아날로그 신호: 0V부터 전원 전압까지 연속적인 모든 값을 가질 수 있습니다. 온도, 밝기, 마이크 소리, 배터리 잔량 같은 "정도"를 나타내는 정보가 아날로그입니다.

MCU는 디지털 세계의 부품입니다. 내부적으로 0과 1만 다룹니다. 그래서 아날로그 정보(예: 배터리 전압의 미세한 변화)를 읽으려면 아날로그를 디지털로 바꾸는 변환기가 필요한데, 이것이 뒤에서 설명할 ADC입니다.

| 구분 | 디지털 | 아날로그 |

| --- | --- | --- |

| 값 | 0 또는 1 두 가지 | 연속적인 모든 값 |

| 예시 | 버튼, LED on/off | 온도, 밝기, 배터리 전압 |

| 잡음 내성 | 강함 | 약함 |

| MCU 처리 | 직접 처리 | ADC로 변환 후 처리 |

GPIO — MCU와 바깥 세계의 연결

GPIO는 General Purpose Input/Output, 범용 입출력 핀의 줄임말입니다. MCU에 달린 다리들 중 우리가 코드로 자유롭게 제어할 수 있는 핀입니다. 소프트웨어 관점에서 GPIO는 메모리의 특정 비트와 같습니다. 그 비트에 1을 쓰면 핀이 HIGH가 되고, 0을 쓰면 LOW가 됩니다. 반대로 그 비트를 읽으면 핀이 지금 HIGH인지 LOW인지 알 수 있습니다.

GPIO는 두 가지 방향(모드)으로 설정합니다.

- 출력(Output) 모드: MCU가 핀에 전압을 내보냅니다. LED를 켜거나, 다른 칩에 신호를 보낼 때 씁니다. 코드로 HIGH를 쓰면 핀이 3.3V를 출력하고, LOW를 쓰면 0V를 출력합니다.

- 입력(Input) 모드: MCU가 핀의 전압을 읽습니다. 버튼 상태나 센서의 디지털 출력을 읽을 때 씁니다.

의사 코드로 표현하면 다음과 같습니다.

// GPIO 출력으로 LED 켜기

pinMode(LED_PIN, OUTPUT);

digitalWrite(LED_PIN, HIGH); // LED 켜짐

digitalWrite(LED_PIN, LOW); // LED 꺼짐

// GPIO 입력으로 버튼 읽기 (내부 풀업 사용)

pinMode(BUTTON_PIN, INPUT_PULLUP);

int state = digitalRead(BUTTON_PIN);

// 풀업이므로 평소 HIGH, 눌리면 LOW

if (state == LOW) {

// 버튼이 눌렸다

}

GPIO에서 반드시 기억해야 할 한계가 있습니다. 핀이 흘릴 수 있는 전류에는 상한이 있습니다(보통 핀당 수십 mA). 이 한계를 넘는 부하(예: 모터, 여러 개의 강한 LED)를 직접 연결하면 핀이 손상됩니다. 큰 부하는 트랜지스터나 전용 드라이버 칩을 거쳐 제어해야 합니다. FingerScore의 작은 표시 LED 정도는 전류 제한 저항만 잘 넣으면 GPIO로 직접 구동해도 됩니다.

로직 레벨 — 3.3V와 5V의 세계

디지털 신호에서 HIGH와 LOW를 가르는 기준 전압을 로직 레벨이라고 합니다. 그런데 이 기준이 칩마다 다릅니다. 옛날 아두이노 우노 같은 칩은 5V 로직을 쓰고, 요즘 저전력 MCU와 BLE 칩, 대부분의 센서는 3.3V 로직을 씁니다. FingerScore는 배터리 효율과 BLE 칩 호환성 때문에 3.3V 로직을 기본으로 씁니다.

3.3V 로직에서 대략적인 기준은 다음과 같습니다.

3.3V 로직 레벨 (대략값)

HIGH 로 인식 : 약 2.0V 이상

LOW 로 인식 : 약 0.8V 이하

애매한 구간 : 0.8V ~ 2.0V (불확정, 피해야 함)

여기서 중요한 주의사항이 나옵니다. 5V 신호를 3.3V 칩의 핀에 직접 연결하면 3.3V 칩이 손상될 수 있습니다. 3.3V 칩은 자기 전원보다 높은 전압을 견디도록 설계되지 않았기 때문입니다. 반대로 3.3V로 5V 칩에 신호를 보내는 것은 보통은 괜찮습니다(3.3V가 5V 칩의 HIGH 기준을 넘기 때문). 서로 다른 로직 레벨의 칩을 섞을 때는 레벨 시프터(level shifter)라는 변환 부품을 씁니다.

다행히 FingerScore는 MCU, IMU 센서, BLE를 전부 3.3V 계열로 통일했기 때문에 레벨 시프터가 필요 없습니다. 부품을 고를 때 동작 전압을 통일하는 것이 회로를 단순하게 만드는 핵심 요령입니다.

I2C, SPI, UART — 칩끼리 대화하는 법

FingerScore의 핵심 기능은 IMU(가속도계+자이로) 센서로 손의 움직임을 읽는 것입니다. 그런데 MCU와 IMU 센서는 어떻게 데이터를 주고받을까요? 핀 하나로 0과 1만 보내서는 복잡한 센서 값을 전달할 수 없습니다. 그래서 여러 핀을 묶어 약속된 규칙으로 통신하는 디지털 통신 프로토콜을 씁니다. 임베디드에서 가장 많이 쓰는 세 가지가 I2C, SPI, UART입니다.

- I2C: 단 두 개의 선(SDA 데이터, SCL 클럭)으로 여러 개의 칩을 연결합니다. 각 칩은 고유 주소를 갖고, MCU가 주소를 부르면 해당 칩만 응답합니다. 선이 적어 배선이 간단하고, 센서 연결에 가장 많이 쓰입니다. 속도는 중간이고 거리가 짧습니다. FingerScore의 IMU는 I2C로 연결하는 것이 가장 무난합니다.

- SPI: 네 개 이상의 선(MOSI, MISO, SCK, CS)을 쓰지만 I2C보다 훨씬 빠릅니다. 고속 데이터가 필요한 센서나 디스플레이, 메모리에 씁니다. 선이 많아 배선이 복잡합니다.

- UART: 두 개의 선(TX 송신, RX 수신)으로 두 장치가 일대일로 통신합니다. 주소 개념이 없고 단순합니다. GPS 모듈이나 디버깅용 시리얼 출력, 모듈 간 통신에 많이 씁니다.

세 프로토콜을 비교하면 다음과 같습니다.

| 프로토콜 | 선 개수 | 다중 장치 | 속도 | 주 용도 |

| --- | --- | --- | --- | --- |

| I2C | 2개 (SDA, SCL) | 가능 (주소 기반) | 중간 | 센서 연결 |

| SPI | 4개 이상 | 가능 (CS 핀별) | 빠름 | 고속 센서, 디스플레이 |

| UART | 2개 (TX, RX) | 일대일만 | 중간 | GPS, 디버그, 모듈 통신 |

I2C로 IMU를 연결하는 배선을 ASCII로 그리면 다음과 같습니다.

I2C 연결 (MCU와 IMU 센서)

3.3V ----+----[ R1 4.7k ]----+

| |

| +-------------+----- SDA ---- MCU GPIO (SDA)

| |

+-----|----[ R2 4.7k ]----+

| |

IMU +----- SCL ---- MCU GPIO (SCL)

|

GND ---- GND

R1, R2 : I2C 풀업 저항 (보통 4.7k옴)

IMU : 가속도/자이로 센서, I2C 주소를 가짐

I2C에서 풀업 저항(보통 4.7k옴)이 SDA, SCL 두 선에 각각 필요하다는 점을 기억하세요. I2C는 핀을 LOW로만 끌어내리는 방식이라, 평소 HIGH를 유지하려면 풀업이 있어야 합니다. 많은 센서 보드에는 이 풀업이 이미 올라가 있으니 데이터시트를 확인하면 됩니다.

ADC — 아날로그를 숫자로 바꾸기

앞서 디지털과 아날로그를 구분했습니다. MCU는 디지털 세계의 부품이라 아날로그 전압을 직접 이해하지 못합니다. 아날로그 값을 읽으려면 ADC(Analog to Digital Converter, 아날로그-디지털 변환기)가 필요합니다. ADC는 입력 전압을 일정 단계로 잘라 숫자로 바꿔줍니다.

ADC의 핵심 개념은 해상도(resolution)입니다. 예를 들어 10비트 ADC는 0V부터 기준 전압까지를 1024단계(2의 10승)로 나눕니다. 12비트 ADC는 4096단계로 더 잘게 나눕니다.

ADC 변환 (10비트, 기준 전압 3.3V 예시)

digital_value = (Vin / Vref) * (2^bits - 1)

Vin : 측정할 입력 전압

Vref : 기준 전압 (예: 3.3V)

bits : 해상도 (예: 10)

예) Vin = 1.65V, Vref = 3.3V, 10비트

digital_value = (1.65 / 3.3) * 1023

digital_value = 0.5 * 1023

digital_value = 약 511

즉 입력 전압이 기준 전압의 정확히 절반이면, 10비트 ADC는 약 511이라는 숫자를 돌려줍니다. FingerScore에서 ADC의 대표적 용도는 배터리 잔량 측정입니다. 배터리 전압을 전압 분배기로 ADC 입력 범위 안에 들어오게 낮춘 뒤, ADC로 읽은 숫자를 다시 전압으로 환산해 "배터리가 몇 퍼센트 남았는지"를 계산합니다.

신호 측정 — 멀티미터와 오실로스코프

회로를 만들다 보면 반드시 "이게 지금 제대로 동작하나"를 확인해야 하는 순간이 옵니다. 소프트웨어에서 디버거와 로그를 쓰듯, 하드웨어에서는 측정 장비를 씁니다. 입문자에게 가장 중요한 두 가지는 멀티미터와 오실로스코프입니다.

멀티미터(multimeter)는 전자공학의 기본 도구입니다. 가장 자주 하는 측정은 다음 세 가지입니다.

- 전압 측정: 두 지점 사이에 프로브를 대고 전압을 읽습니다. "3.3V 핀에 정말 3.3V가 나오나", "배터리 전압이 얼마나 남았나"를 확인합니다.

- 도통(연결) 확인: 두 지점이 전기적으로 이어져 있는지 삐 소리로 알려줍니다. 납땜이 제대로 됐는지, 끊어진 곳은 없는지, 합선(쇼트)이 없는지 확인할 때 필수입니다.

- 저항 측정: 저항값을 읽습니다. 부품을 거꾸로 끼웠거나 값이 맞는지 확인합니다.

오실로스코프(oscilloscope)는 시간에 따른 전압 변화를 그래프로 보여주는 장비입니다. 멀티미터는 "지금 이 순간의 전압"만 알려주지만, 오실로스코프는 "전압이 시간에 따라 어떻게 출렁이는지"를 파형으로 보여줍니다. I2C 통신이 제대로 일어나는지, 버튼 바운스가 얼마나 심한지, 신호의 모양이 정상인지 같은 동적인 문제를 볼 때 필수입니다. 입문자는 처음부터 비싼 오실로스코프를 살 필요는 없고, 멀티미터부터 익숙해지면 충분합니다.

| 장비 | 보는 것 | 대표 용도 | 입문 우선순위 |

| --- | --- | --- | --- |

| 멀티미터 | 순간 전압, 도통, 저항 | 배선 확인, 전압 점검 | 필수 (먼저) |

| 오실로스코프 | 시간에 따른 파형 | 통신 신호, 바운스 분석 | 나중에 |

회로 기호 읽기 — 도면의 언어

부품을 사고 회로를 따라 만들려면 회로도(schematic)를 읽을 줄 알아야 합니다. 회로도는 부품을 약속된 기호로 표현한 도면입니다. 글로 기호를 그리기는 어렵지만, 자주 보는 기호의 의미를 표로 정리하면 다음과 같습니다.

| 부품 | 기호 설명 | 라벨 관례 |

| --- | --- | --- |

| 저항 | 지그재그 또는 직사각형 | R1, R2 |

| 커패시터 | 평행한 두 선 | C1, C2 |

| LED | 삼각형에 화살표 두 개 | LED1 |

| 다이오드 | 삼각형과 막대 | D1 |

| 배터리 | 길고 짧은 선 번갈아 | BAT |

| 칩/MCU | 사각형에 핀 번호 | U1, MCU |

| 접지(GND) | 아래로 짧아지는 가로선들 | GND |

회로도에서 가장 헷갈리는 부분이 GND(접지)와 전원입니다. 회로도에서는 모든 GND 기호가 사실 같은 한 지점이라고 생각하면 됩니다. 선을 일일이 잇지 않고 GND 기호를 여기저기 찍어두면, 그것들이 모두 연결되어 있다는 뜻입니다. 전원(3.3V 같은)도 마찬가지로 같은 라벨끼리 연결된 것으로 봅니다. 이 약속을 알면 복잡해 보이는 도면도 훨씬 쉽게 읽힙니다.

첫 회로 실습 — 버튼으로 LED 켜기

지금까지 배운 것을 하나로 묶어 보겠습니다. "버튼을 누르면 LED가 켜지는" 간단한 회로입니다. FingerScore의 입력-반응 흐름을 가장 작게 줄인 형태이기도 합니다. 부품은 MCU, 버튼(SW1), LED(LED1), 전류 제한 저항(R1), 풀업은 MCU 내부 기능을 씁니다.

버튼으로 LED 켜기 회로

3.3V ---------------------+

|

[ R2 270옴 ]

|

LED1 (긴 다리 = +)

|

GPIO4 ---- MCU (출력)

GPIO2 ---- MCU (입력, 내부 풀업)

|

SW1 (버튼)

|

GND

R2 : LED 전류 제한 저항

LED1 : 표시용 LED

SW1 : 입력 버튼

GPIO2: 버튼 입력 핀 (내부 풀업)

GPIO4: LED 제어 핀 (출력)

동작 코드는 의사 코드로 다음과 같습니다.

// 버튼 입력으로 LED 제어

void setup() {

pinMode(BUTTON_PIN, INPUT_PULLUP); // 내부 풀업: 평소 HIGH

pinMode(LED_PIN, OUTPUT);

}

void loop() {

int pressed = (digitalRead(BUTTON_PIN) == LOW); // 눌리면 LOW

if (pressed) {

digitalWrite(LED_PIN, HIGH); // LED 켜기

} else {

digitalWrite(LED_PIN, LOW); // LED 끄기

}

}

이 작은 회로 하나에 이 글의 핵심이 거의 다 담겨 있습니다. GPIO 입력(버튼), 내부 풀업(플로팅 방지), GPIO 출력(LED), 전류 제한 저항(과전류 방지). 이 패턴을 손으로 직접 한 번 만들어 보면 나머지는 응용일 뿐입니다.

초보자가 자주 하는 실수

마지막으로 입문자가 거의 반드시 한 번씩 겪는 실수들을 모아두겠습니다. 미리 알아두면 디버깅 시간을 크게 줄일 수 있습니다.

- 전류 제한 저항을 빼먹는다. LED나 칩 핀을 전원에 직접 연결해 과전류로 태웁니다. 출력에는 항상 저항을 한 번 더 의심하세요.

- GND를 공통으로 묶지 않는다. 여러 부품이 같은 GND를 공유하지 않으면 신호 기준이 어긋나 엉뚱하게 동작합니다. 모든 부품의 GND는 한 점으로 모여야 합니다.

- 로직 레벨을 섞는다. 5V 신호를 3.3V 핀에 넣어 칩을 망가뜨립니다. 부품의 동작 전압을 통일하거나 레벨 시프터를 쓰세요.

- 디커플링 커패시터를 빼먹는다. 칩이 가끔 이유 없이 리셋됩니다. 칩 전원 핀 옆에 0.1uF을 붙이는 것을 습관화하세요.

- LED나 다이오드의 극성을 거꾸로 끼운다. 켜지지 않습니다. 긴 다리가 플러스입니다.

- 핀의 전류 한계를 무시한다. 모터처럼 큰 부하를 GPIO로 직접 구동해 핀을 태웁니다. 큰 부하는 트랜지스터를 거치세요.

- 브레드보드 배선을 잘못 안다. 브레드보드의 가로줄과 세로줄이 어떻게 연결되는지 헷갈려 회로가 끊깁니다. 멀티미터의 도통 확인으로 점검하세요.

이 목록만 체크해도 처음 만드는 회로의 실패 절반은 막을 수 있습니다.

마치며 — 다음 글 예고

이번 글에서는 FingerScore 링을 만들기 위한 전자공학의 기초 언어를 익혔습니다. 전압과 전류와 저항, 옴의 법칙, LED 전류 계산, 풀업/풀다운 저항, 커패시터, 전압 분배, 디지털과 아날로그, GPIO와 로직 레벨, I2C/SPI/UART, ADC, 그리고 멀티미터와 오실로스코프 같은 측정 도구까지 한 바퀴 돌았습니다. 회로도 읽는 법과 버튼-LED 실습으로 마무리하며, 추상적이던 부품들이 조금은 손에 잡히는 대상이 되었기를 바랍니다.

다음 글에서는 한 단계 올라가, 이 회로 위에서 실제로 동작하는 MCU 펌웨어를 다룹니다. IMU 센서에서 가속도와 각속도 데이터를 I2C로 읽어 들이고, 그 신호를 다듬어 "득점 제스처"를 인식하는 기초 알고리즘을 구현합니다. 하드웨어에 처음으로 소프트웨어의 숨을 불어넣는 단계입니다. 이번 글에서 배운 GPIO, I2C, 디지털 신호 개념이 그대로 코드가 되어 살아나는 과정을 함께 따라가 보겠습니다.

참고 자료

- SparkFun Electronics 학습 자료: https://learn.sparkfun.com

- Adafruit Learning System: https://learn.adafruit.com

- All About Circuits 교재: https://www.allaboutcircuits.com

- Texas Instruments 기술 문서: https://www.ti.com

- Nordic Semiconductor (BLE 칩 제조사): https://www.nordicsemi.com

- 옴의 법칙 (Wikipedia): https://en.wikipedia.org/wiki/Ohm%27s_law

- I2C 버스 설명 (Wikipedia): https://en.wikipedia.org/wiki/I%C2%B2C

현재 단락 (1/246)

FingerScore 시리즈의 첫 글에서 우리는 "라켓 스포츠 점수를 손가락 제스처로 기록하는 BLE 링"이라는 제품의 큰 그림을 그렸습니다. 마이크로컨트롤러(MCU)를 고르고, ...

작성 글자: 0원문 글자: 10,985작성 단락: 0/246