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
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)):
#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 ");
}
}