라즈베리 파이 RGB LED

이 튜토리얼은 Raspberry Pi를 사용하여 RGB LED를 제어하는 방법을 안내합니다. 자세히 살펴볼 내용은 다음과 같습니다:

Hardware Preparation

1×Raspberry Pi 4 Model B Amazon
1×RGB LED Amazon
3×220 ohm resistor Amazon
1×(Alternative) RGB LED Module 쿠팡 | Amazon
1×Breadboard 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(추천) Screw Terminal Block Shield for Raspberry Pi 쿠팡 | Amazon
1×(추천) USB-C Power Cable with On/Off Switch for Raspberry Pi 4B Amazon
1×(추천) Plastic Case and Cooling Fan for Raspberry Pi 4B Amazon
1×(추천) HDMI Touch Screen Monitor for Raspberry Pi Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

RGB LED에 대하여

RGB LED는 빨강, 초록, 파랑의 세 가지 기본 색을 결합하여 모든 색을 생성할 수 있습니다. 이는 하나의 하우징에 포함된 세 개의 개별 LED(빨강, 초록, 파랑)로 구성됩니다.

RGB LED 핀아웃

RGB LED는 네 개의 핀이 있습니다:

  • 공통 (캐소드-) 핀은 GND (0V)에 연결되어야 합니다.
  • 빨간색을 제어하는 R (빨간색) 핀
  • 초록색을 제어하는 G (초록색) 핀
  • 파란색을 제어하는 B (파란색) 핀
RGB LED 핀 배열

Raspberry Pi에 RGB LED를 연결하려면, 전류 제한 저항을 사용해야 합니다. 배선이 좀 어렵게 느껴질 수 있지만 걱정하지 마세요. 이미 내장된 저항이 있는 이 RGB LED 모듈을 사용할 수 있습니다.

RGB LED 모듈에는 또한 네 개의 핀이 포함되어 있습니다.

  • 공통(캐소드-) 핀: GND(0V)에 연결해야 함
  • R(빨강): 핀은 빨강을 제어하는 데 사용됨
  • G(초록): 핀은 초록을 제어하는 데 사용됨
  • B(파랑): 핀은 파랑을 제어하는 데 사용됨
RGB LED 모듈 핀 배치

※ NOTE THAT:

RGB LED의 핀 유형은 다양할 수 있으며, 캐소드 또는 애노드일 수 있습니다. 이 튜토리얼에서는 공통 캐소드 핀을 사용할 것입니다.

작동 방식

물리학 분야에서 세 가지 색상 값인 빨강(R), 초록(G), 파랑(B)이 결합되어 색상을 형성합니다. 각 값의 범위는 0에서 255까지입니다. 이 세 가지 값의 조합은 총 256 x 256 x 256 색상을 생성합니다.

우리는 Raspberry Pi를 프로그래밍하여 R, G, B 핀에 PWM 신호(듀티 사이클이 0에서 255까지)를 생성함으로써 원하는 색상의 RGB LED 디스플레이를 만들 수 있습니다. R, G 및 B 핀으로 전송되는 PWM 신호의 듀티 사이클은 각각 빨강(R), 초록(G) 및 파랑(B) 색상 값에 비례합니다.

Wiring Diagram

  • 라즈베리 파이와 RGB LED 간의 배선도
라즈베리 파이 RGB LED 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

  • 라즈베리 파이와 RGB LED 모듈 간의 배선도
라즈베리 파이 RGB LED 모듈 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

배선 구성을 간단하고 체계적으로 만들기 위해, Raspberry Pi용 스크루 터미널 블록 실드 사용을 권장합니다. 이 실드는 아래와 같이 더욱 안정적이고 관리하기 쉬운 연결을 제공합니다:

Raspberry Pi Screw Terminal Block Shield

RGB LED 제어 방법

GRB LED를 어떤 색상으로든 제어하는 방법을 단계별로 배워봅시다. 예를 들어, #00979D:

  • 먼저, 표시할 색상을 결정하고 해당 색상의 색상 코드를 얻습니다. 팁:
    • 원하는 색상 코드를 선택하려면 색상 선택기를 사용할 수 있습니다.
    • 이미지에서 색상을 사용하고 싶다면 온라인 이미지에서 색상 도구를 사용할 수 있습니다.
  • 그런 다음, w3school의 도구를 사용하여 색상 코드를 R, G, B 값으로 변환합니다. 이 값을 반드시 기록해 두세요. 이 경우: R = 0, G = 151, B = 157
RGB LED 색상 선택기
  • Raspberry Pi 핀이 R, G, B 핀에 연결된 것을 지정합니다. 예를 들어:
LED_R_PIN = 13 LED_G_PIN = 12 LED_B_PIN = 18
  • 라즈베리 파이 핀을 출력 모드로 설정하십시오.
GPIO.setmode(GPIO.BCM) # GPIO.BCM 모드를 설정합니다. GPIO.setup([LED_R_PIN, LED_G_PIN, LED_B_PIN], GPIO.OUT) # 출력으로 설정할 핀을 구성합니다.
  • 라즈베리 파이 핀을 1000Hz 주파수의 PWM 신호를 출력하도록 설정하세요.
RED = GPIO.PWM(LED_R_PIN, 1000) # 빨강 GREEN = GPIO.PWM(LED_G_PIN, 1000) # 초록 BLUE = GPIO.PWM(LED_B_PIN, 1000) # 파랑
  • LED를 제어하여 색상 #00979D에 불이 켜지도록 합니다. 이는 R = 0, G = 151, B = 157에 해당합니다.
RED.ChangeDutyCycle(_map(0, 0, 255, 0, 100)) GREEN.ChangeDutyCycle(_map(151, 0, 255, 0, 100)) BLUE.ChangeDutyCycle(_map(157, 0, 255, 0, 100))

라즈베리 파이 - RGB LED 예제 코드

아래의 Raspberry Pi 코드는 LED의 색상을 다음의 색조 순서로 변경합니다:

  • #00C9CC (빨강 = 0, 초록 = 201, 파랑 = 204)
  • #F7788A (빨강 = 247, 초록 = 120, 파랑 = 138)
  • #34A853 (빨강 = 52, 초록 = 168, 파랑 = 83)
# 이 Raspberry Pi 코드는 newbiely.kr 에서 개발되었습니다 # 이 Raspberry Pi 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. # 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: # https://newbiely.kr/tutorials/raspberry-pi/raspberry-pi-led-rgb import RPi.GPIO as GPIO from time import sleep LED_R_PIN = 13 LED_G_PIN = 12 LED_B_PIN = 18 GPIO.setmode(GPIO.BCM) GPIO.setup([LED_R_PIN, LED_G_PIN, LED_B_PIN],GPIO.OUT) RED = GPIO.PWM(LED_R_PIN, 1000) GREEN = GPIO.PWM(LED_G_PIN, 1000) BLUE = GPIO.PWM(LED_B_PIN, 1000) def _map(x, in_min, in_max, out_min, out_max): return int((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min) RED.start(0) GREEN.start(0) BLUE.start(0) try: while True: # color code #00C9CC (R = 0, G = 201, B = 204) RED.ChangeDutyCycle(_map(0, 0, 255, 0, 100)) GREEN.ChangeDutyCycle(_map(201, 0, 255, 0, 100)) BLUE.ChangeDutyCycle(_map(204, 0, 255, 0, 100)) sleep(1) # color code #F7788A (R = 247, G = 120, B = 138) RED.ChangeDutyCycle(_map(247, 0, 255, 0, 100)) GREEN.ChangeDutyCycle(_map(120, 0, 255, 0, 100)) BLUE.ChangeDutyCycle(_map(138, 0, 255, 0, 100)) sleep(1) # color code #34A853 (R = 52, G = 168, B = 83) RED.ChangeDutyCycle(_map(52, 0, 255, 0, 100)) GREEN.ChangeDutyCycle(_map(168, 0, 255, 0, 100)) BLUE.ChangeDutyCycle(_map(83, 0, 255, 0, 100)) sleep(1) finally: RED.stop() GREEN.stop() BLUE.stop() GPIO.cleanup()

여러 색상을 사용할 때, 함수를 만들어 Raspberry Pi 코드를 줄일 수 있습니다:

# 이 Raspberry Pi 코드는 newbiely.kr 에서 개발되었습니다 # 이 Raspberry Pi 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. # 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: # https://newbiely.kr/tutorials/raspberry-pi/raspberry-pi-led-rgb import RPi.GPIO as GPIO from time import sleep LED_R_PIN = 13 LED_G_PIN = 12 LED_B_PIN = 18 GPIO.setmode(GPIO.BCM) GPIO.setup([LED_R_PIN, LED_G_PIN, LED_B_PIN],GPIO.OUT) RED = GPIO.PWM(LED_R_PIN, 1000) GREEN = GPIO.PWM(LED_G_PIN, 1000) BLUE = GPIO.PWM(LED_B_PIN, 1000) def _map(x, in_min, in_max, out_min, out_max): return int((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min) def setColor(r,g,b): RED.ChangeDutyCycle(_map(r, 0, 255, 0, 100)) GREEN.ChangeDutyCycle(_map(g, 0, 255, 0, 100)) BLUE.ChangeDutyCycle(_map(b, 0, 255, 0, 100)) RED.start(0) GREEN.start(0) BLUE.start(0) try: while True: # color code #00C9CC (R = 0, G = 201, B = 204) setColor(0, 201, 204); sleep(1) # color code #F7788A (R = 247, G = 120, B = 138) setColor(247, 120, 138); sleep(1) # color code #34A853 (R = 52, G = 168, B = 83) setColor(52, 168, 83); sleep(1) finally: RED.stop() GREEN.stop() BLUE.stop() GPIO.cleanup()

추가 지식

공통 애노드가 있는 RGB LED의 경우, 다음이 필요합니다:

  • 공통 핀을 라즈베리 파이의 3.3V에 연결하세요.
  • AnalogWrite() 함수를 활용하고, R, G, B 값을 각각 255 - R, 255 - G, 255 - B로 설정하세요.

RGB LED 스트립은 함께 연결된 일련의 RCB LED로 구성되어 있습니다. LED 스트립은 어드레서블과 비어드레서블로 나눌 수 있습니다. 우리는 각 종류의 LED 스트립에 대한 튜토리얼을 만들 예정입니다.

※ NOTE THAT:

RGB LED의 공통 핀에 단일 저항을 사용하는 대신 다른 핀에 세 개의 저항을 사용하는 것은 피하세요.

이론적으로는 단일 RGB 패키지의 세 LED가 병렬로 연결되어 있으므로 공통 핀에 단일 저항을 사용하는 것이 가능하긴 합니다. 하지만 실제로는 권장되지 않습니다. 그 이유는 실제 세계의 LED는 동일한 특성을 가지고 있지 않기 때문입니다. RGB 패키지의 세 LED는 동일하지 않습니다 ⇒ LED의 저항이 다릅니다 ⇒ 전류가 각 LED에 고르게 분배되지 않습니다 ⇒ 밝기가 균일하지 않으며, 이는 결국 한 LED의 손상을 초래하고 나머지 LED도 손상시킬 수 있습니다.