안드로이드 폰에서 앱 인벤터에 의한 블루투스 제어가 가능하게 하기 위해서 아두이노 우노 보드의 0번 1번 핀을 이용하기로 하자. 아두이노의 RX 0번과 TX 1번 핀은 USB 케이블을 연결하여 코드를 컴파일 후 업로딩 하는데 사용이 된다. 따라서 RC 카 제어를 위해 RX 0번과 TX 1번 핀을 사용하기 위해서는 업로딩이 끝나기 전까지는 블루투스 보드에서 해당 핀들을 뽑아 OFF 상태로 두어야 함에 유의하자.
한편 모터 쉴드를 씌워야 하므로 0번과 1번 핀을 꽂을 수 없으므로 별도로 아두이노 우노 보드의 0번과 1번 랜드에 납뺌 작업을 해두어야 한다. 사진의 경우 핀 2개를 수평 방향으로 뽑아 점퍼선 커넥터를 연결하였다.
그 다음 모터 쉴드를 조심스럽게 끼우도록 한다.
현재의 사진은 모터 쉴드의 M3 와 M4에 모터 배선을 연결하였다. 모터 쉴드 구조에서 M4는 수커넥터 화되어 있어 암커넥터 연결을 허용하므로 직접 연결하여 점퍼선 뱌선 수를 줄인다. M3는 불행히도 점퍼선 배선을 위한 수커낵터가 없ㅇ므로 직접 나사를 열어 수커넥터 점퍼선을 조이도록 한다.
아울러 모터 쉴드의 5V 및 GND 랜드에 수커넥터 형태로 납땜 작업을 하도록 한다.
블루투스 제어 RC카 코드는 AFMotor.h 라이브러리 1개를 사용한다. 블루투스 통신은 0번과 1번을 사용하므로 SoftwareSerial.h를 사용할 필요가 없음에 유의하자.
모터 스피드 변수는 mspd는 255까지 가능하지만 여기서는 필요에 의해 120으로 설정하였다. 특히 사진과 같은 시중에서 쉽게 구할 수 있는 모터 사용 시에는 사용자 별로 모터 속도 변수 값을 150 이상으로 상향 조정하기 바란다.
RC카 코드 컴파일 업로딩 단계에서는 USB 케이블을 이용하므로 반드시 0번 1번 에 해당하는 블루투스 센서 보드의 핀들이 뽑혀 있음을 확인한다.
완료 후에 USB 케이블을 제거하고 블루투스의 0번 1번 핀을 연결 후 9V 전지를 아두이노 우노의 검은 색 커넥터에 연결한다. 블루투스 센서 보드의 TX 핀과 RX 핀은 각각 아두이노 0번 RX 핀과 1번 TX 핀에 연결한다.
블루투스 센서 보드가 안드로이드 폰 디바이스를 찾을 때까지 LED 가 껌뻑인다.
앱 인벤터 의 키 구성은 전진,후진,좌회전,우회전,정지의 5가지이다.
앱 인벤터 코딩은 블루투스에 의한 LED on OFF 코딩에서 키의 크기 색상 가지 수를 늘리고 전달되는 문자를 “1‘,’0‘에서 ”F’,‘B’,“L’,‘R’,‘S’ 로 변화를 주었다. 각자 코딩을 연습해 보기 바란다
아래의 퍼즐 맞추기는 앱 인벤터 키를 구성하는 블록 편집 결과이다. 블루투스 LED on OFF 와 코딩의 유사성을 비교해 보기 바란다. ‘1‘ 과 ’0‘에서 ”F’,‘B’,“L’,‘R’,‘S’ 로 변화를 준 결과이다.
작동은 RC CAR Control을 터치하면 블루투스 주소가 뜬다. 이 주소를 터치하면 연결이 되며 블루투스 센서 보드의 LED 껌뻑임이 멈춘다.
5개의 키를 터치하여 RC카를 운전해 보도록 한다.
아두이노 코드에서 최대속도 mspd = 160에서 255 사이 값을 부여한다.
mspd=160에서 USB 전원으로는 바퀴가 잘 안움직일 수 있으나 9V 전지 사용 시에는 주행이 잘 될 수 있으므로 전지 소모가 적도록 값을 잘 조정하도록 하자.
RC Car 앱 코드 첨부
위 코드를 앱 인벤터에서 import 명령으로 읽어 들인 후 무선 공유기가 설치되어 있는 환경에서 스마트폰에서 MIT A2Companion 앱을 실행한 후 WiFi 에 의한 scan QR 기능을 사용하여 스마트폰에 포팅하자.
RC카 아두이노 코드 첨부
//FOF4YFTIA0WX947_F_BT_01
#include <AFMotor.h>
AF_DCMotor motor1(3);
AF_DCMotor motor2(4);
int mspd = 250;
char command;
void setup() {
Serial.begin(9600);
Stop();
}
void loop(){
if(Serial.available() > 0){
command = Serial.read();
if( command == 'F') {
forward();
delay(1000);
}
if( command == 'B') {
back();
delay(1000);
}
if( command == 'L') {
left();
delay(1000);
}
if( command == 'R') {
right();
delay(1000);
}
if( command == 'S') {
Stop();
delay(1000);
}
}
}
void forward() {
motor1.setSpeed(mspd); //Define maximum velocity
motor1.run(FORWARD); //rotate the motor clockwise
motor2.setSpeed(mspd); //Define maximum velocity
motor2.run(FORWARD); //rotate the motor clockwise
}
void back() {
motor1.setSpeed(mspd);
motor1.run(BACKWARD); //rotate the motor counterclockwise
motor2.setSpeed(mspd);
motor2.run(BACKWARD); //rotate the motor counterclockwise
}
void left() {
motor1.setSpeed(mspd); //Define maximum velocity
motor1.run(FORWARD); //rotate the motor clockwise
motor2.setSpeed(0);
motor2.run(RELEASE); //turn motor2 off
}
void right() {
motor1.setSpeed(0);
motor1.run(RELEASE); //turn motor1 off
motor2.setSpeed(mspd); //Define maximum velocity
motor2.run(FORWARD); //rotate the motor clockwise
}
void Stop() {
motor1.setSpeed(0);
motor1.run(RELEASE); //turn motor1 off
motor2.setSpeed(0);
motor2.run(RELEASE); //turn motor2 off
}
//끝
'아두이노프로세싱 프로그래밍' 카테고리의 다른 글
ESP8266WiFi.h ZIP (0) | 2017.10.10 |
---|---|
L239D 모터쉴드 DC모터 구동 RC카 앱 인벤터 블루투스 제어 아두이노 코드 (0) | 2017.10.09 |
아두이노 우노 코딩에 의한 L239D 모터 쉴드 DC모터 구동 RC카 주행 (0) | 2017.10.08 |
ESP8266WiFi WiFiWebServer 아두이노 NodeMCU LED ON OFF 예제:I (0) | 2017.10.05 |
프로 마이크로 보드에서 macro 명령을 사용한 파워 LED BLINKING (0) | 2017.09.28 |