Pages: [1] 2 3 4   Go Down
Author Topic: gestion aquarium recifal allumage progressif  (Read 8124 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 160
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour,
tout est dit dans le sujet... lol
voila des semaines que je travaille sur un projet de gestion de mon aquarium récifal.
j'ai enfin fini de réaliser la parti hardware.
et après des heures et des heurs sur le net a travailler mon code pour ma gestion je bloque !!!
au point de venir ici ...

tout dabord je vous détail mon installation:
arduino uno
une horloge
une sonde de température qui active un ventilateur
un driver power led avec 5 led de 10w ( 3 blanc + 2 bleu) = éclairage de journée
3 x 10 led (rouge orange blanc) + led bleu  = lever et coucher de soleil + lune
lcd

se que je cherche désespérément a faire :
a 8h allumage progressif sur 30 minute des led rouge + orange
a 8h30 allumage progressif sur 30 minute des led blanche
a 9h allumage power led sur 30 minute
puis
a 20h extinction progressif blanc + power led sur 30 minute
a 20h30 extinction progressif led rouge orange sur 30 min
les led bleu son allumer de 19h30 a 23h59

avec le code si dessous j'ai les probleme suivant:
Tout les progressions ne se font pas sur 30 minute.
la progression pour les power led est trop rapide a l’allumage mais est correct a l'extinction
la progression de led rouge orange et blanc son trop rapide a l'allumage et n'est pas progressif a l'extinction.

SVP pouvez vous me dire se qui ne vas pas et me le modifier.
Si vous ne le faite pas pour moi, faite le pour mes poissons  smiley-razz

MERCI D'AVANCE A VOUS TOUS

voici mon code (( je travaille sur arduino 0022 (car sur vesion 1.0 je ne trouvais rien qui fonctionne)):

Code:
#include <Time.h>
#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 val1=0;
int val2=0;

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

int bleu_uv_on_time = 1930;  //allume la pompe à cette heure
int bleu_uv_off_time = 2359; //éteint la pompe à cette heure
int ventilateur_on_temp = 27;  //allume chauffage à cette température
int ventilateur_off_temp = 26.3; //éteint le chauffage à cette température

int minut;
int heure;
int seconde;
int date;
int mois;
int annee;
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,00);           //réglage secondes
  RTC.set(DS1307_MIN,05);              //réglage minutes
  RTC.set(DS1307_HR,23);               //réglage heures
  RTC.set(DS1307_DOW,1);               //réglage jour de la semaine
  RTC.set(DS1307_DATE,10);             //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);
  

}

void loop(){
// map(value, fromLow, fromHigh, toLow, toHigh)
  val1 = (map ((minut * 30), 0, 7650, 0, 255));
  val2 = (map ((minut * 30), 0, 7650, 255, 0));
 
  
  //Récupération de l'heure du DS1307**********************************************************************************************

  heure = RTC.get(DS1307_HR,true);  
  minut = RTC.get(DS1307_MIN,false);
  seconde = RTC.get(DS1307_SEC,false);
  date = RTC.get(DS1307_DATE,false);
  mois = RTC.get(DS1307_MTH,false);
  annee = RTC.get(DS1307_YR,false);
  temps_perso = (heure * 100) + minut;  

  //Récupération de la température du LM35 ***************************************************************************************

  temp = analogRead(sensorPin);  
  temp = temp * 0.48828125;
 

  //****************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***** blanc ***
  
  if ((heure == 8) && (minut >=30)) { // entre 8:30 et 8:59:59
    analogWrite (blanc, val1); // allumage progressif
  }
  else if ((heure == 20) && (minut >=1)) { // entre 20:00 et 20:59:59
    analogWrite (blanc, val2); // extinction progressive
  }  
  else if ((heure > 8 ) && (heure < 21)) {
    analogWrite(blanc, 255);
  }
 

//***on-off***** power led ***
  
 if ((heure == 9) && (minut >=1)) { // entre 9:00 et 9:59:59
    analogWrite (power_led, val1); // allumage progressif
  }
  else if ((heure == 20) && (minut >=1)) { // entre 20:00 et 20:59:59
    analogWrite (power_led, val2); // extinction progressive
  }  
  else if ((heure > 9 ) && (heure < 20)) {
    analogWrite(power_led, 255);
  }
 

 //***on-off***** rouge ***
  
if ((heure == 8) && (minut >=1)) { // entre 8:00 et 8:29:59
    analogWrite (rouge, val1); // allumage progressif
  }
  else if ((heure == 21) && (minut >=30)) { // entre 20:30 et 20:59:59
    analogWrite (rouge, val2); // extinction progressive
  }  
  else if ((heure > 8 ) && (heure < 21)) {
    analogWrite(rouge, 255);
  }
 


//****Gestion de l'Affichage Sur l'écran ********

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

  lcd.setCursor(10,0);
  delay(100);
  lcd.print(temp);
  lcd.print((char)223);

  //Affichage heure******************************************************************************************
  lcd.setCursor(0,0);
  if (heure < 10)
  {
    lcd.print("0");
  }
  lcd.print(RTC.get(DS1307_HR,true));
  lcd.print("H");
  if (minut < 10)
  {
    lcd.print("0");
  }
  lcd.print(RTC.get(DS1307_MIN,false));
  lcd.print(" ");
 delay(200);
    //****Affichage ventilateur ********

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

}
« Last Edit: September 12, 2012, 12:55:02 am by Jean-François » Logged

Haute Normandie
Offline Offline
Full Member
***
Karma: 1
Posts: 139
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je ne vais pas refaire ton code j'ai assez coder comme cela mais je vais te mettre sur la piste.

Le problème est la correction gamma, un petit tour ici te donneras plus d'informations : http://fr.wikipedia.org/wiki/Correction_gamma

Pour en revenir a nos moutons ce qu'il faut faire allumage sur 30min
255 valeurs de PWM possible donc on incremente le PWM toute les 7secondes maintenant on peut incrementer de 8 le PWM toutes les minutes, une simple division permet d'arriver a cela.

Donc soit int valeurPWM  la valeur que l'on incremente.

La formule pour la correction gamma :

//La constante pour la correction gamma (tu peu essayer avec différente valeur comprise entre 1 et 3 mais tu auras de meilleurs résultats entre 2 et 2.6
        float GAMMA_CORRECTION = 2.2;

//On calcul la correction gamma
   int result = floor( pow( valeurPWM / 255 , GAMMA_CORRECTION ) * 255 ); 


//On ecrit la valeur
analogWrite (blanc, result);

//On attends un peu et au bout d'une minute on incremente de 8 le PWM et on recommence le traitement.


En espérant t'avoir rendu service a toi et tes poissons.

Logged

Rien ne sert de chercher à tout savoir, mieux vaut savoir où tout chercher

Offline Offline
Full Member
***
Karma: 0
Posts: 160
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bonsoir et merci pour cette reponce express

je ne suis pas sur d'avoir tout compris mais je vais essayer
se qui m'interpelle c'est que dans ta formule je ne vois pas de crescendo et decrescendo.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 160
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Apres quelque heures d'essais et de recherche, je n'arrive pas a faire marcher votre formule.
SVP aider moi.
je vous colle se que j'ai modifier dans mon code :

#include <Time.h>
#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 val1=0;
int val2=0;
int valeurPWM=0;
float GAMMA_CORRECTION = 2.2;
int result = floor( pow( valeurPWM / 255 , GAMMA_CORRECTION ) * 255 );


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

int bleu_uv_on_time = 1930;  //allume la pompe à cette heure
int bleu_uv_off_time = 2359; //éteint la pompe à cette heure
int ventilateur_on_temp = 27;  //allume chauffage à cette température
int ventilateur_off_temp = 26.3; //éteint le chauffage à cette température

int minut;
int heure;
int seconde;
int date;
int mois;
int annee;
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,45);           //réglage secondes
  RTC.set(DS1307_MIN,30);              //réglage minutes
  RTC.set(DS1307_HR,8);               //réglage heures
  RTC.set(DS1307_DOW,1);               //réglage jour de la semaine
  RTC.set(DS1307_DATE,10);             //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);
 

}

void loop(){
// map(value, fromLow, fromHigh, toLow, toHigh)
  val1 = (map ((minut * 30), 0, 7650, 0, 255));
  val2 = (map ((minut * 30), 0, 7650, 255, 0));
valeurPWM = 8.5;
 
  //Récupération de l'heure du DS1307**********************************************************************************************

  heure = RTC.get(DS1307_HR,true); 
  minut = RTC.get(DS1307_MIN,false);
  seconde = RTC.get(DS1307_SEC,false);
  date = RTC.get(DS1307_DATE,false);
  mois = RTC.get(DS1307_MTH,false);
  annee = RTC.get(DS1307_YR,false);
  temps_perso = (heure * 100) + minut; 

  //Récupération de la température du LM35 ***************************************************************************************

  temp = analogRead(sensorPin); 
  temp = temp * 0.48828125;
 

  //****************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***** blanc ***
 
  if ((heure == smiley-cool && (minut >=30)) { // entre 8:30 et 8:59:59
    analogWrite (blanc, result); // allumage progressif
  }
  else if ((heure == 20) && (minut >=1)) { // entre 20:00 et 20:59:59
    analogWrite (blanc, result); // extinction progressive
  } 
  else if ((heure > 8 ) && (heure < 21)) {
    analogWrite(blanc, 255);
  }
 

//***on-off***** power led ***
 
 if ((heure == 9) && (minut >=1)) { // entre 9:00 et 9:59:59
    analogWrite (power_led, val1); // allumage progressif
  }
  else if ((heure == 20) && (minut >=1)) { // entre 20:00 et 20:59:59
    analogWrite (power_led, val2); // extinction progressive
  } 
  else if ((heure > 9 ) && (heure < 20)) {
    analogWrite(power_led, 255);
  }
 

 //***on-off***** rouge ***
 
if ((heure == smiley-cool && (minut >=1)) { // entre 8:00 et 8:29:59
    analogWrite (rouge, result); // allumage progressif
  }
  else if ((heure == 21) && (minut >=30)) { // entre 20:30 et 20:59:59
    analogWrite (rouge, result); // extinction progressive
  } 
  else if ((heure > 8 ) && (heure < 21)) {
    analogWrite(rouge, 255);
  }
 


//****Gestion de l'Affichage Sur l'écran ********

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

  lcd.setCursor(10,0);
  delay(100);
  lcd.print(temp);
  lcd.print((char)223);

  //Affichage heure******************************************************************************************
  lcd.setCursor(0,0);
  if (heure < 10)
  {
    lcd.print("0");
  }
  lcd.print(RTC.get(DS1307_HR,true));
  lcd.print("H");
  if (minut < 10)
  {
    lcd.print("0");
  }
  lcd.print(RTC.get(DS1307_MIN,false));
  lcd.print(" ");
 delay(200);
    //****Affichage ventilateur ********

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

}
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3230
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Est ce que tu peux mettre ton code entre les balises "code", c'est le bouton avec le #.
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Chulak
Offline Offline
Full Member
***
Karma: 2
Posts: 234
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

salut .. peut être quand regardant le code ici http://arduino.cc/forum/index.php/topic,117156.0.html.. pour l'allumage et l'extinction.. sa pourrais t'aider... le code est plutôt simple pour le comprendre.. ^^
Logged

Aimez la Vie, mais preferez la Mort, car seulement celle-ci vous liberera des tenebres de la Vie.

Haute Normandie
Offline Offline
Full Member
***
Karma: 1
Posts: 139
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je suis actuellement au travail mais si ton code marchais bien avant, patiente jusqu’à ce soir et je te le modifierais pour prendre en compte l'allumage et l'extinction progressive.
Logged

Rien ne sert de chercher à tout savoir, mieux vaut savoir où tout chercher

France
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3515
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Le sujet a déjà été débattu. Je pense qu'une petite recherche sur le forum te ferait gagner du temps
Logged

Haute Normandie
Offline Offline
Full Member
***
Karma: 1
Posts: 139
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Bon je t'ai fais l'exemple pour la lumière blanche a toi de faire le reste  smiley-grin

Les variables a définir avant le setup:
Quote
int timerPWM = 0;
int valeurPWM=0;
float GAMMA_CORRECTION = 2.2;
float PWMStep = 0;

La partie allumage et extinction progressive
Quote
  //----------------------------------------------------------------------------//
  //---- Gestion de la lumière blanche -----------------------------------------//
  //----------------------------------------------------------------------------//
 
  //----------------------------------------------------------------------------//
  // Plage Horaire 8:30 - 8:59:59 - Allumage progressif                         //
  //----------------------------------------------------------------------------//
  if ((heure ==  8 && (minut >=30)) { // entre 8:30 et 8:59:59
    //Allumage sur 29min on définit donc le pas PWM (255 / (nombre de minutes de la plage - 1))
    PWMStep = 255 / 29;
    //On veut allumer il faut donc que le PWM augmente de 0 a 255
    //Si minut=30 timerPWM = 0 -> valeurPWM = 0
    //Si minut=59 timerPWM = 29 -> valeurPWM = 255
    timerPWM = minut-30;
    valeurPWM = (int)(timerPWM * PWMStep)
    //On applique la correction gamma pour avoir une transition progressive de l'eclairage
    valeurPWM = floor( pow( valeurPWM / 255 , GAMMA_CORRECTION ) * 255 );
    //On ecrit la valeur
    analogWrite (blanc, valeurPWM);
  }
  //----------------------------------------------------------------------------//
  // Plage Horaire 20:00 - 20:59:59 - Extinction progressive                    //
  //----------------------------------------------------------------------------//
  else if ((heure == 20) && (minut >=1)) { // entre 20:00 et 20:59:59
    //Allumage sur 60min on définit donc le pas PWM (255 / (nombre de minutes de la plage - 1)) 
    PWMStep = 255 / 59;
    //On veut eteindre il faut donc que le PWM descende de 255 a 0
    //Si minut=1 timerPWM = 58 -> valeurPWM = 250
    //Si min=59 timerPWM = 1 -> valeurPWM = 0
    timerPWM = 59 - minut;
    valeurPWM = (int)(timerPWM * PWMStep)
    //On applique la correction gamma pour avoir une transition progressive de l'eclairage
    valeurPWM = floor( pow( valeurPWM / 255 , GAMMA_CORRECTION ) * 255 );
    //On ecrit la valeur
    analogWrite (blanc, valeurPWM);
  } 
  //----------------------------------------------------------------------------//
  // Plage Horaire 09:00 - 20:00 - Allumage Complet                         //
  //----------------------------------------------------------------------------//
  else if ((heure > 8 ) && (heure < 21)) {
    analogWrite(blanc, 255);
  }
Logged

Rien ne sert de chercher à tout savoir, mieux vaut savoir où tout chercher

Haute Normandie
Offline Offline
Full Member
***
Karma: 1
Posts: 139
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tiens nous au courant !
Logged

Rien ne sert de chercher à tout savoir, mieux vaut savoir où tout chercher

Offline Offline
Full Member
***
Karma: 0
Posts: 160
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,

je vient de tester le code et la progression ne fonctionne pas (ou alors je l'est mal integrer?)
les led s'allume bien d'un coup a 9h00.

Si vous trouver se qui ne vas pas

Merci d'avance


je vous remet mon code modifier

Code:
#include <Time.h>
#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 GAMMA_CORRECTION = 2.2;
float PWMStep = 0;


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

int bleu_uv_on_time = 1930;  //allume la pompe à cette heure
int bleu_uv_off_time = 2359; //éteint la pompe à cette heure
int ventilateur_on_temp = 27;  //allume chauffage à cette température
int ventilateur_off_temp = 26.3; //éteint le chauffage à cette température

int minut;
int heure;
int seconde;
int date;
int mois;
int annee;
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,45);           //réglage secondes
  RTC.set(DS1307_MIN,59);              //réglage minutes
  RTC.set(DS1307_HR,7);               //réglage heures
  RTC.set(DS1307_DOW,1);               //réglage jour de la semaine
  RTC.set(DS1307_DATE,10);             //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);
 

}

void loop(){

 
  //Récupération de l'heure du DS1307**********************************************************************************************

  heure = RTC.get(DS1307_HR,true); 
  minut = RTC.get(DS1307_MIN,false);
  seconde = RTC.get(DS1307_SEC,false);
  date = RTC.get(DS1307_DATE,false);
  mois = RTC.get(DS1307_MTH,false);
  annee = RTC.get(DS1307_YR,false);
  temps_perso = (heure * 100) + minut; 

  //Récupération de la température du LM35 ***************************************************************************************

  temp = analogRead(sensorPin); 
  temp = temp * 0.48828125;
 

  //****************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***** blanc ***
 
 if ((heure ==  8) && (minut >=30)) { // entre 8:30 et 8:59:59
    //Allumage sur 29min on définit donc le pas PWM (255 / (nombre de minutes de la plage - 1))
    PWMStep = 255 / 29;
    //On veut allumer il faut donc que le PWM augmente de 0 a 255
    //Si minut=30 timerPWM = 0 -> valeurPWM = 0
    //Si minut=59 timerPWM = 29 -> valeurPWM = 255
    timerPWM = minut-30;
    valeurPWM = (int)(timerPWM * PWMStep);
    //On applique la correction gamma pour avoir une transition progressive de l'eclairage
    valeurPWM = floor( pow( valeurPWM / 255 , GAMMA_CORRECTION ) * 255 );
    //On ecrit la valeur
    analogWrite (blanc, valeurPWM);
  }
 
 else if ((heure == 20) && (minut >=1)) { // entre 20:00 et 20:59:59
    //Allumage sur 60min on définit donc le pas PWM (255 / (nombre de minutes de la plage - 1)) 
    PWMStep = 255 / 59;
    //On veut eteindre il faut donc que le PWM descende de 255 a 0
    //Si minut=1 timerPWM = 58 -> valeurPWM = 250
    //Si min=59 timerPWM = 1 -> valeurPWM = 0
    timerPWM = 59 - minut;
    valeurPWM = (int)(timerPWM * PWMStep);
    //On applique la correction gamma pour avoir une transition progressive de l'eclairage
    valeurPWM = floor( pow( valeurPWM / 255 , GAMMA_CORRECTION ) * 255 );
    //On ecrit la valeur
    analogWrite (blanc, valeurPWM);
  } 
 
   else if ((heure > 8 ) && (heure < 21)) {
    analogWrite(blanc, 255);
  }

//***on-off***** power led ***
 
if ((heure ==  9) && (minut >=01)) { // entre 8:30 et 8:59:59
    //Allumage sur 29min on définit donc le pas PWM (255 / (nombre de minutes de la plage - 1))
    PWMStep = 255 / 29;
    //On veut allumer il faut donc que le PWM augmente de 0 a 255
    //Si minut=30 timerPWM = 0 -> valeurPWM = 0
    //Si minut=59 timerPWM = 29 -> valeurPWM = 255
    timerPWM = minut-30;
    valeurPWM = (int)(timerPWM * PWMStep);
    //On applique la correction gamma pour avoir une transition progressive de l'eclairage
    valeurPWM = floor( pow( valeurPWM / 255 , GAMMA_CORRECTION ) * 255 );
    //On ecrit la valeur
    analogWrite (power_led, valeurPWM);
  }
 
 else if ((heure == 20) && (minut >=1)) { // entre 20:00 et 20:59:59
    //Allumage sur 60min on définit donc le pas PWM (255 / (nombre de minutes de la plage - 1)) 
    PWMStep = 255 / 59;
    //On veut eteindre il faut donc que le PWM descende de 255 a 0
    //Si minut=1 timerPWM = 58 -> valeurPWM = 250
    //Si min=59 timerPWM = 1 -> valeurPWM = 0
    timerPWM = 59 - minut;
    valeurPWM = (int)(timerPWM * PWMStep);
    //On applique la correction gamma pour avoir une transition progressive de l'eclairage
    valeurPWM = floor( pow( valeurPWM / 255 , GAMMA_CORRECTION ) * 255 );
    //On ecrit la valeur
    analogWrite (power_led, valeurPWM);
  } 
 
   else if ((heure > 9 ) && (heure < 21)) {
    analogWrite(power_led, 255);
  }
 

 //***on-off***** rouge ***
 
 if ((heure ==  8) && (minut >=01)) { // entre 8:30 et 8:59:59
    //Allumage sur 29min on définit donc le pas PWM (255 / (nombre de minutes de la plage - 1))
    PWMStep = 255 / 29;
    //On veut allumer il faut donc que le PWM augmente de 0 a 255
    //Si minut=30 timerPWM = 0 -> valeurPWM = 0
    //Si minut=59 timerPWM = 29 -> valeurPWM = 255
    timerPWM = minut-30;
    valeurPWM = (int)(timerPWM * PWMStep);
    //On applique la correction gamma pour avoir une transition progressive de l'eclairage
    valeurPWM = floor( pow( valeurPWM / 255 , GAMMA_CORRECTION ) * 255 );
    //On ecrit la valeur
    analogWrite (rouge, valeurPWM);
  }
 
 else if ((heure == 20) && (minut >=30)) { // entre 20:00 et 20:59:59
    //Allumage sur 60min on définit donc le pas PWM (255 / (nombre de minutes de la plage - 1)) 
    PWMStep = 255 / 59;
    //On veut eteindre il faut donc que le PWM descende de 255 a 0
    //Si minut=1 timerPWM = 58 -> valeurPWM = 250
    //Si min=59 timerPWM = 1 -> valeurPWM = 0
    timerPWM = 59 - minut;
    valeurPWM = (int)(timerPWM * PWMStep);
    //On applique la correction gamma pour avoir une transition progressive de l'eclairage
    valeurPWM = floor( pow( valeurPWM / 255 , GAMMA_CORRECTION ) * 255 );
    //On ecrit la valeur
    analogWrite (rouge, valeurPWM);
  } 
 
   else if ((heure > 8 ) && (heure < 21)) {
    analogWrite(rouge, 255);
  }
 


//****Gestion de l'Affichage Sur l'écran ********

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

  lcd.setCursor(10,0);
  delay(100);
  lcd.print(temp);
  lcd.print((char)223);

  //Affichage heure******************************************************************************************
  lcd.setCursor(0,0);
  if (heure < 10)
  {
    lcd.print("0");
  }
  lcd.print(RTC.get(DS1307_HR,true));
  lcd.print("H");
  if (minut < 10)
  {
    lcd.print("0");
  }
  lcd.print(RTC.get(DS1307_MIN,false));
  lcd.print(" ");
 delay(200);
    //****Affichage ventilateur ********

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

}
Logged

Haute Normandie
Offline Offline
Full Member
***
Karma: 1
Posts: 139
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Re essai ceci et dit nous ce que cela fait :

Code:

int blanc = 9;

void setup(){
          pinMode(blanc, OUTPUT);  // digital pin pour blanc
}

void loop(){
           for(int i = 0 ; i < 256 ; i++){
                   analogWrite (blanc, i);
                   delay(100);
           }
           for(int i = 255 ; i >= 0 ; i--){
                   analogWrite (blanc, i);
                   delay(100);
           }
}
Normalement tu devrais avoir un allumage puis une extinction progressive

Ensuite, si cela marche tu colles le code dans le créneau horaire que tu veux tester et tu regarde ci cela marche toujours.

Ensuite tu peu faire ceci pour tester ce que j'ai t'ai proposer je ne peu pas tester le programme chez moi et la flemme de réécrire le code pour tester la fonction
Code:
n'oublie pas de mettre Serial.begin(9600); dans ta fonction setup.



 if ((heure ==  8) && (minut >=30)) {
    PWMStep = 255 / 29;
    timerPWM = minut-30;
    valeurPWM = (int)(timerPWM * PWMStep);
    valeurPWM = floor( pow( valeurPWM / 255 , GAMMA_CORRECTION ) * 255 );
    Serial.println(valeurPWM);
    analogWrite (blanc, valeurPWM);
  }
Cela te permettra d'avoir un retour de ce qui est envoyé
Ensuite avec quel circuit de puissance alimentes tu tes LED ?
Logged

Rien ne sert de chercher à tout savoir, mieux vaut savoir où tout chercher

Offline Offline
Full Member
***
Karma: 0
Posts: 160
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

re

alors, le premier code de ton dernier message fonctionne mais me bloque l'affichage entre chaque opperation.

le second ne fonctionne toujours pas, j'ai bien ajoute Serial.begin(9600); dans setup.
il ne se passe rien jusque a se que la led s'allume d'un coup a 9H.

Quelqun d'autre a une solution pour mes petit poissons ...?   smiley
Logged

Haute Normandie
Offline Offline
Full Member
***
Karma: 1
Posts: 139
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
alors, le premier code de ton dernier message fonctionne mais me bloque l'affichage entre chaque opperation.

C'est normal, il fallait le compiler tel quel sans le rajouter dans ton code, mais bon en faisant sa cela fait bien varier l'intensité de ta lumière dans de ce coté c'est bon.

Quote
le second ne fonctionne toujours pas, j'ai bien ajoute Serial.begin(9600); dans setup.
il ne se passe rien jusque a se que la led s'allume d'un coup a 9H.

Cela est encore normal vu que cela ne marchais pas ! Serial.print(valeurPWM); permettais de savoir si tu rentre bien dans ta phase  "if ((heure ==  smiley-cool && (minut >=30)) ".

Tu remplacer cette phase par :
Code:
if ((heure ==  8) && (minut >=30)) {
    PWMStep = 255 / 29;
    timerPWM = minut-30;
    valeurPWM = (int)(timerPWM * PWMStep);
    valeurPWM = floor( pow( valeurPWM / 255 , GAMMA_CORRECTION ) * 255 );

    Serial.print("Plage 8h30 - 9h00"  -  Valeur écrite sur la sortie blanc :");
    Serial.println(valeurPWM);
    analogWrite (blanc, valeurPWM);
  }

De cette façon quand il est entre 8h30 et 9h00 en ouvrant ton moniteur série tu devrais voir du texte s'afficher a savoir :
Plage 8h30 - 9h00"  -  Valeur écrite sur la sortie blanc : ...
Plage 8h30 - 9h00"  -  Valeur écrite sur la sortie blanc : ...
Plage 8h30 - 9h00"  -  Valeur écrite sur la sortie blanc : ...
Plage 8h30 - 9h00"  -  Valeur écrite sur la sortie blanc : ...

Si cela n'affiche rien c'est que tu ne rentres pas dans cette plage horaire et la condition if ((heure ==  smiley-cool && (minut >=30)) ne marche pas et si tu as du texte d'afficher j'aimerais bien savoir ce qu'il y a de marqué exactement

Valeur écrite sur la sortie blanc : ..

Avec ces tests tu devrais cerner ton problème, soit tu ne rentre pas dans la plage qui permet l'allumage progressif soit les données envoyer pour l'allumage progressif ne sont pas bonnes .
Logged

Rien ne sert de chercher à tout savoir, mieux vaut savoir où tout chercher

Offline Offline
Full Member
***
Karma: 0
Posts: 160
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

salut,
je vient de tester et sa m’affiche 0.
la formule pwm ne fonctionne pas c'est sa ?
Logged

Pages: [1] 2 3 4   Go Up
Jump to: