고급 예제

다양한 도구들을 가지고 마음껏 응용해보세요.

(3)안드로이드XBLE 블루투스통신-서보모터

2015-10-16 13:40:26

개요

 

 

본 튜토리얼에서는 블루투스 4.0 모듈이 내장된 오렌지보드 BLE를 사용합니다.

 

이번 컨텐츠에서는 스마트 폰의 기울기 센서를 이용하여 오렌지 BLE보드와 연결된 서보모터를 스마트폰의 기울기에 따라 움직이도록 해보겠습니다.

 

 

 

 

부품 목록

 

NO 부품명 수량 상세설명
1 오렌지 BLE보드 1 블루투스 4.0(BLE) 내장 보드
2 서보 모터 1 SG90
3 점퍼케이블 3  

 

부품명 오렌지 BLE보드 서보 모터 점퍼케이블
파트

 

 

 

하드웨어 Making

 

브레드보드 레이아웃

 

 

 

회로도

 

 

 

 

소프트웨어 Coding

// Bluetooth를 사용하기 위해 SoftwareSerial과 서보모터를 사용하기 위한 Servo 라이브러리를 불러옵니다.
#include <SoftwareSerial.h>
#include <Servo.h>

// BLE보드는 디지털 4, 5번 핀에 연결되어 있습니다.
SoftwareSerial BTSerial(4, 5); 
Servo servo;
// 기본 서보모터 값을 90도로 세팅해줍니다.
int angle = 90; 
   
void setup() {
	Serial.begin(9600);
	BTSerial.begin(9600);
	// 서보모터는 9번핀에 연결해줍니다.
	servo.attach(9);  
}

void loop() {
	// 블루투스를 통해 데이터가 들어오면
	if (BTSerial.available()){  
		// 해당 데이터를 읽어서 char값으로 저장해 줍니다.
		char data = BTSerial.read(); 
		// 데이터가 'w' 일 경우
		if (data == 'w') {  
			int temp = BTSerial.parseInt();
			// 서보모터의 각도를 90~180도로 세팅해줍니다.
			angle = map(temp, 0, 180, 90, 180);
			
		// 데이터가 'e' 일 경우
		} else if (data == 'e') { 
			int temp = BTSerial.parseInt();
			// 서버모터의 각도를 0~180도로 세팅해줍니다.
			angle = map(temp, 180, 0, 0, 90); 
		
		// 데이터가 다 들어왔을 경우
		} else if (data == '\n') { 
			// 세팅한 각도로 서보모터를 움직입니다.
			servo.write(angle);
		}
	} 
}

 

 

 

소프트웨어 설명

 

오렌지 BLE보드에 블루투스 기능을 사용하는 방법은 아두이노 안드로이드 블루투스(BLE) 통신 기초 (1). LED 깜박이기를 통해 확인하시기 바랍니다. (이 컨텐츠를 통해 BLE보드 스위치 사용하는 법과 사용하는 핀에 대해 알아두시면 문제없이 진행 할 수 있습니다.)

 * 이전 컨텐츠에서 설명했듯이 오렌지 BLE보드에서 블루투스 기능을 사용하게 되면 디지털 4, 5번 핀을 사용하실 수 없습니다.

 

우선 이번 컨텐츠에서 사용할 오렌지 BLE보드에 연결된 서보모터를 제어하는 어플(KocoaBLE_3.apk) 파일을 받으시고 설치하신 후 실행하면 밑의 사진과 같이 화면이 나옵니다.

 

 

왼쪽 상단에 Connect 버튼을 누르면 주변의 블루투스 기기들이 검색이 되는데, 해당 오렌지 BLE보드를 선택하시면 밑의 화면과 같이 버튼이 Disconnect로 바뀌면서 Device가 연결됩니다.

 

 

연결이 되셧으면 바로 스마트폰을 기울여서 서보모터가 움직이는지 확인하시면 됩니다.

 

	// 블루투스를 통해 데이터가 들어오면
	if (BTSerial.available()){  
		// 해당 데이터를 읽어서 char값으로 저장해 줍니다.
		char data = BTSerial.read(); 
		// 데이터가 'w' 일 경우
		if (data == 'w') {  
			int temp = BTSerial.parseInt();
			// 서보모터의 각도를 90~180도로 세팅해줍니다.
			angle = map(temp, 0, 180, 90, 180);
			
		// 데이터가 'e' 일 경우
		} else if (data == 'e') { 
			int temp = BTSerial.parseInt();
			// 서버모터의 각도를 0~180도로 세팅해줍니다.
			angle = map(temp, 180, 0, 0, 90); 
		
		// 데이터가 다 들어왔을 경우
		} else if (data == '\n') { 
			// 세팅한 각도로 서보모터를 움직입니다.
			servo.write(angle);
		}
	} 

 

위에 소스 코드가 블루투스를 통해 데이터가 들어오면 들어온 데이터를 처리하는 부분입니다.

 

스마트폰에서 블루투스를 통해 현재 기울기를 e180~e0 / w0~w180으로 보냅니다.(밑의 그림참고)

이 값에 맞게 e, w를 이용하여 서보모터의 방향(90도 기준 왼쪽, 오른쪽) 을 정해주고 그 다음 값을 map함수를 통해 각도값을 재분배해서 나온 값으로 서보모터를 움직여 줍니다.

 

 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

서보모터, 아두이노, 오렌지보드, BLE