-
서보모터의 원리, 아두이노로 SG90 제어하기 [탱두의 아두이노 부품 다루기] ..카테고리 없음 2020. 2. 4. 19:39
>
안녕하세요, 탄두입니다.오늘은 모터의 1종류인 서보 모터를 아도우이노에서 제어하는 방법을 살펴봅시다.먼저, 서보 모터란 무엇인지, 어떤 원리인지 한 번 살펴보도록 하겠습니다.서보 모터는 일반적인 모터와 달리 모터와 제어 보드가 합쳐진 모터를 서보 모터라고 부릅니다.먼저 서보모터가 어떤 동작을 하는 모터인지 영상으로 보겠습니다.
영상을 보면 모터가 정해진 각도에서 정확하게 움직이는 것을 볼 수 있습니다.서보모터는 각도를 제어하는 모터로 특정 입력신호를 주면 정해진 각도를 유지하려는 성질이 있습니다.그래서 전원이 연결되어 있으면 손으로 힘주어 돌리려고 해도 돌아가지 않게 됩니다.
>
그 원리를 보면 서보모터 안에 제어보드와 각도를 인식하는 센서(가변저항)가 있고 입력한 각도에 도달할 때까지 계속 동작합니다.
>
위 사진의 보드가 각도를 조절해주는 제어보드입니다.서보모터를 제어하는 방법에서는 PWM신호를 서보모터에 삽입하면 서보모터의 제어보드가 신호를 인식하여 각도로 변환하여 모터를 돌립니다.PWM신호는 간단히 말하면 소등 신호로 켜져 있는 시간, 꺼져 있는 시간을 이용하여 값을 전달하는 방법입니다.PWM 신호에 대한 자세한 것은, 별도, 투고해 설명합니다.요컨대, 서보 모터는 각도를 정확하게 맞출 수 있는 모터입니다.이제 아두이노를 이용해 서보모터를 제어해 봅시다.먼저 아두이노 IDE를 한번 붙여볼까요?
>
그러면 이렇게 나와있을 거예요. 먼저 주석을 끄고 시작하겠습니다.아두이노로 서보모터를 쉽게 제어할 수 있도록 라이브러리를 제공합니다.라이브러리의 이름은 Servo.h 헤더 파일로 기본 라이브러리이므로, 맨 윗줄에 #include
를 입력하면 사용할 수 있습니다. 나머지 코드는 주석을 통해 해석되고 있습니다. 이렇게 써서 올린 후, 서보 모터의 주례 팬 섹슨을 9번 핀에 빨간 색은 5v, 검은 색은 GND핀에 연결하고 주례면 위의 동영상과 같은 동작을 하게 됩니다. sg 90서보 모터는 저가, 사이즈가 작고 많이 사용되는 모터 1번 단위로 조작이 가능하며 0도에서 180도까지 제어가 가능합니다.이번에는 다른 예제를 통해서 서보모터 사용법을 알아보도록 하겠습니다.
이번의 예제는 for문을 이용하고 서보 모터가 0도에서 180도까지 1번씩 증가했다가 다시 0도에서 1번씩 감소의 예입니다. 변수 i를 사용하여 변수값이 모터 각도로 출력되도록 하였습니다.delay 값을 내리면 더 빨리 돌아갈 거고 늘리면 더 천천히 돌아가겠죠? 동영상입니다.
이렇게 서보모터를 사용해보고 서보모터를 보다 전문적으로 다루기 위해 몇 가지 함수를 다뤄보겠습니다.먼저 서보모터를 사용하기 위해 필수적인 attach 함수를 살펴보겠습니다.이 함수는 서보 모터를 초기화하는 함수에서 위의 예제에서는 motor1.attach(9)로 사용했습니다 이 문장은 사실 motor1.attach(9,544,2400);이지만 544와 2400이 생략된 것입니다.모터 attach(연결하는 소형, 0번을 가르치는 펄스 폭, 180도를 가르치는 펄스 폭); 이렇게 가서 자세한 사용법으로 연결하는 피만 넣어 주셔도 고맙겠습니다. 서보 모터마다 같은 펄스를 입력해도 도는 값이 다르기 때문에 설정을 달리하는 경우가 있습니다. 그럴 때 펄스팩 값을 바꾸면서 해봐야 하는데 바꾸고 업로드하고 반복해서 보면 짜증이 날 것 같아요.ᄒᄒ 그래서 간단하게 설정하는 방법을 소개할게요.소스 코드는
이렇게 업로드 한 후에 시리얼 모니터를 엽니다.그 다음에 입력란에 최소값, 스페이스바, 최대값을 입력하고 엔터를 누르면 설정된 값으로 돌아옵니다.
>
이렇게 설정 값을 입력하고 엔터를 누르세요.* 주의사항 * 설정값 입력 시 값 차이가 큰 값을 입력하면 모터가 고장날 수 있습니다.ex)54 7000은 이 시간에 시험 때문에 서보 모터, 하나만 이용했지만, 서보 모터 여러개를 사용하려면 전력 부족 때문에 동작이 잘 되지 않는 것이 있습니다. 그럴 때는 외부의 전원을 연결하여 사용하십시오.이렇게 아두이노를 이용해서 서보모터를 제어하는 방법과 팁을 소개해 드렸습니다.네, 그럼 다음 시간에 만나요.