서보모터는 낮은 전압으로 큰 토크를 낼 수 있고 작동이 신속하기 때문에 카메라의 각도조절, 모형차의 핸들, 로봇의 팔다리 등과 같이 회전축을 일정한 범위내에서 각도 조절하기 웨해 사용하는 모터이다.  아두이노 환경에서 주로 사용되는 서보모터들에는 다음과 같은 것들이 있다.

 

 

미니서보모터

 

 

통상 sg90 급이라고 불리는 9그램 정도의 소형 서보모터로 사양은 다음과 같다.

 

Weight: 9 g
Dimension: 22.2 x 11.8 x 31 mm approx.
Stall torque: 1.8 kgf·cm / 2.5kg-cm
Operating speed: 0.1 s/60 degree
Operating voltage: 4.8 V (~5V)
Dead band width: 10 μs
Temperature range: 0 ºC – 55 ºC
Coreless Motor
Half rotation (rotate approximately 180 degrees )
All Nylon Gear
Connector Wire Length 150MM
Includes arm and gear assortment

 

워낙 소형이기 때문에 별도 모터용 전원 없이도 아두이노 내부 전원으로도 작동되고 다음과 같이 전용 Pan & Tilt kit에 장착하면 상하좌우로 이동하며 촬영 가능한 카메라 조절장치를 만들 수 있다.    

 

 

 

표준사이즈 서보모터

 

 

 

표준사이즈형 서보모터는 보통 가로 20mmx세로40mm 크기를 말하는데 전형적인 MG995 모델의 사양은 다음과 같다.

 

Net weight: 69g
Operating Speed : 0.17sec / 60 degrees (4.8V no load)
Operating Speed : 0.13sec / 60 degrees (6.0V no load)
Stall Torque : 13 kg-cm (180.5 oz-in) at 4.8V
Stall Torque : 15 kg-cm (208.3 oz-in) at 6V
Operation Voltage : 4.8 - 7.2Volts
Gear Type: All Metal Gears
Coreless Motor
Double Ball Bearing

 

 

실제 판매되는 것들은 크기와 모양이 다른 다양한 모델들도 많이 있는데 로봇팔용 등으로 더 큰 토크를 낼 수 있도록 조금 사이즈가 큰 것도 있고, 회전축이 양쪽에 양쪽에 있는 모델도 있고, 서보모터 내부에 프로세서가 내장되어 정밀하게 작동하는 디지털 서보모터 들도 있다.

 

    

 

 

무한회전 서보모터

 

서보모터가 작은 크기로 비교적 큰 토크를 낼 수 있기 때문에 일정 각도에서 멈추지 않고 무한회전 되도록 개조하여 DC모터 처럼 사용하는 경우도 있고, 아예 무한회전용 서보모터로 판매되기도 한다. 이러한 서보모터는 일반적인 서보모터와는 달리  90도에서 정지하고  180도 쪽으로 갈수록 정방향, 0도 쪽으로 갈수록 역방향으로 가속된다.   

 

 

서보모터 연결케이블

 

서보모터 연결메이블은 3선으로 되어 있는데, 붉은색이 전원 +, 검정색이 전원 -인것은 공통이나 제어용 신호선은 오렌지색,노란색 또는 흰색으로 되어 있다.

 

 

 

아두이노와의 연결

  

 

위와 같이 서보모터에는 별도 전원을 연결하고 - 접지선은 아두이노 GND핀에 연결해 준다. ( 소형일 경우 + 붉은선을 아두이노 5V핀에 직접 연결해도 작동은 되나 되도록이면 별도 전원으로 하는 것이 안전하다 )

 

신호선은 아두이노의 PWM용 핀( ~표시가 있는 3,5,6,9,10,11 중 하나 )연결한다.

 

샘플 프로그램

 

서보모터용 기능은 아두이노IDE에 기본으로 포함되어 있으므로 별도의  라이브러리를 설치할 필요는 없다.

 

 

- 1 line : 서보 모터용사용을 위한 파일include를 지정한다.

- 2 line : 서보모터로 사용 할 명칭을 선언한다. 

- 5 line : 서보모터 제어용으로 9번 핀을 사용함을 지정한다.

- 6 line : 단순히 원하는 각도를 write하기만 하면 해당 각도로 서보 모터가 움직인다.

 

주의사항 : 서보모터별로 움직일 수 있는 각도가 있는데 이범위를 초과하게 되면 모터가 틱틱거리며 제대로 동작하지 않고 모터에 무리를 주게 된다. 0도~180도 까지 지원하지 않고 20도~160도까지만  또는 30도~150도 까지만 지원되는 서보모터도 다수 있으므로 주의해야 한다.

 

BTS7960드라이버 모듈은  허용전류가 43A에 이르는 대용량 DC모터 드라이버로 대형 DC모터도 구동시킬 수 있다.

 

 

 

단자구조 및 용도

 

A : (GND)  : Ground

B : (VCC) : 콘트롤용 전원 ( +5V )

C : (L_IS) : Left turn current Warning  (사용안해도 됨)

D : (R_IS) :  Right turn current Warning (사용안해도 됨)

E :  (L_EN) : Left turn Enable ( HIGH를  주면 좌회전 Enable ) 

F :  (R_EN) : Right turn Enable ( HIGH를 주면 우회전 Enable ) 

G : (LPWM) : Left turn PWM ( 좌회전 세기를 PWM 방식으로 제어 )

H : (RPWM) : Right turn PWM ( 우회전 세기를 PWM 방식으로 제어 )

 

1 : 모터용 전원 공급 GND

2 : 모터용 전원 공급  ( +5.5 ~ 27 V )

3 : 모터연결 +

4 : 모터연결 -

 

 

아두이노와의 연결

 

 

-위와 같이 RPWM과 LPWM잔자를 아두이노 PWM출력 핀에 연결한다. (여기에서는 5번과 6번)

-R_EN과 L_EN은 아두이노 디지털 출력핀에 연결한다 ( 여기에서는 7번과 8번)

 

 

샘플프로그램

 

 

 

 

 

 L298N 드라이버 모듈은 2개의 DC모터 또는 1개의 스테핑모터를 제어하기 위한 모터드라이버 이다. 두개의 DC모터를 각각 속도와 방향 제어할 수 있으므로 전동 모형자동차 제작시 전진/후진 및 가속/감속과 좌회전/우회전 등 모든 동작을 이 드라이버모듈 하나로 구현할 수 있게 된다.  

 

 

L298N의 사양

 

- Work Mode: H bridge drive (dual-channel)
- Main Control Chip: L298N
- Logic Voltage: 5V
- Drive Voltage: 5V-35V
- Logic Current: 0mA-36mA
- Drive Current: 2A(MAX single-bridge)
- Storage Temperature: -20° to +135°
- Max. Power: 25W
- Size: 4.5*4.5*2.8cm
- Weight: 27g(approx.)

 

 

사용방법

 

 

- Output A와 Output B에 각각 DC모터를 연결한다.

 

- +12V Power 단자 : 모터 작동용 메인 전원을 연결하는 곳이다. 35V까지 가능하다고 되어 있으나 12V이내로 사용하는 것이 일반적이다. 

 

- Power GND : 공통 접지단자로서 아두이노 GND단자와 +12V전원의 마이너스 접지를 함께 연결한다.

 

- 5V Enable 점퍼스위치 :  내장되어 있는 5V 정전압 Regulator를 가동시킬지 여부를 선택하는 점퍼이다. 연결되어 있으면 Regulator가 가동되어 내부 제어용으로 사용되며 동시에 +5V Power단자로 5V가 출력되기 때문에 이 5V를 아두이노 등 MCU의 전원으로 활용할 수 잇다.  만약 고전압용 DC모터 사용을 위해 12V이상의 전압을 +12V단자에 가해 줄 필요가 있을 경우에는 이 점퍼핀을 빼놓아 Regulator가동을 중지시키고 별도의 5V전압을 +5V Power단자에 가해 주어야 한다.    

 

- +5V단자 : 5V 점퍼스위치가 연결되어 있을 때 (12V이내의 전압을 +12V Power단자에 연결했을 때)에는 별도의 전원을 공급해 줄 필요없고 오히려 이 단자에서 출력되는 전력을 아두이노의 VIN 작동 전원으로 사용할 수 있다. 5V 점퍼스위치가 연결되어 있지 않을 때에는 이 단자에 5V전압을 가해 주어야 한다.     

 

-A Enable과 B Enable단자 : 각각 모터 A와 B의 출력을 제어하는 신호선이고 PWM제어가 가능하다. 점퍼스위치가 연결되어 있는 상태는 5V HIGH가 되어 최대출력으로 연결하라는 의미이고 속도제어가 필요할 경우 아두이노 PWM핀에 연결하여 적절한 PWM값을 출력하면 된다.

 

-Input단자 : 방향을 제어하기 위한 신호선으로서 IN1과 IN2는 모터 A의 방향, IN3와 IN4는 모터B의 방향을 제어하기 위한 것이다.  즉 IN1과 IN2를 각각 HIGH,LOW 로 주었을 때와 LOW,HIGH로 주었을 때는 모터의 진행방향이 반대로 되게 된다.   

 

 

 

아두이노와의 연결

 

 

 

- 위와 같이 전원을 연결하고 Enable A와 Enable B 는 아두이노의 PWM용 핀에 연결한다. (여기에서는 10번과 5번 ) 

- Input 단자들은 아두이노 디지털 출력핀에 연결한다. (여기에서는 IN1~IN4를 각각 9,8,7,6번 핀에 연결)  

- 5V Enale 점퍼선을 연결하고 내부 레귤레이터 가동시킴. ( +5V단자는 연결하지 않아도 되고 필요시 이 +5V단자를 아두이노 보드의 VIN단자에 연결하여 전원공급용으로 사용해도 된다.)  

 

 

샘플프로그램

 

#define ENABLE_A  10  
#define IN1_A  9   
#define IN2_A  8   
#define ENABLE_B  5  
#define IN3_B  7   
#define IN4_B  6   
  
byte speedDC = 255;  
  
void setup()  
{  
  pinMode(ENABLE_A,OUTPUT);  
  pinMode(IN1_A,OUTPUT);  
  pinMode(IN2_A,OUTPUT);  
   pinMode(ENABLE_B,OUTPUT);  
  pinMode(IN3_B,OUTPUT);  
  pinMode(IN4_B,OUTPUT);  
}  
  
void motor_speed(int spd)  
{  
  analogWrite(ENABLE_A,spd);  
  analogWrite(ENABLE_B,spd);  
}  
  
void motor_dir(int dir)  
{  
  if ( dir == 0 ) {  // forward   
     digitalWrite(IN1_A,HIGH);  
     digitalWrite(IN2_A,LOW);  
     digitalWrite(IN3_B,HIGH);  
     digitalWrite(IN4_B,LOW);  
  }  
  else if ( dir == 1 ) { // turn right  
     digitalWrite(IN1_A,HIGH);  
     digitalWrite(IN2_A,LOW);  
     digitalWrite(IN3_B,LOW);  
     digitalWrite(IN4_B,HIGH);  
  }  
  else if ( dir == 2 ) { // turn left  
     digitalWrite(IN1_A,LOW);  
     digitalWrite(IN2_A,HIGH);  
     digitalWrite(IN3_B,HIGH);  
     digitalWrite(IN4_B,LOW);  
  }    
  else if ( dir == 4 ) { // backward  
     digitalWrite(IN1_A,LOW);  
     digitalWrite(IN2_A,HIGH);  
     digitalWrite(IN3_B,LOW);  
     digitalWrite(IN4_B,HIGH);  
  }     
}  
  
void loop()  
{  
  motor_dir(0);  
  for ( int i = 0; i < 100; i++ ) {  
      motor_speed(i);  
      delay(100);  
  }  
  motor_speed(30);  
  motor_dir(1);  
  delay(500);  
  motor_dir(0);  
  delay(3000);   
}  

 

20 ~24 line : Enable 단자에 지정하는 PWM값을 출력하여 속도를 지정한다.

26 ~52 line : INPUT단자의 값들을 변경시켜 진행방향을 제어한다.

  -28~33 : A,B 모터 둘 다 순방향으로 지정하여 전진하는 동작

  -34~39 : A 모터는 순방향 ,B 모터는 역방향으로 돌려 방향 전환한다. 

  -40~45 : A 모터는 역방향 ,B 모터는 순방향으로 돌려 반대 방향으로 전환한다. 

  -56~51 : A,B 모터 둘 다 역방향으로 지정하여 후진하는 동작

56 ~ 60 line : 전진 방향으로 속도를 가속한다.

 

구매좌표 :

 

 

1PCS New Dual H Bridge DC Stepper Motor Drive Controller Board Module L298N MOTOR DRIVER new - AliExpress 502

Smarter Shopping, Better Living! Aliexpress.com

www.aliexpress.com

 

아두이노로 DC모터를 제어하는 방법은 제어하고자 하는 기능범위와 제어하고자 하는 모터의 용량에 따라 조금씩 달라지게 된다.

 

단순 ON/OFF 제어하기

 

단순히 모터를 ON시키거나 OFF시키는 동작만을 원한다면 모터에 연결되는 전원을 ON/OFF시키기만 하면 되므로 릴레이장치를 이용하여 전원공급을 제어하면 된다.

 

 

 

방향만 전환하기 

 

모터의 속도는 그대로 두고 작동 방향만 반대로 바꾸는 제어만을 원한다면 다음과 같이 릴레이 두개로 모터에 공급되는 전원의 +/-극성을 바꿔주는 방법이 있다.

 

위와 같이 릴레이 두개를 병렬로 연결하고 아두이노에서 둘 다 NC로 SET하면 모터에 전류는 흐르지 않는다.

마찬가지로 둘 다 NO일 경우에도 모터에는 전류가 흐르지 않아 모터는 정지 상태이다.   

 

 

 

위와 같이 릴레이 상태를 둘 중 하나만 NO으로 하게 되면 모터에 전류가 흐르게 되는데,

극성 방향은 각각 반대가 되어 모터의 작동방향이 반대가 되게 된다.   

 

 

단방향 속도만 제어하기

 

모터의 작동 방향은 그대로 두고 속도만을 제어하기 원한다면 모터에 연결되는 전류의 세기만 조절하면 되기 때문에 PWM방식으로 전류의 양을 조절하면 된다. 즉, MOSFET를 이용하여 모터에 공급되는 전력의 양을 조정하면 된다.

 

 

 

 

 

 

방향과 속도를 동시제어하기  

 

DC모터의 방향과 속도를 동시에 제어하기 위해서는 전류의 극성과 세기를 함께 조절해야 하기 때문에 모터 드라이버를 사용해야 한다.  아두이노 환경에서 흔하게 사용하는 DC모터 드라이버는 L298N(소형모터용)과 BTS7960(대형모터용) 있는데,  각각의 상세 사용방법은 별도로 정리할 예정이다. 

 

 

L298N 드라이버 모듈은 2개의 DC모터 또는 하나의 스테핑 모터를 제어하기 위한 것인데, 12V,허용전류는2A까지이다.

 

 

 

 

BTS7960 드라이버 모듈은 하나의 DC모터를 제어하기 위한 것으로 7~24V, 허용전류가 43A인 대용량 드라이버이다.

 

+ Recent posts