티스토리 뷰

    DC 모터가 동작하려면 아두이노에서 명령을 내려야 합니다. 가장 쉬운 방법은 아두이노에 DC 모터 동작 코드를 짜두는 것입니다. 그러면 모터는 미리 설정된 순서로 동작할 것입니다. 아니면 사람이 명령을 내릴 수도 있습니다. 가장 진화된 것은 아두이노가 주변 상황을 판단해서 모터를 제어하는 것입니다. 검은색 줄을 따라가는 라인트레이서나 초음파 센서로 장애물을 피하는 자동차를 본 적 있으실 겁니다.

    그중 아두이노로 직접 명령을 내리는 방법으로 모터를 제어해보겠습니다. 명령을 내릴 때는 블루투스로 연결된 스마트폰이나 조이스틱을 사용할 수도 있지만, 가장 쉬운 방법인 시리얼 모니터를 이용한 방법을 써보겠습니다.


<그림 1> 아두이노, DC 모터 드라이버 회로


시리얼 모니터로 DC 모터 제어하기​

    장난감 자동차를 만든다고 가정하고 DC 모터를 2개 제어해 보겠습니다. 장난감 자동차라면 무선조종이 돼야 하겠지만, 우선 시리얼 모니터로 먼저 조종해 보겠습니다. 자동차라면 앞으로 뒤로 갈 수 있어야 합니다. 그리고 왼쪽 오른쪽으로 회전도 해야 합니다. 자동차가 회전할 때는 앞 바퀴가 방향을 잡아주지만, 오른쪽 왼쪽 바퀴의 회전 방향을 다르게 해서 자동차를 돌릴 수도 있습니다.



<그림 2> 자동차 방향과 왼쪽/오른쪽 모터의 회전방향


DC 모터 회전 방향 설정하기

    L9110 모터 드라이버를 사용해서 DC 모터를 제어하겠습니다. 드라이버에는 모터별로 A, B 입력이 있습니다. A: High, B: Low일 경우 모터가 회전합니다. A: Low, B: High일 경우 모터가 반대 방향으로 회전합니다. 저희는 A: High, B: Low 상태일 때를 전진 방향으로 가정하겠습니다. 방향을 잘못 설정할까 봐 걱정할 필요는 없습니다. 만약 다 만들고 난 후 방향이 다르면 DC 모터 전원만 반대로 해 주면 됩니다.


Forward :     

  1번 모터 A Input : HIGH, B Input: LOW

  2번 모터 A Input : HIGH, B Input: LOW


Backward:    

  1번 모터 A Input : LOW, B Input: HIGH

  2번 모터 A Input : LOW, B Input: HIGH


Left          

  1번 모터 A Input : LOW, B Input: HIGH

  2번 모터 A Input : HIGH, B Input: LOW


Right:         

  1번 모터 A Input : HIGH, B Input: LOW

  2번 모터 A Input : LOW, B Input: HIGH


DC 모터와 모터 드라이버에 대한 설명은 아래글을 참고바랍니다.

[아두이노] DC모터 사용하기


완성된 회로도

<그림 3> 모터 2개가 연결된 드라이버와 아두이노 회로도



완성된 코드


int M1A = 6; //#1 Motor Input A 
int M1B = 7; //#1 Motor input B 
int M2A = 8; //#2 Motor input A
int M2B = 9; //#2 Motor input B

void setup()
{
  pinMode(M1A, OUTPUT);
  pinMode(M1B, OUTPUT);
  pinMode(M2A, OUTPUT);
  pinMode(M2B, OUTPUT);

  Serial.begin(9600);
  Serial.println("Number for Motor Control "); // Initial words 
  Serial.println("1. Forward");
  Serial.println("2. Backward");
  Serial.println("3. Left");
  Serial.println("4. Right");
  Serial.println("5. Stop");
  Serial.println();  
}

void loop()
{
  char user_input;
  
  while(Serial.available())
  {
    user_input = Serial.read(); // Get Input from Serial Monitor
    if (user_input =='1'){
       Forward();
    }
    else if(user_input =='2'){
      Backward();
    }
    else if(user_input =='3'){
      Left();
    }
    else if(user_input =='4'){
      Right();
    }
    else if(user_input =='5'){
      Stop();
    }
    else{
      Serial.println("Wrong Number");
    }
  }
}

void Forward() // Motor 1: Left Side of Car, Motor 2: Right Side of Car
{
  digitalWrite(M1A, HIGH);
  digitalWrite(M1B, LOW);
  Serial.print("Motor 1 Forward");
  Serial.println();
  
  digitalWrite(M2A, HIGH);
  digitalWrite(M2B, LOW);  
  Serial.println("Motor 2 Forward");
  Serial.println();
}

void Backward()
{
  digitalWrite(M1A, LOW); 
  digitalWrite(M1B, HIGH);
  Serial.print("Motor 1 Backward");
  Serial.println();
  
  digitalWrite(M2A, LOW); 
  digitalWrite(M2B, HIGH);
  Serial.println("Motor 2 Backward");
  Serial.println();
}

void Left()
{
  digitalWrite(M1A, LOW); 
  digitalWrite(M1B, HIGH);
  Serial.print("Motor 1 Backward");
  Serial.println();
  
  digitalWrite(M2A, HIGH); 
  digitalWrite(M2B, LOW);
  Serial.println("Motor 2 Forward");
  Serial.println();
}

void Right()
{
  digitalWrite(M1A, HIGH); 
  digitalWrite(M1B, LOW);
  Serial.print("Motor 1 Forward");
  Serial.println();
  
  digitalWrite(M2A, LOW); 
  digitalWrite(M2B, HIGH);
  Serial.println("Motor 2 Backward");
  Serial.println();
}

void Stop()
{
    digitalWrite(M1A, LOW);
    digitalWrite(M1B, LOW);
    Serial.print("Motor 1 Stop");
    Serial.println();
    
    digitalWrite(M2A, LOW);
    digitalWrite(M2B, LOW);
    Serial.println("Motor 2 Stop");
    Serial.println();
}


시리얼 모니터 화면


<그림 4> 시리얼 모니터로 DC 모터를 제어하는 모습

    

    아두이노 웹 에디터에서 실행한 모습입니다. 시리얼 모니터에 입력하는 번호에 따라 모터가 방향을 바꿔가며 회전합니다. 1번: Forward, 2번: Backward, 3번: Left, 4번: Right입니다. 5번을 입력하면 모터가 멈춥니다.

아두이노 웹 에디터 사용은 아래글을 참고 바랍니다.

[아두이노] Web Editor 사용하기



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함