compare temperature from DHT11 and DS18B20
[Arduino] / DHT11_DS18B20_temperature / DHT11_DS18B20_temperature.ino
diff --git a/DHT11_DS18B20_temperature/DHT11_DS18B20_temperature.ino b/DHT11_DS18B20_temperature/DHT11_DS18B20_temperature.ino
new file mode 100644 (file)
index 0000000..b0b8c2c
--- /dev/null
@@ -0,0 +1,135 @@
+// 
+//   FILE:  dht11_test1.pde
+// PURPOSE: DHT11 library test sketch for Arduino
+//
+
+//Celsius to Fahrenheit conversion
+double Fahrenheit(double celsius)
+{
+       return 1.8 * celsius + 32;
+}
+
+// fast integer version with rounding
+//int Celcius2Fahrenheit(int celcius)
+//{
+//  return (celsius * 18 + 5)/10 + 32;
+//}
+
+
+//Celsius to Kelvin conversion
+double Kelvin(double celsius)
+{
+       return celsius + 273.15;
+}
+
+// dewPoint function NOAA
+// reference: http://wahiduddin.net/calc/density_algorithms.htm 
+double dewPoint(double celsius, double humidity)
+{
+       double RATIO = 373.15 / (273.15 + celsius);  // RATIO was originally named A0, possibly confusing in Arduino context
+       double SUM = -7.90298 * (RATIO - 1);
+       SUM += 5.02808 * log10(RATIO);
+       SUM += -1.3816e-7 * (pow(10, (11.344 * (1 - 1/RATIO ))) - 1) ;
+       SUM += 8.1328e-3 * (pow(10, (-3.49149 * (RATIO - 1))) - 1) ;
+       SUM += log10(1013.246);
+       double VP = pow(10, SUM - 3) * humidity;
+       double T = log(VP/0.61078);   // temp var
+       return (241.88 * T) / (17.558 - T);
+}
+
+// delta max = 0.6544 wrt dewPoint()
+// 5x faster than dewPoint()
+// reference: http://en.wikipedia.org/wiki/Dew_point
+double dewPointFast(double celsius, double humidity)
+{
+       double a = 17.271;
+       double b = 237.7;
+       double temp = (a * celsius) / (b + celsius) + log(humidity/100);
+       double Td = (b * temp) / (a - temp);
+       return Td;
+}
+
+
+#include <dht11.h>
+
+dht11 DHT11;
+
+#define DHT11PIN 2
+
+#include <OneWire.h>
+#include <DallasTemperature.h>
+
+// Data wire is plugged into port 2 on the Arduino
+#define ONE_WIRE_BUS 10
+
+// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
+OneWire oneWire(ONE_WIRE_BUS);
+
+// Pass our oneWire reference to Dallas Temperature. 
+DallasTemperature sensors(&oneWire);
+
+void setup()
+{
+  Serial.begin(9600);
+  Serial.println("DHT11 TEST PROGRAM ");
+  Serial.print("LIBRARY VERSION: ");
+  Serial.println(DHT11LIB_VERSION);
+  Serial.println();
+  sensors.begin();
+}
+
+void loop()
+{
+  Serial.println("\n");
+
+  int chk = DHT11.read(DHT11PIN);
+
+  Serial.print("DHT11 Read sensor: ");
+  switch (chk)
+  {
+    case DHTLIB_OK: 
+               Serial.println("OK"); 
+               break;
+    case DHTLIB_ERROR_CHECKSUM: 
+               Serial.println("Checksum error"); 
+               break;
+    case DHTLIB_ERROR_TIMEOUT: 
+               Serial.println("Time out error"); 
+               break;
+    default: 
+               Serial.println("Unknown error"); 
+               break;
+  }
+
+  Serial.print("Humidity (%): ");
+  Serial.println((float)DHT11.humidity, 2);
+
+  Serial.print("Temperature (oC): ");
+  Serial.println((float)DHT11.temperature, 2);
+
+  Serial.print("Temperature (oF): ");
+  Serial.println(Fahrenheit(DHT11.temperature), 2);
+
+  Serial.print("Temperature (K): ");
+  Serial.println(Kelvin(DHT11.temperature), 2);
+
+  Serial.print("Dew Point (oC): ");
+  Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));
+
+  Serial.print("Dew PointFast (oC): ");
+  Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity));
+
+
+  Serial.print("DS18B20 Requesting temperatures...");
+  sensors.requestTemperatures(); // Send the command to get temperatures
+  Serial.println("DONE");
+
+  sensors.requestTemperatures(); // Send the command to get temperatures
+  Serial.print("Temperature for the device 1 (index 0) is: ");
+  Serial.println(sensors.getTempCByIndex(0));  
+  
+  delay(2000);
+}
+//
+// END OF FILE
+//