본문 바로가기
Arduino(아두이노) IoT 키트 강좌

Arduino Uno 로 HC-06 블루투스 슬레이브 모듈을 사용해 스마트폰으로 SG90 서보모터 제어해 보기

by 오마이엔지니어 2018. 3. 19.
반응형

Arduino Uno 로 HC-06 블루투스 슬레이브 모듈을 사용해 안드로이드 스마트폰 앱으로
무선으로 SG90 마이크로 서보모터를 제어해 보는 프로젝트 입니다

HC-06 블루투스 슬레이브 모듈은 다양한 무선 블루투스 프로젝트를 가능하게 합니다
Arduino(아두이노) 나 PC, 안드로이드 폰과 연결하여 다양한 프로젝트를 수행할 수 있습니다
무선이라 편리하며 Google 안드로이드 앱으로 다양하게 응용이 가능 합니다

<HC-06 블루투스 슬레이브 모듈 이미지>

HC-06 블루투스 슬레이브 모듈은 VCC-Voltage, GND-Ground, TXD-Transmit Data, RXD-Receive Data 4핀으로 구성되어 있습니다
EN, STATE 핀이 있지만 대체로 사용하지 않습니다

 

 

 

 

 

<HC-06 블루투스 슬레이브 모듈 회로도>

 

HC-06은 블루투스 2.0 이므로 안드로이드 어플로 연결할때 페어링을 해줘야 하는데 페어링 기본 이름은 HC-06 이며 기본 코드는 1234 입니다

 

사용된 부품

Arduino Uno R3 (Italy)
미니브래드보드
HC-06 블루투스 슬레이브 모듈

점퍼케이블(숫놈)

SG90 마이크로 서보모터

 

구성 배선도



사용된 예제소스

HC-06 Servo.txt


주의사항

첨부된 예제 코드를 아두이노 우노에 업로드 할 때 HC-06 블루투스 모듈은 아두이노 우노와 연결이 안 되어 있는

상태에서 업로드를 마친 후 아두이노 우노와 연결 하도록 합니다, 에러나 업로드가 안되는 경우가 있습니다

이점 주의 하도록 합시다


기본적으로 HC-06 블루투스 모듈은 전원이 인가되면 빨간색 전원LED가 지속적으로 깜박입니다

하지만 어플과 연결해서 페어링에 성공하면 LED는 점등되어 멈추게 됩니다

(전원LED가 들어오지 않는다면 모듈의 문제이거나 모듈의 LED에 문제일수 있습니다)


아두이노와 기본 배선시 데이터를 보낼때 한쪽에서는 데이터를 받아줘야 하기 때문에

블루투스 모듈 RX -------- 아두이노 TX

블루투스 모듈 TX -------- 아두이노 RX

의 배선으로 연결 해 줘야 합니다

본 프로젝트 에서는 VCC-5V, GND-GND, TX-D2, RX-D3 로 배선하였습니다

 

프로젝트를 위해서는 블루투스 안드로이드 어플이 필요합니다 (하단 링크를 클릭해 다운 받으세요) 

아두이노 스마트카를 제어하려고 다운받은 어플이지만 간단하게 블루투스 터미널 통신도 가능하기에 하단 어플로 테스트 했습니다
블루투스 모듈을 제어하기 위해서 "Arduino Bluetooth Controller" 어플을 다운 받습니다
https://play.google.com/store/apps/details?id=eu.jahnestacado.arduinorc


구글계정 로그인을 하면 무선으로 본인소유의 안드로이드 폰을 검색해서 간편하게 핸드폰에 어플 설치를 해줍니다

안된다면 안드로이드폰 구글 플레이스토어 에서 '블루투스 컨트롤' 로 검색해서 설치 하도록 합니다


  

어플사용 방법

구글플레이스토어에서 어플을 다운받아서 설치해 줍니다

아이콘을 클릭해서 어플을 실행합니다 (물론 블루투스는 사전에 미리 사용으로 설정해 놓아야 겠죠?)



어플실행을 하면 위와 같은 화면이 뜹니다, Proceed 버튼을 눌러서 진행합니다 

 

 

테스트 때문에 미리 페어링이 되어있어서 HC-06 으로 검색이 됩니다
(처음 페어링 하는것 이라면 자동 페어링 설정으로 넘어가고, 비밀번호 1234 를 입력하고 페어링을 하면 아래처럼 HC-06 으로 검색이 됩니다)

HC-06 을 선택해서 클릭해 줍니다


4가지 모드가 나오는데 맨 아래 Terminal Mode (터미널 모드)를 선택해 줍니다

 

 

아래처럼 입력창이 나오고 오른쪽에는 엔터 버튼이 있습니다

숫자 '1'을 입력하고 엔터를 누르면 서보모터가 60도 회전이고, '2'를 입력하고 엔터를 누르면 0도로 회전입니다

--------------------------------------------------------------------------------------------------------------------------------
if(myString=="1") 
    {
} else if(myString=="2") {
      digitalWrite(13, LOW);
      myservo.write(0);
    }

--------------------------------------------------------------------------------------------------------------------------------
예제코드의 윗 부분입니다 1 과 2 대신 원하는 숫자나 문자로 변경후 테스트 가능합니다

--------------------------------------------------------------------------------------------------------------------------------
 myservo.write(60); 
--------------------------------------------------------------------------------------------------------------------------------

예제코드 에서는 각도 60도 회전으로 설정되어 있는데 변화가 너무 작아서 90도로 수정후 테스트 하였습니다
원하는 각도로 수정 후 테스트 가능합니다
다만 SG90 서보모터는 최대 회전각 180도 라는것을 알고 있어야 겠습니다

아두이노 연결시 USB 허브를 사용하거나, 전원이 불량하거나, 전류공급이 일정치 않으면 서보모터 제어가 원활하지 않을 수 있습니다

이경우 전원 연결이나 배선을 다시 점검해 보고, 아두이노의 리셋 버튼을 눌러줍시다
 

프로젝트 동영상


만약 위 예제로 서보모터가 제대로 구동하지 않는다면?
HC-06 블루투스 슬레이브 모듈로 서보모터를 제어하는 방법은 다양한 방법이 있습니다
(아무래도 모터를 구동시키는 프로젝트이기 때문에 무엇보다 A(전류)가 중용합니다, PC 나 노트북의 전류가 약하거나
일정하지 못하다면 위 예제가 제대로 실행되지 않을 수 있습니다, 이 경우 아래 예제로 테스트 해봅시다)

구성 배선도


 사용된 예제소스

HC-06 SG90 0_6.txt


주의사항

첨부된 예제 코드를 아두이노 우노에 업로드 할 때 HC-06 블루투스 모듈은 아두이노 우노와 연결이 안 되어 있는

상태에서 업로드를 마친 후 아두이노 우노와 연결 하도록 합니다, 에러나 업로드가 안되는 경우가 있습니다

이점 주의 하도록 합시다

본 프로젝트 에서는 VCC-5V, GND-GND, TX-D2, RX-D3 로 배선하였습니다

첫번째 예제와는 다르게 서보모터 제어핀이 9번핀 입니다, D9번핀에 서보모터 신호핀을 연결해 줍니다

예제코드를 살펴보면
#include <SoftwareSerial.h>
#include <Servo.h>
Servo SG90;
SoftwareSerial BTSerial(2, 3); //Connect HC-06. Use your (TX, RX) settings  
기본 SoftwareSerial.h 라이브러리와 Servo.h 라이브러리를 사용합니다
TX, RX 배선은 2번, 3번 입니다

void setup() 
{
  SG90.attach(9);
  Serial.begin(9600);
  BTSerial.begin(9600);  // set the data rate for the BT port
  SG90.write(0);
}
시리얼 통신속도 9600 이며 SG90서보모터 제어핀 9번 입니다

 void loop()
{
  if (BTSerial.available()) {
   // Serial.write(BTSerial.read());
   char s = BTSerial.read();
    if (s=='0') {SG90.write(0); s=20; delay(100);}
    if (s=='1') {SG90.write(30); s=20; delay(100);}
    if (s=='2') {SG90.write(60); s=20; delay(100);}
    if (s=='3') {SG90.write(90); s=20; delay(100);}
    if (s=='4') {SG90.write(120); s=20; delay(100);}
    if (s=='5') {SG90.write(150); s=20; delay(100);}
    if (s=='6') {SG90.write(180); s=20; delay(100);}
  }
  delay(100);
}
예제코드를 보면 알수 있듯이 블루투스 터미널 어플을 사용해서 0~6번을 입력해서

SG90 서보모터의 회전각도 0~180도까지 조정할 수 있습니다 (SG90 서보모터의 회전각도는 0~180도 사양입니다)

블루투스 어플은 위 첫번째 예제에 사용 된 어플을 사용해도 되고 아래의 Serial Bluetooth Terminal 어플을 사용해도 됩니다

구글 플레이 스토어에서 Serial Bluetooth Terminal 앱을 다운로드 해서 설치해 줍니다
https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal

자세한 앱 사용방법은 아래 링크의 포스팅을 확인해 주세요
http://blog.daum.net/rockjjy99/2657


프로젝트 동영상 에서는 Serial Bluetooth Terminal 앱을 사용하였습니다

프로젝트 동영상


HC-06 Servo.txt
0.0MB
HC-06 SG90 0_6.txt
0.0MB
반응형

댓글