정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노 1개에 servo motor 와 모터드라이브 동시 연결
hihello | 2019-04-16

아두이노 Uno에 모터드라이버와 servo 모터를 연결했는데 
servo모터를 초기화하는 과정에서 attach함수를 사용하면 잘 돌아가던 dc모터가 돌아가지 않는 문제가 발생했습니다. (attach(5), attach(12)등 여러 pin에 꽂아보며 초기화를 시켜봄)

 

아두이노 uno의 7,8,9 - 모터드라이버 out1

아두이노 uno의 10,11,2 - 모터드라이버 out4
아두이노 uno 5v - 모터드라이브 5v

아두이노 uno GND - 모터드라이브 GND

모터드라이브 12v - 1.5v 8개 총 12v 전원 인가

 

servo motor GND - 아두이노 uno GND

servo motor 5v - 아두이노 5v

servo motor pin - 아두이노 uno pin5

 

-사용한 servo motor : micro servo 9g

-모터드라이버 : L298N

 

========================================================================

#include "Servo.h"

Servo s;

void setup(){
  //serial
  Serial.begin(9600);
  
  s.attach(5);
  //s.write(100);
  
  //Motor A(right)
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);

  //Motor B(left)  
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop(){  
  if(Serial.available()){
    char input;
    input=Serial.read();
    Serial.println(input);
  
    //left moving, right stop
    if(input == 'r')
    {
      //right
      digitalWrite(7, HIGH);     // Motor A 방향설정1
      digitalWrite(8, LOW);      // Motor A 방향설정2
      analogWrite(9, 200);       // Motor A 속도조절 (0~255)
      
      //left
      digitalWrite(10, LOW);      // Motor B 방향설정1
      digitalWrite(11, HIGH);     // Motor B 방향설정2
      analogWrite(2, 200);        // Motor B 속도조절 (0~255)
      delay(1000);
      
      servo();
   
      //right
      digitalWrite(7, HIGH);     // Motor A 방향설정1
      digitalWrite(8, LOW);      // Motor A 방향설정2
      analogWrite(9, 0);       // Motor A 속도조절 (0~255)
      
      //left
      digitalWrite(10, LOW);      // Motor B 방향설정1
      digitalWrite(11, HIGH);     // Motor B 방향설정2
      analogWrite(2, 0);        // Motor B 속도조절 (0~255)
      delay(1000000);
      
      
    }
    
    //right moving, left stop
    else if(input == 'l')
    {
      //right
      digitalWrite(7, HIGH);     // Motor A 방향설정1
      digitalWrite(8, LOW);      // Motor A 방향설정2
      analogWrite(9, 170);       // Motor A 속도조절 (0~255)
      
      //left
      digitalWrite(10, LOW);      // Motor B 방향설정1
      digitalWrite(11, HIGH);     // Motor B 방향설정2
      analogWrite(2, 190);        // Motor B 속도조절 (0~255)
      delay(3000);                   // 3초 유지
      
      //right
      digitalWrite(7, HIGH);     // Motor A 방향설정1
      digitalWrite(8, LOW);      // Motor A 방향설정2
      analogWrite(9, 0);       // Motor A 속도조절 (0~255)
      
      //left
      digitalWrite(10, LOW);      // Motor B 방향설정1
      digitalWrite(11, HIGH);     // Motor B 방향설정2
      analogWrite(2, 0);        // Motor B 속도조절 (0~255)
      delay(1000000);
      
    }
  }
}

void servo(){
  s.write(90);     //각도 0도로 움직임
  delay(500);
  s.write(80);   //각도 180도로 움직임
  delay(500);
  s.write(70);   //각도 180도로 움직임
  delay(500);
  s.write(60);
  delay(500);
  s.write(50);
  delay(500);
  s.write(60);   //각도 180도로 움직임
  delay(500);
  s.write(70);
  delay(500);
  s.write(80);     //각도 0도로 움직임
  delay(500);
  s.write(90);   //각도 180도로 움직임
  delay(500);
  s.write(100);   //각도 180도로 움직임
  delay(500);
}

 

========================================================================

이전글   |    BLE와 아두이노 2019-04-16
다음글   |    아두이노 주식관련 프로젝트 제작 조언 구합니다.... 2019-04-17