Aération Serre

Bonsoir à Tous,
Avec les différents projets similaires sur le forum, j’ai pompé des parties de code, ce qui me permet d’apprendre la programmation (un vrai débutant de quelques semaines), mais j’avance à petits pas.
Mon projet est de faire fonctionner l’aération d’une serre en fonction de la T° et de la position du toit (ouvert / fermé ) piloté par des capteurs fin de course, avec un affichage de la T° sur un Oled.
Avec des leds, je vois bien le fonctionnement de l’ensemble.
Je fais appel à vos lumières car je butte sur la programmation d’une temporisation de fonctionnement du moteur (en ouverture ou en fermeture) au cas où il y ait un dysfonctionnements mécanique ( arbre de transmission cassé) ou électrique (défaut des capteurs fin de course)
J’ai bien essayé plusieurs option mais sans succès, la dernière version est à la ligne 137 du code
Je vous joins mon fichier .ino
Merci par avance de vos propositions

Aeration_lcd_20_4.ino (5.45 KB)

Bonjour
Demandes au modérateur le déplacement du message a l'endroit défini dans les règles du forum. (lien Report to Moderator, en bas à gauche)
Tu n'auras pas beaucoup de réponses dans l'espace dédié aux choses FINIES

en plus, prendre du code par ci par la est un peux risqué

Essaye ceci :

  // Arret Fermeture avec capteur bas
  if ((T <= 25  &&  etatcapteurbas == HIGH && etatcapteurhaut == LOW) ||
      (MotFerme == HIGH  &&  millis() - tempsdebutferme >= 20000)
    digitalWrite(MotFerme, LOW); // le moteur est arreté en fermeture

Au besoin, le code entier :

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2 // Broche de données du bus oneWire connécté sur la broche 2
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels


// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);


unsigned long tempsdebutouv  = 0;
unsigned long tempsdebutferme = 0;
OneWire oneWire_DS18B20(ONE_WIRE_BUS);// Créer une instance d'objet oneWire pour communiquer avec tous les périphériques OneWire
//OneWire oneWire(ONE_WIRE_BUS); // Instanciation de l'objet ‘oneWire’
DallasTemperature sensors(&oneWire_DS18B20);//Transmettre notre référence oneWire au
//capteur de température Dallas
#define Trans 8
float T;


int MotOuvre = 8; // moteur ouverture
int MotFerme = 9; // moteur fermeture
int fin_coursebas = 10; // bouton pin 2 !!!!
int fin_coursehaut = 4; // bouton pin 4
int ledbas = 6;
int ledhaut = 5;
int etatcapteurbas = LOW; // etat du capteur bas
int etatcapteurhaut = LOW; // etat du capteur haut
int buzzer = 7;
int etatmoteur = 0; // 0=MoteurArret, 1= MoteurFerme,2= MoteurOuvre


boolean toit_ferme ;
boolean toit_ouvert;
boolean toit_milieu_course;






void setup() {
  Serial.begin(115200);


  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }
  delay(2000);


  Serial.begin(9600);//Connection série à 9600 baud
  sensors.begin(); //Initialiser le capteur DS18B20


  pinMode(MotOuvre, OUTPUT);
  pinMode(MotFerme, OUTPUT);
  pinMode(fin_coursebas, INPUT);
  pinMode(fin_coursehaut, INPUT);
  pinMode(ledbas, OUTPUT);
  pinMode(ledhaut, OUTPUT);
  pinMode(buzzer, OUTPUT);
}


void loop() { //boucle principale
  /*5-Mesure de température avec le capteur DS18B20*/
  sensors.requestTemperatures(); // Demande de mesure de température
  /*6-Affichage des mesures de température */
  Serial.print("temperature DS18b20: ");
  Serial.print(sensors.getTempCByIndex(0)); //Afficher la température mesurée par DS18B20,
  //vous pouvez avoir plus d'un capteur sur le même bus. 0 se réfère au premier capteur
  //(DS18B20) sur le bus
  Serial.println(" °C");
  Serial.println(" ");
  delay(1000);


  getTemp(); //Apelle de la fonction ‘getTemp’ mesurer la température
  AfficherTlcd(); //Apelle de la fonction ‘AfficherTlcd’ pour afficher la température sur le LCD
   etatcapteurbas = digitalRead(fin_coursebas);
   etatcapteurhaut = digitalRead(fin_coursehaut);
  delay (400);


  //---------------------------------------------------//  VERIF de l'état du Toit
  // verif si toit fermé


  if (etatcapteurbas == HIGH && etatcapteurhaut == LOW) { 
    toit_ferme = true;
    digitalWrite(ledbas, HIGH);
  } else {  // le toit est fermé
    digitalWrite(ledbas, LOW);
    toit_ferme = false;
  }




  // Vérif si toit ouvert


  if (etatcapteurhaut == HIGH && etatcapteurbas == LOW) { 
    toit_ouvert = true;
    digitalWrite(ledhaut, HIGH);
  } else { // le toit est ouvert
    digitalWrite(ledhaut, LOW);
    toit_ouvert = false;
  }




  // si le toit se trouve à mi-course


  if (etatcapteurhaut == LOW  && etatcapteurbas == LOW) { 
    toit_milieu_course = true;


    digitalWrite (buzzer, HIGH);  // buzzer en route
    delay (1000);
    digitalWrite (buzzer, LOW);
    delay (10);
  }


  //____________________________________________________//   ACTIONNEMENT DU MOTEUR en Ouverture ou en Fermeture


  // SI il fait FROID et le toit est ouvert


  if ((T <= 25)  &&  etatcapteurbas == LOW && etatcapteurhaut == HIGH)
    digitalWrite(MotFerme, HIGH); // le moteur est actionné en fermeture


  // Arret Fermeture avec capteur bas
  if ((T <= 25  &&  etatcapteurbas == HIGH && etatcapteurhaut == LOW) ||
      (MotFerme == HIGH  &&  millis() - tempsdebutferme >= 20000))
        digitalWrite(MotFerme, LOW); // le moteur est arreté en fermeture


  // SI il fait CHAUD et le toit est fermé


  if ((T > 28) &&  etatcapteurhaut == LOW && etatcapteurbas == HIGH)
    digitalWrite(MotOuvre, HIGH); // le moteur est actionné en ouverture


  // Arret Ouverture avec capteur haut


  if ((T > 28)  &&  etatcapteurhaut == HIGH && etatcapteurbas == LOW)
    digitalWrite(MotOuvre, LOW); // le moteur est arreté en ouverture
//____________________________________________________ GESTION PROBLEME MOTEUR


  // blocage pendant la fermeture


 /* if ((MotFerme == HIGH)  && (( millis() - tempsdebutferme) >= 20000))
{
  digitalWrite(MotFerme, LOW);
  }
*/
}


/*5-Définition de la fonction ‘getTemp’ qui mesure la température */
void getTemp() {
  sensors.requestTemperatures(); // Demande de mesure de température
  T = sensors.getTempCByIndex(0); //Stocker la valeur de mesure dans la variable ’T’, vous
  //pouvez avoir plus d'un capteur sur le même bus. 0 se réfère au premier capteur (DS18B20)
  //sur le bus
}


void AfficherTlcd() {
  display.clearDisplay();
  display.setTextSize(3);
  display.setTextColor(WHITE);
  display.setCursor(0, 5);
  // Display static text
  display.print(T);
  display.print(" ");
  display.setTextSize(1);
  display.write(167);
  display.setTextSize(2);
  display.print("C");
  display.display();
}

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.