Grafik di atas menunjukkan suhu dan kelembaban di kamar saya.
Untuk menghasilkan grafik di atas saya memakai pengukur suhu DHT11 yang di akses melalui Arduino Pro Mini.
Kemudian data di kirim ke website Ubidots melalui router MR3020 yang sudah di flash dengan OpenWRT.
Okay tanpa basa-basi lagi akan saya sharingkan beberapa hal berikut.
Sketch Arduino - nya :
Selamat mencoba !
Untuk menghasilkan grafik di atas saya memakai pengukur suhu DHT11 yang di akses melalui Arduino Pro Mini.
Kemudian data di kirim ke website Ubidots melalui router MR3020 yang sudah di flash dengan OpenWRT.
Okay tanpa basa-basi lagi akan saya sharingkan beberapa hal berikut.
Sketch Arduino - nya :
//
// FILE: dht11_test1.pde
// PURPOSE: DHT11 library test sketch for Arduino
//
// FILE: dht11_test1.pde
// PURPOSE: DHT11 library test sketch for Arduino
//
//Celsius to Fahrenheit conversion
double Fahrenheit(double celsius)
{
return 1.8 * celsius + 32;
}
double Fahrenheit(double celsius)
{
return 1.8 * celsius + 32;
}
// fast integer version with rounding
//int Celcius2Fahrenheit(int celcius)
//{
// return (celsius * 18 + 5)/10 + 32;
//}
//int Celcius2Fahrenheit(int celcius)
//{
// return (celsius * 18 + 5)/10 + 32;
//}
//Celsius to Kelvin conversion
double Kelvin(double celsius)
{
return celsius + 273.15;
}
double Kelvin(double celsius)
{
return celsius + 273.15;
}
// dewPoint function NOAA
// reference (1) : http://wahiduddin.net/calc/density_algorithms.htm
// reference (2) : http://www.colorado.edu/…/weather_stati…/Geog_site/about.htm
//
double dewPoint(double celsius, double humidity)
{
// (1) Saturation Vapor Pressure = ESGG(T)
double RATIO = 373.15 / (273.15 + celsius);
double RHS = -7.90298 * (RATIO - 1);
RHS += 5.02808 * log10(RATIO);
RHS += -1.3816e-7 * (pow(10, (11.344 * (1 - 1/RATIO ))) - 1) ;
RHS += 8.1328e-3 * (pow(10, (-3.49149 * (RATIO - 1))) - 1) ;
RHS += log10(1013.246);
// reference (1) : http://wahiduddin.net/calc/density_algorithms.htm
// reference (2) : http://www.colorado.edu/…/weather_stati…/Geog_site/about.htm
//
double dewPoint(double celsius, double humidity)
{
// (1) Saturation Vapor Pressure = ESGG(T)
double RATIO = 373.15 / (273.15 + celsius);
double RHS = -7.90298 * (RATIO - 1);
RHS += 5.02808 * log10(RATIO);
RHS += -1.3816e-7 * (pow(10, (11.344 * (1 - 1/RATIO ))) - 1) ;
RHS += 8.1328e-3 * (pow(10, (-3.49149 * (RATIO - 1))) - 1) ;
RHS += log10(1013.246);
// factor -3 is to adjust units - Vapor Pressure SVP * humidity
double VP = pow(10, RHS - 3) * humidity;
double VP = pow(10, RHS - 3) * humidity;
// (2) DEWPOINT = F(Vapor Pressure)
double T = log(VP/0.61078); // temp var
return (241.88 * T) / (17.558 - T);
}
double T = log(VP/0.61078); // temp var
return (241.88 * T) / (17.558 - T);
}
// delta max = 0.6544 wrt dewPoint()
// 6.9 x 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*0.01);
double Td = (b * temp) / (a - temp);
return Td;
}
// 6.9 x 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*0.01);
double Td = (b * temp) / (a - temp);
return Td;
}
dht11 DHT11;
#define DHT11PIN 2
boolean ack = false;
boolean ack = false;
void setup()
{
Serial.begin(9600);
Serial.println("DHT11 TEST PROGRAM ");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT11LIB_VERSION);
Serial.println();
{
Serial.begin(9600);
Serial.println("DHT11 TEST PROGRAM ");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT11LIB_VERSION);
Serial.println();
}
void loop()
{
// Serial.println("\n");
{
// Serial.println("\n");
int chk = DHT11.read(DHT11PIN);
/*
Serial.print("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((int)DHT11.humidity);
/*
Serial.print("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((int)DHT11.humidity);
// Serial.print("Temperature (C): ");
Serial.println((int)DHT11.temperature);
Serial.println((int)DHT11.temperature);
delay(2000);
}
//
// END OF FILE
//
}
//
// END OF FILE
//
Di Router MR3020 -nya :
1. Edit /usr/bin/suhu.sh
#!/bin/sh
cat /dev/ttyUSB0 > /tmp/log.txt &
sleep 2
killall cat
sleep 2
killall cat
api_key="b7adf5968db2140dcea136c458c4be4a6440a3ec"
deviceID="55a7382a7625422d983169d3"
deviceID2="5613482a7625ab22d983169a4"
deviceID="55a7382a7625422d983169d3"
deviceID2="5613482a7625ab22d983169a4"
value=`cat /tmp/log.txt | tail -n 1` #post data Suhu
value2=`cat /tmp/log.txt | head -n 1` #post data Kelembaban
value2=`cat /tmp/log.txt | head -n 1` #post data Kelembaban
#post Temperature data to Ubidots
/usr/lib/lua/ubidots.lua "-post" $api_key $deviceID $value
/usr/lib/lua/ubidots.lua "-post" $api_key $deviceID $value
sleep 1
#post Humidity data to Ubidots
/usr/lib/lua/ubidots.lua "-post" $api_key $deviceID2 $value2
/usr/lib/lua/ubidots.lua "-post" $api_key $deviceID2 $value2
2. Pakai cronjob jalankan script diatas setiap menit
* * * * * /usr/bin/ubidots.sh > /dev/null
Untuk tutorial lebih lengkap saya persilahkan menuju ke website :
http://www.ediy.com.my/index.php/projects/item/121-ubidots-lua-openwrt-router-ubidots-real-time-data-monitoring . * * * * * /usr/bin/ubidots.sh > /dev/null
Selamat mencoba !