코드 검색

레슨 98-6: 아두이노로 만드는 시소 LED 게임

레슨 98-6: 아두이노로 만드는 시소 LED 게임

시소 LED 프로젝트는 Arduino 프로그래밍에서 가장 중요한 개념 중 하나를 가르쳐 주는 대표적인 초보자 실습입니다. 바로 두 개의 출력이 일정한 리듬에 맞춰 번갈아 켜지도록 만드는 것이죠. LED 두 개, 저항 두 개, 그리고 약간의 점퍼 와이어만 있으면 초록색 LED와 빨간색 LED가 번갈아 켜지면서 놀이터 시소가 오르내리는 움직임을 흉내 내는 회로를 만들 수 있습니다. 단순한 구성이지만, 앞으로 작성하게 될 거의 모든 Arduino 스케치에 등장하는 핵심 구성 요소들 — 핀 정의, 타이밍 상수, 순차적인 digitalWrite() 호출 — 을 소개해 줍니다.

두 개의 LED와 저항을 브레드보드에 올리고 Arduino에 연결한 모습
두 개의 LED와 저항을 브레드보드에 올리고 Arduino에 연결한 모습

시소 패턴은 사실 "하나를 켜고, 끄고, 다른 하나를 켜고, 끄고, 반복"에 불과하기 때문에, 같은 구조를 수십 가지 실용적인 용도로 확장할 수 있습니다. 상상력을 자극할 몇 가지 아이디어를 소개합니다:

  • 교대 표시등 — 제어 패널에서 "안전 / 경고" 상태를 번갈아 보여 주는 한 쌍의 표시등.
  • 철도 건널목 시뮬레이션 — 기차가 다가올 때 두 개의 램프가 번갈아 깜빡이는 모습.
  • 2차선 방향 표지판 — 진입로나 주차장에서 "이쪽으로 가세요 / 저쪽으로 가세요" 화살표를 보여 주는 디스플레이.
  • 명절 장식 — 빨간색과 초록색 LED가 자리를 바꾸며 축제 분위기의 깜빡임 효과를 연출.
  • 학습 기초 — 여기서 익히는 타이밍과 순차 제어 기술은 나중에 신호등, 보행등, 다중 LED 애니메이션에 그대로 활용됩니다.

시소 효과의 작동 원리

LED는 빛을 내는 다이오드이며, 기호는 선을 향하는 삼각형으로 표시됩니다. 평평한 선은 캐소드(음극)이고, 삼각형의 뒷부분은 애노드(양극)입니다. 실제 LED에서는 긴 다리가 애노드이고, 짧고 평평한 면이 있는 다리가 캐소드입니다. 전류는 애노드에서 캐소드로 흐르므로, 애노드는 Arduino 핀 쪽에 연결하고 캐소드는 저항을 거쳐 접지로 연결합니다(영상 02:29 참조).

저항은 중요합니다. 일반적인 소형 LED는 양단에 약 2 V가 걸리고 약 10 mA의 전류가 흐르기를 원합니다. Arduino가 5 V를 공급한다면, 나머지 3 V는 저항이 떨어뜨려야 합니다. 옴의 법칙을 사용하면 R = V / I = 3 V / 0.01 A = 300 Ω입니다. 약 300 Ω에서 1000 Ω 사이의 값이면 모두 작동합니다 — 값이 클수록 LED는 더 어두워질 뿐입니다(영상 03:49 참조).

시소의 경우 두 LED는 동일하게 배선됩니다. 각 애노드는 각자의 Arduino 핀에 연결되고, 각 캐소드는 각자의 저항을 거쳐 공통 접지 레일에 연결됩니다. 둘 사이의 유일한 차이는 어느 핀에 연결되어 있느냐뿐입니다.

하드웨어 및 부품

  • Arduino 보드 1개 (Uno, Nano, Mega 또는 유사 제품)
  • LED 2개 — 빨간색 1개, 초록색 1개 (아무 두 색이나 가능)
  • 저항 2개, 300 Ω ~ 1000 Ω (220 Ω 또는 330 Ω가 흔히 사용됨)
  • 브레드보드 1개
  • 점퍼 와이어 (DuPont 와이어)
  • 프로그래밍 및 전원 공급용 USB 케이블

이게 전부입니다 — 푸시 버튼도, 가변 저항도, 센서도 없습니다. 코드 로직에만 온전히 집중할 수 있도록 의도적으로 가장 최소한의 부품 목록을 구성했습니다.

배선 가이드

두 개의 LED 시소를 위한 Arduino 회로도
두 개의 LED 시소를 위한 Arduino 회로도
두 개의 LED 시소를 위한 Arduino 배선
두 개의 LED 시소를 위한 Arduino 배선

배선은 대칭적이고 따라 하기 쉽습니다. 두 LED를 브레드보드에 꽂습니다. 초록색 LED의 애노드(긴 다리)를 Arduino 2번 핀에 연결하고, 빨간색 LED의 애노드를 Arduino 3번 핀에 연결합니다. 각 캐소드(짧은 다리)는 각자의 저항 한쪽 끝에 연결하고, 두 저항의 다른 쪽 끝은 Arduino의 GND 핀으로 이어지는 공통 레일에 연결합니다(영상 27:45 참조).

두 LED가 같은 접지 레일을 공유하기 때문에, 브레드보드에서 Arduino로 돌아가는 접지 와이어는 하나만 있으면 됩니다. 두 개의 신호 와이어 — 하나는 2번 핀, 하나는 3번 핀 — 만이 두 LED 사이에서 달라지는 연결입니다.

코드 설명

스케치는 의도적으로 짧게 작성되어 모든 줄이 의미를 갖습니다. 실제로 조정하고 싶을 만한 부분은 다음과 같습니다:

핀 정의

const int greenLEDPin = 2;//초록색 LED를 위한 핀 정의
const int redLEDPin = 3;//빨간색 LED를 위한 핀 정의

이 두 상수는 LED가 어느 핀에 연결되어 있는지 Arduino에 알려 줍니다. LED를 다른 핀 — 예를 들어 8번 핀과 9번 핀 — 에 배선했다면, 이곳만 바꾸면 됩니다. const 키워드는 프로그램이 실행되는 동안 값이 고정되며 나중에 실수로 덮어쓸 수 없음을 의미합니다.

타이밍 상수

const int ON_TIME = 500;

이 단일 값은 각 LED가 켜져 있는 시간을 밀리초 단위로 제어합니다. 기본값인 500은 각 LED가 0.5초 동안 켜져 있다는 의미이므로, 녹색에서 빨간색으로 이어지는 전체 주기는 1초가 걸립니다. 빠른 깜빡임을 원하면 200으로 낮추고, LED당 1초의 느리고 의도적인 리듬을 원하면 1000으로 높이세요(동영상 30:17). 두 LED가 이 상수를 공유하기 때문에 항상 동기화된 상태를 유지합니다 — 시소는 균형을 유지합니다.

설정

setup() 안에서 두 핀은 pinMode()로 출력으로 선언되고, 시리얼 모니터는 9600 보드레이트로 시작되어 LED 상태 메시지가 스크롤되는 것을 볼 수 있습니다. 이는 보드에 전원이 공급될 때 한 번 실행됩니다.

루프

loop() 함수는 시소가 일어나는 곳입니다. 이 함수는 네 가지 동작을 순서대로 수행합니다: 녹색 LED를 켜고, ON_TIME밀리초 동안 기다린 다음, 끄고, 그런 다음 빨간색 LED에 대해 동일하게 수행합니다. 루프가 끝에 도달하면 자동으로 처음부터 다시 시작합니다 — 이것이 전체 "시소" 동작입니다. 패턴이 순전히 순차적이기 때문에 상태 변수도, 확인할 조건도 없습니다.

실시간 프로젝트 및 데모

코드를 업로드하면 녹색 LED가 0.5초 동안 켜지고, 그다음 빨간색 LED, 그다음 다시 녹색이 끝없이 반복되는 것을 볼 수 있습니다. 시리얼 모니터를 열면(도구 → 시리얼 모니터, 또는 Ctrl+Shift+M) 패턴이 실행될 때 "Green LED ON"과 "Red LED ON"이 출력되며, 이는 타이밍이 설정한 것과 일치하는지 확인하는 편리한 방법입니다.

ON_TIME200으로 변경하고 다시 업로드해 보세요 — LED가 눈에 띄게 더 빠르게 교체됩니다. 1000으로 설정하면 시소는 느리고 의도적인 교대가 됩니다. 또한 Arduino를 USB에서 분리하고 배터리나 5 V 어댑터로 전원을 공급할 수도 있습니다. 스케치는 이미 보드의 메모리에 저장되어 있으므로 동일하게 실행됩니다.

이 동영상의 관련 프로젝트

챕터

  • [00:00] 10가지 Arduino LED 프로젝트 개요
  • [01:22] Arduino 단계별 과정 소개
  • [02:29] LED 이해하기: 기호, 애노드, 캐소드
  • [03:49] 옴의 법칙으로 LED 직렬 저항 계산하기
  • [27:32] 시소 LED 프로젝트 소개
  • [27:45] 시소 프로젝트의 배선도
  • [28:28] 시소 코드 설명
  • [30:06] 다양한 타이밍으로 시소 시연하기
  • [30:47] 워킹 라이트 프로젝트 개요
  • [36:41] 푸시 버튼으로 제어되는 워킹 라이트
  • [42:25] 포텐셔미터를 사용한 LED 전압 바 미터
  • [49:25] Arduino 신호등 프로젝트

이미지

Arduino wiring for two LEDs see saw
Arduino wiring for two LEDs see saw
Arduino schematic for two LEDs see saw
Arduino schematic for two LEDs see saw
330_ohm_resistor
330_ohm_resistor
저항이 있는 두 개의 LED가 브레드보드에서 Arduino에 연결된 모습
저항이 있는 두 개의 LED가 브레드보드에서 Arduino에 연결된 모습
938-Lessson 98-LED-6: Arduino code two LED, See-saw
언어: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

파일📁

아두이노 라이브러리 (zip)

사용자 매뉴얼