고등학교/스마트홈 프로젝트

2022/01/17 - 1일차

MSHUN 2022. 1. 18.
반응형

 

    개발 계획

    시스템 기능 구성도

    시스템 기능 구성도

    거리 센서를 사용해 차고 문을 제어하고,  온습도 센서를 사용해 환기팬을 제어하고 조도 센서로 전등을 제어한다.

    RFID를 사용해 도어락을 만든다.

    그리고 아두이노를 모바일 APP과 블루투스로 연결해 모바일로 컨트롤할 수 있게 한다.

    개발절차

    012
    개발절차

    1. 모듈별 기능 구현

    2. 모듈 통합

    3. 기능구현, 디버깅

     

    1일차에는 부저, LED, 초음파 거리 센서, 온습도 센서 모듈의 기능을 구현했다.

     

    아두이노 포트 구성 및 브레드보드 배선

    아두이노
    브레드보드

     

     

     

     

     

    능동 부저 & 자동점멸 LED

    부저와 LED

    능동 부저는 미리 설계된 회로 때문에 음이 정해져 있고, 간단하게 0~5V 신호로 제어할 수 있다.

    약 2KHz 대역의 소리를 출력하고 음계를 나타내기에는 어렵다. 신호음이나 경고음으로 많이 사용한다.

     

    능동부저와 수동부저의 차이

    능동 부저 : 한 개 음만 출력 가능

    수동 부저 : 여러 가지 음 출력 가능

     

    점멸 LED 영상

    능동 부저 수동 부저 구별방법

     

    버저 & LED 소스 코드

    #define buzzPin 4 // 부저&점멸LED 핀 번호
    
    void setup() {
      pinMode(buzzPin, OUTPUT);
    }
    
    void loop() {
      //beep();
      //delay(2000);
    }
    // AVR전용 C++ 언어
    // 비프음 3회 발생
    void beep(){
      for(int i=0; i<3; i++){
        digitalWrite(buzzPin, HIGH);
        delay(40);
        digitalWrite(buzzPin, LOW);
        delay(40);
      }
    }
    
    //부저와 LED를 1초 간격으로 동작
    void buzzer(){
      digitalWrite(buzzPin, HIGH);
      delay(1000);
      digitalWrite(buzzPin, LOW);
      delay(1000);
    }

     

     

     

     

     

    온습도 센서 - DHT11

    온습도 센서

    DHT11은 서미스터와 정전식 습도 센서가 내장되어있는 온습도 센서이다.

    서미스터는 온도에 따라 저항 값이 변하는 소자이고, 정전식 습도 센서는 습도에 따라 저항 값이 변하는 소자

    이다. 이 센서를 사용해 온도와 습도 정보를 받을 것이다.

     

    DHT 라이브러리 설치

    DHT 라이브러리 설치

    아두이노> 툴> 라이브러리 관리> DHT sensor library 설치

     

    DHT 소스 코드

    // DHT11 모듈, 온도와 습도 읽기
    
    #include "DHT.h" // 온습도 센서 라이브러리
    
    #define DHTPIN 8     // 온습도센서(DHT11) 핀번호
    
    // 사용하는 센서 선택
    #define DHTTYPE DHT11   // DHT11
    
    DHT dht(DHTPIN, DHTTYPE);
    
    float humidity;  // 습도 읽기
    float temperature; // 온도(섭씨) 읽기
    
    void setup() {
      Serial.begin(9600); // 시리얼 통신
      //Serial.println(F("DHTxx test!")); // DHT 센서 동작 알림
      dht.begin(); // dht 센싱 시작
    }
    
    void loop() {
      delay(2000); // 측정 간격 확보
      getDHT();
      
    }
    
    void getDHT(){
      humidity = dht.readHumidity(); // 습도 읽기
      temperature = dht.readTemperature(); // 온도(섭씨) 읽기
    
      // 잘 읽었나? (아니면 다시 시도)
      if (isnan(humidity) || isnan(temperature)) {
        Serial.println(F("Failed to read from DHT sensor!"));
        return;
      }
    
      Serial.print(F("Humi: ")); Serial.println(humidity, 1);
      Serial.print(F("Temp: ")); Serial.println(temperature, 1);
    }

     

     

     

     

     

    초음파 거리 센서 - HC-SR04

     

    초음파 거리 센서

    HC-SR04 초음파를 이용하여 거리를 측정할  있다.  2~400cm 범위를 측정할  있지만, 거리가 멀거나 날씨, 장애물의 재질  환경적인 요건에 의해 오차가 발생한다. 초음파를 발사하고, 장애물에 닿은  다시 튕겨져 돌아오는 초음파를 센싱하여 거리 값을 측정한다. 이 초음파 거리 센서를 사용해 근처에 사물이 있는지 감지할 것이다.

    초음파 거리 센서 소스 코드

    #define trigPin 7                // trigPin을 7로 설정합니다.
    #define echoPin 6                // echoPin을 6으로 설정합니다.
    long duration, distance;                   // 각 변수를 선언합니다.
    
    void setup() {
      Serial.begin (9600);              // 시리얼 모니터를 사용하기 위해 보드레이트를 9600으로 설정합니다.
      pinMode(trigPin, OUTPUT);   // trigPin 핀을 출력핀으로 설정합니다.
      pinMode(echoPin, INPUT);    // echoPin 핀을 입력핀으로 설정합니다.
    }
    
    void loop() {
      distance = getDistance();    // 거리값 읽기
      Serial.print(distance); Serial.println(" cm");   // distance를 시리얼 모니터에 출력합니다.
      delay(500                                                                      );                                         // 0.5초동안 기다립니다.
    }
    
    // 초음파 거리 측정
    long getDistance() {
      digitalWrite(trigPin, LOW);                 // trigPin에 LOW를 출력하고
      delayMicroseconds(2);                    // 2 마이크로초가 지나면
      digitalWrite(trigPin, HIGH);                // trigPin에 HIGH를 출력합니다.
      delayMicroseconds(10);                  // trigPin을 10마이크로초 동안 기다렸다가
      digitalWrite(trigPin, LOW);                // trigPin에 LOW를 출력합니다.
      duration = pulseIn(echoPin, HIGH);   // echoPin핀에서 펄스값을 받아옵니다.
    
      /*
        trigPin핀에서 초음파를 발사하였고 그 초음파가 다시 돌아 올 때까지 기다립니다.
        만약 벽이나 장애물에 닿아서 다시 echoPin으로 돌아왔다면 그동안의 시간을 duration에 저장합니다.
      */
      
      return duration * 17 / 1000;          //  duration을 연산하여 센싱한 거리값을 distance에 저장합니다.
    
    }

     

     

     

     

    브레드보드

    브레드보드
    브레드보드 구조

    브레드보드(breadboard), 속칭 빵판 또는 빵틀 전자회로의 (일반적으로 임시적인) 시제품을 만드는 데 사용하고 재사용할 수 있는 무 땜납 장치이다.

    일반적인 인쇄 회로 기판(PCB)나 만능 기판과는 다르게 납땜이 필요 없는 형태의 기판으로 주로 교육용이나 간단한 전자회로 실험용 등으로 쓰인다.

     

     

     

     

     

    시리얼 통신

    직렬 통신(Serial Bus, 시리얼 버스)은 연속적으로 통신 채널이나 컴퓨터 버스를 거쳐 한 번에 하나의 비트 단위로 데이터를 전송하는 과정을 말한다. 이 용어는 여러 개의 병렬 채널을 갖춘 링크 위에서 동시에 여러 개의 비트를 보내는 병렬 통신과 대조된다.

    시리얼 통신 테스트 코드

    // 시리얼 통신 테스트
    
    #define buzzPin 4
    
    String inputString = "";         // 입력 문자 저장 변수
    bool stringComplete = false;  // 입력 문자열이 완성되었나?
    
    void setup() {
      // initialize serial:
      Serial.begin(9600); // 시리얼 통신 시작
      inputString.reserve(200); // 입력 문자 저장용 메모리 200바이트 확보
      pinMode(buzzPin, OUTPUT);
    }
    
    void loop() {
      // 줄바꿈(\n) 문자가 도착했나?
      if (stringComplete) {
        //Serial.println(inputString); // 읽은 문자열 송신
        if (inputString == "on\n") {  //on이 들어오면 부저 켜기
          digitalWrite(buzzPin, HIGH);
          Serial.println("Buzzer ON");
        }
        else if (inputString == "off\n") { // off가 들어오면 부저 끄기
          digitalWrite(buzzPin, LOW);
          Serial.println("Buzzer OFF");
        }
        else {
          Serial.println("Bad Command!");
        }
        inputString = ""; // 문자열 버퍼 초기화
        stringComplete = false; // 새로 받을 준비
      }
    }
    
    // 문자 하나씩 받아서 조립(줄바꿈 올 때까지)
    // 문자가 들어오면 자동으로 실행되는 이벤트 함수
    void serialEvent() {
      while (Serial.available()) { // 시리얼 입력이 있는가?
        char inChar = (char)Serial.read(); // 글자 하나 가져오기
        inputString += inChar; // inputString에 붙이기
        if (inChar == '\n') { // 줄바꿈인가?
          stringComplete = true; // 문자열이 완성됨을 알림 true
        }
      }
    }

     

     

     

     

     

    1일 차 결과물

    반응형

    댓글