카테고리 없음

아두이노 탱크

IT1004 2021. 6. 29. 13:04

#무선탱크 #아두이노 #C

1. 개요

 - 유선 탱크를 무선탱크로 변경하여  스마트폰 앱을 활용하여 제어해 보기 

 

2. 준비

품명 수량
HC06 블루투스 모듈 1EA
L9110모터드라이브 1EA
배터리홀더(3xAAA)or(4xAAA) 1EA 필요시(선택사항)
배터리 스냅 케이블 (9V) 1EA
아두이노 나노 1EA
미니브레드보드 1EA
건전지9v 1EA
건전지AAA 3EA
CR2032 x 2 배터리홀더  1EA 필요시(선택사항)
M1A1 탱크 (아카데미) 2CH 1EA
점퍼케이블 -

 

3-1. 하드웨어(탱크body)만들기

 

 

3-2. 아두이노 배선 

DFROBOT L293 모터 쉴드를 이용

최초  아두이노 UNO와 L293 모터 쉴드를 이용하여
제작 하였으나 공간을 많이 차지하여 확장성이 용이하지
않았고, 덥게를 닫는것도 쉽지 않아서 다른 방안을  모색하다
아두이노 Nano와 L9110모터 드라이브, 9V 2개 로 대체함. 

배치도(UNO)

배치도(Nano)

L9110 모터 드라이브 아두이노UNO 와 L9110 모터 드라이브 장착한 모습
덥게를 덮었지만 그래도 뭔가 큰느낌....
아두이노 Nano와 L9110 모터 드라이브 장착한 모습
   
AAA * 3  을 모터드라이브의 보조 전원으로 연결한 경우

AA * 4  을 모터드라이브의 보조 전원으로 연결한 경우

   
   


4. 소프트웨어만들기

코드

/**
 * 기존 버전 수정 
 * 1.5V * 3 사용시 앞으로 전진 양호 / 후진 양호 / 왼쪽(오른쪽모터동작)양호/ 오른쪽(왼쪽모터 동작) 불량: 기어나사가 헛돈다)
 * atmega328d(old bootloader)
 * 변경 : 20210629 : 왼쪽 오른쪽 변경 
 * 
 */
#include <SoftwareSerial.h>

/* L9110s 모터드라이버
   오른쪽모터
   L9110s A_1A 6
   L9110s A_1B 11
   왼쪽모터
   L9110s B_1A 3
   L9110s B_1B 5
*/
int A_1A = 6;
int A_1B = 10;
int B_1A = 3;
int B_1B = 5;

/*
   HC-06 블루투스 모듈
   주의: 시리얼통신은 반드시 엇갈려 꽂혀야 합니다.
   HC-06 RX - D13
   HC-06 TX - D12
*/
int btRxPin = 11;
int btTxPin = 12;

/*
 * 블루투스를 사용하기 위해 소프트웨어시리얼을 실행합니다.
 * 주의 : 시리얼 통신은 반드시 엇갈려서 연결해야합니다.
 * 블루투스 RX -> 아두이노 TX
 * 블루투스 TX -> 아두이노 RX
 */

 String myString=""; //받는 문자열
 char cmd = "";
 SoftwareSerial bluetoothSerial(btRxPin, btTxPin); 
 int speed = 170;

void setup() {
  // 블루투스를 baud rate 9600으로 시작합니다.
  bluetoothSerial.begin(9600);
  Serial.begin(9600);   //시리얼모니터 
  
  
  //핀을 초기화합니다.
  //L298 모터드라이버의 핀들을 출력으로 변경합니다.
  pinMode(A_1A, OUTPUT);
  pinMode(A_1B, OUTPUT);
  pinMode(B_1A, OUTPUT);
  pinMode(B_1B, OUTPUT);
  digitalWrite(A_1A, LOW);
  digitalWrite(A_1B, LOW);
  digitalWrite(B_1A, LOW);
  digitalWrite(B_1B, LOW);
}


/**
   함수내 코드가 무한히 실행됩니다.
*/
void loop() {
  /*
    'f' - 전진명령(forward)
    'b' - 후진명령(back)
    'l' - 왼쪽명령(left)
    'r' - 오른쪽명령(right)
    's' - 정지명령(stop)
  */

  
  while(bluetoothSerial.available())  //mySerial에 전송된 값이 있으면
  {  
    cmd = (char)bluetoothSerial.read();
    myString += cmd; 
    delay(5);           //수신 문자열 끊김 방지
  }
  if(!myString.equals(""))  //myString 값이 있다면
  {  
    Serial.println("input value: " + myString); //시리얼모니터에 myString값 출력
    myString = "";                               //myString 변수값 초기화
  }

  switch (cmd) {
    case 'f':
    //Serial.println("F " );
      //모터A 정회전
      analogWrite(A_1A, speed);
      analogWrite(A_1B, 0);
      //모터B 정회전
      analogWrite(B_1A, speed);
      analogWrite(B_1B, 0);
      break;
    case 'b':
      //모터A 역회전
      analogWrite(A_1A, 0);
      analogWrite(A_1B, speed);
      //모터B 역회전
      analogWrite(B_1A, 0);
      analogWrite(B_1B, speed);
      break;
    case 'r':
      //모터A 역회전
      analogWrite(A_1A, 0);
      //analogWrite(A_1B, 0); 
      analogWrite(A_1B, speed);  //20210629
      //모터B 정회전
      analogWrite(B_1A, speed);
      analogWrite(B_1B, 0);
      break;
    case 'l':
      //모터A 정회전
      analogWrite(A_1A, speed);
      analogWrite(A_1B, 0);
      //모터B 역회전
      analogWrite(B_1A, 0);
      //analogWrite(B_1B, 0);
      analogWrite(B_1B, speed); //20210629
      break;
    case 's':
      //모터A 정지
      analogWrite(A_1A, 0);
      analogWrite(A_1B, 0);
      //모터B 정지
      analogWrite(B_1A, 0);
      analogWrite(B_1B, 0);
      break;
  }
  
}


5. 테스트


6. 문제점 발견하기

     - 뱃터리 성능 : 아두이노용 9V,  모터용9V 각각사용
     - 공간해결을 위한 아두이노 Nano로 변경
     - 공간부족 해소를 위한 모터 드라이브 모델변경
     - 탱크 휠(wheel) 재조립 :
        휠과  체인이 맞물릴때 어긋나서 체인이탈
     - 탱크 기어박스의 왼쪽모터관련 톱니가 헛돈다
     - 왼쪽만돌리면 이런현상 발견됨

     - 

7. 문제점 스스로 해결해보기

     - 오른쪽으로 움직이기 위해 왼쪽모터를 정회전 하고 오른쪽모터가 정지된 상태되어있는 프로그램을

     - 오른쪽모터가 역회전 할수있게 프로그램 수정하여 테스트 해보았음. 그러나 역시 제대로 움직이지 않음.

     - 공중에 뛰워놓고 있을때는 잘돌아가는데 궤도가 지면에 닿으면 마찰력때문에 기어박스의 톱니들이 헛도는

        현상 발생

     - 두개의 궤도가 한쪽방향으로 갈때는 서로 모터들이 힘을 분배해서 잘도는데 

        각각의 모터가 다른방향으로 돌거나 하나의 모터만 돌면 마찰력을  감당하지 못한다. 

 

     - 힘좋은 모터로 바꿀수 밖에 없나??  아니면 볼트를 더 업그레이드? 


8. 완성


9. 개선해 보고 싶은점

 - 모터 성능 업그레이드


10. 이번 프로젝트에서 어려웠던 점

 - 힘좋은 모터로 바꿀수 밖에 없나??  아니면 볼트를 더 업그레이드?


11. 재미있던 점

 - 직접 만들고 코딩해보는것.