본문 바로가기
큐브셋 초소형 인공위성

CubeSat - MKR1000 센서 정보 OLED에 표시하기 (u8g2 라이브러리)

by 로니킴 2021. 9. 7.


제작을 통해 학교에서 배워온 지식을 실제 응용하여 공학과 과학의 관계와 차이를 배우고 관련 전공에 대한 흥미를 유발하기 위함에 있다.  다양한 환경센서를 성층권에서 측정하는데 목적이 있다. 

 

목차

     

     

     


    CubeSat - MKR1000 센서 정보 OLED에 표시하기

     

     

     

     

     

     

     


     

    OLED 라이브러리 

    다음과 같이 OLED  라이브러리를 설치한다. 

     

     

     

    다음은 MKR1000 쉴드 라이브러리 이다. 

    Arduino_MKRENV-master.zip
    0.02MB

     

     

     

     


     

    소프트웨어 코딩

    하드웨어 연결이 완료되면, 아두이노 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;
    }

     

    MKR_OLED.ino
    0.00MB

     

     

     

     


     

    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) 를 사용한다.  

     

    모두의 아두이노 환경 센서

    아두이노와 센서로 내 건강을 지킬 수 있다!다양한 환경 센서를 실생활 프로젝트에 응용해보자!시중에 판매되고 있는 간이측정기도 센서로 값을 측정합니다. 똑같은 센서를 아두이노에 연결하

    book.naver.com

     

     

     

     



    댓글