제작을 통해 학교에서 배워온 지식을 실제 응용하여 공학과 과학의 관계와 차이를 배우고 관련 전공에 대한 흥미를 유발하기 위함에 있다. 다양한 환경센서를 성층권에서 측정하는데 목적이 있다.
목차
CubeSat - MKR1000 센서 정보 OLED에 표시하기
OLED 라이브러리
다음과 같이 OLED 라이브러리를 설치한다.
다음은 MKR1000 쉴드 라이브러리 이다.
소프트웨어 코딩
하드웨어 연결이 완료되면, 아두이노 IDE를 이용해 아두이노 센서 소스코드와 OLED 를 코딩할 수 있다.
센서 코드는 다음과 같다.
#include <Arduino_MKRENV.h> // mkr100 보드 및 쉴드
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
void setup(void) {
Serial.begin(9600);
Serial.println("MKR1000 OLED Start");
// while (!Serial);
if (!ENV.begin()) {
Serial.println("Failed to initialize MKR ENV shield!");
while (1);
}
u8g2.begin();
}
int convert(float v){
return (int)(v * 100.f)/100;
}
void loop(void) {
char mTemp[40],mHumi[40], mPres[40], mAltitude[40];
int yT;
int offset = 16;
u8g2.firstPage();
do {
yT = 13;
//u8g2.setFont(u8g2_font_ncenB10_tr);
// Teperature, Humdity, pressure
u8g2.setFont(u8g2_font_6x13_tr);
sprintf(mTemp,"Temp:%d *C", convert(ENV.readTemperature()));
u8g2.drawStr(0,yT,mTemp);
Serial.println(mTemp);
yT = yT + offset;
sprintf(mHumi,"Humidity:%d RH", convert(ENV.readHumidity()));
u8g2.drawStr(0,yT,mHumi);
Serial.println(mHumi);
yT = yT + offset;
float pa = ENV.readPressure() * 1000;
sprintf(mPres,"pressure:%d Pa", convert(pa));
u8g2.drawStr(0,yT,mPres);
Serial.println(mPres);
yT = yT + offset;
float kPa2pa = ENV.readPressure() * 1000;
float altitude = readAltitude(kPa2pa);
Serial.println(altitude);
sprintf(mAltitude,"Altitude:%d m", convert(altitude));
u8g2.drawStr(0,yT,mAltitude);
Serial.println(mAltitude);
} while ( u8g2.nextPage() );
delay(1000);
}
/*!
* @brief Calculates the approximate altitude using barometric pressure and the
* supplied sea level hPa as a reference.
* @param seaLevelhPa
* The current hPa at sea level.
* @return The approximate altitude above sea level in meters.
*/
float readAltitude(float pressure) {
// https://www.weather.go.kr/weather/observation/aws_table_popup.jsp
float seaLevelhPa = 101060; // 101560 : 서울 해면기압, 101325 : 표준기압
float altitude;
//pressure = pressure / 100;
altitude = 44330 * (1.0 - pow(pressure / seaLevelhPa, 0.1903));
return altitude;
}
MKR1000과 OLED 센서값 동작확인
하드웨어 연결, 소프트웨어 코딩이 완료되면 다음과 같이 동작 화면을 확인할 수 있다.
------------------------------------------------------
개발환경 : WINDOWS 10
아두이노 IDE : 1.8.13
------------------------------------------------------
01 연결
- 아두이노와 PC 연결
- 아두이노 IDE 실행
- 메뉴 → 툴 → 보드:아두이노 확인
- 메뉴 → 스케치 → 확인/컴파일
02 컴파일 확인
스케치>확인/컴파일(CTRL+R) 를 선택해서 컴파일을 진행한다.
03 아두이노 업로드
컴파일이 이상없이 완료되면 스케치>업로드(CTRL+U) 를 선택해서 컴파일 파일을 업로드 한다.
04 동작 확인
다음과 같이 동작을 확인할 수 있다.
마무리
MKR1000과 OLED를 연결하고, 간단한 코딩으로 센서를 쉽게 실습할 수 있다.
모두의 아두이노 환경 센서 책
[모두의 아두이노 환경 센서] 책은 예스24, 인터넷 교보문고, 알라딘, 인터파크도서, 영풍문고, 반디앤루니스 , 도서11번가 등에서 구입할 수 있다. 이 책에서는 PMS7003, GP2Y1010AU0F, PPD42NS, SDS011 미세먼지 센서, DHT22 온습도 센서, MH-Z19B 이산화탄소 센서, ZE08-CH2O 포름알데히드 센서, CCS811 총휘발성유기화합물 TVOC, GDK101 방사선(감마선) 센서, MQ-131 오존(O3) 센서, MQ-7 일산화탄소, MICS-4514 이산화질소 센서, MICS-6814 암모니아 센서, DGS-SO2 아황산가스(SO2) 센서, BME280 기압 센서, GUVA-S12SD 자외선(UV) 센서, MD0550 기류 센서, QS-FS01 풍속 센서(Wind speed) 를 사용한다.
'큐브셋 초소형 인공위성' 카테고리의 다른 글
CubeSat - 위성 발사하기 (0) | 2021.12.02 |
---|---|
CubeSat - 위성 만들기 (0) | 2021.12.02 |
CubeSat - I2C OLED (128X64) (0) | 2021.09.07 |
CubeSat - Full Wiring Diagram and All Sensors code (0) | 2021.09.06 |
CubeSat - Adafruit Analog UV Light Sensor Breakout Board (0) | 2021.09.06 |
CubeSat - OV5642 ArduCam Mini Module Camera Shield 5MP Plus (0) | 2021.09.06 |
CubeSat - DS18B20 Digital Temperature Sensor (0) | 2021.09.05 |
CubeSat - Sound Detector (SEN-12642) (0) | 2021.09.03 |
댓글