아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo

목차
1) DC 모터란?
2) 가변저항을 이용한 모터 속도 제어하기
3) 스위치를 이용하여 모터 방향 바꾸기
4) 스위치를 이용하여 기어드모터 방향 바꾸기
5) 버튼 두개를 연결하여 기어드모터 방향 바꾸기

1. DC 모터란?

아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo

DC(Direct Current) 직류 모터이다. (교류 Alternative Current = AC모터)

직류전원으로 동작하며, 다른 고정장치에 비해 가볍고 간단하다.

DC 모터는 속도 및 방향 제어 등이 쉽다.

미니카 같은 장난감 모터로도 사용하는 DC 모터,

DC 모터 선택 기준은,

RPM(Revolutions Per Minute) : 분당 회전수, 예를 들어 500 rpm은 분당 500회전을 뜻함.

이번 수업에서는 RPM을 조절하기 위해서 PWM 포트에 연결하여 속도를 조절해 보겠습니다!


2. 가변저항을

이용한 모터 속도 제어하기

아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo
아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo

int mpin = 9;

void setup()
{

  pinMode(mpin , OUTPUT);
  Serial.begin(9600);

}

void loop()
{

  int val = analogRead(A5);			 	//아날로그 입력을 val에 입력받는다.

  int convertval = map(val,0,1023,0,255);
  //val변수가 가지고 있는 0~1024 센서 값을 0~255로 연산하여 convertval변수값에 넣어준다.

  Serial.println(convertval); 				//가변저항 값을 출력한다.
  analogWrite(mpin,conval);			 	//가변저항 값에 따라 모터의 속도를 조절한다.
  
  delay(100);

}

3. 스위치를 이용하여 모터 방향 바꾸기

아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo
void setup()
{
  pinMode(9 , OUTPUT);	//pwm 지원
  pinMode(10, OUTPUT);	//pwm 지원
  pinMode(8, INPUT); 	//스위치 입력 받기위한 핀
  Serial.begin(9600);
}

void loop()
{
  int val = analogRead(A5);		
  int convertval = map(val,0,1023,0,255);
  
  int inputSwitch = digitalRead(8);		//스위치값을 inputSwitch 변수에 넣는다
  int OnOff = inputSwitch;			//입력받은 스위치값이 On 인지 Off 인지 확인하기위한 변수
  
  if(inputSwitch == LOW){			//스위치의 값이 LOW이면 9번 핀에 전원을 넣고
    analogWrite(9,convertval);
    analogWrite(10,0);
  }
  else{					//스위치의 값이 HIGH이면 10번 핀에 전원을 넣는다
    analogWrite(9,0);
    analogWrite(10,convertval);
  }
  
  Serial.print(OnOff);			//스위치가 On인지 Off인지 출력한다
  Serial.print(" ");					
  Serial.println(convertval);		//가변저항으로 받는 전압의 값을 출력한다
  delay(100);
  
  
}

4. 스위치를 이용하여 기어드모터 방향 바꾸기

아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo
아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo
아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo

5. 버튼 두개를 연결하여 기어드모터 방향 바꾸기

아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo
아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo
아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo
참조: https://m.blog.naver.com/icbanq/2215999245

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

아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo

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

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

아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo

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

아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo

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

아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo

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

브레드보드 레이아웃

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

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

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

아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo

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

아두이노 코드

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

  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까지 입니다.

아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo

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

트랜지스터

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

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

아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo

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

아두이노 dc모터 속도제어 - adu-ino dcmoteo sogdojeeo

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

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