💡 작품설명

작품에 대해 상세하게 소개해주세요.

  1. 개발 이유

    <aside> 💡 우리는 대체로 우주와 우리는 굉장히 멀다고 생각한다. 그러나 우리같은 일반일들, 심지어 중학생들도 우주와 가까워질 수 있다는 것을 보여주고 싶었다.

    </aside>

  2. 작품 목표

    <aside> 💡 성층권에 도달하여, 우주와 가까운 곳까지 도달한다.

    </aside>

  3. 필요 기능

    <aside> 💡 센서로 우주와 가까운 곳의 환경을 조사하여야하기때문에 센서의 작동여부가 필수적이다.

    </aside>

  4. 제작일

    <aside> 💡 2023/7/21 ~ 2023/9/10(총 59일)

    </aside>


🔗프로젝트 파일/링크

우주풍선 PPT

우주풍선 영상모음


👁‍🗨 전체 코드

  1. 동작/기능

    /*오존센서 라이브러리&상수*/
    #include "MQ131.h"
    MQ131 sensor(2,A0, LOW_CONCENTRATION, 10000);
    
    /*SD카드 라이브러리&상수*/
    #include <SD.h>
    File myFile;
    
    /*미세먼지 라이브러리&상수*/
    #include <PMS.h>
    #include <SoftwareSerial.h>
    #define SoftRX 7
    #define SoftTX 6
    SoftwareSerial mySerial(SoftRX, SoftTX);
    PMS pms(mySerial);
    #define DEBUG_OUT Serial
    
    /*온습도 라이브러리&상수*/
    #include <DFRobot_DHT11.h>
    DFRobot_DHT11 DHT;
    #define DHT11_PIN 10 
    
    /*BMP180(대기압,고도,온도) 라이브러리&상수*/
    #include <Adafruit_BMP085.h>
    Adafruit_BMP085 bmp;
    
    /*RTC 라이브러리&상수*/
    #include <Wire.h>
    #include "RTClib.h"
    RTC_DS3231 rtc;
    
    void setup() {
      /*공통 SETUP*/
      Serial.begin(115200);
      Serial.println("※MAIN SETUP을 시작합니다.※");
    
      /*오존센서 SETUP*/
      Serial.println("1 - 오존센서 시작");
      sensor.calibrate();
      Serial.println("1 - 오존센서 완료");
      Serial.println(" ");
    
      /*SD카드 SETUP*/
      Serial.println("2 - SD카드 시작");
    	pinMode(10, OUTPUT);  
      //myFile = SD.open("test2.txt", FILE_WRITE);
      Serial.println("2 - SD카드 완료");
      Serial.println(" ");
    
      /*미세먼지 SETUP*/
      Serial.println("3 -   미세먼지센서 시작");
      mySerial.begin(PMS::BAUD_RATE);	
      Serial.println("3 - 미세먼지센서 완료");
      Serial.println(" ");
    
      /*RTC SETUP*/
      while (!Serial);
      Serial.println("4 - rtc센서 시작");
      if (! rtc.begin()) {
        Serial.println("4 - rtc센서를 찾을 수 없음 (실패)");
      }
      if (rtc.lostPower()) {
        rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
        rtc.adjust(DateTime(2023, 8, 13, 15, 12, 15));               
        Serial.println("4 - rtc센서 완료"); 
        Serial.println(" ");
      }
      Serial.println("※MAIN SETUP을 종료합니다.※");
      Serial.println("---------------------------");
      Serial.println(" ");
      
    }
     
    
    void loop() {
      sensor.begin();
      
      pms.wakeUp();
    	PMS::DATA data;
      while (Serial.available()) { Serial.read(); }
    	pms.requestRead();
      pms.readUntil(data);
    
      DHT.read(DHT11_PIN);
    
      /*RTC LOOP*/
      DateTime now = rtc.now();
      long sec = now.second() + now.minute() * 60 + 235;
      long min = sec / 60;
      sec -= min * 60;
    
      /*main code*/
      myFile = SD.open("test5.txt", FILE_WRITE);
      if (myFile) {
        Serial.println("------------------------------");
        Serial.println("※ 센서정보를 SD에 저장합니다.※");
        Serial.println("------------------------------");
        
        // 경과시간 정리
        myFile.print("[");
        myFile.print(now.hour());  
        myFile.print(" : ");
        myFile.print(min); 
        myFile.print(" : ");
        myFile.print(sec);
        myFile.print("] - ");
        
    
        // 오존 수치 정리
        myFile.print("[ozone : ");
        myFile.print(sensor.getO3(PPM));
        myFile.print("ppm, ");
        myFile.print(sensor.getO3(PPB));
        myFile.print("ppb, ");
    
        // 미세먼지 수치 정리
        myFile.print("[dust : ");
    		myFile.print(data.PM_AE_UG_1_0);  //(ug/m3)
        myFile.print("(PM 1.0), "); 
    		myFile.print(data.PM_AE_UG_2_5);
        myFile.print("(PM 2.5), "); 
    		myFile.print(data.PM_AE_UG_10_0);
        myFile.print("(PM 10.0)] - "); 
        
        // 온습도 수치 정리
        myFile.print("[Hum&Tep : ");
        myFile.print(DHT.humidity);
        myFile.print("%, ");
        myFile.print(DHT.temperature);
        myFile.print("*C] - ");
    
        // BMP180(대기압,고도,온도) 수치 정리
        myFile.print("[BMP : ");
        myFile.print(bmp.readTemperature());
        myFile.print("*C, ");      //온도
        myFile.print(bmp.readPressure());
        myFile.print("Pa, ");      //대기압
        myFile.print(bmp.readAltitude());
        myFile.print("m");  //고도
        myFile.println("]");
    
        myFile.close(); 
    		Serial.println("------------------------------");
        Serial.println("※  이번 저장을 완료했습니다. ※");
        Serial.println("------------------------------");
    
      myFile = SD.open("test5.txt");
    
        if (myFile) { // 파일의 내용을 시리얼 모니터에 출력
    		  Serial.println("test.txt:");
    		  while (myFile.available()) { 
            Serial.write(myFile.read());
    	    }
          myFile.close();
        }
    
      }else {
    		Serial.println("error");
    	}
    }
    

    <aside> 💡

    센서들의 작동을 조절하는 코드 구문이다.

    </aside>


⭐ 마무리