아두이노 dc모터 정지 코드 - adu-ino dcmoteo jeongji kodeu

[오늘의 타겟] DC 모터 / 모터 드라이버 

- DC 모터

아두이노 dc모터 정지 코드 - adu-ino dcmoteo jeongji kodeu

- 2개에 선에 전압을 입력하면 모터가 돌아간다.

아두이노 dc모터 정지 코드 - adu-ino dcmoteo jeongji kodeu

- 전압의 방향을 반대로 입력하면 모터도 반대로 돌아간다.

- 참고자료

https://m.blog.naver.com/kids_power/221572444008

[아두이노/DC모터] DC 모터와 모터 드라이버 사용법

안녕하세요! 휴몬랩 입니다. 오늘은 DC 모터와 모터 드라이버 사용법에 대해 알아볼까 합니다. 준비물 아...

blog.naver.com

아두이노 dc모터 정지 코드 - adu-ino dcmoteo jeongji kodeu

- 모터 드라이브 : L298N

   ->모터 가동에 필요한 충분한 전류, 전압을 제공.

아두이노 dc모터 정지 코드 - adu-ino dcmoteo jeongji kodeu

참고자료. 모터드라이브를 사용하는 이유.

https://blog.naver.com/PostView.nhn?blogId=ycpiglet&logNo=222050336319&categoryNo=29&parentCategoryNo=0 

모터 드라이버의 사용 이유 (DC모터, 아두이노)

DC 모터 모터란 전기 에너지를 기계 에너지로 변환해주는 장치이다. 굉장히 많은 영역에서 모터를 사용하...

blog.naver.com

아두이노 dc모터 정지 코드 - adu-ino dcmoteo jeongji kodeu
*** 오늘 실습 재료
DC 모터 2개
바퀴 2개
모터드라이버(빨간색)
아두이노
아두이노 선
아두이노 케이블

[실습 1] 모터 1개 전진-후진 기본코드

- 사전작업 : 5v 인에이블 점퍼제거

아두이노 dc모터 정지 코드 - adu-ino dcmoteo jeongji kodeu

 - 모터드라이브 기본 회로 구성

아두이노 dc모터 정지 코드 - adu-ino dcmoteo jeongji kodeu

- 바퀴 결합

아두이노 dc모터 정지 코드 - adu-ino dcmoteo jeongji kodeu

- 아두이노 모터 드라이버 구동회로

// 3번과 4번 핀은 모터 제어에 관한 핀
int IN1Pin = 3;
int IN2Pin = 4;

// 5번핀은 모터의 힘을 설정해주는 핀
int ENPin = 5;

void setup() {
  pinMode(IN1Pin, OUTPUT);
  pinMode(IN2Pin, OUTPUT); // 3, 4번 제어핀들은 핀모드를 출력은로 설정
  analogWrite(ENPin, 255); //5번 핀에 255의 최대 힘을 설정한다. 
}

void loop() {    
  //Go : 핀 3, 핀 4 에 신호를 다르게 하면 전진
  digitalWrite(IN1Pin, HIGH); 
  digitalWrite(IN2Pin, LOW);
  delay(5000);//5sec 

  //Back : 핀 3, 핀 4 에 신호를 다르게 하면 후진
  digitalWrite(IN1Pin, LOW);
  digitalWrite(IN2Pin, HIGH);  
  delay(5000);//5sec
  
  //Brake (Stop) 핀 3, 4에 똑같이 High를 주거나 Low을 주면 은 멈춘다.
  digitalWrite(IN1Pin, HIGH);
  digitalWrite(IN2Pin, HIGH);
  delay(5000);//1sec
}

[실습 2] 모터 1개 전진-후진울 시리얼모니터로 제어

- 실습1 회로를 그대로 씁니다.

- 시리얼 모니터란? 

  -> 컴퓨터로 아두이노를 제어하기 위한 통신 포트

아두이노 dc모터 정지 코드 - adu-ino dcmoteo jeongji kodeu

 - 시리얼 통신으로 모터 제어 코드

int IN1Pin = 3;
int IN2Pin = 4;
int ENPin = 5;


void setup() {
  pinMode(IN1Pin, OUTPUT);
  pinMode(IN2Pin, OUTPUT);
  analogWrite(ENPin, 255); //Max Speed
  Serial.begin(9600);
  Serial.println("start !! ");
}

void loop() {
  if(Serial.available())  //시리얼모니터에서 데이터가 들어오면
  {
    char in_data;         // 입력된 데이터 저장을 위한 변수
    in_data = Serial.read();  //입력된 데이터 in_data에 저장
     Serial.print("data : ");
     Serial.println(in_data);
     
    if(in_data == '1')    //입력된 데이터가 '1'이라면
    {
     digitalWrite(IN1Pin, HIGH); 
     digitalWrite(IN2Pin, LOW);
    }
    else if(in_data == '2') //입력된 데이터가 '2'이라면
    {
    //뒤로 회전 (어떤 방향으로 꽂았느냐에 따라서 방향 반대)
      digitalWrite(IN1Pin, LOW);
      digitalWrite(IN2Pin, HIGH);  
    }
    else if(in_data == '3') //입력된 데이터가 '3'이라면
    {
       //회전 정지
      digitalWrite(IN1Pin, HIGH);
      digitalWrite(IN2Pin, HIGH);
    }
  }
}

자료 출처 : https://codingrun.com/111

아래 사진과 같이 잘 작동 하나요?

아두이노 dc모터 정지 코드 - adu-ino dcmoteo jeongji kodeu

[실습 3] 모터 2개를 제어 해 보자.

모터 2개 제어 회로 주요 이슈

- 모터가 2개부터는 외부 전원에서 전원을 모터드라이브에 추가로 공급해 주어야 한다.

- 이때 포인트는 외부 전압원  GND 와 아두이노 GND를 연결하여 전기적으로 평형을 맞추어야 한다.

- 위 회로에서는  아두이노  V_in  에 외부 전원 VCC 를 공급해 줌으로 아두이노에게도 전원을 공급한다.

실습 회로와 프로그래밍 코드는 아래 url을 타고 들어가서 진행하세요~!

https://steemit.com/arduino/@jhis21c/dc-dc

DC 모터 드라이버를 이용해서 DC모터 제어하기 — Steemit

이번 튜토리얼 에서는 DC 모터 드라이버를 이용해서 2개의 DC모터를 제어 하는 방법을 배워 보도록 하겠습니다. DC 모터는 DC(직류)전원으로 작동하는 모터를 말하며 모형 자동차, 무선조정용 장난

steemit.com

아두이노 dc모터 정지 코드 - adu-ino dcmoteo jeongji kodeu

[도전 과제] 

모터 2개 회로를 시리얼 모니터로 제어 해보세요.

W 누르면 바퀴 전진

S 누르면 바퀴 후진

A 누르면 좌회전

D 누르면 우회전

X 누르면 버튼은 바퀴 모두 정지

- 회로는 [실습 3] 회로 그대로 쓰시면 됩니다.

아두이노 dc모터 정지 코드 - adu-ino dcmoteo jeongji kodeu

- 프로그래밍 코드는 [실습 2] 회로를 수정해서 쓰면 됩니다.

int IN1Pin = 8;
int IN2Pin = 7;
int IN3Pin = 2;
int IN4Pin = 4;
int ENAPin = 6;
int ENBPin = 3;
void setup() {
  Serial.begin(9600);
  pinMode(IN1Pin, OUTPUT);
  pinMode(IN2Pin, OUTPUT);
  pinMode(IN3Pin, OUTPUT);
  pinMode(IN4Pin, OUTPUT);
  analogWrite(ENAPin, 255);
  analogWrite(ENBPin, 255);
}
void loop()
{
   if(Serial.available())  //시리얼모니터에서 데이터가 들어오면
  {
    char in_data;         // 입력된 데이터 저장을 위한 변수
    in_data = Serial.read();  //입력된 데이터 in_data에 저장
     Serial.print("data : ");
     Serial.println(in_data);
     if(in_data == 's')
     {
     digitalWrite(IN1Pin, HIGH);
     digitalWrite(IN2Pin, LOW);
     digitalWrite(IN3Pin, HIGH);
     digitalWrite(IN4Pin, LOW);
     delay(1000);
     }
     else if(in_data == 'w')
     {
     digitalWrite(IN1Pin, LOW);
     digitalWrite(IN2Pin, HIGH);
     digitalWrite(IN3Pin, LOW);
     digitalWrite(IN4Pin, HIGH);
     delay(1000);
     }
     else if(in_data == 'd')
     {
     digitalWrite(IN1Pin, HIGH);
     digitalWrite(IN2Pin, LOW);
     digitalWrite(IN3Pin, LOW);
     digitalWrite(IN4Pin, HIGH);
     }
     else if(in_data == 'a')
     {
     digitalWrite(IN1Pin, LOW);
     digitalWrite(IN2Pin, HIGH);
     digitalWrite(IN3Pin, HIGH);
     digitalWrite(IN4Pin, LOW);
     }
     else if(in_data == 'x')
     {
     digitalWrite(IN1Pin, HIGH);
     digitalWrite(IN2Pin, HIGH);
     digitalWrite(IN3Pin, HIGH);
     digitalWrite(IN4Pin, HIGH);
     }
  }
}

- 도전과제 완료 후 원킹쌤에게 검사 받고 보고서 작성하면 됩니다.

끝.