SPAC2 L298N을 사용한 구동 테스트

아두이노 우노를 이용한 2WD 자동차 스마트카 로봇 SPAC2입니다. SPAC1의 상위모델로 충전용 18650배터리 2개(7.4V)를 사용하여 강력한 구동이 가능하고 오랜 주행이 가능합니다. 여기서는 L298N 모터구동드라이브 모듈을 사용하여 양쪽 바퀴 구동 테스트를 합니다.

1. 전진 테스트

양쪽바퀴를 구동하여 전진하는 실험입니다. 바퀴의 회전방향이 다른 경우 L298N 모듈과 연결된 모터 결선을 반대로 연결하시면 바퀴의 회전방향이 바뀝니다.

 

 

 

소스코드

아래는 소스코드입니다. 아두이노 IDE에 붙여넣기 하여 컴파일하고 업로드합니다.

// SPAC2 전진실험

int Left_motor_back=8;     //좌측모터후진(IN1)
int Left_motor_go=9;     //좌측모터전진(IN2)

int Right_motor_go=10;    // 우측모터전진(IN3)
int Right_motor_back=11;    // 우측모터후진(IN4)

void setup()
{
  //모터구동을을 위한 초기화
  pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM)
  pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)
  pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM) 
  pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM)
}
void run(int time)     // 전진
{
  digitalWrite(Right_motor_go,HIGH);  // 우측모터전진
  digitalWrite(Right_motor_back,LOW);     
  analogWrite(Right_motor_go,200);//PWM값 0~255 조정,모터의 회전속도 조절.
  analogWrite(Right_motor_back,0);
  digitalWrite(Left_motor_go,HIGH);  // 좌측모터전진
  digitalWrite(Left_motor_back,LOW);
  analogWrite(Left_motor_go,200);//PWM값 0~255 조정,모터의 회전속도 조절.
  analogWrite(Left_motor_back,0);
  delay(time * 100);   //딜레이  
}

void loop()
{
  delay(500);
  run(10); 	//전진
}

2. 전후좌우 구동 테스트

양쪽바퀴를 구동하여 후진, 직진, 좌회전, 우회전, 우방향스핀, 좌방향스핀을 반복하는 테스트입니다. 바퀴의 회전방향이 다른 경우 L298N 모듈과 연결된 모터 결선을 반대로 연결하시면 바퀴의 회전방향이 바뀝니다.

소스코드

아래는 소스코드입니다. 아두이노 IDE에 붙여넣기 하여 컴파일하고 업로드합니다.

// SPAC2 전후좌우 구동실험

int Left_motor_back=8;     //좌측모터후진(IN1)
int Left_motor_go=9;     //좌측모터전진(IN2)

int Right_motor_go=10;    // 우측모터전진(IN3)
int Right_motor_back=11;    // 우측모터후진(IN4)

void setup()
{
  //모터구동을을 위한 초기화
  pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM)
  pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)
  pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM) 
  pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM)
}
void run(int time)     // 전진
{
  digitalWrite(Right_motor_go,HIGH);  // 우측모터전진
  digitalWrite(Right_motor_back,LOW);     
  analogWrite(Right_motor_go,200);//PWM값 0~255 조정,모터의 회전속도 조절.
  analogWrite(Right_motor_back,0);
  digitalWrite(Left_motor_go,HIGH);  // 좌측모터전진
  digitalWrite(Left_motor_back,LOW);
  analogWrite(Left_motor_go,200);//PWM값 0~255 조정,모터의 회전속도 조절.
  analogWrite(Left_motor_back,0);
  delay(time * 100);   //딜레이  
}

void brake(int time)         //제동, 정지
{
  digitalWrite(Right_motor_go,LOW);
  digitalWrite(Right_motor_back,LOW);
  digitalWrite(Left_motor_go,LOW);
  digitalWrite(Left_motor_back,LOW);
  delay(time * 100);//딜레이  
}

void left(int time)         //좌회전(좌측정지,우측직진)
{
  digitalWrite(Right_motor_go,HIGH);	// 우측모터전진
  digitalWrite(Right_motor_back,LOW);
  analogWrite(Right_motor_go,200); 
  analogWrite(Right_motor_back,0);//PWM값 0~255 조정,모터의 회전속도 조절.
  digitalWrite(Left_motor_go,LOW);   //좌측모터정지
  digitalWrite(Left_motor_back,LOW);
  analogWrite(Left_motor_go,0); 
  analogWrite(Left_motor_back,0);//PWM값 0~255 조정,모터의 회전속도 조절.
  delay(time * 100);	//딜레이  
}

void spin_left(int time)         //좌측스핀(좌측후진,우측직진)
{
  digitalWrite(Right_motor_go,HIGH);	// 우측모터전진
  digitalWrite(Right_motor_back,LOW);
  analogWrite(Right_motor_go,200); 
  analogWrite(Right_motor_back,0);//PWM값 0~255 조정,모터의 회전속도 조절.
  digitalWrite(Left_motor_go,LOW);   //좌측모터후진
  digitalWrite(Left_motor_back,HIGH);
  analogWrite(Left_motor_go,0); 
  analogWrite(Left_motor_back,200);//PWM값 0~255 조정,모터의 회전속도 조절.
  delay(time * 100);	//딜레이  
}

void right(int time)        //우회전(우측정지, 좌측직진)
{
  digitalWrite(Right_motor_go,LOW);   //우측모터정지
  digitalWrite(Right_motor_back,LOW);
  analogWrite(Right_motor_go,0); 
  analogWrite(Right_motor_back,0);//PWM값 0~255 조정,모터의 회전속도 조절.
  digitalWrite(Left_motor_go,HIGH);//좌측모터전진
  digitalWrite(Left_motor_back,LOW);
  analogWrite(Left_motor_go,200); 
  analogWrite(Left_motor_back,0);//PWM값 0~255 조정,모터의 회전속도 조절.
  delay(time * 100);	//딜레이  
}

void spin_right(int time)        //우측스핀(우측후진, 좌측전진)
{
  digitalWrite(Right_motor_go,LOW);   //우측모터후진
  digitalWrite(Right_motor_back,HIGH);
  analogWrite(Right_motor_go,0); 
  analogWrite(Right_motor_back,200);//PWM값 0~255 조정,모터의 회전속도 조절.
  digitalWrite(Left_motor_go,HIGH);//좌측모터전진
  digitalWrite(Left_motor_back,LOW);
  analogWrite(Left_motor_go,200); 
  analogWrite(Left_motor_back,0);//PWM값 0~255 조정,모터의 회전속도 조절.
  delay(time * 100);	//딜레이  
}

void back(int time)          //후진
{
  digitalWrite(Right_motor_go,LOW);  //우측모터후진
  digitalWrite(Right_motor_back,HIGH);
  analogWrite(Right_motor_go,0);
  analogWrite(Right_motor_back,150);//PWM값 0~255 조정,모터의 회전속도 조절.
  digitalWrite(Left_motor_go,LOW);  //좌측모터후진
  digitalWrite(Left_motor_back,HIGH);
  analogWrite(Left_motor_go,0);
  analogWrite(Left_motor_back,150);//PWM값 0~255 조정,모터의 회전속도 조절.
  delay(time * 100);     //딜레이  
}

void loop()
{
  delay(2000); //2초후 구동
  back(10); //1초 후진
  brake(5);//0.5초 정지
  run(10);//1초 전진
  brake(5);//0.5초 정지
  left(10);//1초 좌회전
  right(10);//1초 우회전
  spin_right(20);//2초 우측스핀
  spin_left(20);//2초 좌측스핀
  brake(5);//정지
}
Topic: