Ciao a tutti,
sto utilizzando il sensore DHT11 per il monitoraggio di umidità e temperatura.
C'è un comportamento che proprio non capisco, di tanto in tanto, diciamo una volta al minuto circa, benché venga dato checksum OK arrivano dei dati sbagliati.
Il DHT11 è cablato al termine di un cavetto telefonico lungo circa 6mt (due poli per VCC, due poli per SIGN e due poli per GND). Come da manuale ho installato una resistenza da 5Kohm tra SIGN e VCC.
Ho comunque provato anche resistenze di valore diverso ma il risultato non cambia. Ho provato anche ad installare un condensatore da 100nF tra SIGN E GND ma ugualmente il risultato non cambia.
Lo sketch è:
/*************************************************************************************************************
*
* Title : Monitoraggio temperatura ed umidità con visualizzazione su xively
* Version : v4
* Last updated : 20.11.14
* Target : Arduino UNO
* Installato il : 20 Novembre 2014
* IDE : 1.0.6
***************************************************************************************************************
Monitoraggio temperatura ed umidità con visualizzazione su xively
https://xively.com/feeds/281717909
XIVELY APY KEY: tuHwQmRgHRrcO19dzHzSpTJ3C7vSBDANrMxVLyVaVf6baWSc
XIVELY FEEDS: 281717909
/*************************************************************************************************************
D2 = ING DHT11 per monitoraggio umidità e temperatura
**************************************************************************************************************/
#include <SPI.h>
#include <Ethernet.h>
#include <HttpClient.h>
#include <Xively.h>
// MAC address for your Ethernet shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Your Xively key to let you upload data
char xivelyKey[] = "tuHwQmRgHRrcO19dzHzSpTJ3C7vSBDANrMxVLyVaVf6baWSc";
// Define the strings for our datastream IDs
char sensorId[] = "Umidità_Umidif.";
char sensorId2[] = "Temperatura_Umidif.";
XivelyDatastream datastreams[] = {
XivelyDatastream(sensorId, strlen(sensorId), DATASTREAM_FLOAT),
XivelyDatastream(sensorId2, strlen(sensorId2), DATASTREAM_FLOAT),
};
// Finally, wrap the datastreams into a feed
XivelyFeed feed(281717909, datastreams, 2 /* number of datastreams */);
EthernetClient client;
XivelyClient xivelyclient(client);
/////////////////////////////////FINE INIZIALIZZAZIONE XIVELY
//
// FILE: dht11_test1.pde
// PURPOSE: DHT11 library test sketch for Arduino
// DHT11 connesso a pin DIGITALE 2
//
//Celsius to Fahrenheit conversion
double Fahrenheit(double celsius)
{
return 1.8 * celsius + 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 A0= 373.15/(273.15 + celsius);
double SUM = -7.90298 * (A0-1);
SUM += 5.02808 * log10(A0);
SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-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 // PIN DIGITALE 2
void setup()
{
Serial.begin(9600);
Serial.println("DHT11 TEST PROGRAM ");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT11LIB_VERSION);
Serial.println();
while (Ethernet.begin(mac) != 1)
{
Serial.println("Error getting IP address via DHCP, trying again...");
delay(15000);
}
}
void loop()
{
Serial.println("\n");
int chk = DHT11.read(DHT11PIN);
Serial.print("Read sensor: ");
switch (chk)
{
case 0: Serial.println("OK");
{
Serial.print("Humidity (%): ");
Serial.println((float)DHT11.humidity, 2);
datastreams[0].setFloat(DHT11.humidity);
Serial.print("Read sensor value ");
Serial.println(datastreams[0].getFloat());
Serial.print("Temperature (oC): ");
Serial.println((float)DHT11.temperature, 2);
datastreams[1].setFloat(DHT11.temperature);
Serial.print("Read sensor value ");
Serial.println(datastreams[1].getFloat());
Serial.println("Uploading it to Xively");
int ret = xivelyclient.put(feed, xivelyKey);
Serial.print("xivelyclient.put returned ");
Serial.println(ret);
//Serial.println();
delay(2000);
break;
}
case -1: Serial.println("Checksum error"); break;
case -2: Serial.println("Time out error"); break;
default: Serial.println("Unknown error"); break;
}
delay(100);
}
// END OF FILE
Qualcuno sa spiegarmi il motivo dell'errore?
E' possibile visualizzare il funzionamento/non funzionamento dello sketch presso: https://xively.com/feeds/281717909
Grazie e buona giornata a tutti.