1. 프로젝트 사용한 보드 종류
브레드 보드, 아두이노 UNO
2. 사용한 개발 프로그램명
아두이노
3. 사용한 센서 모델명
DS18B20, DHT-11, pulsesensor, KY-037(고감도 소리감지 센서), I2C 2대, LED, HC-06, HC-05, 220옴, 470옴
4. 연결한 회로 설명 (또는 이미지)
아두이노 우노 한대에는 DS18B20, DHT-11, pulsesensor, KY-037(고감도 소리감지 센서), I2C,LED,
HC-05, 220옴, 470옴을 연결했습니다.
다른 아두이노 우노 한대에는 I2C, HC-06 을 연결했습니다.
5. 소스코드 (주석 필수)
마스터 코드 HC-05 는 이렇습니다.
#define USE_ARDUINO_INTERRUPTS true
#include // pulse sensor의 라이브러리를 불러온다.
#include // LCD의 라이브러리를 불러온다.
#include
#include
#include
SoftwareSerial HI(2,3);
#include
#include
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#define DHTPIN 9
#define DHTTYPE DHT11
LiquidCrystal_I2C lcd(0x27,16,2); // 사용할 LCD의 주소는 0x27이고, 화면은 가로로 16개의 문자를 사용할 수 있고 세로로 2줄 사용 가능하다.
DHT dht(DHTPIN, DHTTYPE);
int sensor=A1; //고감도 소리감지 센서 A핀 연결입니다.
int led= 11; // LED를 11번에 연결했습니다.
const int PulseLine = A0; // PulseLine이라는 상수를 int형으로 선언해 주고 아날로그 핀 0에 연결해 줄 것이기 때문에 A0이라고 설정한다.
PulseSensorPlayground pulseSensor; // PulseSensorPlayground 라이브러리 안에 pulseSensor라는 객체를 생성시킵니다.
void setup() {
lcd.init(); // LCD를 초기화해주는 코드이며, 시동을 걸어주는 역할이다.
Serial.begin(38400);
HI.begin(38400);
pulseSensor.analogInput(PulseLine); // 심박 센서에 PulseLine이라고 선언했던 상수를 입력한다.
pulseSensor.blinkOnPulse(led); // 아두이노의 심장센서가 측정할 때마다 LED를 깜빡여주는 코드이다.
pulseSensor.begin();
dht.begin(); // DHT 센서를 가동해 줍니다.
pinMode(led,OUTPUT);
pinMode(sensor,INPUT);
sensors.begin();
}
void loop(){
if (HI.available()) //블루투스를 통해 데이터가 들어오면
Serial.write(HI.read());
if (Serial.available()) //시리얼 모니터에서 데이터를 보내면
HI.write(Serial.read());
float h = dht.readHumidity(); // 습도
float t = dht.readTemperature(); // 온도
float temp;
int myBPM = pulseSensor.getBeatsPerMinute(); // 측정된 심박수를 int형변수로 선언한 myBPM에 저장
int val;
val = analogRead(sensor);
int light = map(val,100,1023,0,255);
analogWrite(led,light);
sensors.requestTemperatures();
lcd.backlight(); // 화면을 ON
lcd.display(); // 내용이 표시
lcd.print("BPM: ");
lcd.print(myBPM);
lcd.print(", TEM:");
lcd.println(sensors.getTempCByIndex(0));
lcd.print(temp);
lcd.setCursor(0,1);
lcd.print("T:");
lcd.print(t);
lcd.print(",H: ");
lcd.print(h);
delay(1000);
lcd.clear(); // 계속 업데이트되도록 설정
Serial.print("온도: ");
Serial.print(t);
Serial.println("도");
Serial.print("습도: ");
Serial.print(h);
Serial.println("%");
Serial.print("BPM: "); // BPM: 이라고 출력해준다.
Serial.println(myBPM);
Serial.print("temperature : ");
Serial.println(sensors.getTempCByIndex(0));
//Serial.println(temp);
Serial.print("sound: ");
Serial.println(val);
Serial.println("---------------------------------------");
delay(100);
HI.print("BPM: "); // BPM: 이라고 출력해준다.
//myBPM = HI.write(HI.read());
HI.println(pulseSensor.getBeatsPerMinute());
HI.print(myBPM);
HI.print("temp: ");
// temp = HI.write(HI.read());
HI.println(sensors.getTempCByIndex(0));
HI.println(temp);
delay(1000);
}
마스터 코드는 I2C에서 센서값이랑 다 잘 나오는데
6. 문제점 및 에러 내용
슬레이브 코드인 hc-06 이렇게 되고
마스터에서 오는 값이 전달이 안되는 것 같습니다.
슬레이브 코드 문제 인것 같은데 도대체 뭘까요ㅠㅠ
#include // LCD의 라이브러리를 불러온다.
#include
SoftwareSerial HI(2,3);
#include
LiquidCrystal_I2C lcd(0x27,16,2); // 사용할 LCD의 주소는 0x27이고, 화면은 가로로 16개의 문자를 사용할 수 있고 세로로 2줄 사용 가능하다.
void setup() {
Serial.begin(9600);
HI.begin(38400);
lcd.init(); // LCD를 초기화해주는 코드이며, 시동을 걸어주는 역할이다.
Serial.println("LCD통신 시작"); // 시리얼 통신 시작 문자 출력
}
void loop(){
if (HI.available()){ //블루투스를 통해 데이터가 들어오면
int myBPM;
float temp;
lcd.backlight(); // 화면을 ON
lcd.display(); // 내용이 표시
lcd.print("BPM: ");
myBPM = HI.write(HI.read());
lcd.print(myBPM);
lcd.setCursor(0,1);
lcd.print("TEM:");
temp = HI.print(HI.read());
lcd.print(temp);
delay(1000);
lcd.clear(); // 계속 업데이트되도록 설정
Serial.print("BPM: "); // BPM: 이라고 출력해준다.
Serial.println(myBPM);
Serial.print("temperature : ");
Serial.println(temp);
Serial.println("---------------------------------------");
delay(10);
}
}
둘이 페어링은 성공했는데 HC-05에서 HC-06으로 센서 값이 넘어가질 않습니다
도와주세요
|