---
# System prepended metadata

title: HW FINAL_Arduino_溫度感測
tags: [Arduino]

---

# HW FINAL_Arduino_溫度感測

>撰寫人[name=AmiYaku1049] [首頁--天空路1049號](https://skys-kid-lai.github.io/1004/)
>>最後編輯[time=Sat, Jun 25, 2022 9:09 PM]
___
## 實驗目的

透過DHT22感測器，配合Arduino UNO 開發版，將溫度與濕度量測結果顯示於ILI9341 2.8吋彩色面板。

## 實驗原理

使用 wokwi 模擬器及 Arduino UNO 開發版，運用DHT22溫溼度感測器並引用函式庫取溫度以及濕度的值，並將傳回的結果顯示於ILI9341 2.8吋彩色面板。

## 實驗材料

**◆透過WOKWI模擬器線上實作◆**

◎Arduino UNO 開發版 x1
◎ILI9341 2.8吋彩色面板 x1
◎DHT22 x1

◎跟你默契好的可愛電腦 x1

## 實驗步驟

1.在wokwi模擬器連接電路
2.在Library Manager載入需要的函式庫
2.在程式編譯區進行程式碼編譯（程式碼在下方↓）
3.確定程式碼無誤，即可開始模擬
4.紀錄輸出

### 需要的函式庫
![](https://i.imgur.com/vS5pSbK.png =70%x)

### 電路連接完整圖
![](https://i.imgur.com/u8D9FpP.png =70%x)

### 程式碼以及程式標註（已經過修改，並非為參考文獻內原始程式碼）

```clink= c
#include "dht.h"        //載入標頭檔dht.h
#define DHTPIN 2
#define DHTTYPE DHT22

#include "SPI.h"               //載入標頭檔SPI.h
#include "Adafruit_GFX.h"      //載入標頭檔Adafruit_GFX.h
#include "Adafruit_ILI9341.h"  //載入標頭檔Adafruit_ILI9341.h

#define TFT_DC 9
#define TFT_CS 10
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
dht DHT;

#define RED      0xF800        //設定顏色RED
#define YELLOW   0xFFE0        //設定顏色YELLOW
#define WHITE    0xFFFF        //設定顏色WHITE

void setup() {
  tft.begin();
}

void loop() {
  delay(500);
  tft.fillScreen(ILI9341_BLACK);    //讓ILI9341顯示全黑

  
  float t = DHT.temperature;        //由DHT取溫度的值並傳回
  float h = DHT.humidity;           //由DHT取濕度的值並傳回
  
  //在座標(0,90)位置畫一個長240寬65的方形，並設定邊框為黃色
  tft.drawRect(0, 90, 240, 65, YELLOW);

  if(DHT.read(DHTPIN) == DHTLIB_OK){    
    
    //設定顯示溫度、濕度
    tft.setTextColor(ILI9341_WHITE);    //設定為白色
    tft.setTextSize(2);                 //設定字的大小
    tft.setCursor(0,100);               //設定位置座標
    tft.print(" Temp: ");
    tft.print(t);
    tft.println("  C");
    tft.println();
    tft.setTextSize(2);
    tft.print(" Humidity: ");
    tft.print(h);
    tft.println("%");
    tft.println();
    
    //當溫度大於或等於60度（t為第27行由DHT傳回的溫度值）
    if(t >= 60){                        
      tft.println();
      tft.setTextColor(ILI9341_RED);
      tft.setTextSize(2);
      tft.print("Temperature above 60 degrees !");
    }
  }
}
```

## 實驗結果

**◎ wokwi實作設計畫面：  [Final Home Work](https://wokwi.com/projects/335428327395295828)**

**◎ 起始畫面**

* 因為程式碼在loop的第二行顯示全黑，故一開始為黑屏狀態
![](https://i.imgur.com/p0dJHN9.png =70%x)

**◎ 當溫度低於60度**

* ![](https://i.imgur.com/rL1d0lX.png =70%x)

**◎ 當溫度高於或等於60度**

* ![](https://i.imgur.com/tNuAlAM.png =70%x)

## 實驗討論

* **運作過程中，想要改變字體顏色**
我參考了[RGB Color Codes Chart](https://www.rapidtables.com/web/color/RGB_Color.html) 中的顏色值的16進制。
* **黃色的外框**
這是整個裡面最麻煩的部分，必須要調整他到最好的位置。 在程式碼第31行寫到說： ``` tft.drawRect(0, 90, 240, 65, YELLOW);```
第一個數值為外框位置在x軸位置，第二個數值為外框在y軸位置，第三個數值為外框的寬，第四個數值為外框的高。


## 實驗心得

顏色讓我很頭疼，找不到覺得很搭的顏色啊啊啊啊

## 實驗文獻

>編者：艾迪諾
>出版日期：2017.01.06
>書名（頁數）：Arduino全能微處理機實習：強效解析（p10-18~p10-32）
>出版社：全華圖書
>[color=#CE0000]