【 아두이노Proj#6】 선없는 조이스틱 블루투스 무선 미니카 만들기~! (HC-05)
지난 시간 조이스틱을 이용한 미니카를 만들어 보았다. 하지만, 선이 연결되어 있어 움직임과 거리에 제약이 있어 많이 불편하였다. 이에, 최근에 다루었던 블루투스 통신 기능을 활용하여 무선으로 깔끔하게 제작해 보도록 하자.
▶ 선수 학습 :
1. [아두이노 모듈#14] 조이스틱 Joystick 사용하기 #1 ☜ (클릭)
2. [아두이노 모듈#15] L9110S 모듈 사용하기 #1 (모터 드라이버 참조) ☜ (클릭)
3. [아두이노 모듈#6] 조이스틱 미니카 만들기 (유선 미니카 기본 참조) ☜ (클릭)
4. [아두이노 모듈#16] 아두이노... 블루투스통신 (블루투스 설정법 참조) ☜ (클릭)
5. [아두이노 모듈#18] 아두이노... 블루투스통신 (블루투스 제어법 참조) ☜ (클릭)
▶ 미니카 제작 재료 (우노보드 대신 나노보드로 대체 가능)
( ※ 배터리 전원을 5V이하로 공급 시 Step-UP 컨버터를 사용하면 되고, 5V이상을 공급 시에는 AMS1117과 같은 5V 정전압 컨버터 같은 것을 사용하면 됩니다)
예시) 18650 3.7v 1개 사용시 → Step-Up컨버터 / 18650 3.7v 2개 사용시→ 정전압 컨버터
▶ 실습 목표 :
1. [ L9110S 모터 모듈을 활용하는 방법에 대해 이해 할 수 있다. ]
2. [ 조이스틱의 컨트롤 기능을 익힐 수 있다. ]
3. [ Step up 컨버터를 이용해 낮은 입력 전압을 5V전압으로 승압해 주는 컨버터를 다룰 수 있다. ]
4. [ 블루투스 모듈의 셋업과 페어링(연결) 및 사용법을 익힐 수 있다. ]
5. [ 아두이노 두 대 상호간 통신을 통해 제어하는 방법을 익힐 수 있다 ]
▶ 실습 회로도면 :
(이미지 클릭하면 확대 가능)
[1. 미니카 본체 연결도]
※ 18650(3.7v) 배터리를 1개 사용하는 미니카 회로도 입니다.
당연히 움직이는 속도가 빠르지 않을 수 있고 동작 시간도 짧을 수 있습니다. 만약 배터리를 추가하여 활용하고자 할 때는 아래 미니카 전원보강회로 도면을 참고해 주세요.
[2. 미니카 블루투스 조정기 연결도]
※ 블루투스 페어링(자동 연결)을 위해서는, 선수학습 4번을 통해 블루투스 설정법을 확인하여, 본체에 있는 블루투스 모듈은 마스터(Master)로 설정하고, 조이스틱 조정기의 블루투스는 슬레이브로(Slave)로 설정 작업이 필요하다.
(물론 마스터와 슬레이브가 반대로 바뀌어도 상관이 없다)
[ 5V 이상의 배터리 2개를 사용시 회로 연결도 ]
: 만약 5v이상의 배터리를 공급한다면, Stepup 모듈은 필요치 않으며, 18650 두 개를 직렬로 연결하면 7.4v가 되고 Vin에 입력하고, 모터 드라이버 모듈에도 공급을 해주면 높은 전압(전력)으로인해 모터에 힘이 잘 전달 됩니다.
이 때, 블루투스는 5V를 넘겨 입력하면 안 되기에, 아두이노의 5V 단자에서 연결해야 하니 주위하세요.
▶ 실습 절차 :
1. 부품을 준비하여 위와 같은 회로를 각각 구성한다.
- 미니카의 베이스 판은 아크릴 판 혹은 MDF 등 주변에서 쉽게 구할 수 있는 것으로 한다.
- 미니카의 구동 바퀴 외에 보조바퀴를 달아도 되고, 여기처럼 미끌리면서 지지 해줄 수 있는 둥근 나사로 간단히 해결하여도 좋다.
- 미니카의 구동속도나 파워를 높이고자 한다면, 3.7V 베터리 2개를 직렬연결 해주거나, 충분한 전류가 공급될 수 있도록 베터리부분을 보강 해준다.
2. 아래 코드를 작성하고 각각의 프로그램을 로딩 후 실행시킨다.
3. 응용실습 : 코딩 부분을 수정하여 조이스틱의 대각선 방향 제어가 되도록 실습해본다. (선수학습 3번 참조)
▶ 프로그램 코드 및 설명 :
【 코드1-본체 】
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3); // BTSerial(Rx, Tx)
int A_1A = 9;
int A_1B = 10;
int B_1A = 5;
int B_1B = 6;
int speed = 250; // speed: 0~ 255
char joyBT;
void setup() {
//핀을 초기화 하고, 출력설정
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);
Serial.begin(9600);
BTSerial.begin(9600);
}
void loop() {
if (BTSerial.available()) {
joyBT = BTSerial.read();
Serial.println(joyBT);
switch (joyBT) {
case 'f' : // 모터 전진
//모터A
analogWrite(A_1A, speed);
analogWrite(A_1B, 0);
//모터B
analogWrite(B_1A, speed);
analogWrite(B_1B, 0);
break;
case 'b' : // 모터 후진
analogWrite(A_1A, 0);
analogWrite(A_1B, speed);
analogWrite(B_1A, 0);
analogWrite(B_1B, speed);
break;
case 'l' : // 모터 좌회전
analogWrite(A_1A, speed);
analogWrite(A_1B, 0);
analogWrite(B_1A, 0);
analogWrite(B_1B, speed);
break;
case 'r' : //모터 우회전
analogWrite(A_1A, 0);
analogWrite(A_1B, speed);
analogWrite(B_1A, speed);
analogWrite(B_1B, 0);
break;
case 's' : // 모터 정지
analogWrite(A_1A, 0);
analogWrite(A_1B, 0);
analogWrite(B_1A, 0);
analogWrite(B_1B, 0);
break;
}
}
}
【 코드2-조정기 】
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3); // BTSerial(Rx, Tx)
int BTstates=0; // 블루투스 신호 상태 저장용 변수
const int X_AXIS =0; //마우스 X 축 (A0)
const int Y_AXIS =1; //마우스 Y 축 (A1)
int xVal=0;
int yVal=0;
void setup() {
BTSerial.begin(9600);
Serial.begin(9600);
}
void loop() {
xVal=map(analogRead(X_AXIS),0,1023,100,0); //x축값 읽어 저장
yVal=map(analogRead(Y_AXIS),0,1023,300,200); //Y축값 읽어 저장
// 모터 전진 //
if (xVal >= 60 && yVal >= 225 && yVal <=275) {
BTSerial.write('f');
Serial.println('f');
}
// 모터 후진 //
else if (xVal <= 40 && yVal >= 225 && yVal <=275) {
BTSerial.write('b');
Serial.println('b');
}
// 모터 좌회전 //
else if (yVal <= 240 && xVal >= 25 && xVal <= 75) {
BTSerial.write('l');
Serial.println('l');
}
// 모터 우회전 //
else if (yVal >= 260 && xVal >= 25 && xVal <= 75) {
BTSerial.write('r');
Serial.println('r');
}
else {
BTSerial.write('s');
Serial.print('s');
}
delay(100);
}
▶ 아두이노 파일다운 :
(다운받아서 압축을 풀어 사용하세요)
▶ 조립 과정 및 동작 영상 :
[ YouTube 고화질 영상보기 ]
'아두이노 > 4. 프로젝트 LAB' 카테고리의 다른 글
【 릴리패드LilyPAD#2】 릴리패드 처음 사용설명서~! (영상설명) (2) | 2019.11.18 |
---|---|
【 아두이노Proj#8】 사륜구동 4WD 블루투스 RC카 만들기~! (with 모터쉴드) (33) | 2019.07.31 |
【 아두이노Proj#6】 조이스틱 미니카 만들기~! (0) | 2019.05.09 |
【 아두이노Proj#5】 아두이노 스마트 화분 만들기 Ver 3 with LCD (85) | 2019.04.05 |
【 아두이노Proj#4】 아두이노 스마트 화분 만들기 Ver2 with FND (7) | 2019.04.03 |