반응형

NodeMCU 에서도 서보 모터를 제어할 수 있다. 바로 PWM (Pulse Width Modulation, 펄스 폭 변조) 신호를 이용해서 제어가 가능한데 NodeMCU 에서는 pwm 이라는 모듈을 기본으로 제공하고 있기 때문에 이를 이용해서 서보를 제어할 수 있다. 응용한다면 인터넷으로 열고 닫을 수 있는 도어락 같은 것을 만들 수도 있을 것이다. 


PWM 은 간단하게 설명하자면 5V 와 0V 의 신호가 번갈아 반복되는 것인데 이것의 반복되는 사이클을 조절해서 신호를 주는 것이다.


이미지 : https://www.arduino.cc/en/Tutorial/PWM

위의 그래프와 같이 5V 와 0V 가 반복 되는 시간을 변환해서 서보에 신호를 전달하는 것이다.


PWM에 대해서 좀 더 자세한 설명은 아래의 링크를 참고하면 된다.


제어할 모터는 가장 대중적으로 많이 사용되는 SG90 서보 모터를 NodeMCU 펌웨어가 올라간 ESP8266 보드에 연결해서 제어해 보았다.


SG90 서보의 모습이다. 갈색, 빨간색, 노란색의 3가닥의 연결선이 있으며 갈색은 GND, 빨간색은 5V, 노란색은 PWM 신호를 받는 선이다.  


아래와 같이 ESP8266 과 연결하였다. 

 ESP8266

 SG90 (Servo)

 GND

 Brown

 5V

 Red

 D4

 Yellow


내가 연결한 ESP8266 개발 보드인 Wemos D1 mini 보드에는 5V 출력이 있어서 거기에 서보를 연결하면 되지만 3.3V 출력 밖에 없는 보드도 있다. 테스트 삼아 3.3V 에 연결해 보았는데 별 차이 없이 동작하긴 했지만 4.8V 이상에서 동작하는 SG90의 특성 상 5V에 연결해 주는 것이 좋다. 이럴 경우 외부전원(5V)을 서보에 연결해주고 외부전원의 마이너스를 ESP8266의 GND와 서보의 GND에 같이 연결해 주어서 전원을 보강해 주는 것이 좋다.


■ 소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
local pin4 = 4
 
-- set pin index 1 as pwm output, frequency is 50Hz, 
print("0")
pwm.setup(pin4, 501024*0.075)
 
-- Position 0
-- 20ms cycle, High duration is 20ms * 7.5= 1.5ms
print("1")
pwm.setduty(pin4, 1024*0.075)
pwm.start(pin4)
tmr.delay(5000000)
pwm.stop(pin4)
 
-- Posigion 90
-- 20ms cycle, High duration is 20ms * 10= 2.0ms
print("2")
pwm.setduty(pin4, 1024*0.1)
pwm.start(pin4)
tmr.delay(5000000)
pwm.stop(pin4)
 
-- Posigion -90
-- 20ms cycle, High duration is 20ms * 5= 1.0ms
print("3")
pwm.setduty(pin4, 1024*0.05)
pwm.start(pin4)
tmr.delay(5000000)
pwm.stop(pin4)
 
-- Position 0
-- 20ms cycle, High duration is 20ms * 7.5= 1.5ms
print("4")
pwm.setduty(pin4, 1024*0.075)
pwm.start(pin4)
tmr.delay(5000000)
pwm.stop(pin4)
 
cs


소스는 NodeMCU 의 pwm 모듈을 이용해서 동작한다. high 상태의 duration 을 이용해서 서보를 제어한다. 아래의 SG90 pdf 문서를 보면 pwm 신호를 어떻게 주면 서보의 움직이는 각도를 조절할 수 있는지 알 수 있을 것이다.

SG90Servo.pdf



NodeMCU PWM 모듈에 대해서는 아래의 링크를 참고하면 된다.


https://nodemcu.readthedocs.io/en/dev/en/modules/pwm/




반응형

+ Recent posts