1. 프로젝트 사용한 보드
: 오렌지보드
2. 사용한 개발 프로그램명
: 스크래치
3. 사용한 센서 모델명
: 장애물 감지 아두이노 적외선(IR) 송수신 센서 모듈. 아두이노 LCD 1602, 아두이노 조도 센서 모듈, 아두이노 TOWERPRO 서보모터 , 온습도 센서 모듈 KY-015, 아두이노 5mm RGB LED 핀아웃 모듈 저항내장형 3.3~5V, 피에조 부저
4. 연결한 회로 설명 (또는 이미지)
5. 소스코드 (주석 필수)
#include
#include
#include // 서보모터를 사용하기 위한 라이브러리 호출하기
#include // DHT11를 사용하기 위한 라이브러리 호출하기
SimpleDHT11 dht11; // 온습도센서를 dht11이라는 이름으로 선언
LiquidCrystal_I2C TV(0x3f,16,2);
int servo = 6; // 서보모터를 오렌지보드 A0번에 연결
int airCon = 9; // RGB LED의 파란색 핀을 디지털 9번 연결
int DHTPin = 3; // 온습도센서를 오렌지보드 3번핀에 연결
int notes3[] = {4186, 4698, 5274, 5587, 6271};
// 가까울 시 울릴 경보의 멜로디 작성
boolean flag = 0;
int piezoPin = 2;
int irPin = 9;
int notes4[] = {4186, 6271};
int tempo = 200; // 멜로디의 음 길이 설정
int flag1 = 1; // 블라인드의 상태를 저장하는 변수
Servo blind; // 서보모터를 blind라는 이름으로 선언
int Flag;
int notes2[] = {6900,4906,6900,4906,6900};
int C = 1047; // 도
int D = 1175; // 레
int E = 1319; // 미
int F = 1397; // 파
int G = 1568; // 솔
int A = 1760; // 라
int B =1976; // 시
int cdsPin = A0; // 조도센서를 오렌지보드 A0번에 연결
int notes[25] = { G, G, A, A, G, G, E, G, G, E, E, D, G, G, A, A, G, G, E, G, E, D, E, C };
// 학교종이 땡땡땡 멜로디 작성
void setup() {
// 시리얼 통신을 위해 통신속도(Baudrate)를 9600으로 설정
Serial.begin(9600);
pinMode(piezoPin, OUTPUT); // 피에조 핀을 출력핀으로 설정
pinMode(irPin, INPUT);
pinMode(airCon, OUTPUT); // 3색 LED중 파란색 핀을 출력핀으로 설정
blind.attach(servo); // 서보모터를 6번핀에 연결
blind.write(80); // 서보모토의 기본값을 80도로 설정
TV.init();
TV.backlight();
TV.setCursor(0,0);
TV.print("Looking TV....");
}
void loop() {
byte temperature = 0;
byte humidity = 0;
// 조도 센서 값 측정 후 시리얼 모니터에 출력
int cdsVal = analogRead(A0);
Serial.println(cdsVal);
// 날이 밝으면(빛이 밝아지면)
if (cdsVal < 400) {
// 현재 블라인드가 올라가있으면
if (flag1 == 0) {
// 멜로디를 출력하고
for (int i = 0; i < 2; i++) {
tone(piezoPin, notes4[i], tempo);
delay(100);
}
// 블라인드를 내림
blind.write(180);
// 블라인드가 내려가 있는 상태로 설정
flag1 = 1;
}
}
// 날이 어두우면(빛이 어두워지면)
else {
// 블라인드가 내려가 있으면
if (flag1== 1) {
// 블라인드를 올림
blind.write(80);
// 블라인드가 올라가 있는 상태로 설정
flag1 = 0;
}
}
delay(100);
// 온습도센서로 온도와 습도값 측정
if (dht11.read(DHTPin, &temperature, &humidity, NULL)) {
Serial.print("Read DHT11 failed.");
return;
// 측정된 온도, 습도값으로 불쾌지수 값 계산 후 시리얼 모니터에 출력
float discomfortIndex = (1.8 * temperature) - (0.55 * (1 - humidity / 100.0) * (1.8 * temperature - 26)) + 32;
Serial.println(discomfortIndex);
// 불쾌지수값이 70보다 높을 경우
if (discomfortIndex > 70) {
// 에어콘(파란색 LED)를 켜주면서 멜로디를 재생
digitalWrite(airCon, HIGH);
if (flag == 0) {
for (int i = 0; i < 5; i++) {
tone(piezoPin, notes3[i], 300);
delay(150);
}
flag = 1;
}
}
else {
// 에어콘(파란색 LED)를 끔
digitalWrite(airCon, LOW);
flag = 0;
}
delay(1500);
// 조도센서 값 측정 후 시리얼 모니터에 출력
int cdsValue = analogRead(cdsPin);
Serial.println(cdsValue);
// 조도센서로 측정되는 빛의 밝기가 어두울 경우
if (cdsValue > 700) {
// 멜로디 재생
for (int i = 0; i < 12; i++) {
tone (piezoPin, notes[ i ], tempo);
delay (300);
}
delay(100); // 멜로디 중간에 짧게 멈추는 용도
}
for (int i = 12; i < 25; i++) {
tone (piezoPin, notes[ i ], tempo);
delay(300);
}
int IRVal=digitalRead(irPin);
Serial.println(IRVal);
if(IRVal==0){
if(Flag==0){
for(int i=0;i<5;i++){
tone(piezoPin, notes2[i],150);
delay(150);
}
Flag=1;
}
TV.noBacklight();
}
else{
TV.backlight();
Flag=0;
}
delay(100);
}
}
6. 문제점 및 에러 내용
: 보드에 업로드는 되는데 동작이 되지 않습니다.
1. 피에조 부저가 조도센서에 반응하긴 하나, 학교종이 땡땡땡 멜로디로 나오지 않고, 한 번 삑 소리가 나고 멈춥니다.
2. LED 모듈이 가끔 깜빡이긴 하나, 온습도 센서와 반응하지 않고 혼자서 깜빡입니다.
3. LCD가 적외선 장애물 감지센서와 반응하지 않습니다.
|