هر سه سنسور زیر را با یک آردینو در یک برنامه راه انداختم .
رطوبت SHT20 با AM2301 حدود 10% اختلاف داره (SHT20 بیشتر نشون میده)در زمانیکه حرارت محیط به37.5درجه میرسه . در دمای 30 درجه این اختلاف به 4% میرسه
دما هم که NTC10K=38.7 ,SHT20=39.4 ,DHT21=40.8 در یک لحظه و یک شرایط نشون میده.
سوال اینجاست که کدوم داره صحیح و دقیق دما و رطوبت را نشون میده؟
1-ماژول سنسور دما و رطوبت SHT20
2-سنسور دمای NTC 10k ضد آب سیمدار با پوشش استیل ضد زنگ
3-ماژول سنسور دما و رطوبت - آب و هوا AM2301/DHT21
کد PHP:
//These values are in the NTC10K datasheet
#define RT0 10000 // Ω
#define B 3977 // K
#define VCC 5 //Supply voltage
#define R 10000 //R=10KΩ
//Variables
float RT, VR, ln, TX, T0, VRT;
#include <Wire.h>
#include "DFRobot_SHT20.h"
DFRobot_SHT20 sht20;
#include "DHT.h"
#define DHTPIN A1 // modify to the pin we connected
#define DHTTYPE DHT21 // AM2301
DHT dht(DHTPIN, DHTTYPE);
//setup for the LCD keypad shield
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup()
{
Serial.begin(9600);
Serial.println("NTC10K SHT20 DHT21 test!");
//NTC10K
T0 = 25 + 273.15; //Temperature T0 from datasheet, conversion from Celsius to kelvin
sht20.initSHT20(); // Init SHT20 Sensor
delay(100);
sht20.checkSHT20();
dht.begin();
lcd.begin(16, 2);
//line 1 - Temperature
lcd.setCursor(0, 0);
lcd.print("Temp:");
//line 1 - Humidity
lcd.setCursor(10, 0);
lcd.print("Hum:");
//line 2 - Temperature
lcd.setCursor(0, 1);
lcd.print("Temp:");
//line 2 - Humidity
lcd.setCursor(10, 1);
lcd.print("Hum:");
}
void loop()
{
//NTC10K
VRT = analogRead(A2); //Acquisition analog value of VRT
VRT = (5.00 / 1023.00) * VRT; //Conversion to voltage
VR = VCC - VRT;
RT = VRT / (VR / R); //Resistance of RT
ln = log(RT / RT0);
TX = (1 / ((ln / B) + (1 / T0))); //Temperature from thermistor
TX = TX - 273.15; //Conversion to Celsius
Serial.print("NTC10K Temperature: ");
Serial.print(TX);
Serial.println("°C \t\t ");
//Serial.print(TX + 273.15); //Conversion to Kelvin
//Serial.println("K");
//SHT20
float humd = sht20.readHumidity(); // Read Humidity
float temp = sht20.readTemperature(); // Read Temperature
//Serial.print("Time:");
//Serial.print(millis());
Serial.print("SHT20 ");
Serial.print(" Temperature: ");
Serial.print(temp, 2);
Serial.print("°C");
Serial.print(" \t");
Serial.print("Humidity: ");
Serial.print(humd, 2);
Serial.println("%");
lcd.setCursor(5, 0);
lcd.print(temp, 2);
lcd.setCursor(11, 0);
lcd.print(humd, 2);
//delay(1000);
//DHT21
float t = dht.readTemperature();
float h = dht.readHumidity();
// check if returns are valid, if they are NaN (not a number) then something went wrong!
if (isnan(t) || isnan(h))
{
Serial.println("Failed to read from DHT21 sensor!");
}
else
{
Serial.print("DHT21 ");
Serial.print(" Temperature: ");
Serial.print(t);
Serial.print("°C");
Serial.print(" \t");
Serial.print("Humidity: ");
Serial.print(h);
Serial.println("%");
lcd.setCursor(5, 1);
lcd.print(t);
lcd.setCursor(11, 1);
lcd.print(h);
delay(2000);
}
Serial.println("------------------------------------------------");
}