gestion aquarium recifal allumage progressif

Je suis désolé mais n'ayant pas le matériel pour tester le programme il m'est difficile de t'aider pour cela j'espère que tu auras ta solution enfin tu as déjà ton allumage progressif

bonjour,

voila tout marche correctement :slight_smile:
merci a tout se qui mon aider depuis le début.

voici mon code pour tout les germanophile

#include "LiquidCrystal.h"
#include "WProgram.h"
#include "Wire.h"
#include "DS1307.h"

/*
 sorti /entre Arduino
 Analog Pin 0 = Température Sensor
 Analog Pin 4 = SDA pour ds1307
 Analog Pin 5 = SCL pour ds1307
 Digital Pin 2 = LCD
 Digital Pin 3 = LCD
 Digital Pin 4 = LCD
 Digital Pin 5 = LCD
 Digital Pin 6 = power led
 Digital Pin 7 = ventilateur
 Digital pin 9 = rouge 
 Digital pin 10 = blanc
 Digital Pin 11 = LCD
 Digital Pin 12 = LCD
 Digital Pin 8 = bleu uv
 */

//Configuration des Pin de cablage**********************

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int sensorPin = 0;
int power_led = 6;
int bleu_uv = 8;
int rouge = 10;
int blanc = 9;
int ventilateur = 7;
int time;
float temp;
int timerPWM = 0;
int valeurPWM=0;
float PWMStep = 0;

//Configuration des heures allumage/extinction ( format HHMM )**********************

int bleu_uv_on_time = 2030;  
int bleu_uv_off_time = 2359; 
int ventilateur_on_temp = 26.75;  
int ventilateur_off_temp = 26.00;

int minut;
int heure;
int temps_perso;

//Configuration de l'heure ( pour modifier l'heure de votre Arduino, enlevez les /* et */ puis une foi le programe envoyé, remettez les )**********************

void setup() {
   /*
  RTC.stop();
  RTC.set(DS1307_SEC,30);           //réglage secondes
  RTC.set(DS1307_MIN,52);              //réglage minutes
  RTC.set(DS1307_HR,11);               //réglage heures
  RTC.set(DS1307_DOW,6);               //réglage jour de la semaine
  RTC.set(DS1307_DATE,15);             //réglage date
  RTC.set(DS1307_MTH,9);               //réglage mois
  RTC.set(DS1307_YR,12);                 //réglage année
  RTC.start();
  */
  
 //Configuration des entrées/sorties********************** 
  
  pinMode(ventilateur, OUTPUT);  // digital pin ventilateur 1 
  pinMode(bleu_uv, OUTPUT);  // digital pin pour bleu uv
  pinMode(blanc, OUTPUT);  // digital pin pour blanc
  pinMode(rouge, OUTPUT);  // digital pin pour rouge
  pinMode(power_led, OUTPUT);  // digital pin pour power led

lcd.begin(16,2);
Serial.begin(9600);  

}

void loop(){
 
   //Récupération de la température du LM35 ***************************************************************************************

 int reading = analogRead(sensorPin);  
  float voltage = reading * 5.52 / 1024;
  int temp = voltage * 100 ;
 
  //Récupération de l'heure du DS1307**********************************************************************************************

  heure = RTC.get(DS1307_HR,true);  
  minut = RTC.get(DS1307_MIN,false);
  temps_perso = (heure * 100) + minut; 
 
  
  lcd.clear();
   lcd.setCursor(0,0);
   lcd.print ("  AQUA GESTION  ");
       lcd.setCursor(6,1);
  if (heure < 10)
  {
    lcd.print("0");
  }
  lcd.print(heure);
  lcd.print("H");
  if (minut < 10)
  {
    lcd.print("0");
  }
  lcd.print(minut);
  lcd.print(" ");   
   delay(5000);
    lcd.setCursor(0,1);
  lcd.print("       ");
  lcd.print(temp);
  lcd.print((char)223);
  lcd.print("      ");
  delay(5000);

   lcd.setCursor(0,0);
   lcd.print ("    GESTION     ");
  lcd.setCursor(0,1);
   lcd.print ("      lune      ");
   delay(1500);
   lcd.setCursor(0,1);
   lcd.print ("     soleil      ");
   delay(1500);
     lcd.setCursor(0,1);
     lcd.print ("  temperature   ");
   delay(1500);
    lcd.setCursor(0,1);
     lcd.print ("  niveau d'eau  ");
   delay(1500);
   lcd.clear();
  
    //Affichage heure******************************************************************************************
  lcd.setCursor(0,0);
  if (heure < 10)
  {
    lcd.print("0");
  }
  lcd.print(heure);
  lcd.print("H");
  if (minut < 10)
  {
    lcd.print("0");
  }
  lcd.print(minut);
  lcd.print(" ");
  delay (100);


 
  //Affichage température*****************************************************************************

  lcd.setCursor(13,0);
  lcd.print(temp);
  lcd.print((char)223);

  //****************ventilateur
   if(temp > ventilateur_on_temp){
    digitalWrite(ventilateur, HIGH);
      }  
  if(temp < ventilateur_off_temp){    
    digitalWrite(ventilateur, LOW);
  }
  

  
    //*****Controle des sorties eclairage *********
  
   //**on-off******* bleu uv *************
  if(bleu_uv_on_time > temps_perso  || bleu_uv_off_time <= temps_perso){
    digitalWrite(bleu_uv, LOW);
   }
  else{
    
    digitalWrite(bleu_uv, HIGH);
   }
   
    //***on-off***** rouge ***
  
if (heure ==  8)  { 
    PWMStep = 255 / 59;
    timerPWM = minut-60;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (rouge, valeurPWM);
  lcd.setCursor(0,1);
    lcd.print(" + + ROUGE + +  ");
    delay(5000);
  }
  
 else if ((heure == 20) && (minut >30)) { 
    PWMStep = 255 / 29;
    timerPWM = 30-minut;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (rouge, valeurPWM);
lcd.setCursor(0,1);
    lcd.print(" - - ROUGE - -  ");
    delay(5000);
 
  }  
  
  else if ((heure >= 9 ) && (heure < 21)) {
    analogWrite(rouge, 255);
   lcd.setCursor(0,1);
    lcd.print("  ROUGE     on  ");
    delay(5000);
  }
else if ((heure <= 21) && (heure > 8 )){
    analogWrite(rouge, 0);
  }
   
 //***on-off***** blanc ***
  
 if ((heure ==  8) && (minut >30)) { 
    PWMStep = 255 / 29;
    timerPWM = minut-30;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (blanc, valeurPWM);
lcd.setCursor(0,1);
    lcd.print(" + + BLANC + +  ");
    delay(5000);
  
  }
  
 else if (heure == 20) { 
    PWMStep = 255 / 60;
    timerPWM = 60-minut;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (blanc, valeurPWM); 
lcd.setCursor(0,1);
    lcd.print(" - - BLANC - -  ");
    delay(5000);
  }  
  
  else if ((heure >= 9 ) && (heure < 21)) {
    analogWrite(blanc, 255);
    lcd.setCursor(0,1);
    lcd.print("  BLANC     on  ");
    delay(5000);
  }
else if ((heure <= 21) && (heure > 8 )){
    analogWrite(blanc, 0);
  }

//***on-off***** power led ***

  if ((heure ==  9) && (minut >3))  { 
    PWMStep = 240 / 59;
    timerPWM = minut-60;
    valeurPWM = (int)(timerPWM * PWMStep)+ 15;
    analogWrite (power_led, valeurPWM);
    
lcd.setCursor(0,1);
    lcd.print(" + POWER led +  ");
    delay(5000);

  }
else if (heure == 20) { // entre 20:00 et 20:59:59 
    PWMStep = 240 / 60;
    timerPWM = 60-minut;
    valeurPWM = (int)(timerPWM * PWMStep) + 15;
    analogWrite (power_led, valeurPWM);
lcd.setCursor(0,1);
    lcd.print(" - POWER led -  ");
    delay(5000);

  }
else if ((heure >= 10 ) && (heure < 21)) {
    analogWrite(power_led, 255);
lcd.setCursor(0,1);
    lcd.print(" POWER led   on ");
    delay(5000);

  }
else if ((heure <= 21) && (heure > 9 )){
    analogWrite(power_led, 0);
  } 
       //****Affichage ventilateur ********

  lcd.setCursor(0,1);
  if(digitalRead(ventilateur) == HIGH)
  {
    lcd.println("ventilateur ON  ");
   delay(5000);
  }
  else
  {
    lcd.println("ventilateur OFF ");
    delay(5000);
  }
 }

slt ,Merci a toi pour le suivie de ton projet .
avec je vais pouvoir essayer de faire mon propre programme mais comme toi je ne metrise pas vraiment la programmation mais a force ca avance ...@+

Bonjour,

toujours a la recherche d’amélioration a apporter a mon projet, j'ai commander un driver afin de faire varier mon ventilateur selon la temperature (car il fait bcp de bruit au max)
Quelqu’un peut me dire Command modifier mon code pour que le ventilateur s'allume a 25% a 26.5° et augmente progressivement pour être au max a 29.5°.
si cela est compliquer progressivement, faire des palier, 26.5° = 25%, 27° = 35%, 27.5° = 45%, 28° = 60°, 28.5°= 75%, 29°= 90%, au dessus = max.

Merci

djbouns:
Bonjour,

toujours a la recherche d’amélioration a apporter a mon projet, j'ai commander un driver afin de faire varier mon ventilateur selon la temperature (car il fait bcp de bruit au max)
Quelqu’un peut me dire Command modifier mon code pour que le ventilateur s'allume a 25% a 26.5° et augmente progressivement pour être au max a 29.5°.
si cela est compliquer progressivement, faire des palier, 26.5° = 25%, 27° = 35%, 27.5° = 45%, 28° = 60°, 28.5°= 75%, 29°= 90%, au dessus = max.

Merci

bonjour
il est où le code ? :grin:

si la progression est (à peu pres) lineaire voir peut etre du coté du coté de la fonction map ?

Bonsoir,

Ba ... le code il est juste au dessus ... je poursuis sur le même forum ... lol
si sa perturbe je peut en crée un nouveau mais pour ceux que sa intéresse cela permet d'avoir tout d'un coup.

bon... j'ai regarder la page que tu a fourni. j'ai compris le principe mais par contre comment faire le lien entre se code et ma température ???

merci

djbouns:
Bonsoir,

Ba ... le code il est juste au dessus ... je poursuis sur le même forum ... lol
si sa perturbe je peut en crée un nouveau mais pour ceux que sa intéresse cela permet d'avoir tout d'un coup.

bon... j'ai regarder la page que tu a fourni. j'ai compris le principe mais par contre comment faire le lien entre se code et ma température ???

merci

bonjour
si j'ai bien lu
reading= la valeur ana lue du LM35 = la T°
ton driver de ventilo, c'est quoi ? commandé comment ?

salut
voici le model de mon driver

http://www.eio.com/p-41276-sure-electronics-le-ll14113-high-power-10w-20w-15a-led-dc-driver.aspx

il seras commander par mon arduino lol

djbouns:
salut
voici le model de mon driver

http://www.eio.com/p-41276-sure-electronics-le-ll14113-high-power-10w-20w-15a-led-dc-driver.aspx

il seras commander par mon arduino lol

bonjour
c'est un driver pour LED en courant, ça fonctionnera peut etre avec ton ventilo, mais rien de moins sur !
tu l'a déjà utilisé dans cette application ? , d'autres l'ont fait ? , ou tu es parti sur ce driver "comme ça" ? :grin:

bonsoir
ces le meme driver que pour mes leds.
vue qu'il m'en reste un non utiliser je veux l'utiliser pour cela

bonsoir
pourquoi penser vous que sa ne marcheras pas ???
quelqu’un d'autre pour le code ???

djbouns:
bonsoir
pourquoi penser vous que sa ne marcheras pas ???
quelqu’un d'autre pour le code ???

bonjour
Je n'ai pas dit que cela ne marchera pas, j'ai dit qu'il n'est pas sur que cela fonctionne ou fonctionne de manière pérenne :grin:
l'objet commandé (là le ventilo) n'etant pas l'objet initial (les leds) prevu pour etre commandé par ce driver.

alors retour sur le ventilo avant de passer aux tests : 8)
ton ventilo est de quel type , quelle motorisation (ne pas confondre avec l'alimentation du moteur) : moteur brushless ? , simple moteur DC 2 poles , autres ? ,

Bonjour

il s'agit d'un ventilo 6cm 2 pole 12v dc 7w.
Je ne comprend pas trop pourquoi sa te questionne temps que sa.
mon driver dit "driver led" sert a faire varier mon 12v en fonction de ma sorti pwm 5v de mon arduino.
Que se soit des led ou un ventilo, le driver ne feras pas la différence et délivreras le courant demander non ?

djbouns:
Bonjour

il s'agit d'un ventilo 6cm 2 pole 12v dc 7w.
Je ne comprend pas trop pourquoi sa te questionne temps que sa.
mon driver dit "driver led" sert a faire varier mon 12v en fonction de ma sorti pwm 5v de mon arduino.
Que se soit des led ou un ventilo, le driver ne feras pas la différence et délivreras le courant demander non ?

bonsoir
perso ça ne me questionne pas plus que ça :grin: , ce n'est pas mon materiel 8)

fais donc un simple test avec ton driver, ton ventilo et ton driver
commande ce dernier en PWM arduino , fais des test en injectant de la PWM par palier de 5 ou 10 et regarde le comportement de ton ventilo
et si cela fonctionne bien et que cela te convient alors c'est tout bon pour integrer ça dans ton appli.

Bonsoir
au paravent javait 5 ventilo brancher sur 5 driver qui controlait des led selon les heures (les 10w + ventilos) et sa fonctionait correctement.
il n'y a donc plus de raison que sa ne marche plus.
la seul difference la est que je ne veut que le ventilot soit proportionel a la temperature et plus un alumage selon l'heure.
peut tu me donner une parti du code a adapter stp

slt a tous,

dsl je remonte un peu le topic car le sujet m'interesse.
je voulais prendre des nouvelles de djbouns pour savoir si il avait terminé son programme et lui posé quelque question:

la dernière version du programme que tu as posté fonctionne t'elle chez toi? je viens de le lire et il ne devrait pas fonctionné, il y a quelque erreur de signe comme par ex:

else if ((heure <= 21) && (heure > 8 )){
analogWrite(rouge, 0);

ca ne peut pas marché.

je pense que tu as du te trompé et pas collé la dernieres version de ton programme.

tu t'en es sortie avec la gestion de tes ventilateurs?

cdt,

bonjour,

le dernier code que j'utilisait etait :

#include "LiquidCrystal.h"
#include "Arduino.h"
#include "Wire.h"
#include "DS1307.h"

LiquidCrystal lcd(7, 2, 3, 4, 5, 6);
int pompe = 8;
int soleil = 9;
int ventilateur = 10;
int rampeled = 11;
int led = 12;
int niveau = 13;

int valeurPWM=0;

int minut;
int heure;
int seconde;
int time;

float sensorPin;
float temp;
float temp1;
float Vact = 0;  // variable valeur instantanée
int Fd=20; // facteur de division de la moyenne = moyenne toutes les FD boucles ici 20
long Accm=0; // accumulateur pour moyenne
int Nbcl=0; // compteur de boucles
float vitventilo;
int off;
int printvitvent;

void setup() {
  
  lcd.begin(16,2);
Serial.begin(9600);

  pinMode(pompe, OUTPUT);  
  pinMode(ventilateur, OUTPUT);  
  pinMode(soleil, OUTPUT);  
  pinMode(led, OUTPUT);  
  pinMode(rampeled, OUTPUT); 
  pinMode(niveau, INPUT);
} 
  
  
  void loop(){
  
sensorPin = analogRead(0);
Vact = ((sensorPin*0.5)+1.5)*100 ;
Accm=Accm+Vact;
Nbcl ++;

if (Nbcl == Fd) { 
  temp1 = (Accm / Fd) ;
  temp = temp1/100;
  Accm= Accm-(Accm/20) ;
  Nbcl= 19;
  }   
else{
   temp = (Accm / Nbcl) ;
   temp = temp/100;   
   }

//Récupération de l'heure du DS1307**********************************************************************************************
  heure = RTC.get(DS1307_HR,true);  
  minut = RTC.get(DS1307_MIN,true);
  seconde = RTC.get(DS1307_SEC,true);
  time = (heure * 100) + minut;
  
//Affichage ******************************************************************************************
 lcd.clear();
 lcd.setCursor(0,0);
   lcd.print ("  AQUA GESTION  ");
   lcd.setCursor(0,1);
   lcd.print("     ");
  if (heure < 10)
  {
    lcd.print("0");
  }
  lcd.print(heure);
  lcd.print("H");
  if (minut < 10)
  {
    lcd.print("0");
  }
  lcd.print(minut);
lcd.print("      ");
  delay (5000);
lcd.setCursor(0,1);
lcd.print("     ");
  lcd.print(temp);
  lcd.print((char)223);
  lcd.print("     ");
  delay (5000);


 //*****Controle des sorties eclairage *********
 //***on-off***** soleil ***
  
 if ((time >= 930) && (time < 1020)){ 
    valeurPWM = map(time, 930, 1019, 0, 255);
    analogWrite (soleil, valeurPWM);
lcd.setCursor(0,1);
    lcd.print(" + + soleil + + ");
    delay(5000);
  }
 else if ((time >= 2230) && (time < 2300)){  
   valeurPWM = map(time, 2230, 2259, 255, 0);
    analogWrite (soleil, valeurPWM); 
lcd.setCursor(0,1);
    lcd.print(" - - soleil - - ");
    delay(5000);
  }   
  else if ((time >= 1020 ) && (time < 2230)) {
    analogWrite(soleil, 255);
  }
else {
    analogWrite(soleil, 0);
      lcd.setCursor(0,1);
    lcd.print("   BONNE NUIT   ");
    delay(5000);
}


//***on-off*****led 1w***
     if((time >= 1030) && (time < 2225)){
    digitalWrite(led, HIGH);
   }
  else{
    digitalWrite(led, LOW);
   }
    

//***on-off***** ventilateur  ***

lcd.setCursor(0,0);
lcd.print("     ");
  lcd.print(temp);
  lcd.print((char)223);
  lcd.print("     ");

if (temp1 > 2725){
  temp1 = 2725;
}
 
 if (temp1 < 2676){
  temp1 = 2625;
}

 vitventilo = map(temp1,2625,2725, 0, 255);
 analogWrite (ventilateur, vitventilo);
  lcd.setCursor(0,1);
    lcd.print("ventilateur ");
        off = ((vitventilo*100)/255);
    if (off == 0){
    lcd.print(" OFF");
    delay(5000);
    }
    
    else {
    printvitvent = ((vitventilo*100)/255);
    lcd.print(printvitvent);
    lcd.print("% ");
    delay(5000);
    }

//***on-off***** pompe ***
if (digitalRead (niveau) == HIGH)
{
   lcd.setCursor(0,1);
    lcd.print("niveau d'eau BAS");
    delay(5000);
 if ((time >= 800) && (time <= 2359)){
 if ((minut % 10)== 0) {
   delay (35000);
     lcd.setCursor(0,1);
    lcd.print("  ajout  d'eau  ");
    digitalWrite(pompe, HIGH);
    delay (4500);
    digitalWrite(pompe, LOW);
    
}
}
}
 else if (digitalRead (niveau) == LOW){
      lcd.setCursor(0,1);
    lcd.print("niveau d'eau  OK");
    delay(5000);
} 

 }

tout fonctionnait correctement.
depuis, j'ai déménager et j'en est profiter pour agrandir mon bac.
du coup, pour le moment, j'ai un arduino pour faire l'osmolation, un pour mes pompe doseuse et un autre pour la gestion provisoire de mon éclairage.

Merci pour ta réponse, je vais regardé ca en détail,
en tout cas, merci pour ton post qui aide bien

bonne continuation