정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노 간 블루투스 통신을 하고 싶습니다.
김혜리 | 2016-10-14

안녕하세요. 저희는 아두이노를 통해 연구를 진행하고 있는 고등학생 학생팀입니다.

저희는 x축 가속도의 값이 일정 범위를 넘기면 송신부 아두이노에서 정보를 담은 블루투스 신호를 전송하여 수신부에서 이를 받아들이고, 정보를 인식하여 LED를 끄거나 키는 시스템을 구축하고자 합니다.

저희는 아두이노 간 블루투스 통신을 위해서 HC-05 모듈을 사용하고 있습니다.

코드 작성과 아두이노와 모듈간의 핀 연결은 거의 완료된 상태입니다.

하지만 두 기기간 블루투스 통신이 진행되지 않아서 이를 해결할 방법을 모색한 결과 

블루투스 모듈 간 동기화(paring 페어링)를 하라는 조언이 있었습니다.

저희가 인터넷을 통해 찾아본 결과 보통 블루투스 동기화를 할때 EN핀도 아두이노와 연결하는데 저희가 가지고 있는 모듈은 핀이 VCC, GND,TXD,RXD 밖에 없습니다.

이 모듈을 사용한 블루투스 간에 페어링 및 통신 방법을 알려주시면 감사하겠습니다.

아두이노와 모듈간의 핀 연결 사진과 코드를 첨부하겠습니다.

<송신부>

#include<Wire.h>

#include <SoftwareSerial.h>

 

SoftwareSerial BTSerial(2,3);

 

const int MPU=0x68; //MPU 6050 의 I2C 기본 주소

int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;

void setup(){

Wire.begin(); //Wire 라이브러리 초기화

Wire.beginTransmission(MPU); //MPU로 데이터 전송 시작

Wire.write(0x6B); // PWR_MGMT_1 register

Wire.write(0); //MPU-6050 시작 모드로

Wire.endTransmission(true);

 

Serial.begin(9600);

BTSerial.begin(9600);

}

 

void loop(){

Wire.beginTransmission(MPU); //데이터 전송시작

Wire.write(0x3B); // register 0x3B (ACCEL_XOUT_H), 큐에 데이터 기록

Wire.endTransmission(false); //연결유지

Wire.requestFrom(MPU,14,true); //MPU에 데이터 요청

//데이터 한 바이트 씩 읽어서 반환

AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)

AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)

AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)

Tmp=Wire.read()<<8|Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)

GyX=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)

GyY=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)

GyZ=Wire.read()<<8|Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)

 

//시리얼 모니터에 출력

Serial.print("AcX = "); Serial.print(AcX);

delay(50);

{

if(BTSerial.available()){

Serial.write(BTSerial.read());

}

if(Serial.available()){

BTSerial.write(Serial.read());

}

}

 

if(AcX>1000)

{

BTSerial.print('1');

}

else if(AcX<-1000)

{

BTSerial.print('1');

}

else

{

BTSerial.print('0');

}

}

 

<수신부>

#include <SoftwareSerial.h>

#include <Servo.h>

SoftwareSerial BTSerial(2,3);

Servo myservo;

int led1=13;

void setup() {

BTSerial.begin(9600);

Serial.begin(9600);

myservo.attach(9);

pinMode(13, OUTPUT);

pinMode(12, OUTPUT);

}

 

void loop() {

if(BTSerial.available())

{

char ch=BTSerial.read();

switch(ch)

{

case'0':

{

digitalWrite(led1,LOW);

}

break;

 

case'1':

{

digitalWrite(led1,HIGH);

}

break;

}

}

}ㅅ송신부 아두이노 연결 모습입니다.

수신부 아두이노 연결모습입니다.

저희가 사용하는 블루투스 모듈입니다.

이전글   |    안녕하세요 7세그먼트와 적외선 온도센서를 이용하여 만들려고 합니다.... 2016-10-14
다음글   |    습도 센서를 이용하여 화분에 물을 자동으로 주는 장치를 만들고자 합니다 ... 2016-10-15