개발 관련/HW 관련

Arduino에서 서보모터 사용하기

by 소서리스25 2023. 5. 24.
반응형

Arduino에서 서보모터 사용

 

Arduino를 사용하면서 가장 재미있는 것 중 하나는 모터를 다루는 것이다.

일반적으로 많이 사용하는 모터의 종류로는 DC모터, 서보모터, 스테핑모터 정도 일 것이다. 이번에 다룰 것은 서보모터이다. 왜냐면 현재 남아있는 부품이 서보모터밖에 없다. 나머지는 납품돼서..;;;;

 

DC 모터나 스테핑 모터의 경우 별도의 모터 드라이버가 필요하다.

하지만 서보 모터의 경우 바로 사용할 수 있는 장점이 있다. 물론 단점도 있긴 하지만 일단 그렇다는 정도만 알자.

 

Arduino에서 서보모터 사용하는 방법은 인터넷에 많은 자료들이 있으니.. 세부적이고 구체적인 것은 생략하고 간략하게 연결에 대해서 소개한다.

 

연결은 아주 간단하다. 쉽게 신호선(PWM), GND, 5V(VCC)의 3개의 서보모터 선들을 각각 Arduino에 연결만 해주면 된다.

특히 신호선이 연결된 핀번호는 기억해 두자.

서보모터와 핀 설명

 

연결하면 다음과 같이 되며,

PWM의 신호선은 10번에 연결해 주었다.

아두이노와 서보모터 연결
아두이노와 서보모터 연결

 

그리고 원하는 각도로 움직이도록 아래의 코드를 Arduino에 업로딩 하자. 코드는 예제에 있는 Servo Sweep를 응용하였다.

추후에 통신으로 원하는 각도를 움직일 수 있도록 하기 위함이다. 응용하기엔 많이 고쳤다.;;

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <Servo.h>
 
String _inString;
Servo myservo;
 
int pos = 0;
 
 
void setup() {
  myservo.attach(10);
  
  Serial.begin(9600);
  Serial.println("Start~");
 
  delay(500);
  Active(605);
}
 
void loop() 
{
  if (Serial.available() > 0)
  {
    _inString = Serial.readString();
 
    int _index = _inString.indexOf(',');
    int _stringLength = _inString.length();
    String _speed = _inString.substring(_index + 1, _stringLength);
    String _angle = _inString.substring(2,_index);
    _inString = _inString.substring(0,2);
    
    Serial.println(_angle);
    Serial.println(_speed);
    
    if(_inString == "go")
    {
      Active(_angle.toInt(), _speed.toFloat());
    }
  }
 
  delay(20);
 
void Active(int _angle, float _speed)
{
      for (pos = 0; pos <= _angle; pos += 1)
      { 
        myservo.write(pos);
        delay(_speed);
      }
  
      for (pos = _angle; pos >= 0; pos -= 1
      {
        myservo.write(pos);
        delay(_speed);
      }
      _inString = "";  
}
cs

 

이제 바로 Arduino와 연결해서 테스트해 보자..

테스트는 Serial Monitor로 확인해 볼 수 있다. 필요에 따라서는 속도와 각도를 입력받도록 하는 게 좋을 수 있다.

그래야 제어하기가 좀 더 수월하다. 매번 속도나 각도 때문에 업로딩을 자주 하기에는 귀찮으니까.

 

 

 

작동을 확인하면 추후에 Autoit이나 Unity에서 통신을 통해 제어할 수 있다. 

그 부분은 나중에 포스팅하겠다.

반응형

댓글