작품에 대해 상세하게 소개해주세요.
개발 이유
<aside> 💡 우리는 대체로 우주와 우리는 굉장히 멀다고 생각한다. 그러나 우리같은 일반일들, 심지어 중학생들도 우주와 가까워질 수 있다는 것을 보여주고 싶었다.
</aside>
작품 목표
<aside> 💡 성층권에 도달하여, 우주와 가까운 곳까지 도달한다.
</aside>
필요 기능
<aside> 💡 센서로 우주와 가까운 곳의 환경을 조사하여야하기때문에 센서의 작동여부가 필수적이다.
</aside>
제작일
<aside> 💡 2023/7/21 ~ 2023/9/10(총 59일)
</aside>
동작/기능
/*오존센서 라이브러리&상수*/
#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>