[아두이노] DC MOTOR 제어

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

[아두이노] DC MOTOR 제어 



오늘은 DC Motor의 회전 방향 제어와 속도 제어를 가단히 실험 하겠습니다. 회전 방향은 전류 공급의 +, - 의 위치를 바꿈으로써 DC Motor의 회전 방향을 바뀌게 되고 npn 트랜지스터를 이용하여 전류의 세기를 조절하여 DC Motor의 속도를 조절을 할 수 있습니다. 이 두가지에 대해서 간단히 살펴 봅시다.

1. DC MOTOR


DC Motor에서 모터의 회전수를 RPM이라고 합니다. 5V의 전류에 대한 회전수가 가상시뮬레이터에서는 170RPM이 나왔네요. 이건 그냥 가상시뮬레이터에서의 RPM이니깐 그렇게 까지 크게 의미를 두지 마세요. 그냥, RPM이란 단어가 나오면 모터의 회전수라고 생각하시면 됩니다.

DC Motor의 전류 +, - 방향에 따라서 정방향과 역방향으로 바뀝니다. 아래 이미지를 잘 살펴 보세요.

첫번째, 이미지는 전류 공급이 정방향 회전입니다.


두번째, 이미지는 왼쪽은 DC Motor +, - 연결은 정방향이라고 했을 때 오른쪽 DC Motor +, - 방향을 바꾸면 역방향으로 회전을 하게 됩니다.


전류 공급에 따라서 어떤 느낌으로 회전 되시는지 아실 수 있겠죠.

2. npn 트랜지스터 DC Motor 속도 제어


1) 회로도


  • 준비물 : npn 트랜지스터, 가변저항 1개, 저항 1k옴, 다이오드 1개, DC Motor, Power Supply, 아두이노우노
  • 내용 : npn 트랜지스터를 이용해서 DC Motor의 회전 속도를 제어를 해보자.

아두이노에서 전류를 공급 받아도 되지만 될 수 있으면 DC Motor를 제어할 때는 외부로 부터 전류를 공급하는 게 좋습니다. DC Motor를 아두이노와 전류를 공유하게 되면 아두이노에 정상적으로 전류 공급이 이루어지지 않을 수 있으니깐 될 수 있으면 전류를 따로 쓰는게 좋습니다.


대충 회로도는 위의 모습처럼 표현 했습니다. 위 이미지로는 좀 복잡해 보일 수 있기 때문에 스케메틱 회로도로 그린 아래 이미지로 살펴 보세요.


트랜지스터는 증폭 부품입니다. 따로 해당 부분만 빼내면 아래 그림으로 살펴 볼 수 있습니다.


위 그림처럼 전류의 방향이 화살표 처럼 흐를때 아두이노의 9번핀에 입력 전류에 의해서 증폭이 일어나게 됩니다. 실험의 아두이노 9번핀에 전류(0~255)값에 의해서 0일때 전류가 흐르지 않고 255일때 전류가 최대치로 흐르게 됩니다. 쉽게, 수도꼭지 역활을 수행한다고 생각하면 될 듯 싶네요.

여기서,


Collector, Base, Emitter 로 나눌 수 있습니다. Base 아두이노의 9번 핀이였었죠. Collector는 Vcc, Emitter는 End로 연결했을 때 Collector에 들어오는 전류는 Base에 입력에 전류에 의해서 증폭이 일어나는 원리인데요.

실험에서는 그냥 전류의 양을 조절한다고만 간단히 초보분들은 넘어가셔도 됩니다. 전자회로를 전문적으로 공부하실 분이라면 따로 npn, pnp 트랜지스터의 동작원리를 구글검색으로 통해서 다 찾아보고 깊게 이론 공부를 하셔야 겠지만 초보분들은 우선 DC Motor의 움직이는 것만 이해해 주셔도 충분합니다.

위 DC Motor에 보면 다이오드가 Motor에 연결되어 있는 그 이유는 역전류를 막기 위해서 입니다. 전류의 방향을 한방향으로만 진행되도록 하기 위한 안전장치라고 보시면 됩니다.

2) 코딩


int motorPin = 9;

void setup() 
{ 
  Serial.begin(9600);
  pinMode(motorPin, OUTPUT);  
}

void loop() 
{ 
  int speed = map(analogRead(A0), 0, 1023, 0, 255); 
  analogWrite(motorPin, speed);
  Serial.println(speed);
}

코딩은 간단합니다. 위 코딩을 보시면 우선 Dc Motor를 제어할 핀은 PWM 디지털핀으로 아날로그 0~255값을 출력하는 핀으로 제어하게 됩니다.

map(analogRead(A0), 0, 1023, 0, 255);

가변저항기를 이용하기 때문에 아날로그 0~1023값을 읽습니다. 읽은 값을 map()함수로 0~255값으로 변환 시킵니다. 이 값을 다시 npn 트랜지스터의 base 입력값으로 해서 전류의 세기를 조절하게 됩니다.

analogWrite(motorPin, speed);

어려운 코딩은 없죠. 기존에 다 쓰던 pinMode(), analogRead(), map(), analogWrite() 함수들은 지금까지 계속 반복되어 사용하는 함수임으로 이제는 해당 함수의 설명은 생략하겠습니다.

Serial.println(speed);

Motor의 속도를 speed의 값이 가변저항기로 입력받는데 그 값은 아래와 같습니다.


이 값으로 전류의 세기를 조절하게 됩니다. 그래서 실제 Motor의 회전 속도가 speed의 값에 따라서 달라지게 됩니다

3) 결과


가상시뮬레이터에서 가변저항을 조절하면 Motor의 RPM 수의 변합니다.


마무리


DC Motor 회전 방향과 속도에 대해서 살펴보았습니다. 오늘 살펴본 내용에서 +, - 방향을 어떻게 DC Motor에 연결되느냐에 따라서 회전의 방향을 바뀌는 것을 알게 되었고, 전류를 조절함으로 DC Motor의 속도를 조절 할 수 있게 되었습니다. 이 의미는 무척 중요합니다. RC카와 같은 것을 조정할 때 정면으로 달리고 싶으면 전류 방향은 정방향으로 맞춰서 정면으로 달리게 하였다면 후진을 할려고 한다면 전류 방향을 반대로 하여 역방향 회전을 시키게 하면 됩니다. 그리고 진행 방향에 속도를 조절을 할 수 있습니다. 초보분들은 위의 회로도의 npn 회로도를 그렇게 까지 깊게 이해하실 필요는 없습니다. 단지 DC Motor의 속도를 간단히 가상시뮬레이터에서 테스트 하기 위함이였으니깐요. 나중에 모터쉴드를 이용하면 쉽게 회전 방향과 속도를 제어할 수 있기 때문에 DC Motor의 회전과 속도에 대한 의미만 이해하시면 됩니다.


댓글()