본문 바로가기
모두의 ESP32-ESP8288

[ESP32] 열화상 카메라 만들기(MLX90640, ST7735S TFT LCD)

by 로니킴 2021. 12. 16.


본 절은 열화상카메라를 를 사용하기 위해 알아야 할 내용과 실습 방법에 대해 설명한다. 열화상카메라특징, 동작원리, 사양, 연결 핀 배열, 출력 값, 주의사항을 알아본다. 열화상카메라를 를 연결하고, 간단한 코딩으로 쉽게 실습할 수 있다. 

 

목차

     

     

     


    [ESP32] 열화상 카메라 만들기(MLX90640, ST7735S TFT LCD)

     

     

     

     

     

     


     

    MLX90640 사용하기

    다음과 같이 열화상 카메라를 테스트 할 수 있다.  열화상 카메라는 I2C로 연결된다. 

     

     

    [ESP32] MLX90640 및 ESP32가 탑재된 적외선 열화상 카메라

    본 절은 MLX90640 를 사용하기 위해 알아야 할 내용과 실습 방법에 대해 설명한다. MLX90640 특징, 동작원리, 사양, 연결 핀 배열, 출력 값, 주의사항을 알아본다. MLX90640를 연결하고, 간단한 코딩으로

    makerspace.steamedu123.com

     

     

     


     

    ST7735S TFT LCD 사용하기

    다음과 같이 TFT LCD 를 테스트 할 수 있다. 

     

     

     

    [ESP32] ST7735S IPS (SPI 인터페이스) TFT LCD 1.8인치 사용하기

    본 절은 ST7735S TFT LCD를 사용하기 위해 알아야 할 내용과 실습 방법에 대해 설명한다. ST7735S 특징, 동작원리, 사양, 연결 핀 배열, 출력 값, 주의사항을 알아본다. ST7735STFT LCD를 연결하고, 간단한

    makerspace.steamedu123.com

     

     

     

     


     

    라이브러리 설치하기

    다음과 같이 라이브러리를 복사한다. 

     

     

     

     


     

    SS1 소프트웨어 코딩

    하드웨어 연결이 완료되면, 아두이노 IDE를 이용해 아두이노 소스코드를 코딩할 수 있다. 

     

    코드는 다음과 같다. 

    #include <TFT_eSPI.h> // Hardware-specific library
    #include <SPI.h>
    
    #include <Adafruit_MLX90640.h>
    
    Adafruit_MLX90640 mlx;
    float frame[32 * 24]; // buffer for full frame of temperatures
    
    // uncomment *one* of the below
    //#define PRINT_TEMPERATURES
    #define PRINT_ASCIIART
    
    
    
    TFT_eSPI tft = TFT_eSPI();       // Invoke custom library
    
    void setup(void) {
    
      setupST7735SLCD();
      setupMLX90640();
      //getMLX90640();
    }
    
    void loop() {
      loopMLX90640();
    }
    
    void setupST7735SLCD() {
      tft.init();
      tft.setRotation(1);
      tft.fillScreen(TFT_BLACK);
    }
    
    void setupMLX90640() {
      while (!Serial) delay(10);
      Serial.begin(115200);
      delay(100);
    
      Serial.println("Adafruit MLX90640 Simple Test");
      if (! mlx.begin(MLX90640_I2CADDR_DEFAULT, &Wire)) {
        Serial.println("MLX90640 not found!");
        while (1) delay(10);
      }
      Serial.println("Found Adafruit MLX90640");
    
      Serial.print("Serial number: ");
      Serial.print(mlx.serialNumber[0], HEX);
      Serial.print(mlx.serialNumber[1], HEX);
      Serial.println(mlx.serialNumber[2], HEX);
    
      //mlx.setMode(MLX90640_INTERLEAVED);
      mlx.setMode(MLX90640_CHESS);
      Serial.print("Current mode: ");
      if (mlx.getMode() == MLX90640_CHESS) {
        Serial.println("Chess");
      } else {
        Serial.println("Interleave");
      }
    
      mlx.setResolution(MLX90640_ADC_18BIT);
      Serial.print("Current resolution: ");
      mlx90640_resolution_t res = mlx.getResolution();
      switch (res) {
        case MLX90640_ADC_16BIT: Serial.println("16 bit"); break;
        case MLX90640_ADC_17BIT: Serial.println("17 bit"); break;
        case MLX90640_ADC_18BIT: Serial.println("18 bit"); break;
        case MLX90640_ADC_19BIT: Serial.println("19 bit"); break;
      }
    
      mlx.setRefreshRate(MLX90640_2_HZ);
      Serial.print("Current frame rate: ");
      mlx90640_refreshrate_t rate = mlx.getRefreshRate();
      switch (rate) {
        case MLX90640_0_5_HZ: Serial.println("0.5 Hz"); break;
        case MLX90640_1_HZ: Serial.println("1 Hz"); break;
        case MLX90640_2_HZ: Serial.println("2 Hz"); break;
        case MLX90640_4_HZ: Serial.println("4 Hz"); break;
        case MLX90640_8_HZ: Serial.println("8 Hz"); break;
        case MLX90640_16_HZ: Serial.println("16 Hz"); break;
        case MLX90640_32_HZ: Serial.println("32 Hz"); break;
        case MLX90640_64_HZ: Serial.println("64 Hz"); break;
      }
    }
    
    
    
    
    void loopMLX90640() {
      delay(500);
      if (mlx.getFrame(frame) != 0) {
        Serial.println("Failed");
        return;
      }
      Serial.println();
      Serial.println();
      for (uint8_t h = 0; h < 24; h++) {
        for (uint8_t w = 0; w < 32; w++) {
          float t = frame[h * 32 + w];
    //#ifdef PRINT_TEMPERATURES
    //      Serial.print(t, 1);
    //      Serial.print(", ");
    //#endif
    #ifdef PRINT_ASCIIART
          char c = '&';
          if (t < 20) c = ' ';
          else if (t < 23) c = '.';
          else if (t < 25) c = '-';
          else if (t < 27) c = '*';
          else if (t < 29) c = '+';
          else if (t < 31) c = 'x';
          else if (t < 33) c = '%';
          else if (t < 35) c = '#';
          else if (t < 37) c = 'X';
          Serial.print(c);
    #endif      
          uint32_t color = TFT_BLACK;
          if (t < 20) color = TFT_BLACK;
          else if (t < 23) color = TFT_BLACK;
          else if (t < 25) color = tft.color565(129,24,126);
          else if (t < 27) color = tft.color565(217,33,99);
          else if (t < 29) color = tft.color565(245,105,0);
          else if (t < 31) color = tft.color565(253,166,0);
          else if (t < 33) color = tft.color565(253,227,38);
          else if (t < 35) color = tft.color565(253,227,38);
          else color = color = tft.color565(253,227,38);      
          displayMLX90640(w,h, color);
        }
        Serial.println();
      }
    }
    
    
    void displayMLX90640(uint8_t w, uint8_t h, uint32_t color) {
    //  tft.fillScreen(TFT_BLACK);
      int rx = w;
      int ry = h;
      int x = rx * 5;
      int y = ry * 5;
    
      tft.fillRect(x, y , 5, 5, color);
    }

     

    ------------------------------------------------------ 
    개발환경 : WINDOWS 10 
    아두이노 IDE : 1.8.13 
    ------------------------------------------------------ 
    01 연결
     - 아두이노와 PC 연결 
     - 아두이노 IDE 실행 
     - 메뉴 → 툴 → 보드: 확인 
      - 메뉴 → 스케치 → 확인/컴파일 

    02 컴파일 확인 

    스케치>확인/컴파일(CTRL+R) 를 선택해서 컴파일을 진행한다.


    03 업로드 

    컴파일이 이상없이 완료되면 스케치>업로드(CTRL+U) 를 선택해서 컴파일 파일을 업로드 한다. 


    04 동작 확인

    다음과 같이 동작을 확인할 수 있다. 

     

     

    https://youtu.be/Zr4Ag1Qssi8

     

     

     

     

     

     

     

     

     


     

    모두의 아두이노 환경 센서 책

    [모두의 아두이노 환경 센서] 책은 예스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

     

    반응형


    댓글