[아두이노 강좌] 13. 아두이노를 사용하여 DC모터 제어하기

이번 게시물에서는 아두이노와 트랜지스터를 이용하여 어떻게 작은 DC모터를 제어하는지 설명하겠습니다.

overview.jpg

아두이노 아날로그 출력(PWM)을 모터의 속도를 조절하기 위하여 사용할 것입니다. 모터의 속도는 아두이노 IDE상의 시리얼 모티너 프로그램에서 입력되며 0~255의 값을 가집니다.

사용하려는 DC 모터입니다.

dc_motor.jpg

사용하려는 PN2222 트랜지스터입니다.

transistor.jpg

사용되는 다이오드 1N4001입니다.

저항은 270오옴이 사용되었습니다.

브레드보드 레이아웃

브레드보드를 아래와 같이 셋업합니다. 셋업시 두가지를 살펴보아야 하는데, 첫번째로 트랜지스터가 올바르게 연결되어 있는지 확인하여야 합니다. 트랜지스터의 평평한 면이 블레드보드 오르쪽으로 오게 만들어야 합니다.

두번째로 다이오드의 줄무늬가 5V전원쪽으로 위치하여야 합니다.

사용하는 모터가 250mA이상의 전류를 소비한다면, 이것은 USB포트가 공급할 수 있는 범위가 넘서 설수 있기 때문에 USB포트 대신 전원어댑터를 아두이노에 연결하여야 합니다.
breadboard.jpg

위의 그림과 같이 브레드보드를 셋업합니다.

아두이노 코드

아래의 코드를 아두이노에 업로드 합니다.

  1. int motorPin = 3;
  2. void setup()
  3. {
  4. pinMode(motorPin, OUTPUT);
  5. Serial.begin(9600);
  6. while (! Serial);
  7. Serial.println("Speed 0 to 255");
  8. }
  9. void loop()
  10. {
  11. if (Serial.available())
  12. {
  13. int speed = Serial.parseInt();
  14. if (speed >= 0 && speed <= 255)
  15. {
  16. analogWrite(motorPin, speed);
  17. }
  18. }
  19. }

트랜지스터는 스위치처럼 동작하여 모터로 가는 전력을 제어합니다. 아두이노 핀3번이 트랜지스터를 on/off하는데 사용되어 motorPin이라고 스케치에서 명명되었습니다.

스케치가 시작하면 시리얼 모니터에 제어하고 싶은 모터의 속도를 입력하라는 메세지가 뜨게 됩니다. 입력할 수 있는 값은 0에서 255까지 입니다.

serial_monitor.jpg

loop함수에서는 Serial.parseInt함수가 시리얼 모니터에 입력된 숫자를 스트링형태로 읽어 int 타입으로 변환합니다. 시리얼 모니터창에는 아무 숫자나 입력하여도 loop함수내의 if문에서 0~255사이의 값만 analogwrite합니다.

트랜지스터

DC모터는 보통 아두이노 디지털 출력 핀보다 더 많은 전력을 사용하기 때문에 직접적으로 제어를 합니다. 만약 모터를 아두이노 핀에 직접 연결한다면 아두이노 보드가 손상 받을 확률이 농후 합니다.

PN2222와 같은 트랜지스터는 아두이노의 디지털 핀에서 나오는 작은 전류를 사용하여 동작이 될 수 있기 때문에 , 스위치로 사용하여 모터와 같이 부하가 많이 걸리는 부품을 제어할 수 있습니다.

transistor.png

트랜지스터는 3개의 다리가 있습니다. 작은 양의 전류를 베이스로 흘려보내면 전기는 콜렉터에서 에미터로 흐르게 됩니다. 베이스에 흘려 보낼 작은 전류는 아두이노 디지털 출력으로 가능합니다.

schematic.jpg

위의 회로도를 보면 아두이노의 D3핀이 저항을 통하여 트랜지스터의 베이스로 연결되어 있습니다. 저항은 트랜지스터에 과도한 전류가 들어가 트랜지스터가 망가지는 것을 방지하여 주는 역활을 합니다.

모터쪽에는 다이오드가 연결되어 있습니다. 다이오는는 전기가 한방향으로만 흐르도록 만들어주는 부품입니다. 모터를 끌때, 음극 전압 스파이크가 생기고 이것은 아두이노나 트랜지스터를 망가트릴 수 있습니다. 다이오드는 모터로부터 꺼꾸로 흐르는 전류로부터 트랜지스터와 모터를 보호합니다. 


Comments