Go Down

Topic: Point de rosée pour controlleur astronomie (Read 360 times) previous topic - next topic

DENISmgt

Bonjour
comment actionner un relais suivant le point de rosée.

Code: [Select]
#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.

trimarco232

Bonjour,
est-ce que tu parviens à afficher les messages "on" ou "off" sur le lcd ?

infobarquee

AUCUNE AIDE PAR MP

Go Up