코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2015-10-16 13:40:26
본 튜토리얼에서는 블루투스 4.0 모듈이 내장된 오렌지보드 BLE를 사용합니다.
이번 컨텐츠에서는 스마트 폰의 기울기 센서를 이용하여 오렌지 BLE보드와 연결된 서보모터를 스마트폰의 기울기에 따라 움직이도록 해보겠습니다.
NO | 부품명 | 수량 | 상세설명 |
1 | 오렌지 BLE보드 | 1 | 블루투스 4.0(BLE) 내장 보드 |
2 | 서보 모터 | 1 | SG90 |
3 | 점퍼케이블 | 3 |
부품명 | 오렌지 BLE보드 | 서보 모터 | 점퍼케이블 |
파트 |
// 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
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!