정보나눔

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

스마트홈을 제작하고 있습니다.
ges | 2018-12-27
 

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가 적외선 장애물 감지센서와 반응하지 않습니다.

 

 
이전글   |    아두이노 테트리스 LCD관련 질문 2018-12-26
다음글   |    스마트홈 성공하신분 전체코딩자료 공유 부탁드려요... 2018-12-30