정보나눔

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

블루투스 스마트홈 ON/oFF
현섭 | 2019-06-07

ON /OFF 블루투스 시스템을 넣고싶습니다. 여기서 참고할만한 자료가 있을까요?

 

 

 

#include "DHT.h" // DHT11를 사용하기 위한 라이브러리 호출하기
#include <Servo.h>  // 서보모터를 사용하기 위한 라이브러리 호출하기
#include <LiquidCrystal_I2C.h>  // I2C LCD를 사용하기 위한 라이브러리 호출하기
#include <Servo.h>


Servo blind;
LiquidCrystal_I2C TV(0x27, 16, 2);  // I2C LCD를 TV라는 이름으로 선언

// 온습도 센서를 디지털 3번 핀에 연결합니다.
#define DHTPIN 3
#define DHTTYPE DHT11


int servo = 6;  // 서보모터를 오렌지보드 A0번에 연결
int tempo = 200; // 멜로디의 음 길이 설정
int flag1 = 1;  // 블라인드의 상태를 저장하는 변수

int trig = 11;
int echo = 10;
int led = 2;

int C = 1047; // 도
int D = 1175; // 레 
int E = 1319; // 미 
int F = 1397; // 파 
int G = 1568; // 솔 
int A = 1760; // 라 
int B = 1976; // 시 
int piezoPin = 2; // 피에조 부저의 +극을 오렌지보드 2번에 연결
int airCon = 12;  // RGB LED의 파란색 핀을 디지털 9번 연결
int cdsPin = A0; // 조도센서를 오렌지보드 A0번에 연결
int note[] = {4186, 4698, 5274, 5587, 6271};
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 };
int notex[] = {6900, 4906, 6900, 4906, 6900};

int irPin = 5;  // 적외선 장애물 센서를 오렌지보드 6번에 연결

// 가까울 시 울릴 경보의 멜로디 작성

boolean flag = 0;
int Flag;

DHT dht(DHTPIN, DHTTYPE);

 

void setup() {
  // 시리얼 통신을 위해 통신속도(Baudrate)를 9600으로 설정
  Serial.begin(9600);

  dht.begin(); 
  pinMode(piezoPin, OUTPUT);  // 피에조 핀을 출력핀으로 설정
  pinMode(airCon, OUTPUT);  // 3색 LED중 파란색 핀을 출력핀으로 설정
  pinMode(irPin, INPUT);  // 적외선 장애물 센서 핀을 입력핀으로 설정

  TV.init(); // I2C LCD의 기본 설정
  TV.backlight();  // I2C LCD의 백라이트를 켜줌
  TV.setCursor(0, 0); // I2C LCD의 커서위치를 0, 0으로 설정(첫번째 줄, 첫번째 칸)
  TV.print("Looking TV...."); // I2C LCD에 "Looking TV...." 메세지 출력

  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(led, OUTPUT);

   pinMode(piezoPin, OUTPUT);  // 피에조 핀을 출력핀으로 설정
    blind.attach(servo);  // 서보모터를 6번핀에 연결
    blind.write(80); // 서보모토의 기본값을 80도로 설정

  
}

void loop() {
  // 온습도센서로 온도와 습도값 측정

  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  if (isnan(humidity) || isnan(temperature) ) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // 측정된 온도, 습도값으로 불쾌지수 값 계산 후 시리얼 모니터에 출력
  float discomfortIndex = (1.8 * temperature) - (0.55 * (1 - humidity / 100.0) * (1.8 * temperature - 26)) + 32;
  Serial.println(discomfortIndex);

  // 불쾌지수값이 70보다 높을 경우
  if (discomfortIndex >= 80) {
    // 에어콘(파란색 LED)를 켜주면서 멜로디를 재생
    digitalWrite(airCon, HIGH);
    if (flag == 0) {
      for (int i = 0; i < 5; i++) {
        tone(piezoPin, note[i], 300);
        delay(150);
      }
      flag = 1;
    }
  }

  else {
    // 에어콘(파란색 LED)를 끔
    digitalWrite(airCon, LOW);
    flag = 0;
  }
  delay(300);
int cdsVal = analogRead(cdsPin);
    Serial.println(cdsVal);
  
    // 날이 밝으면(빛이 밝아지면)
    if (cdsVal < 400) {
      // 현재 블라인드가 올라가있으면
      if (flag == 0) {
        // 멜로디를 출력하고
        for (int i = 12; i < 25; i++) {
          tone(piezoPin, notes[i], tempo);
          delay(300);
        }
        // 블라인드를 내림
        blind.write(180);
        // 블라인드가 내려가 있는 상태로 설정
        flag1 = 1;
      }
    }
    
    // 날이 어두우면(빛이 어두워지면)
    else {
      // 블라인드가 내려가 있으면
      if (flag1 == 1) {
        // 블라인드를 올림
        blind.write(80);
        // 블라인드가 올라가 있는 상태로 설정
        flag1 = 0;
      }
    }

    delay(300);
   // 조도 센서 값 측정 후 시리얼 모니터에 출력
   int IRVal = digitalRead(irPin);
    Serial.println(IRVal);

  // 거리가 가까울 경우
  if (IRVal == 0) {
    if (Flag == 0) {
      // 경보 멜로디를 출력
      for (int i = 0; i < 5; i++) {
        tone(piezoPin, notex[i], 150);
        delay(150);
      }
      Flag = 1;
    }

    // TV를 끔
    TV.noBacklight();
  }

  // 거리가 멀 경우
  else {
    // TV를 킴
    TV.backlight();
    Flag = 0;
  }

  delay(100);

  
    digitalWrite(trig, LOW);
  digitalWrite(echo, LOW);
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
 
  unsigned long duration = pulseIn(echo, HIGH);
 
  // 초음파의 속도는 초당 340미터를 이동하거나, 29마이크로초 당 1센치를 이동합니다.
  // 따라서, 초음파의 이동 거리 = duration(왕복에 걸린시간) / 29 / 2 입니다.
  float distance = duration / 29.0 / 2.0;
 
  // 측정된 거리 값를 시리얼 모니터에 출력합니다.
  Serial.print(distance);
  Serial.println("cm");
 
  // 측정된 거리가 10cm 이하라면, 아래의 블록을 실행합니다.
  if (distance < 5) {
    // LED가 연결된 핀의 로직레벨을 HIGH (5V)로 설정하여, LED가 켜지도록 합니다.
    digitalWrite(led, HIGH);
  }
  // 측정된 거리가 10cm 이상이라면, 아래의 블록을 실행합니다.
  else {
    // LED가 연결된 핀의 로직레벨을 LOW (0V)로 설정하여, LED가 꺼지도록 합니다.
    digitalWrite(led, LOW);
  }
  // 0.2초 동안 대기합니다.
  delay(200);
  
}

이전글   |    아두이노 심박수 블루투스 2019-06-07
다음글   |    얼굴추적카메라 2019-06-08