Search

'라즈비안 Thonny python IDE 코드 실행'에 해당되는 글 1건

  1. 2021.04.11 【라즈베리Pi#18】 HardWare PWM 사용하기! with LED
반응형

라즈베리Pi#18HardWare PWM 사용하기!  with LED

『 선수학습 』
▶ 라즈베리Pi에 라즈비안 OS설치와 세팅, 그리고 PWM이전 기초실습 :
 【 라즈베리파이 】#01 라즈베리파이 설치하기   #01~#07까지 라즈비안OS 설치와 한글화 설정 등이 있습니다.
  
→  【 라즈베리파이 】#09 RaspberryPi 실습 ①   
→  【 라즈베리파이 】#10 RaspberryPi 실습 ②  
→  【 라즈베리파이 】#11 RaspberryPi GPIO   
→  【 라즈베리파이 】 #12 LED On Off 실습 with Switch   
→  【 라즈베리파이 】 #13 LED Fade In Out 실습 (소프트웨어 PWM) 
→  【 라즈베리파이 】 #14 타이밍 차트 활용한 LED 실습   
→  【 라즈베리파이 】 #15 LED SOS 신호와 동기신호 실습  
→  【 라즈베리파이 】 #16 State Diagram 구현 실습 
→  【 라즈베리파이 】 #17 4LED 순차 점멸 with Timing chart  

-------------------------------------------------------------------------------------------------------------------

안녕하세요~
라즈이노 IoT입니다.
라즈베리파이 베이직 학습 시리즈로 "하드웨어 PWM 사용하기"편을 준비해 봤습니다.

PWM은 디지털 출력을 가지고 아날로그처럼 동작할 수 있도록 해주는 기능이라고 보시면 되는데요,
(PWM : Pulse Width Modulation )
이번 실습에서 PWM 기능은 Led를 점점 밝게 또는 점점 어둡게 컨트롤해봄으로써 테스트해 볼 수 있습니다.

PWM 회로 연결은 아래와 같습니다.

LED는 연결할 때 + - 구분을 해주어야 합니다.

LED +- 극성구분

소프트웨어적인 PWM 기능은 입출력으로 사용되는 GPIO핀 어떤 핀이든 사용 가능한데요, 하지만 CPU에 과부하가 걸릴 수 있고 정밀 타이밍 제어가 필요한 곳에서는 오류가 날 수 있기에, 하드웨어적으로 동작하는 PWM 기능을 이용하게 되며, 그 핀은 정해져 있습니다.

화면 이미지에서 GPIO 18, 12번이 PWM0 로 사용되고, 13번 19번이 PWM1 채널로 사용됩니다.
채널별로 연동되기 때문에, 개별로 동작시킬 수 있는 핀은 실질적으로 두 개로 보시면 됩니다.
하드웨어 PWM기능은 오디오 출력 시에도 사용되기 때문에 동시에 사용할 수 없음을 주의하세요.

《주의 사항!》
1. GPIO 핀 출력 신호의 최대 전압은 3.3v이며,  각 핀당 약 18mA로 제한하며, 가급적 핀 전체 출력 전류가 50mA를 넘지 않도록 주의해 주세요. ( 전류값은 옴의 법칙인 I=V/R 으로 간단히 계산해 볼 수 있으며, 제한 값은 보드에 공급되는 전원과 소모 전력에 따라 달라질 수 있어요.)
2. 헤더 핀의 대부분은 Broadcom 메인 칩으로 직접 연결되어 있기 때문에, 잘못된 연결로 인하여 라즈베리 Pi를 영구적으로 손상시킬 수 있으니, 연결에 주의해 주세요!

실습에 사용된 환경과 준비 사항입니다

LED를 보호하는 저항 값은 220Ω~470Ω사잇값 중에 가지고 있는 것을 사용하면 됩니다.
영상에서는 라즈베리 Pi의 라즈비안 OS에서 직접 코드를 동작시키게 됩니다. 
다음번 영상에서는 윈도 PC에서 원격으로 접속하여 동작시켜 보겠습니다.

아래는 회로 동작에 사용한 파이썬 코드입니다.

《 회로 실행용 파이썬 코드 》

코딩에 사용된 프로그램은,  라즈베리 Pi 라즈비안OS에 기본 설치된 Thonny Python IDE 프로그램입니다. 
아래 이미지처럼, 실행과 디버그, Shell창이 함께 구성되어 있습니다. 

 동작 방식에는 몇 가지 있는데요, 여기서는 비교적 코드가 간단하고 이해하기 쉬운 RPi.GPIO라이브러리 모듈의 PWM 명령어를 사용했습니다.


LED의 밝기는 아래 이미지처럼, 출력 신호의 High와 Low신호의 비율(Duty Rate)로 결정됩니다.


ChangeDutyCycle(듀티비%) 함수로 0~100%의 값을 직접 입력해 넣어 주면 조절할 수 있습니다.

그리고, PWM 파형에는 주파수의 개념이 들어가는데요, 
주파수(Frequance)라는 것은 PWM 1주기의 신호가 1초에 몇 번 반복되는지를 의미합니다.

좌측 이미지처럼 1초에 1회 반복되면 1Hz라 하며, 우측 이미지처럼 1초에 3번 반복되는 형태이면 3Hz라 합니다.
만약 1초에 100번 반복되면 100Hz, 1000번 반복이면 1KHz(1000Hz)가 됩니다.
PWM 신호의 주파수는 LED에서는 신호의 깜빡임으로 나타나게 되며,  주파수가 낮으면 깜빡임이 확연하게 보이며, 주파수가 높으면 밝기 조절 때 더 자연스럽게 보입니다. 
다만, 사람의 눈은 잔상효과로 인하여 주파수가 낮더라도 깜빡임이 없는 것처럼 보일 수 있는데요, 디지털 눈인 카메라로 보면 그 차이를 쉽게 확인할 수 있습니다. 
(아래는 이미지여서 실제 깜빡 임의 차이는  맨 아래 전체 영상에서 확인 가능합니다.)


그럼 위 코드를 입력하고 Python IDE를 실행시켜 라즈베리 Pi에 연결된 LED를 동작시켜 보세요. 
코드를 살펴보면,  듀티비 값은 for 문에 의해 0~100% 증가/감소를 반복하며 밝기 조절이 되고 있습니다.
그럼 time.sleep( )의 delay 값을 0.1초에서 0.01초로 바꾸어 보면, 더 빠르게 Faid In / Faid Out이 되는 것을 볼 수 있습니다. 
주파수의 경우도, 주파수가 낮을수록 깜빡임이 심해지고, 일정 주파수가 이상 되면 깜빡임이 없는 자연스러운 Faid In/Out을 볼 수 있는데요,  옵션 값을  1000Hz, 100 Hz, 50Hz, 10Hz  이렇게 단계적으로 바꾸어 가며 실습해 보세요. 
특히 핸드폰 카메라 렌즈로 확인해 보면, 더 명확히 느끼실 수 있습니다. 

다음 영상에서는 라즈베리 Pi에 모니터를 연결하지 않고, 윈도 PC에서 원격 접속을 통해 라즈베리 Pi에 연결된 회로를 작동시켜 보는 실습을 진행합니다. 
라즈베리Pi에 라즈비안 OS설치와 세팅, 그리고 PWM이전 기초실습도 여기 블로그 【라즈베리파이 기초】 카테고리에 있으니, 필요하신 분은 함께 보면 도움이 되실 듯합니다. 

▶ 실습 전 과정 영상으로 학습하기

 

반응형