건프의 소소한 개발이야기

[Raspberry Pi 3] servo motor(서보모터) 키보드로 방향 제어하기 본문

개발 이야기/Embedded Software 이야기

[Raspberry Pi 3] servo motor(서보모터) 키보드로 방향 제어하기

건강한프로그래머 2016. 6. 25. 02:13

안녕하세요, 건프입니다. 


저번 포스팅에서 라즈베리파이3 보드에서 서보모터를 돌리는 것 (말그대로 돌아간다) 를 확인했습니다.



이번엔 확실하게 그 각도를 조절하는 방법을 알아보려고 했더니


서보모터와 PWM등 원리를 알아보려니 고생을 좀 했습니다...


원리가 미치도록 궁금하신분들은 아래 링크를 타고 들어가서 연구해보세요~


서보모터, PWM 정의


http://siryua.tistory.com/338


왜 펄스를 잡아야 하는가에 대해서 계산하신분.. 아두이노 버전으로 코드가 짜여있기 때문에 펄스 계산부분만 보시면 됩니다.


http://jjungineer.tistory.com/20



이렇게하고 ㅋㅋ


일단 완성된 코드입니다



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
import RPi.GPIO as GPIO
import time
 
pin = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.OUT)
 
p = GPIO.PWM(pin, 50) # 50 Hz
p.start(0)
# this values validate only when 50Hz
left_angle = 12.5
center_angle = 7.5
right_angle = 2.5
 
def doAngle(angle):
    p.ChangeDutyCycle(angle)
    print "Angle: %d" % angle
    time.sleep(0.5)
 
try:
 
    while True:
        var = raw_input("Enter L/R/C : ")
        if var == 'R' or var == 'r' :
            print "Right"
            doAngle(right_angle)
        elif var == 'L' or var == 'l':
            print "Left"
            doAngle(left_angle)
        elif var == 'C' or var == 'c':
            print "Center"
            doAngle(center_angle)
except KeyboardInterrupt:
    p.stop()
GPIO.cleanup()



저기서 왼쪽, 오른쪽, 센터를 지칭하는 크기는, pwm 크기를 50으로 지정했을때의 값입니다..(하나하나 테스트해보고 얻어낸 값)


만약 센터값을 넣었을때, 정확하게 가운데로 오지 않는다면, 그때 모터위에 있는 가지를 위로 뽑아서, 센터값으로 재 세팅해주시면 됩니다.


영상