2017年12月12日 星期二

arduino溫濕度計輸出LCD(一)電腦上輸出DHT11溫濕度計數據

這次終於有心想突破:溫濕度數據顯示於LCD 這件事情
以下是我的學習記錄,這文章會記錄從無到有的學習歷程,所以可能會比較繁瑣,不過我想詳細的記錄自己搜尋資料、解決問題、運算思維等後設認知部分,以利未來學習其他流程時也能簡化成這個學習模組。

我想要攻克的任務流程如下,如果想跳到結果得可以選擇以下文章
(一) 電腦上輸出DHT11溫濕度計數據
(四) 雙偵測器顯示,修改成自己喜歡的顯示模式

首先先蒐集資料,發現我的溫濕度計是DHT11
  • 於是丟"dht11 arduino"進去餵google,找到這些文章

  • Arduino範例19:利用DHT11抓取溫度和濕度

    知道要將DHT11的+接5V,-接GND,out接D2腳位

    開啟arduino程式草稿碼匯入程式庫管理程式庫


     搜尋"DHT11"選第一個"DHT sensor liberary"安裝
    安裝完才可以開始寫程式

    第一個可以運行的程式長這樣

    // Example testing sketch for various DHT humidity/temperature sensors
    // Written by ladyada, public domain

    #include "DHT.h"

    #define DHTPIN 2     // what digital pin we're connected to

    // Uncomment whatever type you're using!這裡可以改成不同的DHT偵測器
    #define DHTTYPE DHT11   // DHT 11
    //#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
    //#define DHTTYPE DHT21   // DHT 21 (AM2301)

    DHT dht(DHTPIN, DHTTYPE);

    void setup() {
      Serial.begin(9600);
      Serial.println("DHTxx test!");

      dht.begin();
    }

    void loop() {
      // Wait a few seconds between measurements.等待時間,越短讀取數據越快,但DHT11儀器有極限值
      delay(2000);

      // Reading temperature or humidity takes about 250 milliseconds!抓取溫濕度計的數據,存入h,t,f三個數值裡面
      // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
      float h = dht.readHumidity();
      // Read temperature as Celsius (the default)
      float t = dht.readTemperature();
      // Read temperature as Fahrenheit (isFahrenheit = true)
      float f = dht.readTemperature(true);

      // Check if any reads failed and exit early (to try again).檢察是否錯誤的程式碼
      if (isnan(h) || isnan(t) || isnan(f)) {
        Serial.println("Failed to read from DHT sensor!");
        return;
      }

      // Compute heat index in Fahrenheit (the default)這邊看不懂...
      float hif = dht.computeHeatIndex(f, h);
      // Compute heat index in Celsius (isFahreheit = false)
      float hic = dht.computeHeatIndex(t, h, false);

      //輸出給電腦以下資訊
      Serial.print("濕度: ");
      Serial.print(h);
      Serial.print(" %\t");
      Serial.print("溫度: ");
      Serial.print(t);
      Serial.print(" oC   ");
      Serial.print(f);
      Serial.println(" oF\t");
    }

    成功之後就可以讀出這樣的數據了


    如果出現錯誤訊息,無法灌給arduino板子的話,我除錯的方法有1.重插板子2.重新安裝DHT sensor liberary,這樣就突破第一關了。

    沒有留言:

    張貼留言