Serre à semis

Labricole14
jeu, 02/16/2017 - 13:35
Bonjour,
J'ai commencé un programme pour piloter ma serre, qui actuellement fonctionne avec 2 thermostats électronique du type STC100.
Un thermostat commande le chauffage pour maintenir la température a 20° C.
L'autre me sert a piloter le vérin électrique qui ouvre la porte en grand quand T > 25°.
Ce vérin est équipé de 2 fins de courses qui coupe l'alimentation électrique dans les 2 positions extrêmes.
Et la referme quand T< --°
La carte "ARDUINO MEGA 2560" que je compte utiliser pour ouvrir la porte mais par palier.
Quand T > 25° C je donne un ordre ouverture pendant 5 secondes, je temporise 1 minutes pour laisser le temps à la température de se stabiliser et je reprend la boucle.
J'ai commencé ce code en utilisant mes recherche sur le Net.
//*****************************************************************************************************
#include <OneWire.h> // Inclusion de la librairie OneWire
#define DS18B20 0x28 // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE 2 // Broche utilisée pour le bus 1-Wire
#define relayChauffage 4 // Commande la résistance de chauffage
#define relayOuverture 5 // Commande ouverture de la porte
#define relayFermeture 6 // Commande la fermeture de la porte
#define relayPompe 7 // Démarre la pompe d'arrosage - Attente capteur humidité sol
#define relayBrumiseur 8 // Commande le brumisation piezzo pour l'engrais - Attente Horloge
#define buzzerPin 9 // Le buzzer sur 9
#define relayEclairage 10 // Commande la lumière - Attente cordon leds
#define tempBasse 20.5 // temp déclenchement allumage
#define tempHaute 25.0 // temp déclenchement extinction
#define alerteBasse 18.0 // temp déclenchement alerte basse buzzer
//#define alerteHaute 30.0 // temp déclenchement ouverture porte en grand
#define alerteHaute 35.0 // temp déclenchement buzzer
OneWire ds(BROCHE_ONEWIRE); // Création de l'objet OneWire ds
boolean etatChauffe; // attention : boolean etatChauffe = false.
boolean etatOuverture; // attention : boolean etatOuverture = false.
boolean etatFermeture; // attention : boolean etatFermeture = false.
// ne provoque pas d'erreur
// mais ne fonctionne pas.
// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d'erreur
boolean getTemperature(float *temp) {
byte data[9], addr[8];
// data : Données lues depuis le scratchpad
// addr : adresse du module 1-Wire détecté
if (!ds.search(addr)) { // Recherche un module 1-Wire
ds.reset_search(); // Réinitialise la recherche de module
return false; // Retourne une erreur
}
if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l'adresse a été correctement reçue
return false; // Si le message est corrompu on retourne une erreur
if (addr[0] != DS18B20) // Vérifie qu'il s'agit bien d'un DS18B20
return false; // Si ce n'est pas le cas on retourne une erreur
ds.reset(); // On reset le bus 1-Wire
ds.select(addr); // On sélectionne le DS18B20
ds.write(0x44, 1); // On lance une prise de mesure de température
delay(800); // Et on attend la fin de la mesure
ds.reset(); // On reset le bus 1-Wire
ds.select(addr); // On sélectionne le DS18B20
ds.write(0xBE); // On envoie une demande de lecture du scratchpad
for (byte i = 0; i < 9; i++) // On lit le scratchpad
data[i] = ds.read(); // Et on stock les octets reçus
// Calcul de la température en degré Celsius
*temp = ((data[1] << 8) | data[0]) * 0.0625;
// Pas d'erreur
return true;
}
// setup()
void setup() {
Serial.begin(9600); // Initialisation du port série
pinMode (relayChauffage, OUTPUT); // Sortie
pinMode (relayOuverture, OUTPUT);
pinMode (relayFermeture, OUTPUT);
pinMode (relayPompe, OUTPUT);
pinMode (relayBrumiseur, OUTPUT);
pinMode (relayEclairage, OUTPUT);
pinMode (buzzerPin, OUTPUT);
digitalWrite (relayChauffage, LOW); // On met tout OFF
digitalWrite (relayOuverture, LOW); // On met tout OFF
digitalWrite (relayFermeture, LOW); // On met tout OFF
digitalWrite (relayPompe, LOW); // On met tout OFF
digitalWrite (relayBrumiseur, LOW); // On met tout OFF
digitalWrite (relayEclairage, LOW); // On met tout OFF
digitalWrite (buzzerPin, LOW); // On met tout OFF
etatChauffe = false; // la condition d’exécution fausse, L’exécution en boucle se terminera et ne reprendra que lorsque la condition redeviendra vraie.
etatOuverture = false; // la condition d’exécution fausse, L’exécution en boucle se terminera et ne reprendra que lorsque la condition redeviendra vraie.
etatFermeture = false; // la condition d’exécution fausse, L’exécution en boucle se terminera et ne reprendra que lorsque la condition redeviendra vraie.
}
// loop()
void loop() {
float temp;
float sinVal;
int toneVal;
// Lit la température ambiante à ~1Hz
if (getTemperature(&temp)) {
// Affiche la température
Serial.print("Temperature : ");
Serial.print(temp);
Serial.write(176); // caractère °
Serial.write('C');
Serial.println();
delay(5000); // tempo: 5 secondes
if ((temp > tempBasse) && (etatChauffe == false)) { //Température est supérieure à 20° & état de chauffe faux
Serial.println();// saut 1 ligne
Serial.println("Temperature > 20 , Chauffage a l'arret."); //Message: Temperature de maintien au maxi, coupure du Chauffage.
Serial.println();// saut 1 ligne
digitalWrite(relayChauffage, HIGH); // Chauffage enclenché .
etatChauffe = false;
}
if ((temp < tempBasse) && (etatChauffe == true)) {
Serial.println("Temperature < 20, Enclenchement du chauffage."); // Temperature de maintient trop basse, Enclencement du chauffage.
Serial.println();
digitalWrite(relayChauffage, LOW); // Chauffage à l'arret.
etatChauffe = true;
}
//****************************************************************//
if (temp > tempHaute) {
Serial.println();
Serial.println("Temperature > 25, ouverture de la porte, pendant 5 secondes."); // Message: Temperature supérieure à 25°C, ouverture de la porte.
Serial.println();
digitalWrite(relayOuverture, HIGH), delay (5000); // ouverture de la porte pendant 5 secondes .
digitalWrite(relayOuverture, LOW);
etatOuverture = false;
Serial.println("Tempo 1 mn, Message: Attente stabilisation de la Temperature."); //Message: Attente stabilisation de la Temperature.
Serial.println();// saut 1 ligne.
delay(60000); // tempo 1 mn pour que la température est le temps de changer.
}
if (temp < tempHaute) {
Serial.println("Temperature < 25, fermeture de la porte."); // Message:Temperature inférieure à 25°C .
Serial.println();
digitalWrite(relayFermeture, HIGH); // Ferture de la porte.
digitalWrite(relayFermeture,LOW);
etatOuverture = false;
}
//**********************************************************************//
// température anormale !
if ((temp < alerteBasse) || (temp > alerteHaute)) {
Serial.println("Temperature anormale !!!!!!!!"); // Message: Temperature anormale.
Serial.println();
for (int x=0; x<180; x++) {
sinVal = (sin(x * (3.1412 / 180)));
toneVal = 2000 + (int(sinVal * 1000));
tone(buzzerPin, toneVal);
delay(10);
}
noTone(buzzerPin);
}
else {
noTone(buzzerPin);
}
}
}
Nathan Garnier
ven, 02/17/2017 - 13:46
Bonjour,
J'ai pas trés bien compris ... vous voulez remplacer les capteurs STC100 par cela ds18b20 c'est sa ?
Si oui pourquoi vous metté un bout du code en dehors des voidSetup et voidLoop ?
Je suis curieux d'apprendre plus sur ce projet.
A bientot
Labricole14
ven, 02/17/2017 - 14:43
Bonjour,
Oui, je veux remplacer les thermostats par une régulation programmé sous ARDUINO
En utilisant comme capteur de température un DS18B20.
Je veux pouvoir réguler la température de la serre en ouvrant la porte par palier.
Je n'ai pas trouver comment insérer le code entre les balises.
Cordialement,
Nathan Garnier
ven, 02/17/2017 - 15:09
J'ai trouvé sa , sa a l'air de s'implifier pas mal l'obtention de la température après il suffit de faire des if comme vous l'avez fait dans votre prgrm initial.
Labricole14
ven, 02/17/2017 - 16:01
Pour le problème ce trouve dans les if.
La température fonctionne bien.
C'est la gestion des if avec les délais qui monopolise l'ARDUINO
Je cherche comment passé outre.
De même la fermeture de la porte quand la température est inférieur à 25° ne fonctionne pas correctement.
Cordialement
Nathan Garnier
ven, 02/17/2017 - 17:20
Ah d'accord enfaite vous voulez que lorsque la porte s'ouvre durant les x secondes de l'ouverture l'arduino ne soit pas bloqué mais continue a regardé la temperature et si la temperature redescend sa referme la porte avant les x secondes c'est sa ?
Si oui la fonctions millis pourrait etre utile dans ce genre probleme
Labricole14
ven, 02/17/2017 - 19:05
Merci je vais explorer la fonction millis elle va me permettre d'avancer.
Je dois ajouter un module DS3231 pour déclencher mon brumisateur pour l'engrais.
Faut-il toujours utiliser la fonction millis ou il y a une autre fonction a utiliser dans la librairie du DS3231
Merci pour tes réponses
Cordialement,
Nathan Garnier
ven, 02/17/2017 - 19:23
Avec grand plaisir
Vous utilisez quel librairie pour ce module DS3231?
Et pour la fonction millis elle est très simple le seul problème c'est le faite qu'au bout d'environ 70 jours le compteur reviens a 0 donc sa peut créé un petit bug (un reset de la carte tt les 30jours permet d'éviter sa)
Labricole14
sam, 02/18/2017 - 10:01
Bonjour,
Je regarde la fonction millis et ne trouve pas que c'est si simple pour un débutant.
Je pense utiliser la librarie RTC pour mon DS3231, mais vous avez peut-être une autre librairie a me proposer?
Et je n'ai pas compris quand il faut utiliser delay plustôt que millis.
Cordialement,
Nathan Garnier
sam, 02/18/2017 - 11:50
Vous aurez le lien de cette librairie ? (Moi j'utilise le DS1307 comme module RTC).
Pour millis sa rajoute 2 variables dans le code :
-previousMillis (unsigned-long)
-delai = 10000 (juste pour l'exemple)(un int standard)
-currentMillis (unsigned long)
Et on joue avec cette fonction je m'explique :
D'abord on fais :
currentMillis = millis()
Puis pour voir si les 10 secondes ce sont écoulés :
If ( currentMillis - previousMillis >= delai){
previousMillis = currentMillis; //remet a zero le "compteur"
//On fait ce qu'on a a faire
}
Ce petit bout de code va donc activée l'intérieur du If une fois tt les 10secondes
Pour votre utilisation il faut donc faire pareil mais rajouter un If qui vient vérifiée la température et si la température redescend avant vos x secondes ce ne sera pas le If de "temps" qui s'activera mais le If de "température"
Je sais pas si j'ai été clair dans mes explications ...
Labricole14
sam, 02/18/2017 - 18:48
Bonsoir,
Je vais faire des essais et je reviens vers vous si besoin.
Merci pour votre aide
Cordialement;
Labricole14
mer, 02/22/2017 - 13:48
Bonjour,
J'ai repris mon programme, mais je n'ai sûrement pas tout compris car la tempo d'une minute ne s'enclenche pas.
/* le 17/02/2017 code extrait du Net
Ancienne armoire réfrigérée vitrée 4 faces transformée en serre à semis
Ouverture de la porte par un actionneur linéaire 24v= qui est équipé de 2 fins de course d'origine et interne
carte Agrduino MEGA 2560
DS3231 horloge pour gérer le temps
DS18B20 sonde température
Module relais pour toute commande tout ou rien
Un fin de course sur la porte pour savoir quand elle est fermée.
Il coupera la commande de fermeture et autorisera la mise en service du chauffage
*/
//*****************************************************************************************************
#include <OneWire.h> // Inclusion de la librairie OneWire
#define DS18B20 0x28 // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE 2 // Broche utilisée pour le bus 1-Wire
#define fdcPorte 3 // Fin de course porte fermée
#define relayChauffage 4 // Commande la résistance de chauffage
#define relayOuverture 5 // Commande ouverture de la porte
#define relayFermeture 6 // Commande la fermeture de la porte
#define relayPompe 7 // Démarre la pompe d'arrosage - Attente capteur humidité sol
#define relayBrumisateur 8 // Commande le brumisation piezzo pour l'engrais - Attente Horloge
#define buzzerPin 9 // Le buzzer sur 9
#define relayEclairage 10 // Commande la lumière - Attente cordon leds
#define alerteBasse 18.0 // temp déclenchement alerte basse buzzer
#define tempBasse 20.5 // temp déclenchement allumage
#define tempHaute 25.0 // temp déclenchement extinction
#define tempTresHaute 30.0 // temp déclenchement extracteur d'air
#define alerteHaute 35.0 // temp déclenchement buzzer
OneWire ds(BROCHE_ONEWIRE); // Création de l'objet OneWire ds
const long Time_1 = 1000; //1 secondes
const long Time_2 = 5000; //5 secondes
const long Time_3 = 10000; //10 secondes
const long Time_4 = 32000; //32 secondes
const long Time_5 = 60000; //1 minute
boolean etatChauffe; // attention : boolean etatChauffe = false.
boolean etatOuverture; // attention : boolean etatOuverture = false.
boolean etatFermeture; // attention : boolean etatFermeture = false.
unsigned long previousMillis_1 = 0; //
unsigned long previousMillis_2 = 0;
unsigned long previousMillis_3 = 0; //
unsigned long previousMillis_4 = 0;
unsigned long previousMillis_5 = 0;
// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d'erreur
boolean getTemperature(float *temp) {
byte data[9], addr[8];
// data : Données lues depuis le scratchpad
// addr : adresse du module 1-Wire détecté
if (!ds.search(addr)) { // Recherche un module 1-Wire
ds.reset_search(); // Réinitialise la recherche de module
return false; // Retourne une erreur
}
if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l'adresse a été correctement reçue
return false; // Si le message est corrompu on retourne une erreur
if (addr[0] != DS18B20) // Vérifie qu'il s'agit bien d'un DS18B20
return false; // Si ce n'est pas le cas on retourne une erreur
ds.reset(); // On reset le bus 1-Wire
ds.select(addr); // On sélectionne le DS18B20
ds.write(0x44, 1); // On lance une prise de mesure de température
delay(800); // Et on attend la fin de la mesure
ds.reset(); // On reset le bus 1-Wire
ds.select(addr); // On sélectionne le DS18B20
ds.write(0xBE); // On envoie une demande de lecture du scratchpad
for (byte i = 0; i < 9; i++) // On lit le scratchpad
data[i] = ds.read(); // Et on stock les octets reçus
// Calcul de la température en degré Celsius
*temp = ((data[1] << 8) | data[0]) * 0.0625;
// Pas d'erreur
return true;
}
// setup()
void setup() {
Serial.begin(9600); // Initialisation du port série
pinMode (relayChauffage, OUTPUT); // Initialisé en sortie
pinMode (relayOuverture, OUTPUT);
pinMode (relayFermeture, OUTPUT);
pinMode (relayPompe, OUTPUT);
pinMode (relayBrumisateur, OUTPUT);
pinMode (relayEclairage, OUTPUT);
pinMode (buzzerPin, OUTPUT);
digitalWrite (relayChauffage, LOW); // On met tout OFF
digitalWrite (relayOuverture, LOW); // On met tout OFF
digitalWrite (relayFermeture, LOW); // On met tout OFF
digitalWrite (relayPompe, LOW); // On met tout OFF
digitalWrite (relayBrumisateur, LOW); // On met tout OFF
digitalWrite (relayEclairage, LOW); // On met tout OFF
digitalWrite (buzzerPin, LOW); // On met tout OFF
etatChauffe = false; // la condition d’exécution fausse, L’exécution en boucle se terminera et ne reprendra que lorsque la condition redeviendra vraie.
etatOuverture = false; // la condition d’exécution fausse, L’exécution en boucle se terminera et ne reprendra que lorsque la condition redeviendra vraie.
etatFermeture = false; // la condition d’exécution fausse, L’exécution en boucle se terminera et ne reprendra que lorsque la condition redeviendra vraie.
}
// loop()
void loop() {
unsigned long currentMillis = millis();
float temp;
float sinVal;
int toneVal;
// Lit la température ambiante à ~1Hz
if (getTemperature(&temp)) {
// Affiche la température
Serial.print("Temperature : ");
Serial.print(temp);
Serial.write(176); // caractère °
Serial.write('C');
Serial.println();
//if ((millis() - temps) > 5000)
//delayMicroseconds(500000); // tempo: 5 secondes
//******************** Chauffage ******************//
if ((temp > tempBasse) && (etatChauffe == false)) { //Température est supérieure à 20° & état de chauffe faux
Serial.println();// saut 1 ligne
Serial.println("Temperature > 20 , Chauffage a l'arret."); //Message: Temperature de maintien au maxi, coupure du Chauffage.
Serial.println();// saut 1 ligne
digitalWrite(relayChauffage, HIGH); // Chauffage enclenché .
etatChauffe = false;
}
if ((temp < tempBasse) && (etatChauffe == true)) {
Serial.println("Temperature < 20, Enclenchement du chauffage."); // Temperature de maintient trop basse, Enclencement du chauffage.
Serial.println();
digitalWrite(relayChauffage, LOW); // Chauffage à l'arret.
etatChauffe = true;
}
//********************** Régulation température ******************************************//
if (temp > tempHaute) {
Serial.println();
Serial.println("Temperature > 25, ouverture de la porte, pendant 5 secondes."); // Message: Temperature supérieure à 25°C, ouverture de la porte.
Serial.println();
digitalWrite(relayOuverture, HIGH);//, delay (5000); // ouverture de la porte pendant 5 secondes .
if (currentMillis - previousMillis_2 >= Time_2)
{
previousMillis_2 = currentMillis;
{
digitalWrite(relayOuverture, LOW);
etatOuverture = false;
Serial.println("Tempo 1 mn, Message: Attente stabilisation de la Temperature."); //Message: Attente stabilisation de la Temperature.
Serial.println();// saut 1 ligne.
if (currentMillis - previousMillis_5 >= Time_5) {
previousMillis_5 = currentMillis;
{
//delay(60000); // tempo 1 mn pour que la température est le temps de changer.
}
if (temp < tempHaute) {
Serial.println("Temperature < 25, fermeture de la porte."); // Message:Temperature inférieure à 25°C .
Serial.println();
digitalWrite(relayFermeture, HIGH); // Fermeture de la porte.
if (currentMillis - previousMillis_4 >= Time_4) {
previousMillis_4 = currentMillis;
digitalWrite(relayFermeture, LOW);
etatOuverture = false;
}
//**********************************************************************//
// température anormale !
if ((temp < alerteBasse) || (temp > alerteHaute)) {
Serial.println("Temperature anormale !!!!!!!!"); // Message: Temperature anormale.
Serial.println();
for (int x = 0; x < 180; x++) {
sinVal = (sin(x * (3.1412 / 180)));
toneVal = 2000 + (int(sinVal * 1000));
tone(buzzerPin, toneVal);
delay(10);
}
noTone(buzzerPin);
}
else {
noTone(buzzerPin);
}
}
}
}
}
}
}
}
Je ne trouve pas ou j'ai fais une erreur.
Mais je n'ai d'erreur en compilant le code.
Cordialement.
Nathan Garnier
mer, 02/22/2017 - 15:14
Bonjour,
Je ne comprend pas bien ce bout j'ai l'impression qu'il ya une erreur...
Et pour millis sa ne sert a rien de creer autant de variable previous_millis juste 1 suffit pour tt le code
Labricole14
mer, 02/22/2017 - 17:10
Bonsoir,
//******************** Chauffage ******************//
if ((temp > tempBasse) && (etatChauffe == false)) { //Température est supérieure à 20° & état de chauffe faux
Serial.println();// saut 1 ligne
Serial.println("Temperature > 20 , Chauffage a l'arret."); //Message: Temperature de maintien au maxi, coupure du Chauffage.
Serial.println();// saut 1 ligne
digitalWrite(relayChauffage, LOW); // Chauffage déclenché .
etatChauffe = false;
}
if ((temp < tempBasse) && (etatChauffe == true)) {
Serial.println("Temperature < 20, Enclenchement du chauffage."); // Temperature de maintient trop basse, Enclencement du chauffage.
Serial.println();
digitalWrite(relayChauffage, HIGH); // Chauffage à l'arret.
etatChauffe = true;
C'est mieux comme ça?
Cordialement.
Nathan Garnier
mer, 02/22/2017 - 21:36
Je pense que oui mais il faut aussi inverse l'etat de chauffe dans les if car si la temperature est plus haute on doit eteindre le chauffage que si il est allumé (premier If) et inversement pour le deuxieme if
Vous me permettez d'éditer le programme chez moi pour commenter directement le code ?
Labricole14
jeu, 02/23/2017 - 07:48
Bonjour,
Il n'y a pas de problème, ce code est libre d'accès.
Si vous pouvez m'aider a résoudre les problèmes c'est super car je vais devoir commencer mes semis.
Cordialement.
Nathan Garnier
jeu, 02/23/2017 - 15:57
Pourriez-vous m'envoyer les liens de vos librairies one wire et pour votre module RTC ?
Labricole14
jeu, 02/23/2017 - 18:31
Bonsoir,
Voici les liens
https://github.com/rodan/ds3231 One wire
https://github.com/rodan/ds3231 RTC
Merci pour votre aide
Cordialement;
Nathan Garnier
jeu, 02/23/2017 - 20:48
Bonsoir,
il ne manque pas la librairie One Wire ?
Je voudrai juste le compiler afin de vous donner un code sans erreur c'est mieux quand même
Desolé du derangement...
Nathan Garnier
jeu, 02/23/2017 - 21:57
Bon impossible de compiler le programme en le copiant pouvez vous envoyer le .ino directement ?
Labricole14
ven, 02/24/2017 - 06:35
Bonjour, je vous joints le fichier.
Merci de votre aide.
Cordialement.
Nathan Garnier
ven, 02/24/2017 - 07:04
Bonjour,
Merci beaucoup je fais sa aujourd'hui sa tombe bien j'ai TPE :)
Nathan Garnier
sam, 02/25/2017 - 11:09
Bonjour, voici le code edité je n'ai rien changé mis a part l'organisation des boucles et les If d'attente j'espere qu'il fonctionnera
Labricole14
dim, 02/26/2017 - 07:54
Bonjour,
Merci pour votre retour de code.
Il ne fonctionne pas, l'ordre d'ouverture de porte reste activé même après la tempo de 5s et est toujours activé à 21°C
Cordialement;
Nathan Garnier
dim, 02/26/2017 - 13:44
Bonjour désolé j'ai fais une erreur toute bête, je vous explique dans le code j'ai mis un
previouMillis = millis();// pour avoir un delay plus proche des 5 secondes
sauf que le problème c'est que cette commande s'execute tout le temps vue qu'on est a l'interieur d'une boucle donc millis n'arrivait jamais a dépasser previousMillis de plus de quelques millisecondes. Donc j'ai mis une petite condition + j'ai remis les delay(5000) pour l'attente de la fermeture / ouverture car il n'y a pas besoin de la condition avec millis,parce que dans tout les cas on attend sans rien faire. voila voila en espérant que cette fois-ci cela fonctionne bien.
Labricole14
dim, 02/26/2017 - 15:12
Bonjour,
Ok la tempo des 5 secondes d'ouverture de la porte fonctionne, mais pas la tempo d'une minute pour que la température est le temps de se stabiliser l'ouverture de la porte redémarre de suite.
Merci pour votre aide
cordialement.
Nathan Garnier
dim, 02/26/2017 - 15:14
Je m'y remet alors ;D
Nathan Garnier
dim, 02/26/2017 - 15:20
si vous chaufer avec vos doigt la sonde de temperature est ce que la porte reste plus lomgtemps ouverte ?
Nathan Garnier
dim, 02/26/2017 - 15:27
quelque petite correction
Labricole14
dim, 02/26/2017 - 15:45
Il y a toujours le problème e la tempo 1 minute qui ne s'enclenche pas
Labricole14
dim, 02/26/2017 - 15:58
Même si je garde la sonde dans la mains la température monte et les ordres d'ouverture de porte s'enchaînent sans la tempo d'une minute.
Cordialement.
Nathan Garnier
dim, 02/26/2017 - 16:01
mmmh...
la porte ne se ferme meme pas ?
Labricole14
dim, 02/26/2017 - 16:20
Non il n'y a pas d'ordre de fermeture de porte qui passe!!
Nathan Garnier
dim, 02/26/2017 - 16:20
J'ai trouvé une autre façon de faire l'attente il suffit de mettre une boucle while qui regarde si la temperature n'est pas en dessous de 24°C enfin voici le fichier et cette fois sa marche
Enfin je crois ;)
Nathan Garnier
dim, 02/26/2017 - 16:21
En même temps sa c'est beau :D
Labricole14
dim, 02/26/2017 - 16:40
Maintenant, j'ai un clignotement entre les ordres d'ouvertures de porte et fermetures.
Voir fichier joint.
Nathan Garnier
dim, 02/26/2017 - 16:43
donc la temperature ne redescent pas sa c'est louche ...
Labricole14
dim, 02/26/2017 - 16:50
Non l'ordre de fermeture de la porte est donné même en montée de température.
Nathan Garnier
dim, 02/26/2017 - 16:51
mmh j'essaie quelque chose je reviens dans 5 minute
Nathan Garnier
dim, 02/26/2017 - 16:59
J'espere que la ce sera mieux
Labricole14
dim, 02/26/2017 - 17:17
Là nous avons bien l'ordre de fermeture de la porte tant que la température ne dépasse pas 22°,
Puis un ordre d'ouverture pendant 5 secondes et plus rien.
Labricole14
dim, 02/26/2017 - 17:50
j'ai fais une modification en définissant temp25 - temp26 - temp27...
Je vous joint le fichier code et séries
Le problème est que quand la température est sup à 25 ordre d'ouverture pendant 5s
puis quand elle monte à 26° il y a de nouveau l'ordre 25° et puis l'ordre de 26°
C'est là je ne sais lui dire de ne pas prendre la température 25°
Nathan Garnier
dim, 02/26/2017 - 17:59
Mais sinon on peut fais sans ouverture, il faut alumer et eteindre le chauffage en prenant en compte la latence de temps entre la chauffe et l'obtention par le capteur
Labricole14
dim, 02/26/2017 - 18:15
Pas possible la serre est en extérieur et c'est le soleil qui fait varier la chauffe.
La résistance de chauffage n'est là que pour la nuit ou en hiver quand les températures sont inférieures à 20°
Je l'ai utilisé l'année dernière régulé avec 2 thermostats.
le problème est que la régulation de température n'est pas assez linéaire.
Nathan Garnier
dim, 02/26/2017 - 18:08
ah d'accord tout s'explique mais une porte qui s'ouvre suffit pour refroidir? il faudrait un ventilateur non ?
Labricole14
dim, 02/26/2017 - 18:21
Il y a un ventilateur qui brasse l'air de la serre en permanence pour rendre la température la plus homogène.
Je vais mettre en plus un extracteur en partie haute qui démarrera si la température monte au dessus de 30°
Nathan Garnier
dim, 02/26/2017 - 18:24
D'accord donc enfaite ce que vous voulait c'est que la porte s'ouvre un peu si la temperature ne baisse pas elle s'ouvre plus et etc c'est sa ?
Labricole14
dim, 02/26/2017 - 18:34
exactement, je la fait ouvrir pendant 5 s quand la température est sup 25°, si elle continue a monter 26° je veux redonner un ordre d'ouverture de 5s ainsi de suite jusqu'a l'ouverture totale.
Je voulais mettre une tempo d'une minute entre chaque ouverture pour laisser le temps à la température de se stabiliser.
Nathan Garnier
dim, 02/26/2017 - 18:50
d'accord d'accord mais par souci de simpliciter il faudrai mieux agir sur l'extracteur directement plutot que sur l'ouverture des portes car l'on ne gére pas l'entrée d'air et donc la temperature ne sera pas stable non plus sauf si vous avez un climat tres regulier.
Labricole14
dim, 02/26/2017 - 19:00
L'extracteur d'air ne peut fonctionner que quand la porte est ouverte en grand, il souffle par la porte ouverte.
donc en dernier recours si je n'arrive pas a réguler avant.
Nathan Garnier
lun, 02/27/2017 - 17:32
Bonjour vous avez donc deux capteurs de temperature ou juste un seul ?
Pour pouvoir reguler la temperature de facon correct il faudrai un capteur de temperature exterieure afin que si l'air exterieure est trop froid l'on utilise une regulation par chauffage et non une ouverture de porte.
Pages