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.. ^^
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.
Le sujet a déjà été débattu. Je pense qu'une petite recherche sur le forum te ferait gagner du temps
Bon je t'ai fais l'exemple pour la lumière blanche a toi de faire le reste
Les variables a définir avant le setup:
int timerPWM = 0;
int valeurPWM=0;
float GAMMA_CORRECTION = 2.2;
float PWMStep = 0;
La partie allumage et extinction progressive
//----------------------------------------------------------------------------//
//---- 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);
}
Tiens nous au courant !
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
#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 ");
}
}
Re essai ceci et dit nous ce que cela fait :
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
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 ?
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 ...?
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.
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 == 8) && (minut >=30)) ".
Tu remplacer cette phase par :
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 == 8) && (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 .
salut,
je vient de tester et sa m’affiche 0.
la formule pwm ne fonctionne pas c'est sa ?
re
alors, je vient de supprimer la ligne "valeurPWM = floor( pow( valeurPWM / 255 , GAMMA_CORRECTION ) * 255 );"
et la miracle sa m'affiche la valeur -pwm qui monte jusque a 0 et les led s'allume progressivement.
a quoi servait cette ligne ?
depuis le début je ne comprenais pas la correction gamma.
ais je trouver la solution ?
oui tu as compris, la correction gamma a pour but d'avoir une transition beaucoup plus linéaire, je pense que le soucis vient du (int) essai ceci :
change les int par des float
float timerPWM = 0;
float valeurPWM=0;
float GAMMA_CORRECTION = 2.2;
float PWMStep = 0;
et dans la fonction met ceci :
if ((heure == 8) && (minut >=30)) {
PWMStep = 255 / 29;
timerPWM = minut-30;
valeurPWM = 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, (int)valeurPWM);
}
Je regarderais cela ce soir car je ne suis pas sur de ce que je t'avance mais le soucis vient du type int ou float car la formule pour la correction gamma est bonne.
En tout cas content que cela avance un peu
Bonjour,
Désoler de ne pas avoir repondu avant mais depuis ton dernier message je suis en test intensif ...
Bon, resultat ...
Toutes mes progression fonctionne correctement !
Mais bien sur j'ai 2 petit probleme qui son apparu ]
le premier concerne mes power led, elle on besoin d'une tension minimum et du coup le début de la progression les fait scintiller.
A tu une formule pour que la progression se fasse a partir d'un niveau minimum ?
Le second concerne l'affichage, j'ai besoin de faire apparaître des informations et le problème ces que l'heure et la température son figer le Temp du loop.
A tu aussi une solution a cela ?
Je remet mon code afin que tu regarde ces 2 problèmes et que d'autre aquariophilie puisse en profiter aussi.
#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,50); //réglage secondes
RTC.set(DS1307_MIN,59); //réglage minutes
RTC.set(DS1307_HR,9); //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);
Serial.begin(9600);
}
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***** 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(2000);
}
else if ((heure == 20) && (minut >30)) { // entre 20:00 et 20:59:59
PWMStep = 255 / 29;
timerPWM = 30-minut;
valeurPWM = (int)(timerPWM * PWMStep);
analogWrite (rouge, valeurPWM);
lcd.setCursor(0,1);
lcd.print(" - - ROUGE - - ");
delay(2000);
}
else if ((heure >= 9 ) && (heure < 21)) {
analogWrite(rouge, 255);
lcd.setCursor(0,1);
lcd.print(" ROUGE ON ");
delay(2000);
}
else if (heure <= 21) {
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(2000);
}
else if (heure == 20) { // entre 20:00 et 20:59:59
PWMStep = 255 / 60;
timerPWM = 60-minut;
valeurPWM = (int)(timerPWM * PWMStep);
analogWrite (blanc, valeurPWM);
lcd.setCursor(0,1);
lcd.print(" - - BLANC - - ");
delay(2000);
}
else if ((heure >= 9 ) && (heure < 21)) {
analogWrite(blanc, 255);
lcd.setCursor(0,1);
lcd.print(" BLANC ON ");
delay(2000);
}
else if (heure <= 21) {
analogWrite(blanc, 0);
}
//***on-off***** power led ***
if (heure == 9) {
PWMStep = 255 / 59;
timerPWM = minut-60;
valeurPWM = (int)(timerPWM * PWMStep);
analogWrite (power_led, valeurPWM);
lcd.setCursor(0,1);
lcd.print(" + POWER LED + ");
delay(2000);
}
else if (heure == 20) { // entre 20:00 et 20:59:59
PWMStep = 255 / 60;
timerPWM = 60-minut;
valeurPWM = (int)(timerPWM * PWMStep);
analogWrite (power_led, valeurPWM);
lcd.setCursor(0,1);
lcd.print(" - POWER_LED - ");
delay(2000);
}
else if ((heure >= 10 ) && (heure < 21)) {
analogWrite(power_led, 255);
lcd.setCursor(0,1);
lcd.print(" POWER LED ON ");
delay(2000);
}
else if (heure <= 21) {
analogWrite(power_led, 0);
}
//****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 ");
delay(3000);
}
else
{
lcd.println("ventilateur OFF ");
delay(3000);
}
}
Bonjour,
Je suis aquariophile et donc directement intéressé par le sujet.
Pourrais-tu m'indiquer (un lien si tu as) quel driver power led tu utilises pour alimenter et piloter tes 5 leds de 10w ?
D'avance merci.
salut,
voici les lien de mes driver
http://www.sureelectronics.net/goods.php?id=1288
je ne sait pas de quoi tu est équiper mais tu verras vraiment la différence avec un éclairage led.
pour ma part j'ai installer 3 blanche et 2 bleu royal.
bon courage a toi en espérant que le forum t’épargneras tout le temps que j'ai passer a effectuer toute mes recherche.
Merci pour le lien.
Si j'ai bien compris tu as donc un driver par led.
En amont du driver, tu utilises aussi une alimentation par led ou une alimentation globale pour tes 5 leds.
Personnellement, je parts sur la réalisation d'une rampe led avec des leds de 20W.
Re
Toute mon installation est alimenter par un transfo 12V 5a car les 5 led 10w consomme ~800ma
Re, j'ai fais des essais et pour que la correction gamma fonctionne, il faut que tu fasses cela :
Tu déclares en haut de ton programme :
float timerPWM = 0;
float valeurPWM=0;
float GAMMA_CORRECTION = 2.2;
float PWMStep = 0;
et ensuite dans ta fonction tu met cela :
PWMStep = 255 / 29;
timerPWM = i-30;
valeurPWM = timerPWM * PWMStep;
valeurPWM = floor(pow( valeurPWM / 255 , GAMMA_CORRECTION ) * 255) ;
analogWrite (rouge, (int)valeurPWM);
pense a modifier la formule de PWMStep en fonction de la durée de la plage d'allumage et d'extinction et timerPWM en fonction que tu désires un allumage progressif ou une extinction progressive
Si ton programme se bloque c'est parceque tu utilise la fonction delay();
Enfin cela n'est pas très compliqué de rajouter un seuil minimum
//Adéclarer avec tes variables
int SeuilMini = 10;
else if (heure == 20) { // entre 20:00 et 20:59:59
PWMStep = 255 / 60;
timerPWM = 60-minut;
valeurPWM = (int)(timerPWM * PWMStep);
// La super formule pour définir un seuil mini
if( valeurPWM < SeuilMini ) valeurPWM = 0;
analogWrite (power_led, valeurPWM);
lcd.setCursor(0,1);
lcd.print(" - POWER_LED - ");
//Le fameux delay qui bloque le programme
delay(2000);
//Pourquoi ce delay ?
}