close

根據研究報導
溫度 研究發現,恒定的室溫對健康有重要的意義。20℃左右的室溫最讓人舒服。這個溫度有利於身體散發多餘的熱量,如果室溫超過25℃,人體就開始從外界吸收熱量,會有熱的感覺。若室溫超過35℃,人體汗腺就開始啟動,通過出汗散發體內熱量,會出現心跳加快、血液循環加速、頭昏腦漲、疲勞等不適的感覺。相反,當溫度在8℃至18℃時,人體會向外散熱。同時,20℃也是最佳睡眠溫度。室溫在24℃以上時,睡眠會變淺,睡眠中的身體動作和醒轉次數(醒來和翻身的次數)會增多。睡眠溫度在18℃以下,也不容易進入深睡眠。雖然人類在20℃最舒服,但處於亞熱帶的我們,目前相對應環保在台灣的夏季,公共場所室內溫度則定在26℃,其實我認為是可以接受的,因為冷氣的使用總是會跟環保有關係.


濕度 屋內溫暖的同時也會呈現乾燥。研究發現,流感的多發與空氣濕度較低有密切關係。專家表示,當室內空氣濕度低於40%的時候,灰塵、細菌等容易附著在黏膜上,刺激喉部,引發咳嗽,同時容易誘發支氣管炎、哮喘等呼吸系統疾病。不過,濕度太大也不利於健康,人們可能會感到噁心、食慾不振、煩躁、疲倦、頭暈等。紐西蘭奧塔哥大學研究發現,住在潮濕發黴的房間中,還會增加孩子患哮喘和濕疹等過敏性疾病的風險。在高濕度環境中,黴菌等也更容易滋生。
專家表示,夏季室內濕度以40%至80%為宜,冬季室內溼度在30%至60%為宜。老人和小孩適合的室內濕度為45%至50%,哮喘等呼吸系統疾病患者適宜的室內濕度在40%至50%之間。夏季雨天室外濕氣重,所以應減少開窗時間;天氣晴好時,就應該多開窗通風、散濕。

因為這次用Arduino加DHT11來作溫濕度的感測實驗,所以也想了解一些有關於人或室內溫度控制的應用.當然目前的地球環境比起以前是越來越差,如何在節能減碳下又能有效率的達到室內舒適的溫溼度.這到也是一個問題.

這次我採用了DHT11的溫溼度感測器來測試.

DHT11是一顆相對便宜的溫濕度感測器,當然如果你需要量測的精準度,就需要在選用其它的Sensor.

DHT11的特性與規格

DHT11_Spec.jpg

雖然不習慣看簡體字,不過還是努力把它看完.

DHT11依據少面規格中,濕度量測的最大誤差是+/-5%,量測範圍從0-50℃,溫度的量測最大誤差是+/-2℃,DHT11的供應電源為3~5V,Sensor的採樣週期最快是1秒/次.

DHT11接腳的定義如下圖

DHT11_Pin.jpg

DHT11的討論及Lib可以在Arduino的網頁中找到資訊.

http://playground.arduino.cc/Main/DHTLib

可以從網頁資訊中下載DHTXX系列可使用的Lib.或者是使用Adafruit所提供的Lib

https://github.com/adafruit/DHT-sensor-library

我是採用adafruit的Lib來作測試.

接線的方式可以參考下圖

Arduino-and-DHT11_bb.png

依DHT11的Datasheet說明,Data Pin如果在20米內,上拉電阻的阻值是5k歐姆,超過20米要視情況測試電阻值.不過因為找不到4.7K的,用了一個10k歐姆的,測試結果看來也是可以讀出數值.

至於顯示的部份,我用的是I2C型1602的單色LCM顯示器,主要也是在網上購買的,

接線方式如下圖

1602LCM.png

因為LCM的模組採用I2C兩線式可以減少相當多的連接線,是一個相當方便的方式.

把要用的DHT11跟LCM的Lib放入Arduino\libraries的目錄內

adruino_DHT.jpg

程式的部份

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>  

#include <DHT.h>

/* -----------------LCD 1602 define Begin---------------------  */

//#define LCMIIC1
//#define LCMIIC2
#define LCMIIC3

/*-----( Declare Constants )-----*/
#if defined(LCMIIC1)
#define I2C_ADDR    0x20  // Define I2C Address 
#define BACKLIGHT_PIN  7
#define En_pin  4
#define Rw_pin  5
#define Rs_pin  6
#define D4_pin  0
#define D5_pin  1
#define D6_pin  2
#define D7_pin  3
#define BACKLIGHT_FLAG  NEGATIVE
#elif defined(LCMIIC2)
#define I2C_ADDR    0x27  // Define I2C Address 
#define BACKLIGHT_PIN  3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7
#define BACKLIGHT_FLAG  POSITIVE
#elif defined(LCMIIC3) 
#define I2C_ADDR    0x20  // Define I2C Address 
#define BACKLIGHT_PIN  3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7
#define BACKLIGHT_FLAG  POSITIVE
#else // error
#error LCM not defined
#endif

#define  LED_OFF  0
#define  LED_ON  1

/*-----( Declare objects )-----*/  
LiquidCrystal_I2C  lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

/* -----------------LCD 1602 define End---------------------  */

/* -----------------DHT11 define Begin----------------------------------*/
#define DHTPIN 2     // what digital pin we're connected to

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);

/* -----------------DHT11 define End-------------------------------------*/


void setup() {
  
  lcd.begin (16,2);  // initialize the lcd 
  // Switch on the backlight
  lcd.setBacklightPin(BACKLIGHT_PIN,BACKLIGHT_FLAG);  
  lcd.setBacklight(LED_ON);
  Serial.begin(9600);
  Serial.println("DHT11 Temperature & Humidity");
  dht.begin();

  // Print our characters on the LCD
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setCursor(3,0);
  lcd.print("Wellcome To ");
  delay(1000);
  lcd.setCursor(5,1); 
  lcd.print("GTVISION"); 
  delay(1000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("www.gtvision.com.tw");
  delay(1000);
  // Reset the display  
  lcd.clear();
  delay(100);
  lcd.home();

}

void loop() {  
  
   // Wait a few seconds between measurements.
  delay(1000);
  // Reading temperature or humidity takes about 250 milliseconds!
  // 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("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Heat index: ");
  Serial.print(hic);
  Serial.print(" *C ");
  Serial.print(hif);
  Serial.println(" *F");

  lcd.setCursor(4,0);
  lcd.print("Temp:");
  lcd.setCursor(9,0);
  lcd.print((float)t,2);
  lcd.print((char) 0xDF);
  lcd.print("C");
  lcd.setCursor(0,1);
  lcd.print("Humidity:");
  lcd.print((float)h,2);
  lcd.print("%");
  
  

}

程式中的Heat index後來查了一下應該就是中文中的體感溫度.

今天學了一個名詞是酷熱指數(Heat index),冬天一樣有酷熱指數
因為酷熱指數是一種綜合空氣溫度和相對濕度來確定體感溫度的指數──即真正感受到的熱度。 (From:wiki)

酷熱指數的影響(遮蔽處取值)

華氏溫度 攝氏溫度 注意事項 中暑指數
80–90 °F 27–32 °C 警告—太長時間的暴曬和活動可能會導致疲勞
90–105 °F 32–41 °C 嚴重警告—可能引起中暑熱痙攣熱衰竭
105–130 °F 41–54 °C 危險—極有可能引起中暑,熱痙攣和熱衰竭;可能導致重度中暑 甚高
超過 130 °F 超過 54 °C 極度危險—持續暴曬極有可能引起中暑和重度中暑 極高

注意:完全暴露在陽光中會增加最多15 °F(8 °C)的酷熱指數。(From:wiki)

我覺得這個指數意義也蠻重要的,因為這在室外運動或工作的人來說,也是一項重要的指標.

測試的結果在下面的圖

IMAG2741.jpg

測試心得:

DHT11的精度只適合在一般使用,不過因為價格便宜當然就不用太要求什麼.

DHTXX的Lib測試中,我無法成功的使用Arduino網頁上所提供的Lib,我在想應該是Lib程式define部份我沒有去注意到要修改那些,改天在來看看.

程式燒入至Arduino後,利用移動電源就可以當粗糙的溫濕度感測器.下次要把DHT11給整理到電路板上.

 

arrow
arrow

    一定!! 發表在 痞客邦 留言(2) 人氣()