본문 바로가기

메이커 프로젝트/아두이노 +

아두이노 블루투스 제어

 

[오늘의 타겟] 블루투스 통신 모듈

 

RXD : 데이터 수신을 하는 핀

TXD : 데이터 송신을 하는 핀

 

출처 : https://m.blog.naver.com/boilmint7/221900933326

 

 

 

 

[실습 1] 아두이노(시리얼 통신) 과 스마트폰(블루트스 터미널) 간 데이터 송수신

 

- 회로 구성

춯처 : https://m.blog.naver.com/sisosw/221518483163

 

 

- 스마트폰 준비 

블루투스 모듈에서 빨간불이 깜빡이나요?

 -> 블루투스 연결을 기다리고 있다는 뜻이에요.

 

 

 * 스마트폰 설정에서 HC-06 이란 블루투스 모듈을 먼저 연결해 줍시다.

 

* 블루투스 터미널 설치

 -> 블루투스 신호를 송수신 할수 있는 [블루투스 터미널] 이란 어플리케이션을 설치해주어야 합니다.

 

 [ 안드로이드 ]

 

 

 

1. 플레이스토어에서 [블루투스 터미널] 라고 검색해 보시고 아무거나 다운 받아주세요. 거의다 비슷해요.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. 어플을 설치 한뒤 열어보세요.

  왼쪽 위에 3줄 짜리 설정 창이 보이나요? 클릭해 주세요.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HC-06 블루투스 연결 -> 블루투스 모듈이 깜빡이다가 빨간불이 그냥 쭉 들어오면 연결완료

 

 

 

- 프로그래밍 코드

 

- 시리얼 모니터로 통신 확인

 

 

 

[실습 2] 아두이노(시리얼 통신) 과 스마트폰(블루트스 터미널) 간 데이터 송수신

 

 

- 아두이노 회로도

출처 : https://codingrun.com/114#content

 

 

 

 

 

- 안드로이드 블루투스 어플리케이션 제작

 

 

-> 제작 방법은 아래  url 내용을 쭉 따라가면 된다.

https://m.blog.naver.com/godlife1203/221359724037

 

[앱인벤터] 아두이노 LED 제어 앱

1. 아두이노 블루투스 설정 가. 블루투스 회로 구성 나. 아두이노와 블루투스간 통신 프로그램 업로드 다. ...

blog.naver.com

 

 

 

- 코드 : 초록색 led 블루투스 통신을 통해 껐다 켰다하는 코드

 

#include <SoftwareSerial.h>    //블루투스 시리얼 통신 라이브러리 추가
SoftwareSerial BTSerial(2, 3); //블루투스 설정 BTSerial(Tx, Rx)

int Green = 5;
int Yellow = 7;
int Red = 9;    //led 핀 설정

void setup() {
  BTSerial.begin(9600); //블루투스 통신 시작
  pinMode(Green, OUTPUT);
  pinMode(Yellow, OUTPUT);
  pinMode(Red, OUTPUT); 
}

void loop() {
  if(BTSerial.available())        //값이 들어오면
  {
    char bt;                     //제어할 변수 bt선언
    bt = BTSerial.read();        //들어온 값을 bt에 저장
    if(bt == '0')                //bt가 a면
      digitalWrite(Green, HIGH); //초록불 ON
    if(bt == '1')
      digitalWrite(Green, LOW);
  }
}

 

 

 

[추가 과제]

- 안드로이드 어플과 아두이노 프로그래밍 코드를 수정하여 led 3가지 색을 껐다켰다 할수 있도록 변경하시오.

- 아두이노 회로는 그대로 사용.

 

 

 

[도전과제] 아래 자료를 참고하여. 블루투스 통신을 통해  dc 모터 전진 후진 좌회전, 우회전을 제어 하시오.

 

- 회로

 

 

- 참고 코드

#include <SoftwareSerial.h> //시리얼 통신 라이브러리 호출
//모터 PIN 설정
#define LEFT_A1 7 //왼쪽 바퀴
#define LEFT_B1 8 //왼쪽 바퀴
#define RIGHT_A2 4 //오른쪽 바퀴
#define RIGHT_B2 2 //오른쪽 바퀴
const int ENA = 6;
const int IN1 = 8;
const int IN2 = 7;
const int IN3 = 2;
const int IN4 = 4;
const int ENB = 3;

//블루투스 PIN 설정
#define BLUE_TX 12 //블루투스 TX
#define BLUE_RX 13 //블루투스 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'){      //우회전(강)
        // 직접 코딩하시오...
        
     }else if(value == 'f'){      //전진
       Serial.println("forward");
       forward();
     }else if(value == 'b'){      //후진
        // 직접 코딩하시오...
        
     }else if(value == 'w'){      //우회전(약)
       Serial.println("slow right");
       sRight();
     }else if(value == 'q'){      //좌회전(약)
       Serial.println("slow left");
       sLeft();     
     }else if(value == 'c'){      //우회전(뒷)
       Serial.println("back right");
       bRight();
     }else if(value == 'z'){      //좌회전(뒷)
       Serial.println("back left");
       bLeft();
     }else if(value == 's'){      //정지
        // 직접 코딩하시오...
        
     }
  }
}
// 자동차 움직임 정의 Function 들
void forward(){
  digitalWrite(LEFT_A1, HIGH);
  digitalWrite(LEFT_B1, LOW);
  digitalWrite(RIGHT_A2, HIGH);
  digitalWrite(RIGHT_B2, LOW);
  analogWrite(ENB, 255);
  analogWrite(ENA, 255);
}
void backward(){
  // 직접 코딩하시오...
}
void left(){
  digitalWrite(LEFT_A1, LOW);
  digitalWrite(LEFT_B1, HIGH);
  digitalWrite(RIGHT_A2, HIGH);
  digitalWrite(RIGHT_B2, LOW);
  analogWrite(ENB, 255);
  analogWrite(ENA, 255);
}
void right(){
 // 직접 코딩하시오...
}
void sLeft(){
  digitalWrite(LEFT_A1, LOW);
  digitalWrite(LEFT_B1, LOW);
  digitalWrite(RIGHT_A2, HIGH);
  digitalWrite(RIGHT_B2, LOW);
  analogWrite(ENB, 255);
  analogWrite(ENA, 255);
}
void bLeft(){
  digitalWrite(LEFT_A1, LOW);
  digitalWrite(LEFT_B1, LOW);
  digitalWrite(RIGHT_A2, LOW);
  digitalWrite(RIGHT_B2, HIGH);
  analogWrite(ENB, 255);
  analogWrite(ENA, 255);
}
void sRight(){
  digitalWrite(LEFT_A1, HIGH);
  digitalWrite(LEFT_B1, LOW);
  digitalWrite(RIGHT_A2, LOW);
  digitalWrite(RIGHT_B2, LOW);
  analogWrite(ENB, 255);
  analogWrite(ENA, 255);
}
void bRight(){
  digitalWrite(LEFT_A1, LOW);
  digitalWrite(LEFT_B1, HIGH);
  digitalWrite(RIGHT_A2, LOW);
  digitalWrite(RIGHT_B2, LOW);
  analogWrite(ENB, 255);
  analogWrite(ENA, 255);
}

void stop(){
 // 직접 코딩하시오...
}

끝.