취소

커뮤니티

가이드

서포트

전체

아두이노 응용 순정 모터 쉴드 이용해서 모터 제어하기

아두이노하면 떠오르는 가장 큰 장점이 무엇인가? 손 쉽게 할 수 있도록 많은 라이브러리가 있는거? 오픈하드웨어라 많은 파생제품이 나온다는 것? 개인적으로는 쉴드의 개념이다. 간단하게 적층 하는 것으로 모듈을 손 쉽게 추가 할 수 있다는 것이 아두이노의 가장 큰 장점이 아닐까 싶다. 이번에는 아두이노에서 나오는 순정 모터쉴드를 이용해서 모터를 제어해보도록 하자.

순정 모터 쉴드

DC모터, 스태핑모터, 서보모터 등을 제어하기 위해서 사용하는 모터쉴드로 L298칩을 이용해서 만들어져있다. 서보모터 같은 경우 아래의 네모 친 부분을 통해서 제어가 가능하며, 스태핑모터와 DC모터 같은 경우 동그라미 친 곳을 통해서 제어가 가능하다.

동그라미 친 부분에 외부 전원 인가가 가능하도록 만들어져 있어, 최대 12V 전압에서 채널 당 최대 2A 또는 한 채널에 4A의 전류를 제어 할 수 있다. 모터가 9V 이상의 전원을 필요로 하는 경우 뒷면의 'Vin Connect' 점퍼를 절단하여 아두이노 보드와 모터 쉴드의 전원을 분리하여 입력되는 외부전원을 통해서 제어가 가능하다. 'Vin'스크류 터미널의 최대 입력 전압은 18V 이다.

핀 배치도

- Screw terminal to connect the motors and their power supply.  - 2 TinkerKit connectors for two Analog Inputs (in white), connected to A2 and A3.  - 2 TinkerKit connectors for two Aanlog Outputs (in orange in the middle), connected to PWM outputs on pins D5 and D6.  - 2 TinkerKit connectors for the TWI interface (in white with 4 pins), one for input and the other one for output.

DC모터 제어

시리얼 통신으로 0~255 사이의 값을 입력 받아서 모터의 속도를 제어하는 방식으로 CH. A 에 연결하여 제어한다. 

#define DIR 12 // 방향 #define PWM 3  // 속도 #define BRK 9  // 브레이크   int Speed = 0;   void setup() {   // put your setup code here, to run once:   Serial.begin(9600); // 시리얼 통신 설정      pinMode(DIR, OUTPUT);   pinMode(BRK, OUTPUT);      digitalWrite(BRK, LOW); // 브레이크 해제   digitalWrite(DIR HIGH); // 정방향 }   void loop() {   // put your main code here, to run repeatedly:   if (Serial.available() > 0) { // 시리얼 입력이 있으면     Speed = Serial.read();  // 스피드에 저장     if(Speed > 255) Speed = 255; // 255보다 크면 255로 제한     if(Speed < 0)   Spped = 0;   // 0보다 작으면 0으로 제한   }     analogWrite(PWM, Speed); // 속도 부여   delay(100); }

스태핑모터 제어

시리얼 통신으로 0~255 사이의 값을 받아서 스태핑 모터를 제어한다. 배선 같은 경우는 스태핑 모터별로 조금씩 차이가 있기 때문에 데이터 시트를 참고하는 것을 권장한다. ( 아니 강요한다. )

#include <Stepper.h>   #define DIR_A 12 #define DIR_B 13 #define PWM_A 3 #define PWM_B 11 #define BRK_A 9 #define BRK_B 8   int Step = 200;   Stepper myStepper(Step, 12,13); // 초기 PWM 지정   void setup () {   Serial.begin(9600);     // pin 연결   pinMode(PWM_A, OUTPUT);   pinMode(PWM_B, OUTPUT);   pinMode(BRK_A, OUTPUT);   pinMode(BRK_B, OUTPUT);     // 초기화   digitalWrite(PWM_A, HIGH);   digitalWrite(PWM_B, HIGH);   digitalWrite(BRK_A, LOW);   digitalWrite(BRK_B, LOW);   myStepper.setSpeed(Step); }   void loop () {   if (Serial.available() > 0) { // 시리얼 입력이 있으면     Step = Serial.read();  // Step에 저장     if(Step > 255) Step = 255; // 255보다 크면 255로 제한     if(Step < 0)   Step = 0;   // 0보다 작으면 0으로 제한   }     myStepper.step(Step);   delay(2000); }

어떠한가? 생각보다 다른 제어와 별 반 차이없이 간단하다고 느껴지지 않는가? 이렇기 때문에 개인적으로 아두이노의 가장 큰 장점은 쉴드라고 생각하는 것이다. 쉴드를 이용해서 여러가지 방법으로 모터를 제어해보길 바란다.

소스코드에는 정답이 없다. 다양한 생각이 있듯 다양한 방법이 있으며, 이 예제들은 그 중 하나다.