시작하기
전자공학 기초
이 페이지의 내용
  1. 디지털 입출력
  2. 아날로그 신호와 ADC
  3. LED 저항 계산
  4. 풀업 · 풀다운 저항
  5. 3.3V 와 5V 변환
  6. 시리얼 통신 방식
  7. 모터와 릴레이
  8. 멀티 쓰레드와 실행 주기

전자공학 기초

장치를 배선할 때 알아 두어야 하는 내용을 정리했습니다.

디지털 입출력

디지털 회로는 스위치가 닫히면 전류가 흐르고 열리면 흐르지 않습니다. 닫힌 상태를 HIGH, 열린 상태를 LOW 라고 합니다. 디지털 입력은 외부 스위치의 열림과 닫힘을 컨트롤러가 감지하는 것이고, 디지털 출력은 컨트롤러가 그 열림과 닫힘을 제어하는 것입니다.

디지털 입력 회로도. 외부 스위치가 닫혀 전류가 흐르는지를 컨트롤러가 판단한다
디지털 입력: 컨트롤러는 외부 스위치를 통해 전류가 흐르는지를 판단합니다.
디지털 출력 회로도. 컨트롤러가 내부 스위치를 작동시켜 부하에 전류를 흘린다
디지털 출력: 컨트롤러가 스위치를 작동시켜 전류를 흘리거나 끊습니다.
라즈베리파이에 푸시버튼(디지털 입력)과 저항을 단 LED(디지털 출력)를 연결한 배선도
라즈베리파이 예: 푸시버튼을 누르면 전류가 흘러 입력이 HIGH 로 인식되고, 출력 핀의 내부 스위치를 닫으면 LED 가 켜집니다.

아날로그 신호와 ADC

빛의 밝기, 소리의 크기처럼 연속적으로 변하는 값은 아날로그 신호입니다. 컨트롤러는 디지털 신호만 처리하므로 아날로그 신호를 읽으려면 ADC(Analog-Digital Converter)가, 내보내려면 DAC 가 필요합니다. 라즈베리파이에는 아날로그 입력 핀이 없으므로 ADS1115 와 같은 ADC 장치를 I/O 장치로 등록하여 사용합니다.

디지털 신호는 전기가 흐르는 상태(ON, 1, 참)와 흐르지 않는 상태(OFF, 0, 거짓) 두 가지로만 표현됩니다. 전등 스위치, 컴퓨터의 데이터 처리가 디지털의 예이고, 빛의 밝기, 소리의 크기, 바람의 세기가 아날로그의 예입니다. 예를 들어 마이크에 들어온 소리(아날로그 전압)는 ADC 를 거쳐 디지털 데이터로 바뀐 뒤 처리되고, 다시 DAC 를 거쳐 아날로그 전압으로 바뀌어 스피커에서 소리가 됩니다. 디지털 데이터의 단위는 비트와 바이트를 참고합니다.

마이크의 아날로그 신호가 ADC 로 디지털 데이터가 되고 처리 후 DAC 를 거쳐 스피커로 출력되는 흐름도
소리 신호의 흐름: 아날로그 → ADC → 디지털 처리 → DAC → 아날로그

LED 저항 계산

공급 전압이 LED 의 순방향 전압보다 높으면 반드시 저항으로 전류를 제한해야 합니다. 저항이 없으면 정격을 크게 넘는 전류가 흘러 LED 가 손상됩니다. 저항 값은 옴의 법칙으로 구합니다.

R = (공급 전압 - LED 순방향 전압) / 전류

예를 들어 순방향 전압 2V 인 빨간색 LED 를 3.3V GPIO 에 연결할 때, 라즈베리파이의 핀 출력 한도(약 8mA)를 고려하여 전류를 5mA 로 잡으면 약 260Ω 이 나옵니다. 시중에서 흔한 220Ω 을 쓰면 전류가 약 5.9mA 로 안전한 범위에 들어옵니다. 저항은 LED 의 어느 극에 연결해도 무방합니다.

LED 의 순방향 전압(forward voltage)과 순방향 전류(forward current)는 데이터시트에 표시되어 있습니다. 예를 들어 순방향 전압 2V, 전류 20mA 인 빨간색 LED 를 옴의 법칙(V = I × R)으로 계산하면 (3.3V − 2V) / 0.02A = 65Ω 이 나오지만, 라즈베리파이 GPIO 의 출력 한도(핀당 약 8mA, 전체 50mA)를 넘으므로 위와 같이 5mA 로 다시 계산합니다. 정격 20mA 보다 작은 전류가 흐르므로 상대적으로 어둡지만 일반적으로 사용할 수 있는 밝기입니다.

라즈베리파이 GPIO 핀에 저항과 빨간색 LED 를 브레드보드로 연결한 배선도
라즈베리파이에 저항과 LED 를 연결한 예
색상별 LED 순방향 전압과 권장 저항

데이터시트가 없을 때 참고할 수 있는 일반적인 값입니다. 실제 값은 제품마다 다릅니다.

색상순방향 전압일반 전류
빨간색1.8~2.3V20mA
주황색2.0~2.3V30mA
노란색2.0~2.8V20mA
초록색(연두 계열)1.8~2.3V20mA
초록색(순녹색)3.0~3.6V20mA
파란색3.4~3.8V20mA
분홍색3.4~3.8V20mA
흰색3.4~4.0V20mA

위 계산 방법으로 구한 라즈베리파이(3.3V) 기준의 대략적인 저항 값은 다음과 같습니다.

색상저항
빨간색220Ω
노란색180Ω
초록색220Ω
흰색100Ω

풀업 · 풀다운 저항

푸시버튼을 누르지 않은 상태에서 입력 핀이 전원과 접지 어느 쪽에도 연결되지 않으면 HIGH 도 LOW 도 아닌 플로팅 상태가 됩니다. 이 상태에서는 노이즈나 정전기로 값이 임의로 바뀌어 제어할 수 없습니다. 풀업 저항은 누르지 않은 상태를 HIGH 로, 풀다운 저항은 누르지 않은 상태를 LOW 로 고정하여 이 문제를 없앱니다.

입력 핀은 전원(VCC)에 연결되면 HIGH, GND 에 연결되면 LOW 로 인식됩니다. 아래 왼쪽 그림처럼 푸시버튼을 GND 에만 연결하면, 누른 상태에서는 입력 핀이 GND 와 연결되어 0V(LOW)가 되지만 누르지 않은 상태에서는 전압을 알 수 없는 플로팅 상태가 됩니다.

푸시버튼을 GND 에만 연결한 회로. 누르지 않으면 입력 핀 전압을 알 수 없고(? V) 누르면 0V
풀업·풀다운 저항이 없는 회로: 누르지 않은 상태의 입력 전압을 알 수 없습니다.

풀업 저항을 입력 핀과 VCC 사이에 연결하면, 누르지 않은 상태에서는 전류가 입력 핀으로 흘러 HIGH 가 되고, 누른 상태에서는 전류가 GND 로 흘러 LOW 가 됩니다.

입력 핀과 VCC 사이에 풀업 저항을 연결한 회로. 누르지 않으면 HIGH, 누르면 LOW
풀업 저항 회로

입력 핀의 임피던스(100kΩ~1MΩ)는 풀업 저항보다 매우 크므로 두 저항이 직렬로 연결된 것과 같고, 풀업 저항에서는 전압 강하가 거의 일어나지 않습니다. 따라서 입력 핀에는 VCC 에 가까운 전압이 걸립니다.

풀업 저항과 입력 핀 임피던스가 직렬로 연결된 등가 회로. 풀업 저항에서 전압 강하가 거의 없음
풀업 저항과 입력 임피던스의 관계

풀다운 저항은 입력 핀과 GND 사이에 연결하며, 누르지 않은 상태를 LOW 로 고정하고 누른 상태에서 GND 로 과도한 전류가 흐르는 것(단락)을 막습니다.

입력 핀과 GND 사이에 풀다운 저항을 연결한 회로. 누르지 않으면 LOW, 누르면 HIGH
풀다운 저항 회로
알아두기 라즈베리파이 등의 GPIO 에는 소프트웨어로 켤 수 있는 내부 풀업·풀다운 저항이 있고, 그 크기가 푸시버튼 같은 입력 장치에 적합하므로 외부 저항을 따로 달지 않아도 됩니다. I/O장치 → 디지털 읽기/쓰기의 초기 명령(INIT) 에서 설정합니다. 이 설정은 리눅스 커널 5.10 이상(라즈베리파이 OS, 우분투 22 이상, 데비안 11 이상)에서만 동작합니다. 필요하면 외부 저항을 추가하여 사용할 수도 있습니다.

3.3V 와 5V 변환

라즈베리파이 GPIO 의 동작 전압은 3.3V 입니다. 5V 전용 센서나 아두이노 우노와 같은 5V 장치를 연결할 때는 전압을 변환해야 하며, 변환 없이 5V 를 연결하면 보드가 손상됩니다.

  • 분압기: 저항 두 개로 전압을 낮춥니다. 5V 를 3.3V 로 낮추려면 예를 들어 R1 을 1kΩ, R2 를 2kΩ 으로 두어 출력이 약 3.3V 가 되도록 합니다. HC-SR04 초음파 센서의 Echo 핀처럼 5V 를 출력하는 신호를 받을 때 사용합니다.
  • 로직 레벨 컨버터: 양방향 변환과 여러 채널을 지원하는 모듈입니다. 통신선처럼 양방향 신호에는 이 방법을 사용합니다. 높은 전압 쪽을 HV, 낮은 전압 쪽을 LV 에 연결합니다.

3.3V 장치에는 라즈베리파이, 젯슨 나노, 아두이노 듀에·제로·나노 33 IoT 등이, 5V 장치에는 아두이노 우노·나노·메가·레오나르도 등이 해당합니다. 전압 변환은 다음과 같은 경우에 필요합니다.

  • 3.3V 를 출력하는 센서나 모듈을 5V 장치에 연결하는 경우
  • 5V 를 출력하는 센서나 모듈을 3.3V 장치에 연결하는 경우
  • 3.3V 장치와 5V 장치가 서로 통신하는 경우

분압기의 출력 전압은 다음 식으로 구합니다. R1 은 입력 쪽, R2 는 GND 쪽 저항입니다.

Vout = R2 / (R1 + R2) × Vin
HC-SR04 초음파 센서의 Echo 핀 출력을 저항 두 개로 분압하여 라즈베리파이 GPIO 에 연결한 배선도
HC-SR04 의 Echo 핀(5V 출력)을 분압기로 3.3V 로 낮추어 연결한 예

로직 레벨 컨버터에는 한 방향으로만 변환하는 단방향(Uni-direction) 제품과 양쪽 방향으로 변환하는 양방향(Bi-direction) 제품이 있습니다. UART 처럼 송수신선이 있는 통신에는 양방향 제품을 사용합니다.

아두이노 우노와 라즈베리파이의 UART 를 양방향 로직 레벨 컨버터로 연결한 배선도. 5V 쪽은 HV, 3.3V 쪽은 LV
아두이노 우노(5V)와 라즈베리파이(3.3V)의 UART 를 양방향 로직 레벨 컨버터로 연결한 예

시리얼 통신 방식

UART(Universal Asynchronous Receiver/Transmitter)는 데이터를 직렬(serial)로 주고받는 하드웨어로, 흔히 시리얼 통신이라고 하면 UART 를 사용한 통신을 말합니다. TX(송신), RX(수신) 두 핀으로 1:1 통신하며, CPU 의 병렬(parallel) 데이터를 직렬 데이터로 바꾸어 보내고 받은 직렬 데이터를 다시 병렬 데이터로 바꿉니다.

UART 는 비동기(asynchronous) 통신이므로 두 기기의 통신 속도(Baud rate), 데이터 비트 수, 패리티 비트 종류, 정지 비트 수를 서로 같게 맞춰야 정상적으로 통신합니다. 모드버스 RTU 와 사용자 정의 통신(시리얼)의 통신 설정 항목이 이 값들입니다.

방식특징
TTL UART보드의 UART 핀을 직접 연결합니다. 거리가 짧고 1:1 통신에 적합합니다.
RS-232PC 의 표준 시리얼 규격입니다. 1:1 통신이며 TTL 과 전압 규격이 달라 변환 모듈이 필요합니다.
RS-422차동 신호로 장거리 전송에 유리합니다. 1:N 단방향 구성에 사용합니다.
RS-485차동 신호로 장거리에 강하고 여러 장치를 한 선에 연결할 수 있습니다. 산업용 모드버스 RTU 에서 널리 쓰입니다.
TTL 레벨

TTL(Transistor-Transistor Logic) 레벨은 HIGH(ON, 1)와 LOW(OFF, 0)로 인식하는 전압 범위를 정한 방식의 하나입니다. 5V TTL 레벨은 다음과 같습니다.

구분입력출력
HIGH (ON, 1)2~5V2.7~5V
LOW (OFF, 0)0~0.8V0~0.4V

UART 는 TTL 레벨을 사용합니다. 전압 레벨이 낮고 노이즈 마진(입력과 출력 전압 기준의 차이)이 작아 노이즈에 약하고 통신 거리에 제약이 있으므로, 주로 기기 내부나 짧은 거리의 통신에 사용합니다.

RS-232, RS-422, RS-485

UART 의 단점을 보완하여 노이즈에 강하고 더 먼 거리까지 통신할 수 있도록 한 규격입니다. 이 규격들은 하드웨어와 전압 레벨에 관한 것이며, 통신 프로토콜은 UART 를 그대로 사용합니다.

항목RS-232RS-422RS-485
동작 방식Single-EndedDifferential(차동)Differential(차동)
네트워크1:11:N (Multi-drop)1:N (Multi-drop)
배선TX, RX, GND 3선. 양쪽의 TX 와 RX 를 교차 연결TX+, TX-, RX+, RX- 4선2선식 또는 4선식
최대 통신 거리약 15m약 1.2km약 1.2km
최대 통신 속도20kb/s10Mb/s10Mb/s
최대 출력 전압±25V-0.25V ~ +6V-7V ~ +12V
최대 입력 전압±15V-7V ~ +7V-7V ~ +12V
장치 구성2대마스터 1대, 슬레이브 최대 10대최대 32대. 어느 장치나 마스터가 될 수 있음
  • RS-232: 더 먼 거리까지 통신하기 위해 ±12V 전압 레벨을 사용합니다.
  • RS-422: + 선과 - 선에 같은 노이즈가 실리면 서로 상쇄되는 차동 방식을 사용하여 노이즈에 강합니다. 다만 마스터가 1대로 고정되므로 완전한 Multi-drop 구성은 아닙니다.
  • RS-485: RS-422 와 비슷하지만 네트워크의 어떤 장치든 마스터 또는 슬레이브가 될 수 있습니다. 장거리 통신에서는 노이즈를 줄이기 위해 통신선 양 끝에 종단 저항(termination resistor)을 연결하기도 합니다.
알아두기 마스터는 다른 장치에 명령을 내리는 장치이고, 슬레이브는 마스터의 명령을 받아 처리하거나 응답하는 장치입니다.

모터와 릴레이

DC 모터는 전압으로 속도를, 서보 모터는 PWM 신호로 각도를, 스텝 모터는 펄스 수로 회전량을 제어합니다. 세 종류 모두 I/O 장치로 지원합니다 (7부).

  • DC 모터: 기동 토크가 크고 출력 토크가 입력 전류에 비례합니다. 극성을 반대로 연결하면 반대 방향으로 회전합니다. 모터 드라이버를 사용하면 정회전·역회전과 PWM 신호를 이용한 속도 제어가 가능합니다.
  • 서보 모터: 흔히 RC 서보 모터라고 하며, PWM 신호의 펄스 폭에 따라 0~180도 사이의 각도로 회전하여 그 위치를 유지합니다. 연속 회전이나 속도 제어에는 적합하지 않으며, 산업용 서보 모터와는 다른 종류입니다.
  • 스텝 모터: 입력 펄스 하나마다 한 스텝씩 회전합니다. 분해능이 높아 3D 프린터나 생산 설비처럼 정밀한 위치 제어와 속도 제어에 사용합니다. A4988 과 같은 스텝 모터 드라이버를 사용하며, 스텝 수만큼의 펄스를 정확한 타이밍으로 출력해야 합니다.
서보 모터 제어 신호 타이밍도. 주기 20ms(50Hz)에서 펄스 폭 1ms 는 0도, 1.5ms 는 90도, 2ms 는 180도
서보 모터의 PWM 신호: 주기 20ms(50Hz)에서 펄스 폭 1ms 가 0도, 1.5ms 가 90도, 2ms 가 180도입니다.

릴레이는 전기 신호로 작동하는 자동 스위치로, 전자 계전기라고도 합니다. 손으로 스위치를 누르는 대신 약한 전기 신호로 접점을 여닫습니다. 컨트롤러의 출력은 아두이노가 DC 5V 최대 40mA, 라즈베리파이가 DC 3.3V 핀당 약 8mA 이므로 큰 부하는 릴레이를 거쳐 제어합니다. 릴레이는 다음 두 종류로 나뉩니다.

  • 유접점 릴레이: 코일에 약한 전류를 흘리면 자기력으로 접점이 닫히고, 전류가 끊기면 스프링의 힘으로 접점이 열립니다.
  • 무접점 릴레이(SSR, Solid State Relay): 기계적인 구동부 없이 반도체로 스위칭합니다. 스위칭 속도가 빠르고 수명이 깁니다.
주의 모터는 소모 전류가 커서 보드의 전원 핀으로 직접 구동할 수 없습니다. 반드시 별도의 외부 전원과 모터 드라이버를 사용합니다. 마찬가지로 컨트롤러의 출력(3.3V, 약 8mA)으로는 가정용 AC 기기나 대전류 장치를 직접 켤 수 없으므로, 릴레이 모듈을 사용해 컨트롤러 신호로 별도 전원 회로를 여닫는 방식으로 구성합니다.

멀티 쓰레드와 실행 주기

쓰레드는 프로그램 안에서 독립적으로 실행되는 작업 단위이며, 하나의 프로그램이 여러 쓰레드로 여러 작업을 동시에 처리하는 방식을 멀티 쓰레드라고 합니다. Grablo 의 로직도 각각 독립된 쓰레드로 실행됩니다.

CPU 코어 하나는 한 번에 하나의 작업만 실행하므로, 코어 수보다 많은 쓰레드는 운영체제가 번갈아 가며 CPU 에 할당합니다. 이를 스케줄링(scheduling)이라 하고, 실행 중인 작업을 바꾸는 것을 컨텍스트 스위칭(context switching)이라 합니다. 이 때문에 각 쓰레드의 실행 시간은 CPU 성능과 점유율에 따라 달라지며, 예를 들어 100밀리초마다 실행되도록 설정한 로직의 실제 실행 주기는 100밀리초를 넘을 수 있습니다. 더 정밀한 타이밍이 필요한 제어에는 실시간 운영체제(RTOS)가 필요합니다. 실행 주기 설정은 4부를 참고합니다.