Skip to main content

[raspberry pi] 파이썬으로 LED 제어하기


라즈베리파이 같이 파이썬으로 제어 가능한 장치가 있을때 단색 LEDRGB LED를 제어하는 기초적인 방법이다.



1. 단색 LED 회로도

LED의 경우 한쪽으로만 전류가 흐르기 때문에, 반드시 긴쪽은 +에, 짧은쪽은 GND에 연결해야 하며, 약 200옴 이상의 저항은 연결해야 한다. (저항없이도 가능하지만, LED가 금방 고장남)

image



2. 단색 LED 파이썬 코드

단색 LED를 on/off 하는 것은 매우 간단하다.

import RPi.GPIO as GPIO
import time

def led(pin, t):
GPIO.setmode(GPIO.BOARD)
GPIO.setup(pin, GPIO.OUT)

GPIO.output(pin, True)
time.sleep(t)

GPIO.cleanup(pin)

led(18, 5) # 18번 핀에 끼운 LED를 5초동안 점등

만약 특정한 시간으로 제어하는 것이 아닌 on, off 등의 버튼 형태로 제어하고 싶다면 아래와 같이 작성하면 된다.

import RPi.GPIO as GPIO
import time

def led_on(pin):
GPIO.setmode(GPIO.BOARD)
GPIO.setup(pin, GPIO.OUT)

GPIO.output(pin, True)

def led_off(pin):
GPIO.setmode(GPIO.BOARD)
GPIO.setup(pin, GPIO.OUT)

GPIO.cleanup(pin)

# 버튼 등을 누를때 함수를 호출하는 형태로 알맞게 변경하여 사용하면 된다.
led_on(18) # led 점등
led_off(18) # led 소등

만약 on/off 뿐만 아니라 밝기를 세세하게 조정하고 싶을 경우에는 아래와 같이 pwm을 이용하여 작성하면 된다.

import RPi.GPIO as GPIO
import time

def led_pwm(pin):
GPIO.setmode(GPIO.BOARD)
GPIO.setup(pin, GPIO.OUT)

pwm = GPIO.PWM(pin, 100) # pwm 설정 (100Hz)
pwm.start(0)

# 밝기가 0에서 100 까지 0.1초 간격으로 바뀜
for i in range(101):
pwm.ChangeDutyCycle(i)
time.sleep(0.1)

pwm.stop()
GPIO.cleanup()

led_pwm(18)


3. RGB LED 회로도

RGB LED을 제어하는 것은 단색 LED 3개를 제어하는것과 거의 유사하다. 각 led에 약 200옴 이상의 저항을 꽂아서 사용하면 된다.

(가장 긴 선이 GND이며, GND를 기준으로 1개있는 쪽이 빨강, 나머지가 초록, 파랑 이다.)

image



4. RGB LED 파이썬 코드

단색 LED를 3개 제어하는것처럼 코드를 작성하면 된다.

import RPi.GPIO as GPIO
import time

pins = (18, 19, 21) # 빨강은 18핀, 초록은 19핀, 파랑은 21핀 지정

def led(pins, color, t):
RGBs = (
(1,1,1), # 하양색
(1,0,0), # 빨강색
(0,1,0), # 초록색
(0,0,1), # 파랑색
(0,1,1), # 청록색
(1,0,1), # 보라색
(1,1,0), # 노랑색
)

GPIO.setmode(GPIO.BOARD)

GPIO.setup(pins[0], GPIO.OUT)
GPIO.setup(pins[1], GPIO.OUT)
GPIO.setup(pins[2], GPIO.OUT)

GPIO.output(pins[0], RGBs[color][0])
GPIO.output(pins[1], RGBs[color][1])
GPIO.output(pins[2], RGBs[color][2])

time.sleep(t)

GPIO.cleanup(pins)

led(pins, 4, 10) # 청록색으로 10초 동안 점등

디지털 출력으로 RGB LED를 제어하게되면 7가지 색상 밖에 제어하지 못하는데, PWM을 이용해서 제어하게 되면 모든 색상을 표현할 수 있다.