Go Down

Topic: [PROG] gestion éclairage et chauffage aquarium (Read 10038 times) previous topic - next topic

masterbalby

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
Code: [Select]
#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
Code: [Select]
#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...

Go Up