반응형

예전에 HC-06 블루투스 모듈을 아두이노에서 컨트롤 하는 방법과 L298N DC 모터 드라이버 모듈을 컨트롤 하는 방법을 알아본적이 있습니다. 이 두개를 적절히 조합하면 스마트폰 블루투스 콘트롤 앱을 통해서 무선으로 조종되는 자동차를 만들 수 있습니다. 물론 이외에도 외부전원이 필수적으로 필요한데 외부전원은 건전지 홀더를 이용해 AA 건전지 4개를 직렬로 연결하여 6V를 공급해 주었습니다. 그리고 2개의 바퀴가 달린 DC 기어 모터, 앞바퀴를 대체할 캐스터 바퀴 (베어링이 달려있어 방향전환이 자유로운 바퀴) 를 사용하였습니다. 몸체는 무엇으로 할까 고민하다가 하드보드지를 잘라서 이용하였습니다. 모터 등 부품의 부착은 양면 테이프 (차량에 내비게이션 등을 붙이는) 를 이용했습니다.


■ 참고 글

▶ [아두이노] 블루투스 모듈(HC-06) 사용하기 (설정, 문자열 전송, LED ON/OFF)

▶ [아두이노] DC 모터의 제어(모터드라이버 L298N) 1편



허접하지만 기능구현이 목적이므로 위와 같이 하드보드지에 부품들을 붙여서 케이블로 배선을 했습니다. 보기엔 저래도 잘 움직입니다. ^^


사용한 건전지 홀더에는 자체적으로 스위치가 달려있어 따로 스위치가 필요가 없어서 편리하더군요.


뒷 부분 입니다. 두 개의 모터가 정회전, 역회전, 정지를 하면서 전진, 후진, 좌/우 회전을 구현합니다.


앞바퀴로 쓰인 캐스터 바퀴 입니다. 360도 자유자재로 돌아갑니다.


연결

각각 부품의 연결은 다음과 같이 했습니다. 자세히 보고 싶은 분은 fritzing 파일을 다운받아서 보세요. 



■ 블루투스 자동차 fritzing 파일

Bluetooth_Car.fzz


빨간선은 전원연결 + 이며 까만선은 GND ( - ) 입니다.

블루투스 모듈의 TX 는 D2, RX는 D3 에 연결했습니다.

모터 드라이버 모듈의 IN1 은 D7 에 연결하였고 차례대로 IN2 는 D6 에, IN3 는 D5, IN4 는 D4 에 연결 했습니다.


만약 소스는 문제가 없는데 모터가 원하는 방향과 거꾸로 돌아간다면 모터 드라이버 모듈에 연결된 모터의 배선을 서로 바꿔보세요. 그럼 원하는 방향으로 돌아갈 겁니다.



소스

소스는 위에서 말한 블루투스 모듈, 모터 드라이버 모듈을 다룰 줄 안다면 별것 없습니다. 블루투스에서 수신된 값을 아두이노에서 처리해서 로직대로 모터 드라이버를 구동하면 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#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);
}
 
cs


소스를 업로드 하고 스마트폰으로 컨트롤 하기 위한 앱을 다운로드 받아야 합니다. 블루투스를 통해 텍스트를 전송할 수만 있다면 어떤 앱이든 상관이 없습니다.


저는 'Bluetooth Controller' 라는 앱을 사용했습니다. 이 앱은 총 9개의 버튼을 지원하며 각각의 버튼의 이름 및 전송될 값을 정의할 수 있어서 편리하더군요.


▶ 블루투스 컨트롤 앱 : https://play.google.com/store/apps/details?id=apps.BT



위와 같이 각각의 버튼을 정의해 주었습니다. 사용 전 위의 '장치검색' 버튼을 눌러서 블루투스 연결을 미리 해줘야 합니다.


설정화면 입니다. 좌측은 버튼의 이름이고 우측은 블루투스를 통해 보낼 문자 입니다. 이 문자에 따라 아두이노가 모터 드라이버를 컨트롤 합니다.




움직이는 모습을 찍어 보았습니다. 잘 움직이네요. 



※ 추가사항 (2016.04.19) : 아무래도 6V 전원으로는 부족하네요. 조금 가지고 놀아서 건전지 전압이 낮아지니 자꾸 블루투스가 끊기네요. 그래서 9V 건전지를 추가로 아두이노 전원단자에 꼽아주니 정상작동 합니다.

9V 아두이노 전원공급용 커넥터




▶추가내용(2016.08.12) : 위 내용 중 잘못된 내용이 있어서 바로 잡습니다. L298N 의 5V 단자는 전원 입력이 아니라 5V 출력 단자 입니다. 고로 위의 Fritzing 회로도 중 모터 드라이버에 연결한 아두이노 5V 전원은 필요가 없습니다. 전원은 외부전원을 충분하게 공급해주고 모터 드라이버 5V 출력을 아두이노의 VIN 에 연결해서 아두이노의 전원으로 사용하는 것이 가장 바람직하다고 생각 됩니다. http://deneb21.tistory.com/277 참고

반응형

+ Recent posts