2016년 10월 2일 일요일

DC 모터 다루기

DC 모터를 다루기 위해서는 H-bridge 회로가 필요합니다.
DC 모터를 제어하기 위한 H-Bridge 회로

이 회로를 직접 만드는 것은 쉽지 않으므로 Arduino Motor Shield를 사용하거나 Motor Driver IC를 이용하는 것을 추천합니다.
아두이노 모터 쉴드

Motor Driver IC (L293D)

본 포스트에서는 아두이노 모터 쉴드를 이용해서 DC 모터를 제어하는 법에 대해 설명하겠습니다. 회로도는 아래와 같습니다.

아두이노 모터 쉴드는 DC 모터를 2개까지 연결할 수 있습니다. 이 회로를 아두니티에서 제어하기 위해 제일 먼저 해야 할 일은 GameObject 구조를 만드는 것입니다.

다음으로 아두니티 Wire Editor에서 각 GameObject에 필요한 Block을 추가하고 연결합니다.

아두이노 모터 쉴드의 경우 DC 모터는 다음과 같이 제어합니다.
  • Direction Pin: HIGH이면 정회전, LOW이면 역회전 제어
  • PWM Pin: 모터의 회전 속도 제어
따라서, GenericMotor에서 Control Type은 One PWM_One Dir을 선택하면 됩니다.

아두이노 모터 쉴드의 Pin 연결은 다음과 같으니 dir pin과 pwm pin을 적절히 설정하면 됩니다.
  • Motor A
    • Direction Pin: 12
    • PWM Pin: 3
  • Motor B
    • Direction Pin: 13
    • PWM Pin: 11
이와 같이 모든 설정을 마치고 아두이노 스케치를 Export하고 Upload하면 제어할 준비가 끝납니다.


단계별 속도 제어
선풍기의 경우 모터의 회전속도를 정지, 약, 중, 강으로 단계별로 제어합니다. 아두니티에서도 이와 같이 DC 모터를 제어할 수 있습니다.
먼저, UI Button을 만들어서 단계별로 속도를 제어할 인터페이스를 만듭니다.

각 Button이 눌렸을 때 반응하려면 ButtonReactor를 사용하면 됩니다.

다음으로 할 일은 각 Button이 눌렸을 때 GenericMotor의 Value값이 바뀌도록 하면 됩니다. 이때 유용하게 사용할 수 있는 것이 ValueOutput입니다.
ValueOutput은 미리 설정한 값이 Controller에 전달되도록 작동하는 Bridge입니다.



이 ValueOutput에 GenericMotor를 제어할 각 단계별 Value를 설정하고 연결하면 됩니다.
  • 정지: Value를 0으로 설정
  • 약: Value를 0.4으로 설정
  • 중: Value를 0.7으로 설정
  • 강: Value를 1로 설정
GenericMotor는 ValueOutput에 의해 제어된다.

각 ValueOutput은 Active라는 신호를 받으면 설정된 Value를 전달합니다. ButtonReactor가 Active신호를 보내도록 한다면 GenericMotor는 Button 누름에 따라 단계별로 제어될 것입니다.
ButtonReactor가 ValueOutput을 작동시킨다.


가감속 제어
모터를 제어할 때 가감속 제어는 매우 중요한 문제입니다. 가감속 제어란 회전 속도를 변경할 때 서서히 한다는 의미입니다.
아두니티를 사용한다면 모터의 가감속 제어를 쉽게 할 수 있습니다.
CurveOutput을 사용한다면 GenericMotor의 Value를 서서히 변하도록 만들 수 있습니다.



가감속을 위해서 Curve를 아래 그림과 같이 설정합니다.

위 그림에서와 같이 모터의 속도는 서서히 증가하고 서서히 감소하도록 제어됩니다.
그러나, 정회전과 역회전은 서로 다릅니다. 따라서, CurveOutput을 2개를 만들어 정회전용과 역회전용을 만들어야 합니다.
GenericMotor에는 CurveOutput 2개 중 하나만 연결할 수 있기때문에 난감한 상황이 됩니다. 이때 사용할 수 있는 것이 OutputCombine입니다.



OutputCombine은 서로 다른 2개의 Curve를 합칠 수 있게 해줍니다. 합치는 방법은 CombineMode로 선택할 수 있습니다.
  • Minimum: 입력된 값 중 가장 작은 것을 출력한다.
  • Maximum: 입력된 값 중 가장 큰 것을 출력한다.
  • Average: 입력된 값들의 평균을 출력한다.
  • Sum: 입력된 값들의 합을 출력한다.
DC 모터의 정회전, 역회전 Curve를 합치기 위해서는 CombineMode를 Sum으로 선택해야 합니다.

정회전, 역회전의 가감속 제어를 위한 Curve를 실행시키기 위해서는 Button을 연결하면 됩니다.
이렇게해서 최종으로 연결된 그림은 다음과 같습니다.


지금까지의 DC 모터를 다루는 예제를 동영상으로 감상하시기 바랍니다.




댓글 없음:

댓글 쓰기