Code source complet du programme

Publié le par masterbalby.aqua.over-blog.com

#include <Time.h>

#include <LiquidCrystal.h>

#include <WProgram.h>

#include <Wire.h>

#include <DS1307.h>

 

/*

Arduino Masterbalby Controller

 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 = LCD

 Digital Pin 7 = LCD

 8 = chauffage

 10 = 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 moon_light = 10;

int pwm = 11;

int heater_on_temp = 24;  //allume chauffage à cette température

int heater_off_temp = 26; //éteint le chauffage à cette température

int moon_on_time = 2015;  //allume les  moon lights à cette heure (en temps_perso)

int moon_off_time = 2300;  //éteint les moon lights à cette heure (en temps_perso)

int minut;

int heure; 

int seconde;

int date;

int mois;

int annee; 

int temps_perso;

int BP1=16; //interrupteur Day_light 

int BP2=15; //interrupteur Chauffage

 

void setup() {

/*  RTC.stop();

  RTC.set(DS1307_SEC,00);        //réglage secondes

  RTC.set(DS1307_MIN,59);        //réglage minutes

  RTC.set(DS1307_HR,15);         //réglage heures

  RTC.set(DS1307_DOW,6);         //réglage jour de la semaine

  RTC.set(DS1307_DATE,11);       //réglage date

  RTC.set(DS1307_MTH,12);         //réglage mois

  RTC.set(DS1307_YR,10);          //réglage année

  RTC.start();

*/

  lcd.begin(16, 2);

  delay(10);

  pinMode(chauffage, OUTPUT);  // digital pin pour chauffage en sortie

  pinMode(moon_light, OUTPUT);  // digital pin pour moon light en sortie

  lcd.print("MasterBalby 2.1");

  lcd.setCursor(0, 1) ;

  lcd.print("Gestion Aqua");

  delay(4000);

  lcd.clear();

  delay(10);

  pinMode(BP1, INPUT); //met la broche en entree 

  digitalWrite(BP1, HIGH) ; // activation du pullup de la broche en entrée

  pinMode(BP2, INPUT); //met la broche en entree 

  digitalWrite(BP2, HIGH) ; // activation du pullup de la broche en entrée

}

 

void loop(){

 

  //Récupérer 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;  //creation temps_perso

 

  //Récupérer la température du LM35 ***************************************

  int reading = analogRead(sensorPin);  

  float voltage = reading * 5.0 / 1024; 

  int temp = voltage * 100 ; 

 

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

  lcd.setCursor(6,0);

  lcd.print("Temp : ");

  delay(10);

  lcd.print(temp); 

  lcd.println("C");  

 

  //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(1000);

 

  //Controles des sorties *****************************

  //****************Chauffage

 

  if((temp < heater_on_temp) || (digitalRead(BP2)==LOW)) {     

    digitalWrite(chauffage, HIGH);

  }  

  else if (temp > heater_off_temp)

  {  

    digitalWrite(chauffage, LOW);

  }

 

  //****************DayLights*********************

  if (heure == 15) { // entre 15:00 et 15:59:59

    analogWrite (pwm, (1 << map (minute() * 60 + second(), 0, 3600, 0, 10)) -1); // allumage progressif exponentiel

  }

  else if (heure == 20) { // entre 20:00 et 20:59:59

    analogWrite (pwm, (1 << map (minute() * 60 + second(), 0, 3600, 10, 0)) -1); // extinction progressif exponentiel

  }   

  else if ((heure > 15 ) && (heure < 20)) {

    analogWrite(pwm, 255);

  }

  else if ((((heure > 0  && heure < 15)) && (digitalRead(BP1)==LOW)) || (((heure > 20  && heure < 24)) && (digitalRead(BP1)==LOW)) || ((heure == 0) && (digitalRead(BP1)==LOW))){

    analogWrite(pwm, 255);  

  }

  else if ((((heure > 0  && heure < 15)) && (digitalRead(BP1)==HIGH)) || (((heure > 20  && heure < 24)) && (digitalRead(BP1)==HIGH)) || ((heure == 0) && (digitalRead(BP1)==HIGH))){

    analogWrite(pwm, 0);  

  }

  //****************Moon Lights***********************

  if(moon_on_time > temps_perso  || moon_off_time <= temps_perso){

    digitalWrite(moon_light, LOW);

  }

  else{

    digitalWrite(moon_light, HIGH);

  }

 

  //Affichage chauffage allumé*************************

  lcd.setCursor(0,1);

  if(digitalRead(chauffage) == HIGH)

  {

    lcd.println("Chauffage ON    ");

  }

  else

  {

    lcd.println("Chauffage OFF   ");

  }

}

 

 

Commenter cet article