[아두이노] L293D Motor Shield+DC MOTOR 제어

IOT/아두이노|2019. 5. 19. 09:00

[아두이노] L293D Motor Shield+DC MOTOR 제어 



지난 시간에 74HC595 칩을 이용하여 2개의 L293D 칩을 제어함으로써 4개의 DC Motor를 제어를 가상시뮬레이터에서 실험을 하였습니다. 오늘은 L293D Motor Shield를 이용하여 실제로 DC Motor를 제어하는 실험을 하겠습니다.


1. L293D Motor Shield



  • A : 전원핀
  • B : Servo핀
  • C :외부전원사용선택

M1, M2, M3, M4은 DC Motor 제어핀으로 총 4개의 DC Motor를 제어 할 수 있습니다. 참고로, M1, M2핀을 두개를 합치면 Stepper Motor를 제어할 수 있다. L293D Motor Shield은 비슷하지만 약간씩 다른 형태를 취하고 있는데 제가 사용하는 Motor Shield은 디지털핀을 꼽을 수 있는 곳이 없습니다. 아날로그핀은 오른쪽 하단에 A0~A5까지 꼽을 수 있게 되어 있지만 위에 0~13번까지의 디지털핀은 납땜하거나 선을 아두이노와 쉴드 사이에 묶어야 연결할 수 있기 때문에 좀 불편합니다.
핀을 많이사용할 경우 제가 쓰고 있는 L293D Motor Shield은 좀 문제가 있겠죠. 제가하는 실험은 A0~A5번핀 정도만 있어도 충분히 실험할 수 있기 때문에 사용하는데에는 문제는 없습니다.

2. L293D Motor Shield+DC MOTOR 회로도




동일한 L293D Motor Shield 이미지를 찾았는데 못 찾고 가장 유사한 이미지로 회로도를 표현했는데 거의 동일한 L293D Motor Shield 이미지라고 생각하셔도 무방합니다. L293D Motor Shield를 아두이노우노 위에 꼽으면 됩니다 하나의 몸체로 만드시고 외부전원은 보시는 것과 같이 핀에 연결하고 DC Motor은 실험에서는 M3에 연결했습니다. 참고로 실험하실 때 원하는 위치 M1~M4 중에서 선택하셔서 실험하시면 됩니다.

3. L293D Motor Shield 라이브러리 설치



라이브러리 관리자에서 "Motor shield" 라고 치시면 여러개가 검색됩니다. 비슷한 이름의 두개의 버전이 있는데 빨간색으로 표시한 라이브러리를 설치하시면 됩니다.


그리고 라이브러리 혹시 검색이 안된다면 위 라이브러리 출처에 가셔서 다운받아서 설치하시면 됩니다.

주의사항 : 실제 실험에 사용하시는 Motor Shield에 맞는 라이브러리를 설치해야 합니다. 다른 Motor Shield라면 다른 라이브러리를 찾아서 설치해야 합니다.

4. 코딩


DC Motor

#include <AFMotor.h>
  • AF_DCMotor motor(3) : M3핀을 DC Motor 제어용으로 사용.
  • motor.setSpeed(200) : 모터 속도
  • motor.run(FORWARD) : FORWARD, BACKWARD, RELEASE 회전 명령

2초 단위로 전진, 후진, 정지를 테스트 명령을 내려 볼까요.

  motor.run(FORWARD);
  delay(2000);
  
  motor.run(BACKWARD);
  delay(2000);
 
  motor.run(RELEASE);
  delay(2000);

라이브러리를 이용하니깐 따로 코딩할 부분이 없습니다. 무지 간단하게 DC Motor를 제어할 수 있습니다. 이미 가상시뮬레이터에서 동작 원리와 제어 코딩에 대해 배웠으니깐 따로 설명은 안드리겠습니다. 라이브러리를 이용하면 motor.run() 함수를 이용하여 DC Motor 회전제어에 대한 명령을 한줄로 내릴 수 있게 되었고 위와 같은 코딩은 구지 설명을 안하더라도 전진, 후진, 해제라는 의미만으로 무슨 명령인지 쉽게 알 수 있을거라 생각합니다.

테스트 할 전체 코딩

#include <AFMotor.h>

AF_DCMotor motor(3);

void setup() {
  motor.setSpeed(200);
  motor.run(RELEASE);
}

void loop() {
  motor.run(FORWARD);
  delay(2000);
  
  motor.run(BACKWARD);
  delay(2000);
 
  motor.run(RELEASE);
  delay(2000);
}

5. 결과




마무리


오늘 실험은 지난 시간의 가상시뮬레이터로 실험한 내용과 동일합니다. 단지 차이점을 실제로 실험하는 것과 Motor Shield 라이브러리를 사용한다는 점만 다를 뿐이죠. 실제로 라이브러리를 이용하니깐 DC Motor를 제어하는 데 그렇게 어렵지 않죠.

 motor.run(FORWARD) => 전진
 motor.run(BACKWARD) => 후진
 motor.run(RELEASE) => 해제(정지)

이 세가지 명령을 통해 DC Motor를 마음대로 회전 시킬 수 있게 되었습니다. 그리고, motor.setSpeed(속도) 함수로 원하는 속도로 회전을 시킬 수 있게 되었습니다.

DC Motor 1개를 오늘 배운 것처럼 어렵지 않게 제어 했으니깐 DC Motor 2개를 제어하더라도 어렵지 않게 제어가 가능하겠죠.

DC Motor 2개가 있으면 2륜 RC카를 만들 수 있습니다. 오늘 배운 회전 관련 3개의 함수와 속도함수 1개만 알면 RC카 구현도 어렵지 않을 거라 생각됩니다.

한번 여러분들은 오늘 배운 4개의 함수를 가지고 RC카 구현에 대해 상상의 나래를 펼처 보세요.


댓글()