[아두이노] [강좌] 12. 아날로그 기능(2) - analogWrite() 함수

이번 시간은 analogWrite() 함수에 대해 알아보도록 하자.

 


analogWrite() 함수는 analogRead() 함수와 똑같은 “analog”가 붙어있지만, analogRead() 함수나 ‘A’가 붙은 ‘ANALOG IN’ 핀들과는 아무런 관련이 없다조금 다른 의미의 Analog라고나 할까.

 


다시 한 번 핀 번호를 살펴보면,


8f60b6ff014aa0af744b70ed342c5076.jpg


 1d5463424a690137e3e23d14441d0e18.jpg 

  

아두이노 메가(Mega 2560) 보드의 경우 2번부터 13번까지의 핀이 analogWrite() 함수에 사용되며, “PWM”이라는 그룹으로 표시되어 있다.

 

우노(Uno)의 경우에는 “Digital (PWM~)”라고 표시되어 있는데디지털 핀 중에 앞에 “~”가 붙어있는 번호가 PWM으로 사용되는 핀이라는 표시다.


메가(Mega 2560)의 경우 표시되어 있지는 않지만 44~46번 핀 역시 analogWrite() 함수에 사용될 수 있다.




앞에서 “PWM”이라는 말이 몇 번 나왔는데, analogWrite() 함수의 기능을 한 마디로 정의한 단어이다. PWM은 Pulse Width Modulation의 약자로진동의 폭을 조절한다는 의미이다.

 


moon_and_james-7????

 


이전 시간에 배웠던 digitalWrite() 함수를 생각해보자. digitalWrite(0 또는 LOW)를 쓰면 핀에서 0의 값이 계속 출력되었었다. 1 또는 HIGH를 쓰면 1이 계속 출력됐었고그래서 LED를 깜빡이기 위해서 digitalWrite(13, LOW) digitalWrite(13, HIGH) 1초 간격으로 번갈아가며 불렀었지.

 


이 것을 파형(신호의 그래프)으로 나타내면 아래 그럼과 같다. 


e58ee779a6bc41819251cacc996b4a84.jpg


이 파형은 0.5Hz의 주파수를 가지는 50% Duty rate PWM 신호이다.

 


뭐라구요??moon_and_james-33

 

 

주파수가 0.5Hz라는 것은 1초에 0.5번의 주기를 가지는 파형이라는 뜻즉 2초에 한 번의 주기를 가진다. 1초 간 LOW, 1초 간 HIGH이고 다시 LOW로 돌아가니까 2초의 주기를 가지는 것이다. Duty rate(듀티비)라는 것은 한 주기 안에서 HIGH를 유지하는 시간의 비율을 나타낸다위 파형에서 HIGH 1초로 한 주기(2) 1/2이므로 50%의 듀티비를 가진다고 말한다.

 

0.5Hz 1Hz로 만들어볼까? 1Hz라는 건 1초에 한 번의 주기를 가지는 파형이다. HIGH LOW가 한번 반복되는 시간이 1초라는 말위의 그림에서 한 번의 주기가 2초였으니 딱 반으로 줄이면 된다. 0.5초 간 LOW, 0.5초 간 HIGH.


98322d5cbb40dd8051506bd620034242.jpg

 

쉽다.

 

그럼 50%의 듀티비를 0% 또는 100%로 만들려면 어떻게 해야 할까? HIGH 시간이 0%가 되려면신호가 계속 LOW를 유지하면 되겠지그럼 100%맞다. HIGH를 계속 유지하면 100%의 듀티비를 가지게 되는 것이다.

 

조금 더 어렵게 해보자그럼 25%의 듀티비를 가지는 파형을 만들려면 어떻게 해야 할까?


 

째깍째깍째깍moon_and_james-34



정답! 1Hz의 주파수를 가지는 파형에서 25%의 듀티비를 가지려면 HIGH를 유지하는 시간이 0.25, LOW를 유지하는 시간은 1-0.25 0.75초가 되면 되겠다.

 

 

이렇게 듀티비를 조절할 수 있는 일정한 주기를 가진 파형을 바로 "PWM"이라고 한다.

 


 

다시 analogWrite() 함수로 돌아가보자. analogWrite() 함수는 바로 이 PWM 파형을 만들어주는 함수이며함수의 원형은 다음과 같다.

 

 



void analogWrite(pin, value)

 

 


  

 매개 변수

 

 pin : PWM 파형이 출력될 핀의 번호메가(Mega 2560)의 경우 2~13, 그리고 44~46번 핀우노(Uno)의 경우 3, 5, 6, 9, 10, 11번 핀 중 하나.

 

 value : 듀티비를 나타내는 0~255 사이의 값. 0은 듀티비 0%를 나타내고 255 100%를 나타낸다. 50%를 사용하려면 127의 값을 사용하면 된다. value에 들어가는 값이 0~100 사이의 값이 아니라 0~255 사이의 값이라는 것에 유의.



 

참고로 analogWrite() 함수를 사용해서 출력되는 파형은 약 490Hz의 주파수를 가진다즉 한 번의 주기가 2 milliseconds를 조금 넘는다는 말. 주파수는 고정되어 있지만 value 값으로 듀티비를 변경할 수 있다.

 

다음은 analogWrite() 함수에 0, 64, 127, 191, 255의 값을 각각 줬을 때 나타나는 파형을 그림으로 나타낸 것이다그림 출처는 아두이노 홈페이지(www.arduino.cc). 이런 건 확실하게 써줘야 해요즘은 저작권이 중요하니깐요.


3a5ec466806be8aeaff590741de36354.gif


출처 : www.arduino.cc


 

. analogWrite() 함수도 참 쉽지요?

 


그런디 이 함수가 도대체 어디에 쓰이는 거여왜 쓰이는 거고?brown_and_cony-17

 

 

어디에 쓰이는지는 다음 강좌에서. to be continued..

 


(뭐지이 뜬금없는 마무리;;)




0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
118 아두이노 ESP32 Analog Inputs (ADC) +4 icon 양재동메이커 02-12 17,527
117 아두이노 TIP : Serial의 Port가 Open 시점 확인 icon 양재동메이커 01-21 14,132
116 아두이노 ESP32 Boot Mode icon 양재동메이커 12-28 14,093
115 아두이노 아두이노 에러 리스트(Arduino Error list) icon 양재동메이커 11-24 19,297
114 아두이노 ESP32 main.cpp +1 icon 양재동메이커 11-19 14,354
113 아두이노 ESP32 EEPROM 와 IR Remote icon 양재동메이커 08-06 14,241
112 아두이노 Learn ESP32 icon 양재동메이커 06-25 13,946
111 라즈베리 파이 라즈베리 파이 (Raspberry Pi) 기초 icon 양재동메이커 06-19 15,386
110 라즈베리 파이 (동영상 강의) 라즈베리 파이 강좌 Link icon 양재동메이커 06-17 14,410
109 STM32 / MBED [MED] Switch debouncing icon HellMaker 12-30 16,532
108 기타 [타이젠] 아두이노의 16x2 LCD Display라이브러리 LiquidCrystal_I2C의 타이젠 포팅 icon 양재동메이커 09-15 16,287
107 기타 [타이젠] GPIO의 디지탈 출력과 입력 인터럽트의 C++ Class 제작 icon 양재동메이커 09-12 15,587
106 마이크로비트 서보 모터 icon HellMaker 09-03 15,357
105 마이크로비트 아날로그 온도센서 (마이크로 비트 센서 활용) icon HellMaker 09-01 15,981
104 마이크로비트 터치센서 (마이크로 비트 센서 활용) icon HellMaker 09-01 14,903
103 마이크로비트 디지털 홀 센서 (마이크로 비트 센서 활용) icon HellMaker 08-29 14,160
102 마이크로비트 리니어 홀 센서 (마이크로 비트 센서 활용) icon HellMaker 08-29 13,550
101 마이크로비트 불꽃 감지 센서 (마이크로 비트 센서 활용) icon HellMaker 08-26 13,930
100 마이크로비트 로터리 엔코더 (마이크로 비트 센서 활용) icon HellMaker 08-25 14,151
99 마이크로비트 2컬러 LED(3mm) (센서 활용) icon HellMaker 08-22 14,080