공부/아두이노(Arduino)

전, 후진 - 자동차 구현

도도-도윤 2017. 10. 19. 10:58

전, 후진 - 자동차 구현




1. 모터 쉴드(L293D 칩셋의 기종)





이 기종을 사용해본 바로는 AFMotor 라이브러리로는 동작하지 않습니다.




2. 조립




 모터와 바퀴 조립

 

 - 결선 완료 -

 아크릴 상판을 보면 구멍이 안 뚤린 부분이 있습니다.




3. 동작




동작 영상입니다. 동작이 멈출 때도 있습니다. 바퀴를 손으로 살짝 돌려주면 동작이 될 때가 있습니다.



4. 구성


 부품명

 수량

 

비고

아두이노 UNO R3

1



Motor Control Shield (L293D0)

1

 


바퀴 (R = 4)

4

 


 케이블

8

 

수량이 맞지 않음. (6개 배선이 들어 있음.)

 - 빨강색 4개, 검은색 2개

 T자 지지대

8

 

나무 합판으로 되어 있음.

DC 모터

4

 

스탭모터 4개, 일체형

M3 (6각 볼트)

8

 

여분 - 필요

- 볼트 규격이 맞지 않는 경우 등

M(3*8) 볼트

12


실제 조립을 해보면, 12개 정도 소요됨.

 M(3*30) 6각 암수 볼트

10


* 건전지 지지대 = 2개

* 바퀴 지지대 = 8개

<여분 - 필요>

- 볼트 규격이 맞지 않는 경우 등

 M(3*30) - 암암(Female to Female)

6

 

<여분 - 필요>

- 볼트 규격이 맞지 않는 경우 등 

바디


 

 

 M(3*30)

 8

 

 모터 지지대 체결용.


* 십자드라이버 1개 필요하고, 니퍼 1개, 시게추 드라이버 (-,+) 1개가 소요됩니다.



5. 소스코드


 

MOTOR

CTRL

PWM

IN1

IN2

MOTOR1

M1A/M1B

D6

D2

D3

MOTOR2

M2A/M2B

D9

D4

D5

MOTOR3

M3A/M3B

D10

D7

D8

MOTOR4

M4A/M4B

D11

D12

D13


 모터 쉴드




 아두이노 화면에서 모터 제어




 int motor1Pin1 = 2; // pin 2 on L293D IC
 int motor1Pin2 = 3; // pin 7 on L293D IC
 int enable1Pin = 6; // pin 1 on L293D IC


 int motor2Pin1 = 4; // pin 2 on L293D IC
 int motor2Pin2 = 5; // pin 7 on L293D IC
 int enable2Pin = 9; // pin 1 on L293D IC


 int motor3Pin1 = 7; // pin 2 on L293D IC
 int motor3Pin2 = 8; // pin 7 on L293D IC
 int enable3Pin = 10; // pin 1 on L293D IC


 int motor4Pin1 = 12; // pin 2 on L293D IC
 int motor4Pin2 = 13; // pin 7 on L293D IC
 int enable4Pin = 11; // pin 1 on L293D IC


 int state;
 int flag=0;        //makes sure that the serial only prints once the state
 
 void setup() {


    // sets the pins as outputs:
    pinMode(motor1Pin1, OUTPUT);
    pinMode(motor1Pin2, OUTPUT);
    pinMode(enable1Pin, OUTPUT);

    pinMode(motor2Pin1, OUTPUT);
    pinMode(motor2Pin2, OUTPUT);
    pinMode(enable2Pin, OUTPUT);

    pinMode(motor3Pin1, OUTPUT);
    pinMode(motor3Pin2, OUTPUT);
    pinMode(enable3Pin, OUTPUT);

    pinMode(motor4Pin1, OUTPUT);
    pinMode(motor4Pin2, OUTPUT);
    pinMode(enable4Pin, OUTPUT);
   
    // sets enablePin high so that motor can turn on:
    digitalWrite(enable1Pin, HIGH);
    digitalWrite(enable2Pin, HIGH);
    digitalWrite(enable3Pin, HIGH);
    digitalWrite(enable4Pin, HIGH);
   
    // initialize serial communication at 9600 bits per second:
    Serial.begin(9600);

 
 }
 
 void loop() {


    //if some date is sent, reads it and saves in state
    if(Serial.available() > 0){    
      state = Serial.read();  
      flag=0;
    }  


    // if the state is '0' the DC motor will turn off
    motorControl(state, motor1Pin1,motor1Pin2);
    motorControl(state, motor2Pin1,motor2Pin2);
    motorControl(state, motor3Pin1,motor3Pin2);
    motorControl(state, motor4Pin1,motor4Pin2);


 }


 void motorControl(int state, int motorPin1, int motorPin2){


     if (state == '0') {
        digitalWrite(motorPin1, LOW); // set pin 2 on L293D low
        digitalWrite(motorPin2, LOW); // set pin 7 on L293D low


        if(flag == 0){
          Serial.println("Motor: off");
          flag=1;
        }


    }


    // if the state is '1' the motor will turn right
     else if (state == '1') {
        digitalWrite(motorPin1, LOW); // set pin 2 on L293D low
        digitalWrite(motorPin2, HIGH); // set pin 7 on L293D high


        if(flag == 0){
          Serial.println("Motor: right");
          flag=1;
        }


    }


    // if the state is '2' the motor will turn left
    else if (state == '2') {
        digitalWrite(motorPin1, HIGH); // set pin 2 on L293D high
        digitalWrite(motorPin2, LOW); // set pin 7 on L293D low


        if(flag == 0){
          Serial.println("Motor: left");
          flag=1;
        }


    }
 
}

 소스코드


MotorTest.zip


MotorTest.zip
0.0MB