Code source complet du programme
#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 ");
}
}