코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2015-03-26 13:56:45
* 이 컨텐츠를 보시기 전에 안드로이드와 아두이노 간의 블루투스 통신 기초를 보고 오시기 바랍니다.
안드로이드와 아두이노 간의 블루투스 통신 기초에서 아두이노 블루투스 모듈을 이용하여 안드로이드와 블루투스 통신을 해보았습니다. 이제부터 간단한 예제들을 통해서 아두이노의 각 부품들을 제어해 보겠습니다.
지난번 컨텐츠에서는 아두이노와 서보모터를 연결하여 안드로이드에서 스마트폰의 기울기나 버튼을 이용해서 서보모터의 각도를 제어해보는 예제를 실습해 보았습니다. 이번 컨텐츠에서는 아두이노에 가변저항을 연결하고 안드로이드에서 가변저항값을 받아서 그래프를 그리는 예제를 실습해 보곘습니다.
* 원래는 DC모터를 연결하여 안드로이드에서 방향 + 속도를 제어할려고 했으나, 사정상 안드로이드에서 그래프를 그릴 일이 생겨서 이 컨텐츠를 먼저 올립니다. 다음 컨텐츠에서는 순서대로 DC모터 제어를 하도록 하겠습니다.
NO | 부품명 | 수량 | 상세설명 |
1 | 오렌지 보드 | 1 | |
2 | 블루투스 모듈 | 1 | HC-05 |
3 | 가변저항 | 1 | |
4 | 브레드보드 | 1 | |
5 | 점퍼케이블 | 9 |
부품명 | 오렌지 보드 | 블루투스 모듈 | 가변저항 | 브레드보드 | 점퍼케이블 |
파트 |
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3); // SoftwareSerial(RX, TX)
byte buffer[1024]; // 데이터를 수신 받을 버퍼
int bufferPosition; // 버퍼에 데이타를 저장할 때 기록할 위치
void setup(){
BTSerial.begin(9600);
Serial.begin(9600);
bufferPosition = 0; // 버퍼 위치 초기화
}
void loop(){
int temp = analogRead(A0);
Serial.println(temp);
BTSerial.println(temp);
delay(500);
}
아두이노에 블루투스 모듈을 연결하고 안드로이드에서 블루투스 페어링 하는 방법은 이전 컨텐츠 '안드로이드와 아두이노 간의 블루투스 통신 기초 - 1. LED불 깜박이기'에서 소프트웨어 설명을 보시기 바랍니다.
안드로이드에서 블루투스 모듈과 페어링 하시고, 안드로이드 어플(graphTest1.apk)을 받으셔서 설치 / 실행 하신 후 블루투스 연결까지 하시면 밑의 사진과 같이 화면이 나옵니다.
void loop(){
int temp = analogRead(A0);
Serial.println(temp);
BTSerial.println(temp);
delay(500);
}
Analog 0번 핀에서 데이터 값을 받아서 이것을 그대로 블루투스를 통해 안드로이드로 보냅니다. (Serial.println은 제대로 값이 전송되었는지 시리얼 모니터로 확인하기 위해 추가하였습니다. 안쓰셔도 상관없습니다.)
이 컨텐츠를 응용하여 아두이노의 다른 센서값을 받으실 경우 안드로이드 코드를 건드리지 않는한 Analog 0번핀만 이용하실 수 있습니다. 그리고 그래프의 범위가 0~1024 고정이라 아날로그 값이 아닌 다른 범위에 값이 들어가면 그래프 변화량을 제대로 표현하기 힘듭니다. 이 튜토리얼을 이용하실 경우 간단한 아날로그값을 표현하시거나(0번핀 1개만 이용하는 간단한 프로젝트), 안드로이드 코드를 수정하셔서 쓰셔야 제대로 사용하실 수 있을 것 같습니다.
(안드로이드 어플 코드를 수정하실 수 있으셔서 어플에 대한 코드가 필요하신 분은 댓글로 문의 남기시면 직접 보내드립니다.)
* 참고로 안드로이드에서 그래프를 그리기 위해서 sungraph 라이브러리를 이용했습니다.
* 다음 컨텐츠에서는 아두이노에 모터쉴드와 DC모터를 연결하여 안드로이드에서 DC모터의 방향 + 속도를 제어해 보겠습니다.
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!