Bonjour
comment actionner un relais suivant le point de rosée.
#include <LiquidCrystal.h> //Librairie pour l'écran LCD
#include <DHT.h> //Librairie pour le capteur DHT
#include <SPI.h> // Inclut la librairie SPI communiquation périphériques.
#define DHTPIN 7 //Pin auquel est connecté le capteur DHT
#define DHTTYPE DHT22 //Si vous utiliser le DHT 22
//#define DHTTYPE DHT11 //Si vous utiliser le DHT 11
const int intTimePause = 5000; //Par défaut on actualise les valeures toutes les 5 secondes
int Relay = 13; // Sortie relay broche 13.
float fltHumidity; //Pourcentage d'humidité mesuré
float fltTemperature; //Température mesurée en Celsius
DHT dht(DHTPIN, DHTTYPE); //On initialise le capteur DHT
static LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //Initialisation de l'écran LCD avec les numéros des pins utilisés
boolean etatChauffe; // attention: boolean etatChauffe = false
//Point de rosée (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;
}
void setup()
{
lcd.begin(16, 4); //On indique le nombre de colonnes et de lignes de l'écran
lcd.clear(); //On efface tout ce qui se trouve sur l'écran
pinMode (Relay,OUTPUT);
}
void loop()
{
fltHumidity = dht.readHumidity(); //On lit le pourcentage d'humidité
fltTemperature = dht.readTemperature(); //On lit la température en degrés Celsuis
if (isnan(fltTemperature) || isnan(fltHumidity)) //Si les valeures retournées ne sont pas des nombres :
{
lcd.setCursor(4, 0); // 1er ligne (numéroté depuis 5).
lcd.print("DewPoint"); // Affiche: DewPoint
lcd.setCursor(0, 1); // 2eme ligne (numéroté depuis 0).
lcd.print("Type: DHT"); // Affiche: Type: DHT
lcd.setCursor(9, 1); // 2eme ligne (numéroté depuis 10).
lcd.print(DHTTYPE); // On affiche le type de capteur
lcd.setCursor(0, 3); // 4eme ligne (numéroté depuis 10).
lcd.print("Erreure"); // On affiche l'erreur
}
else
{
//mise en forme et affichage des informations sur l'écran LCD
lcd.clear(); // On efface tout ce qui se trouve sur l'écran
lcd.setCursor(0, 0); // 1er ligne (numéroté depuis 0).
lcd.print("Temp. :"); // Affiche: Temp. :
lcd.setCursor(9, 0); // 1emme ligne (numéroté depuis 9).
lcd.print(fltTemperature); // Affichage de la température.
lcd.setCursor(13, 0); // 1emme ligne (numéroté depuis 13).
lcd.print((char)223); // Affiche: le caractère ° (degrés)
lcd.setCursor(14, 0); // 1emme ligne (numéroté depuis 14).
lcd.print("C"); // Affiche en degrés Celsuis C
lcd.setCursor(0, 1); // 2eme ligne (numéroté depuis 0).
lcd.print("Humidite:"); // Affiche: Humidite:
lcd.setCursor(9, 1); // 2eme ligne (numéroté depuis 9).
lcd.print(fltHumidity); // Affichage de l'humidité.
lcd.setCursor(14, 1); // 2eme ligne (numéroté depuis 14).
lcd.print("%"); // Affiche: le caractère % (pourcentage).
lcd.setCursor(0, 2); // 3eme ligne (numéroté depuis 0).
lcd.print("Dewpoint:"); // Affiche: Dewpoint:
lcd.setCursor(9, 1); // 3eme ligne (numéroté depuis 9).
lcd.print(dewPoint(fltTemperature, fltHumidity)); // Affichage point de rosée.
lcd.setCursor(13, 0); // 3emme ligne (numéroté depuis 13).
lcd.print((char)223); // Affiche: le caractère ° (degrés)
lcd.setCursor(14, 0); // 3emme ligne (numéroté depuis 14).
lcd.print("C"); // Affiche en degrés Celsuis C
/* affichage On ou Off du relay suivant point de rosée */
if (dewPoint)
{
digitalWrite(Relay,LOW);
lcd.setCursor(0,03); // 4emme ligne (numéroté depuis 0)
lcd.print("Fonction :"); // Afficher un petit message: fonction
lcd.print (" Off"); // Afficher un petit message: Off
else
{
digitalWrite(Relay,HIGH);
lcd.setCursor(0,03); // 4emme ligne (numéroté depuis 0)
lcd.print("Fonction :"); // Afficher un petit message: fonction
lcd.print (" On"); // Afficher un petit message: On suivant point de rosée
}
}
delay(intTimePause); //On actualise les informations toutes les x millisecondes.
}
un petit aide sur la fin d'un programme merci.