RGB LED 사이드퀘스트 💡

발행: (2026년 1월 6일 오전 08:00 GMT+9)
7 min read
원문: Dev.to

Source: Dev.to

Jennifer Davis

다시 돌아온 나의 여정 From Dust to Droid Dreams

드로이드를 만드는 주요 경로는 장기적인 미션이지만, 때때로 “신경계”의 기본을 마스터하기 위해 사이드 퀘스트를 해야 할 때가 있다.
오늘의 미션: 멀티‑LED 색상 블렌딩과 시리얼 디버깅의 숨겨진 함정.

RGB LED가 있다는 것을 발견하고, 기존의 빨강, 파랑, 초록 LED를 재배선하면서 노란 LED는 그대로 두기로 했다. 목표는 펄스‑폭 변조(PWM)를 사용해 빨강, 초록, 파랑 사이에 부드러운 전환을 만들고, 빨강과 초록 채널이 겹칠 때 빛나는 전용 노란 LED를 구현하는 것이었다.

“까다로운” 하드웨어

첫 번째 사이드‑퀘스트 교훈: 물리 세계는 지저분합니다.
RGB LED 설정은 매우 까다롭습니다—배선이 쉽게 교차하고, 신호를 깨끗하게 유지하고 부품을 안전하게 보호하려면 저항을 매우 신중하게 적용해야 합니다.

LED surrounded by jumper wires and resistors

“지연” 몬스터와 마주하기

LED를 동기화한 뒤, 실시간으로 값이 변하는 모습을 모니터링하고 싶었습니다. 하지만 예상과 다르게 동작했습니다. 갑자기 동기화가 사라지고—노란색 LED가 끊기기 시작했으며 제때 켜지지 않았습니다.

문제 코드

void updateLEDs() {
  analogWrite(RED, redValue);
  analogWrite(GREEN, greenValue);
  analogWrite(BLUE, blueValue);

  // Serial output inside the main update loop
  Serial.print("R: "); Serial.print(redValue);
  Serial.print(" | G: "); Serial.print(greenValue);
  Serial.print(" | B: "); Serial.print(blueValue);
  Serial.print(" | Y-LED: "); Serial.print(yellowBright);
  // ... this was slowing everything down!
}

기본 9600 baud 설정에서는 Serial 통신이 비교적 느립니다. 코드가 이 print 문들에 도달할 때마다 데이터를 전송하기 위해 루프가 일시 정지됩니다. 이로 인해 PWM 신호에 “끊김”이 발생하고 LED가 깜박이며 타이밍이 “어색”하게 느껴집니다.

최적화 수정

지연을 해결하고 부드러운 페이드를 되찾기 위해 두 가지 핵심 수정을 적용했습니다:

  1. 보드레이트 증가9600에서 115200으로 속도를 높였습니다(코드와 IDE 설정 모두에서 업데이트).
  2. 시간 기반 출력(논블로킹) – 매 루프마다 출력하는 대신 타이머(millis())를 사용해 100 ms마다 Serial 출력을 업데이트했습니다. 이렇게 하면 프로세서가 LED 펄스에 집중할 수 있습니다.
void updateLEDs() {
  analogWrite(RED, redValue);
  analogWrite(GREEN, greenValue);
  analogWrite(BLUE, blueValue);

  int yellowBright = (redValue  100) {
    Serial.print("R:"); Serial.print(redValue);
    Serial.print(" G:"); Serial.print(greenValue);
    Serial.print(" B:"); Serial.print(blueValue);
    // Added a small offset (+5) so the yellow line is visible on the plotter
    Serial.print(" Y-LED:"); Serial.println(yellowBright + 5);
    lastPrintTime = millis();
  }
}

새로운 도구 사용 해제: 시리얼 플롯터

저는 Arduino IDE의 시리얼 플롯터(Tools > Serial Plotter)를 가지고도 약간의 시간을 보냈습니다. 색상 변수들이 파동처럼 진동하는 모습을 시각화하는 데 정말 훌륭한 도구입니다.

Yellow LED blip on the Serial Plotter graph

노란 선이 제대로 표시되도록 몇 차례 반복해야 했습니다. 값이 빨강이나 초록 선과 동일했기 때문에 그 뒤에 가려졌었습니다. print 문에 작은 오프셋(+5)을 추가하니 마침내 노란 선이 보이게 되었습니다!

Yellow LED now visible on the Serial Plotter graph

작은 미스터리: 플롯터에서 선 색상이 제가 출력하는 RGB 색상과 실제로 일치하도록 만드는 방법을 아직 찾지 못했습니다. IDE가 변수의 순서에 따라 자동으로 색상을 할당하는 것 같습니다. 혹시 이를 해결할 수 있는 해킹 방법이 있다면 댓글로 알려 주세요! 색상이 일치하지 않더라도 실시간으로 파동이 겹치는 모습을 보는 것만으로도 로직 디버깅에 큰 도움이 됩니다.

Droid 빌드를 위한 주요 요점

  • Communication Overhead: 마이크로컨트롤러가 얼마나 많은 “대화”를 하고 있는지 고려하세요—그 대화가 “생각” 속도를 늦추고 있을 수 있습니다.
  • Visualization over Text: 데이터는 스크롤되는 숫자 벽보다 파형 형태로 보는 것이 훨씬 이해하기 쉽습니다.
  • Timing: (여기에 메모를 계속 작성하세요…)

모든 것

delay()에만 기본값을 두지 마세요. millis()는 멀티태스킹을 가능하게 하고, delay()는 사실상 Arduino Uno를 대기 상태로 만듭니다.

즐거운 제작 되시고, 여러분의 LED가 언제나 부드럽게 블렌딩되길 바랍니다!

Back to Blog

관련 글

더 보기 »

기술은 구원자가 아니라 촉진자다

왜 사고의 명확성이 사용하는 도구보다 더 중요한가? Technology는 종종 마법 스위치처럼 취급된다—켜기만 하면 모든 것이 개선된다. 새로운 software, ...

에이전틱 코딩에 입문하기

Copilot Agent와의 경험 나는 주로 GitHub Copilot을 사용해 인라인 편집과 PR 리뷰를 수행했으며, 대부분의 사고는 내 머리로 했습니다. 최근 나는 t...