1. 디지털 신호와 아날로그 신호
신호의 종류에는 디지털 신호와 아날로그 신호가 있습니다.
디지털 신호는 아래 우측 사진과 같이 구분 가능한, 제한된 신호 값(예를 들면 0과 1)을 가지고 불연속적으로 변하는 신호입니다.
반면에 현실세계에 존재하는 신호는 아래 좌측 사진과 같은 연속성을 가진 아날로그 신호입니다.
온도, 길이, 속도 등을 예로 들 수 있습니다.

아두이노 보드의 입출력 핀을 사용하면 신호를 만들어 모듈을 제어하거나, 핀에 입력되는 신호를 받아 다른 모듈에서 값을 읽어올 수도 있습니다.
2. 아두이노 보드를 사용한 디지털 출력 실습 (1)
이번 실습에서는 디지털 핀의 출력 기능을 사용해 LED를 제어하는 실습을 해볼 것입니다.
LED는 Light Emitting Diode의 약자로, 빛을 방출하는 다이오드라는 뜻입니다. 이름이 의미하는 대로, LED에 전류가 흐르면 소자에 빛이 켜집니다.
다이오드는 특성상 순방향 전류만 흐르게 하기 때문에 극성을 제대로 연결하는 것이 중요합니다. 그래서 LED소자에는 각각의 다리(리드)를 어떤 극성에 연결해야 하는지 표시가 되어있습니다. +극을 애노드, -극을 캐소드라고도 부릅니다. 극성을 반대로 연결하면 전류가 흐르지 않게 되어 LED는 켜지지 않습니다.

블랙베리의 LED는 캐소드가 아두이노의 Gnd(Ground)에 연결 되어있고, 애노드는 D4에 연결되어 있습니다.
그래서 D4핀의 출력을 제어하여 LED를 켜고 끌 수 있습니다.
D4핀에 LOW를 출력하면 LED의 양단은 각각 0V로 전위차가 없어 전류가 흐르지 않고, LED가 켜지지 않습니다.
반대로, D4핀에 HIGH를 출력하면 LED 양단에 전위차가 생겨 전류가 흐르고 LED가 켜집니다.
3. 아두이노 보드를 사용한 디지털 출력 실습 (2)

pinMode 함수는 특정 핀을 입력 또는 출력으로 동작하도록 설정하는 함수입니다.
첫 번째 인자로는 설정할 핀 번호, 두 번째 인자로는 설정 값(OUTPUT 또는 INPUT)을 넘깁니다. 설정 값 OUTPUT은 핀을 출력으로, INPUT은 핀을 입력으로 설정하겠다는 뜻입니다.
LED를 켜거나 끄기 위해 D4핀에서 HIGH 또는 LOW를 출력하게 하려면 digitalWrite 함수를 사용해야 합니다. 첫 번째 인자로는 출력을 설정할 핀 번호, 두 번째 인자로는 출력 값(HIGH 또는 LOW)를 넘깁니다. 출력 값 HIGH는 5V 출력을 의미하고, LOW는 0V를 의미합니다.
프로그램을 블랙베리에 업로드하면 빨간색 LED가 깜빡이며 동작하는 것을 확인할 수 있습니다.

4. 아두이노 보드를 사용한 아날로그 출력 실습 (1)
이전 실습에서는 디지털 핀을 제어해 LED를 켜고 끄는 코드를 작성해 보았습니다.
LED를 켜고 끄는 것 말고도 우리는 LED가 연속적인 밝기 값을 가지도록 즉 점점 밝아졌다가 점점 어두워지는 방식으로도 제어할 수 있습니다. 아두이노 보드의 PWM핀을 사용하면 아날로그 신호와 비슷한 신호를 만들 수 있습니다.
PWM이란 Pulse Width Modulation의 약자로
디지털 펄스의 한 주기중에 신호가 High인 시간의 비율을 조정하는 변조 방식입니다.
펄스의 한 주기에서 High인 시간의 비율을 Duty Cycle이라 합니다.
실제 신호는 디지털 펄스이지만 Duty Cycle 에 비례하는 아날로그 전압을 출력하는 것 처럼 동작할 수 있습니다.

위 같은 PWM 신호를 출력하려면 PWM 출력이 가능한 핀을 사용해야 합니다.
아두이노 메가보드에서는 2 - 13, 44 - 46번 핀에서 PWM 출력이 사용 가능합니다.
이번에는 PWM 핀을 사용해 LED가 서서히 밝아지고 서서히 어두워지는 동작을 하도록 구현해 보겠습니다.

5. 아두이노 보드를 사용한 아날로그 출력 실습 (2)

LED를 서서히 켜거나 끄기 위해 D4핀에서 0~5V 사이의 전압을 출력하게 하려면 analogWrite 함수를 사용해야 합니다. 첫 번째 인자로는 출력을 설정할 핀 번호, 두 번째 인자로는 출력 값(0~255)를 넘깁니다. 출력 값 0은 0V에, 255는 5V에 대응합니다.
값을 서서히 증가 또는 감소시키고 값이 변하는 타이밍을 조정하기 위해 for문과 delay 함수를 사용했습니다.
블랙베리에 프로그램을 업로드하면 RED LED가 아래 사진처럼 서서히 켜지고 꺼지는 것을 확인할 수 있습니다.

부드러운 페이드인/아웃을 구현할 경우 delay(5)를 사용할 수 있습니다.
6. 아두이노 보드를 사용한 디지털 입력 실습 (1)
블랙베리의 후방에는 사용자를 위한 두 개의 스위치가 있으며 이런 형태의 스위치는 택트 스위치라고 불립니다.

버튼을 누르면 스위치의 리드 부분이 서로 연결되고, 버튼을 누르지 않을 때는 리드 부분이 연결되지 않습니다. 스위치를 사용하면 회로의 특정 부분을 원하는 때에 마음대로 연결시키거나 연결을 끊을 수 있습니다.

스위치의 상태 값은 눌림 또는 눌리지 않음의 두 가지 상태로 표현하면 적절합니다. 그래서 여기서는 디지털 핀을 사용해 스위치의 상태 값을 읽는 실습을 해보겠습니다. 실습을 하기 전에 블랙베리의 스위치는 눌렸을 때 0, 눌리지 않았을 때 1의 신호가 핀으로 입력되도록 회로가 구성 되어있음에 유의해야 합니다.
7. 아두이노 보드를 사용한 디지털 입력 실습 (2)

3. loop에서는 SW1과 SW2의 상태 값을 읽어 시리얼 모니터에 출력하고, SW1과 SW2의 상태 값이 서로 다를 때 RED LED를 켜는 동작을 반복합니다.
핀의 전압 값을 읽기 위해 digitalRead 함수를 사용합니다. 첫 번째 인자로 값을 읽을 핀 번호를 넘기면 함수는 해당 핀의 전압 값을 0(LOW) 또는 1(HIGH)로 반환합니다.
블랙베리의 스위치는 눌렸을 때 0, 눌리지 않았을 때 1이 되도록 구성되어 있는데 시리얼 모니터에는 눌렸을 때 1 눌리지 않았을 때 0으로 표시하기 위해 digitalRead 함수로 읽은 값에 not연산을 하여 출력합니다.

프로그램 업로드 후 시리얼 모니터를 실행하면 좌측 사진과 같이 각 스위치의 상태가 시리얼 모니터에 표시됩니다.
블랙베리를 후방에서 바라보았을 때 왼쪽에 있는 스위치를 누르면 SW1의 값이 1로 변경되고 오른쪽에 있는 스위치를 누르면 SW2의 값이 1로 변경됩니다.

또한 두 개의 스위치의 상태가 서로 다를 때(즉, 한 개의 스위치만 눌렸을 때) 아래 사진과 같이 RED LED가 켜지는 것을 확인할 수 있습니다.

'소프트웨어 > Arduino' 카테고리의 다른 글
| 아두이노 디지털 출력을 사용한 LED 제어 실습 #2 (0) | 2026.03.12 |
|---|---|
| Arduino Control (Jellibi AGV) - 서보(Servo) 모터와 부저(Buzzer) (0) | 2026.03.09 |
| Jellibi 기초 제어 실습 (0) | 2026.03.09 |
| 로봇 젤리비 AGV 2 소개 및 Arduino Software 설치 (0) | 2026.03.09 |
| PSD를 사용한 측정 및 거리 출력 실습 (0) | 2026.03.09 |