2017년 6월 12일 월요일

32. 장애물 회피 아두이노 자율 자동차 만들기

Step1. 개요

장애물 회피 자율자동차는 최초 전진하다 장애물을 만나면 일단 서고 다른 방향으로 움직이는 자동차입니다. 이를 위해서는 장애물을 인식할 수 있는 초음파 센서가 필요합니다.

아래 사진의 모습은 완성된 모습인데 몸체는 버려진 종이박스를 적당히 잘라 무게를 최소화해야하고 바퀴는  원할한 방향전환과 적은 마찰력 고려하여 3개 사용하였습니다. 따라서 앞바퀴는 케스터 바퀴를 사용했습니다. 장애물을 인식하게 하기 위해서 앞부분에 초음파 센서를 부착했습니다.전압은 전체 무게 때문에 9V 건전지 2개를 사용해야 원할하게 작동 됩니다.각 부품을 글루건으로 부착하였습니다.

자율주행 모형 자동차

자세한 내용 보기 »

라벨:

2017년 6월 5일 월요일

31. 스마트 폰 블루투스 RC CAR

Step1. 개요

모터드라이버(L239N)를 이용하여 아두이노 RC CAR를 만들어 보겠습니다. 리모컨은 스마트폰의 어플을 다운받아 자동차를 전진, 후진, 좌회전, 우회전, 빠른 좌회전, 빠른 우회전을 할 수 있습니다. 스마트폰과 자동차의 송수신을 위해 블루투스가 필요합니다. 바퀴는 앞에 1개, 뒤어 두개로 연결합니다. 네바퀴모두 제어하려면 마찰이 커서 전압이 매우 높아야 합니다. 따라서 뒷바퀴에만 모터와 연결하였습니다. 좌회전과 우회전을 하려면 모터를 각각 제어할 수 있어야 합니다. 좌회전할 때는 오른쪽 바퀴만 전진하면 되고 우회전은 그 반대가 되겠습니다. 아두이노는 3.3V와 5V 전압이 제공되는데 실제 해보니 9V전압이 필요합니다. 또한 모터를 제어하려면 모터드라이버를 사용해야 원하는 작동을 할 수 있습니다. 차후에 리모컨없이 자율적으로 작동할 수 있도록 초음파센서를 장착하여 자율 주행할 수 있는 초음파 모형 자동차를 만들어 볼 생각입니다.




Step 2. 준비물  

아두이노, 브레드보드, 모터드라이버, 블루투스, 점퍼선,9V 홀더2개,우드락차체(두꺼운 상자),바퀴2개, DC모터2개,캐스터 바퀴1개,점퍼 케이블
몸체는 두꺼운 우드락을 이용해도 됩니다. 바퀴는 페드병 뚜껑을 이용해도 됩니다. 페트병 뚜껑에 고무풍선을 적당히 잘라 씌워 마찰을 크게하면 잘 됩니다. DC모터는 분리수거할 때 버려진 장난감에서 얻을 수 있을 겁니다. 그리고 각 부품이 프레임에 잘 부착되도록 글루건을 이용하여 붙입니다. 케스터 바퀴는 철물점에서 1500원 정도 들어 구입할 수 있습니다. 여기서 사용된 프레임과 바퀴4개는 해외직구로 저렴하게 구입하였습니다.(만원정도 들었으나 국내에서는 가격이 좀 비싼 편입니다.) 제가 사용하는 부품은 대부분 해외직구로 싸게 구입했습니다.



9V홀더

motor driver(L239N)

blueTooth

Jumper Cable

Arduino UNO
Bread Board

wheel

caster wheel






 Step 3 회로도


위 회로도에서 왼쪽 붉은 사각형은 모터 드라이버입니다.
각 부분의 연결표는 다음과 같습니다.


Step 4. code skech

아두이노 소프트웨어를 실행하여 다음 코드를 에라없이 입력하여 컴파일 실행하여 아래 내용을 업로드합니다.
이때 시리얼 통신 라이브러리를 포함시킵니다.

#include <SoftwareSerial.h> //시리얼 통신 라이브러리 호출

//모터 PIN 설정
#define LEFT_A1 4 //왼쪽 바퀴
#define LEFT_B1 5  //왼쪽 바퀴
#define RIGHT_A2 6 //오른쪽 바퀴
#define RIGHT_B2 7 //오른쪽 바퀴

//블루투스 PIN 설정
#define BLUE_TX 2 //블루투스 TX
#define BLUE_RX 3 //블루투스 RX

SoftwareSerial mySerial(BLUE_TX, BLUE_RX);  //시리얼 통신을 위한 객체선언
char value; //블루투스에서 받는 값

void setup() {
  Serial.begin(9600);   //시리얼모니터
  mySerial.begin(9600); //블루투스 시리얼 개방

  pinMode(LEFT_A1, OUTPUT);
  pinMode(RIGHT_A2, OUTPUT);
  pinMode(LEFT_B1, OUTPUT);
  pinMode(RIGHT_B2, OUTPUT);

  Serial.println("Arduino Bluetooth Car is ready to start");
}

void loop() {
  while(mySerial.available())  //mySerial에 전송된 값이 있으면
  {
     value = mySerial.read(); //전송값 읽음
     Serial.print(value);
   
     if(value == 'l'){            //좌회전(강)
       Serial.println("left");
       left();
     }else if(value == 'r'){      //우회전(강)
       Serial.println("right");
       right();
     }else if(value == 'f'){      //전진
       Serial.println("forward");
       forward();
     }else if(value == 'b'){      //후진
       Serial.println("backward");
       backward();
     }else if(value == 'w'){      //우회전(약)
       Serial.println("slow right");
       sRight();
     }else if(value == 'q'){      //좌회전(약)
       Serial.println("slow left");
       sLeft();    
     }else if(value == 's'){      //정지
       Serial.println("stop");  
       stop();
     }
  }

}

// 자동차 움직임 정의 Function 들
void forward(){  // 전진
  digitalWrite(LEFT_A1, HIGH);
  digitalWrite(LEFT_B1, LOW);
  digitalWrite(RIGHT_A2, HIGH);
  digitalWrite(RIGHT_B2, LOW);
}
void backward(){    // 후진
  digitalWrite(LEFT_A1, LOW);
  digitalWrite(LEFT_B1, HIGH);
  digitalWrite(RIGHT_A2, LOW);
  digitalWrite(RIGHT_B2, HIGH);
}
void left(){       // 좌회전 - 오른쪽 바퀴가 전전,왼쪽 바퀴는 후진하면서 빠르게 좌회전
  digitalWrite(LEFT_A1, LOW);
  digitalWrite(LEFT_B1, HIGH);
  digitalWrite(RIGHT_A2, HIGH);
  digitalWrite(RIGHT_B2, LOW);
}
void right(){     // 우회전 -왼쪽 바퀴가 전진,왼쪽 바퀴는 후진하면서 빠르게 우회전
  digitalWrite(LEFT_A1, HIGH);
  digitalWrite(LEFT_B1, LOW);
  digitalWrite(RIGHT_A2, LOW);
  digitalWrite(RIGHT_B2, HIGH);
}
void sLeft(){   //느리게 좌회전- 오른쪽 바퀴만 전진,왼쪽 바퀴는 정지하여 천천히 좌회전
  digitalWrite(LEFT_A1, LOW);
  digitalWrite(LEFT_B1, LOW);
  digitalWrite(RIGHT_A2, HIGH);
  digitalWrite(RIGHT_B2, LOW);
}
void sRight(){   // 느리게 우회전 -왼쪽바퀴는 전진,오른쪽 바퀴는 정지하여 천천히 우회전
  digitalWrite(LEFT_A1, HIGH);
  digitalWrite(LEFT_B1, LOW);
  digitalWrite(RIGHT_A2, LOW);
  digitalWrite(RIGHT_B2, LOW);
}
void stop(){     // 정지
  digitalWrite(LEFT_A1, LOW);
  digitalWrite(LEFT_B1, LOW);
  digitalWrite(RIGHT_A2, LOW);
  digitalWrite(RIGHT_B2, LOW);
}
발췌 사이트:
http://www.instructables.com/id/How-to-use-the-L298-Motor-Driver-Module-Arduino-Tu/


Step 5. 블루투스 어플리케이션

구글 플레이스토어에서 불루투스 컨트롤러를 다운 받아 설치합니다.
아래그림처럼 키설정을 합니다.

키설정
 키 설정하면 다음 그림과 같은데 먼저 장치검색을 하여 블루투스모듈과 스마트폰과 송수신이 되도록 합니다.
깜박이던 불루투스모듈이 정지되면 스마트폰과 블루투스가 연동이 된 것입니다. 그러면 버튼을 터치하면 바퀴(DC모터)가 작동됩니다.
실제 스마트폰 불루투스 명령어 모습

Step 6. 시연 동영상




전압은 9V건전지 2개를 사용했습니다. 만약 그 이하이면 정상적으로 작동하지 않습니다. 위동영상은 전진,정지,후진, 좌회전,강한 좌회전, 우회전, 강한 우회전을 순서대로 스마트폰으로 불루투스를 이용한 원격제어를 한 모습입니다.


라벨: