상세 컨텐츠

본문 제목

라즈베리파이 실습 3탄 ! [RGB LED 및 응용]

라즈베리파이 실습 및 미니 프로젝트 !

by 전자과_공대생 2021. 1. 21. 13:09

본문

728x90
반응형

날짜 : 2020.12.30 수요일 / 제목 : 반짝반짝 RGB LED ✨ / 날씨 : ⛅🥶

 

안녕하세요 ~ 전자과_공대생입니다 ! (⌐■_■)

오늘의 날씨가 한파 경보에 온도가 영하까지 떨어졌네요...

하지만 날씨가 추워도 할 일은 해야겠죠 ?!

오늘도 야무지게 라즈베리파이의 기초를 단단히 쌓아보았습니다 !

그럼 오늘 할 실습을 알려드리겠습니다 !

 

 

{ 오늘 할 실습 }

👉RGB LED 작동

👉RGB LED 응용

 

 

실습에 앞서 RGB LED에 대해서 설명드리겠습니다 !

RGB LED는 기본적으로 빨간색(Red), 초록색(Green), 파란색(Blue)으로 구성되어있습니다.

기본적인 3가지 색깔을 섞어서 많은 색깔을 나타낼 수 있습니다.

저도 이번 글에서 색을 섞어서 밝은 보라색(Magenta), 하늘색(Cyan / Aqua)을 사용할 계획입니다 !

색을 섞는 방법은 전류의 세기를 조정하거나 가변 저항을 사용하면 됩니다.

저는 전류의 세기를 조정하여 실습을 하였습니다.

전류의 세기는 PWM의 값을 조정하면 바꿀 수 있습니다.

RGB LED의 PWM은 0~100으로 설정하였으며 최댓값은 100으로 정해져 있습니다.

센서들마다 PWM의 최댓값이 다 다릅니다.

따라서 다른 센서들의 데이터 시트를 찾아보고 PWM의 최댓값을 알아내시길 바랍니다 !

아무튼 ! PWM의 값마다 LED의 밝기 크기를 알려드리겠습니다.

만일 PWM이 100이면 전류가 끊임없이 흐르고 있다는 뜻입니다.

5V가 계속해서 인가되고 있다는 뜻이기도 합니다.

따라서 LED 밝기는 최대치가 됩니다 !

만일 PWM이 50이면 전류가 흐르다가 안 흐르다를 반복하고 있다는 뜻입니다.

즉, 0V와 5V를 주기적으로 반복하고 있다는 뜻이기도 합니다.

여기서 많은 분들은 전류가 흐르다 안흐르다를 반복하면 LED도 켜졌다 꺼졌다를 반복해야 되는 거 아닌가??라고 생각하실 겁니다.

하지만 전류가 흐르고 안 흐르는 시간이 사람의 눈으로는 확인할 수 없을 정도로 빠릅니다.

해서 사람의 눈으로는 LED의 on/off을 확인하기보다는 밝기의 세기를 확인할 수 있습니다.

따라서 PWM이 100일 때보다 전류가 적게 흐르기 때문에 LED의 밝기도 절반 정도 약하게 나오게 됩니다.

만일 PWM이 1이면 사실상 전류가 거의 안 흐르는 수준입니다.

0V가 들어오다가 아주 잠깐 5V가 들어오고 다시 0V가 들어옵니다.

따라서 LED의 밝기는 거의 꺼진 상태급으로 나옵니다.

마지막으로 만일 PWM이 0이면 전류가 흐르지 않는 상태입니다.

0V가 계속해서 들어오고 있다는 뜻이기도 합니다.

따라서 LED는 꺼진 상태가 됩니다.

 

 

이제 RGB LED 실습을 진행해보도록 하겠습니다 !

{ 필요한 재료 }

👉라즈베리파이

👉점퍼 케이블

👉RGB LED

 

아래 사진은 재료들을 가지고 구성한 회로입니다 !

RGB LED 회로 연결

좀 더 정리된 회로를 보여드리겠습니다 !

정리된 RGB LED 회로 연결

RGB LED 센서에 적혀있는 대로 GND는 GND에 연결하면 된다.

또한 R, G, B도 GPIO에 연결하면 된다.

여기서 저는 R : GPIO 19 / G : GPIO 20 / B : GPIO 21에 각각 연결했습니다.

이제 작성한 코딩을 보여드리겠습니다 !

코딩 작성하는데 도움 받는 사이트 -  https://m.blog.naver.com/PostView.nhn?blogId=icbanq&logNo=221656569583&proxyReferer=https:%2F%2Fwww.google.com%2F

1, 2번째 줄에서 GPIO를 이용하기 위해 불러오고 delay를 위하여 time도 불러옵니다.

4번째 줄은 에러를 방지하기 위하여 작성하였고 5번째 줄은 setmode를 BCM으로 설정하였습니다.

7~10, 16번째 줄은 각 변수에 알맞은 값들을 지정해주었습니다.

red, green, blue에는 각자의 GPIO 번호를 값으로 저장시켰습니다.

Freq에는 PWM의 최대 값 100을 저장시켰습니다.

12, 13, 14번째 줄은 GPIO.setup을 이용하여 각각 GPIO 번호를 출력으로 세팅했습니다.

18, 19, 20번째 줄은 각 색깔마다 PWM을 변수로 지정하였습니다.

23번째 줄은 True일 경우 계속 돌아가는 while문을 사용했습니다.

24, 25, 26번째 줄은 LED에게 줄 전류의 세기 초기 값을 지정해줍니다.

이제 for문을 이용하여 차례대로 천천히 켜지고 천천히 꺼지도록 설정해보도록 하겠습니다.

먼저 27번째 줄의 for문을 보시면 전류의 세기 초기 값이 100이던 RED를 계속해서 -1을 하여 최종적으로 0이 되어 LED가 꺼지도록 하였습니다.

따라서 27번째 줄 for문이 끝나면 파란색만 켜져 있는 상태가 됩니다.

또한 delay를 0.025초로 주었습니다.

30번째 줄의 for문은 초록색은 서서히 켜지고 파란색은 서서히 꺼지도록 하였습니다.

따라서 30번째 줄의 for문이 끝나면 초록색만 켜져있는 상태가 됩니다.

delay는 똑같이 0.025초를 주었습니다.

마지막 for문인 34번째 줄을 보시면 진행되어 온 상태에서 빨간색이 서서히 켜지도록 하였습니다.

따라서 최종적으로는 초록색과 빨간색만 켜지게 됩니다.

delay는 역시나 똑같이 0.025초로 주었고 마지막 for문이 끝나면 while문 처음부터 다시 시작합니다.

38번째 줄 Ctrl + C를 눌렀을 경우 while이 False가 되며 GPIO를 리셋해줍니다.

아래 영상은 제가 설명한 대로 작동되고 있는 영상입니다 !

RGB LED 코딩 작동 영상

 

 

이제 RGB LED 응용 편을 알려드리겠습니다 !

{ 필요한 재료 }

👉라즈베리파이

👉점퍼 케이블

👉RGB LED

👉스위치 4개

👉10k 저항 4개

 

아래 사진은 기존 회로에서 스위치와 저항을 추가한 회로입니다.

기존 회로에서 스위치와 저항만 추가한 회로 연결

깔끔한 회로로 다시 보여드리겠습니다 !

정리된 기존 회로에서 스위치와 저항만 추가한 회로 연결

RGB LED의 연결은 방금 한 것과 같습니다.

스위치는 다른 글에서 설명했기 때문에 간단하게만 말씀드리겠습니다 !

맨 위에 스위치부터 스위치 1, 스위치 2, 스위치 3, 스위치 4이며 각자 스위치를 눌렀을 경우 나오는 색깔이 다릅니다.

스위치 1은 빨간색이 나오게 하였으며 스위치 2는 초록색이 나오게 했습니다.

스위치 3은 파란색이 나오게 하였고 스위치 4는 하늘색(초록색+파란색)이 나오게 하였습니다.

또한 코딩에서 자세히 설명드리겠지만 스위치를 안 눌렀을 경우와 2개 이상의 스위치를 누를 경우는 밝은 보라색(빨간색+파란색)이 나오게 설정하였습니다.

스위치들의 GPIO는 맨 위에서부터 22, 23, 24, 25로 연결하였습니다.

또한 전압은 +5V로 주었습니다.

이제 코드를 보여드리겠습니다 !

회로 코딩 1
회로 코딩 2

기존의 코딩에서 스위치 코딩만 추가하였습니다.

따라서 스위치 코딩만 설명드리겠습니다.

16~19번째 줄에서 GPIO.setup을 이용하여 GPIO 22, 23, 24, 25을 입력으로 설정합니다.

29~31번째 줄은 PWM의 초기 값을 주어 LED의 시작 색을 설정합니다.

저는 아까 말씀드린 것처럼 밝은 보라색으로 설정하였습니다.

32~35번째 줄에서 GPIO 입력 값들을 변수로 지정해줍니다.

37번째 줄부터 if문을 사용하여 스위치 하나만 눌렀을 경우 원하는 색이 나오도록 설정하였습니다.

첫 번째 if문은 스위치 1을 눌렀을 경우 빨간색만 나오도록 PWM 값을 바꿔줬습니다.

ChangeDutyCycle을 이용하여 값을 바꿔주고 원하는 색이 나오도록 색을 잘 섞으면 됩니다.

딜레이는 0.2초 동안 되도록 설정하였습니다.

두 번째 if문은 스위치 2를 눌렀을 경우 초록색만 나오도록 설정하였습니다.

딜레이는 0.2초 동안 되도록 설정하였습니다.

세 번째 if문은 스위치 3을 눌렀을 경우 파란색만 나오도록 설정하였습니다.

역시 딜레이는 0.2초 동안 되도록 설정하였습니다.

네 번째 if문은 스위치 4를 눌렀을 경우 하늘색(초록+파란)만 나오도록 설정하였습니다.

네 번째 if문도 딜레이는 0.2초 동안 되도록 설정하였습니다.

마지막으로 else문에서 2개 이상의 스위치를 눌렀을 경우에는 밝은 보라색(빨간+파란)이 나오도록 설정하였습니다.

그럼 동작 영상을 보여드리도록 하겠습니다 !

 

RGBELD + 스위치 동작 영상

영상을 보시면 아시겠지만 2개 이상의 스위치를 누를 경우 바로 밝은 보라색이 나오지 않습니다.

눌렀던 스위치 중 조금이라도 빨리 눌렀던 스위치의 색이 나오고 바로 밝은 보라색이 나옵니다.

이유는 기계가 아닌 사람이 동시에 스위치를 누른다는 것은 불가능합니다.

무조건 몇 초, 0.0000 몇 초라도 오차가 발생하고 그렇게 되면 먼저 눌린 스위치가 분명히 존재하기 때문입니다.

 

 

이렇게 오늘 할 실습을 모두 마쳤습니다 !

요즘 코로나가 다시 난리를 치고 있는데 다들 건강 조심하시길 바랍니다 !

그럼 다음 라즈베리파이 실습 글에서 뵙겠습니다 !

이상 전자과_공대생이었습니다 ~ ! (⌐■_■)

감사합니다 ~~

728x90
반응형

관련글 더보기