[PROG] gestion éclairage et chauffage aquarium

Voila les deux mosfets recus.
Ce sont des IRLZ34N.

Pour ce qui est du code il a complétement était revu.

En effet j'avais deux librairies qui rentraient en conflit.

J'ai donc crée un premier programme uniquement pour entrer et modifier l'heure pour le réglage heure d'été heure d'hiver ou pour récupérer un éventuel décalage.

Le deuxième programme est le programme qui gère l'eclairage de jour et de nuit, le chauffage et l'affichage de l'heure.

Le programme pour paramétrer l'heure

#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>

void setup() {
  RTC.stop();
  RTC.set(DS1307_SEC,00);        //reglage secondes
  RTC.set(DS1307_MIN,59);        //reglage minutes
  RTC.set(DS1307_HR,19);         //reglage heures
  RTC.set(DS1307_DOW,4);         //reglage jour de la semaine
  RTC.set(DS1307_DATE,13);       //reglage date
  RTC.set(DS1307_MTH,01);         //reglage mois
  RTC.set(DS1307_YR,11);          //reglage annee
  RTC.start();
}

void loop(){
}

Le programme principal

#include <LiquidCrystal.h>
#include <WProgram.h>
#include <Time.h>  
#include <Wire.h>  
#include <DS1307RTC.h>  

/*
Arduino Masterbalby Controller
 Analog Pin 0 = Temperature 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 = LCD
 Digital Pin 7 = LCD
 Digital Pin 8 = Relais Chauffage
 Digital Pin 9 = PWM moon_light
 Digital Pin 11 = PWM day_light
 Digital Pin 16 = Bouton poussoir 1 day light
 Digital Pin 15 = Bouton poussoir 2 chauffage
 */

//LiquidCrystal lcd(rs, enable, d4, d5, d6, d7)
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
int sensorPin = 0;
int chauffage = 8;
int pwm1 = 11;
int pwm2 = 9;
int time;
int BP1=16; //interrupteur Day_light 
int BP2=15; //interrupteur Chauffage
int val_up=0;
int val_down=0;
long last_time1 = 0;
long last_time2 = 0;


void setup()  {
  Serial.begin(9600);
  pinMode(chauffage, OUTPUT);  // digital pin pour chauffage en sortie
  pinMode(BP1, INPUT); //met la broche en entree 
  digitalWrite(BP1, HIGH) ; // activation du pullup de la broche en entree
  pinMode(BP2, INPUT); //met la broche en entree 
  digitalWrite(BP2, HIGH) ; // activation du pullup de la broche en entree
  analogWrite(pwm1,0);
  analogWrite(pwm2,0);
  lcd.begin(16, 2);
  delay(10);
  lcd.print("MasterBalby 3.4");
  lcd.setCursor(0, 1) ;
  lcd.print("Gestion Aqua");
  delay(2000);
  lcd.clear();
  setSyncProvider(RTC.get);  
  if(timeStatus()!= timeSet) 
    lcd.println("Unable to sync");
  else
    lcd.println("RTC system time ");   
  delay(2000);   
  lcd.clear();
  delay(10);
}

void loop() {
  val_up = (map (minute(), 0, 59, 0, 150));
  val_down = (map (minute(), 0, 59, 150, 0));
  time = ((hour() * 100) + minute());  
  //Recuperer la temperature du LM35 ***************************************************************************************
  int reading = analogRead(sensorPin);  
  float voltage = reading * 5.0 / 1024; 
  int temp = voltage * 100 ; 
  //Chauffage******************************************************************************
  if((temp < 24) || (digitalRead(BP2)==LOW)) {     
    digitalWrite(chauffage, HIGH);
  }  
  else if (temp > 26)
  {  
    digitalWrite(chauffage, LOW);
  }
  //****************Day Lights**********************************************************************************
  if (hour() == 15)  { // entre 15:00:00 et 15:59:59
    analogWrite (pwm1, val_up); // allumage progressif
  }
  else if (hour() == 20)  { // entre 20:00:00 et 20:59:59
    analogWrite (pwm1, val_down); // extinction progressive
  }   
  else if ((hour() > 15 ) && (hour() < 20)) { // entre 16:00:00 et 19:59:59
    analogWrite(pwm1, 150);
  }
  else if ((((hour() > 0  && hour() < 15)) && (digitalRead(BP1)==LOW)) || (((hour() > 20  && hour() < 24)) && (digitalRead(BP1)==LOW)) || ((hour() == 0) && (digitalRead(BP1)==LOW))){
    analogWrite(pwm1, 150);  
  }
  else if ((((hour() > 0  && hour() < 15)) && (digitalRead(BP1)==HIGH)) || (((hour() > 20  && hour() < 24)) && (digitalRead(BP1)==HIGH)) || ((hour() == 0) && (digitalRead(BP1)==HIGH))){
    analogWrite(pwm1, 0);  
  }
  //****************Moon Lights****************************************************************************
  if ((hour() > 19) &&  (hour() < 24)) {   // de 20:00:00 à 23:59:59
    analogWrite(pwm2, 255);
  }
  else{
    analogWrite(pwm2, 0);
  }
  //Affichage chauffage allumé********************************************************
  lcd.setCursor(0,1);
  if(digitalRead(chauffage) == HIGH)
  {
    lcd.println("Chauffage ON    ");
  }
  else
  {
    lcd.println("Chauffage OFF   ");
  }
  //Affichage heure***************************************************************************************
  if ( millis() >=(last_time1 + 1000))
  {
    lcd.setCursor(0, 0) ;
    lcd.print(hour());
    printDigits(minute());
    printDigits(second());
    last_time1 = millis();  
  }
  //Affichage temperature*****************************************************************************
  if ( millis() >=(last_time2 + 5000))
  {
    lcd.setCursor(9,0);
    lcd.print("T:");
    lcd.print(temp); 
    lcd.println("C  ");  
    last_time2 = millis();
  }
  //Serial.print(hour()),Serial.print(":"),Serial.print(minute()),Serial.print(":"),Serial.print(second()),Serial.print(" "),Serial.pri
  //Serial.print(temps_perso),Serial.println();
  //Serial.print(time),Serial.println();
}

void printDigits(int digits){
  // utility function for digital clock display: prints preceding colon and leading 0
  lcd.print(":");
  if(digits < 10)
    lcd.print('0');
  lcd.print(digits);
}

J'espère avec cela pouvoir aider quelqu'un...