코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
아두이노 간 블루투스 통신을 하고 싶습니다.
김혜리 | 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 |