자바스크립트(JavaScript)로 배우는 피지컬 컴퓨팅(Physical Computing) — (2/8) LED 깜빡이기

Minkyu Lee
7 min readMay 13, 2021

--

이번 강좌에서는 디지털 출력(Digital Output)을 이용하여 외부에 별도의 LED를 연결하고 깜빡여 보도록 하자.

강좌 전체 목차

준비물

  • 라즈베리파이 피코 — 1개 (헤더핀 납땜 필요, 혹은 납땜된 것을 구매)
  • 브레드보드(Breadboard) — 1개
  • LED (5mm)— 1개
  • 저항 (330Ω) — 1개
  • 점퍼 와이어(Jumper wire) — 여러 개(M-M 타입)
LED 깜빡이기 준비물

부품들은 웬만하면 네이버 검색 또는 아래 상점들에서 거의 다 구매가 가능하다. 필요한 기본적인 부품들이 거의 포함되어 있는 키트(kit) 같은것을 구매하는 것도 나쁘지 않다.

이 글에서는 부품에 대해 너무 깊이 설명하지 않는다. 실습을 위해 간략한 이해 정도만 하고 넘어가도록한다.

브레드보드(Breadboard)는 빵판으로도 불리는데 이것을 사용하면 납땜을 하지 않고 점퍼 와이어를 손으로 꽂아서 빠르게 회로를 구성해 볼 수 있다. 브레드보드에는 부품이나 점퍼와이어를 꽂을 수 있는 많은 구멍들이 있는데, 이 구멍들은 아래 그림과 같이 연결되어 있다는 것만 기억하자.

브레드보드 (초록색 선과 같이 내부적으로 연결되어 있음)

LED(Light-Emitting Diode)는 빛을 내주는 부품이다. 여러가지 색상, 크기 등 매우 다양한 종류가 있다. 아래 그림과 같이 어노드(anode) 단자에 양극(+)을, 캐소드(cathode) 단자에 음극(-)을 연결하면 빛이 난다. LED 에는 적절한 전류를 보내주어야 하는데, 너무 많은 전류를 보내주면 지나치게 열이 발생하거나 오래가지 않아 망가지게 되고, 너무 적은 전류를 보내주면 빛이 너무 어둡게 된다.

LED 단자

저항(Resistor)은 전류를 흐름을 방해하여 적절한 양의 전류를 흘려보낼 수 있도록 하는 부품이다. 적절한 전류를 조절하기 위해 저항 값을 계산하고 그에 맞는 저항을 사용해야 한다. 저항의 몸에 여러 가지 색상의 띠가 있는 것을 보았을 것이다. 이것들이 저항값을 표시하는 것인데 여기서는 330Ω을 사용할 것이고 색상은 “오렌지색-오렌지색-갈색-금색” 이다. (반드시 330Ω이 아니더라도 비슷한 값을 사용해도 무방하다) 저항 값 계산에 대해서 너무 걱정할 필요 없다. 본 강좌에서는 필요한 저항 값을 알려줄 것이고, 인터넷에 검색하는 것만으로 내가 사용하고 싶은 센서나 부품에 얼마 정도의 저항 값이 필요한지 어렵지 않게 찾을 수 있다. 그렇다고 계산법이 그리 어렵지는 않지만, 본 강좌에서는 다루지 않을 것이고 당장 궁금하다면 다른 자료를 참고하기 바란다.

점퍼와이어(Jumper wire)는 부품들을 서로 연결하기 위한 전선이다. 전선의 양쪽 끝부분이 핀의 형태(M — Male)인지 아니면 핀을 꽂을 수 있는 형태(F — Female)인지에 따라 M-M, M-F, F-F의 크게 3종류가 있는데, 브레드보드에 부품을 꽂아서 사용할 경우에는 M-M 형태를 사용하면 된다.

디지털 입출력 (Digital I/O)

라즈베리파이 피코(Pico)와 같이 피지컬 컴퓨팅에 사용되는 컴퓨터들의 가장 기본적인 기능이 바로 디지털 입출력(Digital I/O)이다. 외부 장치와 연결 수 있는 여러 개의 단자(또는 핀Pin)들이 있는데, 각 단자들을 통해서 LOW 또는 HIGH의 출력을 내거나 각 단자들에 어떤 값( LOW or HIGH)이 들어오는지를 읽을 수 있다. HIGH 값은 실제로는 단자에 3.3V의 전압이 걸림을 의미한다. 다른 보드에서는 전압 값이 다를 수 있다 (일부 아두이노는 5V). LOW 값은 반대로 단자에 0V(=GND)가 걸림을 의미한다. 아래 핀아웃(pinout) 그림에서 볼 수 있듯이 Pico에는 총 40개의 단자가 있고, 각 단자 마다 사용할 수 있는 기능들이 정해져 있다. 꼭 필요한 몇가지만 우선 이해하고 넘어가자.

  • 3V3 (OUT) — 부품에 전력를 공급할 수 단자로써 3.3V(볼트)의 전압으로 전류를 공급하는 양극 단자이다.
  • GND — 그라운드(Ground, 접지) 단자는 전류가 마지막으로 나가야 하는 음극 단자이다. 전류는 항상 양극에서 나와 음극으로 나가도록 순환하는 회로를 구성해야 한다.
  • GPIO0~GPIO28 — GPIO(다목적입출력; General-Purpose Input/Output)는 프로그램으로 디지털 입출력을 제어 할 수 있는 단자들이다.
라즈베리파이 피코 핀아웃(Pinout)

회로 구성

자 그럼 이제 회로를 구성해보자. LED를 3V3GND에 각각 +, - 로 연결해도 불이 켜지겠지만, 우리는 LED 프로그램으로 껐다, 켰다를 제어하고 싶기 때문에 GPIO 중 하나의 단자(여기서는 GPIO15)에 아노드(+)를, 그리고 GND에 캐소드(-)를 연결하겠다. 그리고 적절한 전류를 흐르게 하기 위해서 저항을 GPIO와 LED의 양극(+) 사이에 연결하겠다. 저항은 극성이 없으므로 아무 방향으로 연결해도 된다.

피코와 LED 연결 회로도

프로그램 작성

이제 프로그램으로 LED 켜고 끄기가 동작하는지 확인해보도록 하자. 지난번 강좌에서 배운바와 같이 터미널로 접속한 다음 Pico를 연결하자. 그리고 터미널에서 아래와 같이 입력하여 GPIO15 핀을 출력 상태로 바꾸자.

> pinMode(15, OUTPUT);

그런 다음에 LED에 전류가 흘러갈 수 있도록 HIGH 값을 출력해주자.

> digitalWrite(15, HIGH);

LED가 켜졌는지 확인해보고, 이제 다시 LED를 끄자.

> digitalWrite(15, LOW);

digitalToggle() 명령어를 사용하면 LOW일 때는 HIGH를, HIGH일때는 LOW 로 출력해줄 수 있기 때문에, 쉽게 껐다 켰다를 반복할 수 있다. 여러번 입력해서 껏다 켜지는게 반복되는지 확인해보자. (Tip: 터미널에서 위방향키를 이용하면 이전에 입력했던 명령어가 다시 나타난다)

> digitalToggle(15);

이제는 1초마다 켜고 끄기를 자동으로 반복하는 프로그램을 작성해보자. 자바스크립트에 익숙한 사람이라면 setInterval() 함수를 잘 알것이다. 이것은 특정 함수를 지정된 시간마다 호출해주는 기능을 한다. 첫번째 인자로 digitalToggle()을 호출해서 깜빡이는 함수를 넘겨주고, 두 번째 인자로 호출 간격을 1000 (1000ms=1초)을 넘겨준다.

프로그램 업로드

이제는 터미널은 종료하고 아무런 텍스트 편집기로 index.js 코드를 아래와 같이 작성해보자.

LED를 1초마다 깜빡이는 코드

작성된 코드를 CLI를 사용하여 Pico에 업로드 해보자.

$ kaluma flash index.js --port <port>

업로드가 완료 되면 아래 그림과 같이 LED가 1초마다 깜빡이는 것을 볼 수 있을 것이다.

1초에 한번씩 깜빡이는 LED

이번 강좌에서는 디지털 출력을 사용해서 LED를 깜빡이는 프로그램을 작성해 보았다. 디지털 출력은 쉽게 말해 3.3V의 전력을 공급하느냐 중단하느냐를 제어하는 것이다. 여러 개의 LED를 제어하거나, 작은 DC 모터를 동작시키거나 하는 등의 간단한 일들은 디지털 출력으로 쉽게 가능하다. 자 이제 다음 강좌로 이동해서 디지털 입력을 이용하여 스위치의 상태를 읽어보자.

--

--

Minkyu Lee
Minkyu Lee

Written by Minkyu Lee

PhD in Computer Science, JavaScript enthusiast, Amateur Jazz drummer.

No responses yet