automate arduino

Voila le prg que j'utilise.
Merci a toi

#include "Arduino.h"
#include <LiquidCrystal.h>
#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 rtc;

#include <OneWire.h> 

#define DS18B20 0x28     
#define BROCHE_ONEWIRE 10 

OneWire ds(BROCHE_ONEWIRE); 
float temp;


int sensorPin = 10;
int chauffage = 8;
int relais_1 = 9;
int relais_2 = 11;
int relais_3 = 12;
int time;
int val_up = 0;
int val_down = 0;
int tour=0;
unsigned long last_time1 = 0;
unsigned long last_time2 = 0;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);



void setup()
{
#ifdef AVR
  Wire.begin();
#else
  Wire1.begin(); 
#endif
  rtc.begin();
  

  lcd.begin(16, 2);
  delay(10);

  Serial.begin(57600);
 
  //********************************************************************************
  pinMode(chauffage, OUTPUT);  
  pinMode(relais_1, OUTPUT);
  pinMode(relais_2, OUTPUT);
  pinMode(relais_3, OUTPUT);
  digitalWrite(relais_1, 1);
  digitalWrite(relais_2, 1);
  digitalWrite(relais_3, 1);

  lcd.print("AquaPatoche");
  lcd.setCursor(0, 1) ;
  lcd.print("Gestion Aqua");
  delay(2000);
  lcd.clear();
  if (! rtc.isrunning())
  {


  }
  else
  {
    Serial.println("RTC is running!");
    DateTime now = rtc.now();
  }
}

void loop(){
if ( millis() >= (last_time1 + 1000)){traitement();}
}

void traitement()
{
  last_time1=millis();
  DateTime now = rtc.now();
  val_up = (map (now.minute(), 0, 59, 0, 150));
  val_down = (map (now.minute(), 0, 59, 150, 0));
  time = ((now.hour() * 100) + now.minute());
 
  //Affichage heure***********raffraichissement toutes les secondes******************************
    lcd.setCursor(0, 0) ;
    lcd.print(now.hour());
    printDigits(now.minute());
     printDigits(now.second());
  //affichage sur moniteur de la temperature***************************
  if (getTemperature(&temp)) 
  {
    Serial.print("Temperature : ");
    Serial.print(temp);
    Serial.write(176);
    Serial.write('C');
    Serial.println();
  }
  else
  {

  }
    //Chauffage******************************************************************************
                     
  if ((temp < 24) )
  {
    digitalWrite(chauffage, LOW);
  }
  else if (temp > 26)              
  {
    digitalWrite(chauffage, HIGH);
  }
 
  switch (tour)
  {
  //*****  fonctionnement de la rampe d'eclairage  de 13 à 21******
case 0:
    tour++;
  if ((now.hour() > 12) &&  (now.hour() < 21))
  {
    digitalWrite(relais_1, LOW);
    lcd.setCursor (0, 1);
    lcd.print("  Rampe Led-on  ");
    
  }
  else
  {
    digitalWrite(relais_1, HIGH);
    lcd.setCursor (0, 1);
    lcd.print(" Rampe Led-off   ");
    
  }
  //****************  Fonctionnement de la pompe led de 11 à 22 h   ***
 
 break;
case 1:
    tour++;
  if ((now.hour() > 10) &&  (now.hour() < 22))
  {
    lcd.setCursor (0, 1);
    digitalWrite(relais_2, LOW);
    lcd.print(" Pompe Led-on  ");
    
  }
  else
  {
    lcd.setCursor (0, 1);
    digitalWrite(relais_2, HIGH);
    lcd.print(" Pompe Led-off  ");
    
  }
  //****************Led nuit en marche de 21 à 23 h ***************************
break;
case 2:
    tour++;
  if ((now.hour() > 20) &&  (now.hour() < 23))
  {
    lcd.setCursor (0, 1);
    digitalWrite(relais_3, LOW);
    lcd.print("Led nuit-on    ");
    
  }
  else
  {
    lcd.setCursor (0, 1);
    digitalWrite(relais_3, HIGH);
    lcd.print("Led nuit-off    ");
    //delay(2000);
  }

  //*******************Affichage chauffage allumé********************************************************
  break;
case 3:
    tour++;
    lcd.setCursor(0, 1);
    lcd.print("                  ");
    lcd.setCursor(0, 1);
  if (digitalRead(chauffage) == LOW)
  {
    lcd.print(" Chauffage-on    ");
    
  }
  else
  {
    lcd.print(" Chauffage-off   ");
    
  }
 
  break;

  //Affichage temperature****raffraichissement toutes les 5 secondes*****************************
 break;
case 4:
    tour=0;
    //if ( millis() >= (last_time2 + 5000))
  {
    lcd.setCursor(10, 0);
   // lcd.print("T:");
    lcd.print(temp);
    lcd.print((char)223);
    last_time2 = millis();
  }

}

}


void printDigits(int digits)
{
  
  lcd.print(":");
  if (digits < 10)
    lcd.print('0');
  lcd.print(digits);
}


boolean getTemperature(float *temp)
{
  byte data[9], addr[8];


  if (!ds.search(addr))
  {
    ds.reset_search();    
    return false;         
  }

  if (OneWire::crc8(addr, 7) != addr[7]) 
    return false;                        

  if (addr[0] != DS18B20) 
    return false;         
  ds.reset();             
  ds.select(addr);        

  ds.write(0x44, 1);      
  delay(800);             

  ds.reset();             
  ds.select(addr);        
  ds.write(0xBE);         

  for (byte i = 0; i < 9; i++) 
    data[i] = ds.read();       

  *temp = ((data[1] << 8) | data[0]) * 0.0625;

 
  return true;
}

ok :slight_smile: , tu es conscient que tu as viré les sécurités pour pendule HS et thermostat HS

Excuse j'ai fais une bêtise rectifié.

Bonjour
J'ai fini mon projet et il est installé

J'ai acheté un stérilisateur UV il faut qu'il fonctionne 6 heure par semaine sur 1 journée petite idée pour le prg ?

Merci
Patoche

hello
pas trop dispo en ce moment
ta demande n'est pas claire

J'ai acheté un stérilisateur UV il faut qu'il fonctionne 6 heure par semaine sur 1 journée petite idée pour le prg ?

tu peux reformuler ?

Hello
Il faut qu'il fonctionne tous les samedi de 2h a 8h par exemple .
Patoche

reposte ton prg actuel

On dit merci à dfgh qui t'écrit ton programme !!!

petite piste à creuser pour ton stérilisateur qui doit marcher le samedi ...

la fonction dayOfWeek() te renvoie le n° du jour de la semaine (de 0 à 6) ... le 6 étant le samedi ...

extrait de la librairie RTClib

uint8_t DateTime::dayOfWeek() const {    
    uint16_t day = date2days(yOff, m, d);
    return (day + 6) % 7; // Jan 1, 2000 is a Saturday, i.e. returns 6
}

Bonjour
Voila le prg que j'utile

#include "Arduino.h"
#include <LiquidCrystal.h>
#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 rtc;

#include <OneWire.h> 

#define DS18B20 0x28     
#define BROCHE_ONEWIRE 10 

OneWire ds(BROCHE_ONEWIRE); 
float temp;

int sensorPin = 10;
int chauffage = 8;
int relais_1 = 9;
int relais_2 = 11;
int relais_3 = 12;
int time;
int val_up = 0;
int val_down = 0;
unsigned long last_time1 = 0;
unsigned long last_time2 = 0;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);


void setup()
{
#ifdef AVR
  Wire.begin();
#else
  Wire1.begin(); 
#endif
  rtc.begin();
 

  lcd.begin(16, 2);
  delay(10);

  Serial.begin(57600);
 
  //********************************************************************************
  pinMode(chauffage, OUTPUT);  
  pinMode(relais_1, OUTPUT);
  pinMode(relais_2, OUTPUT);
  pinMode(relais_3, OUTPUT);
  digitalWrite(relais_1, 1);
  digitalWrite(relais_2, 1);
  digitalWrite(relais_3, 1);

  lcd.print("AquaPatoche");
  lcd.setCursor(0, 1) ;
  lcd.print("Gestion Aqua");
  delay(2000);
  lcd.clear();
  if (! rtc.isrunning())
  {
  }
  else
  {
    Serial.println("RTC is running!");
    DateTime now = rtc.now();
  }
}

void loop(){
if ( millis() >= (last_time1 + 1000)){traitement();}
}

void traitement()
{
  last_time1=millis();
  DateTime now = rtc.now();
  val_up = (map (now.minute(), 0, 59, 0, 150));
  val_down = (map (now.minute(), 0, 59, 150, 0));
  time = ((now.hour() * 100) + now.minute());
 
  //Affichage heure***********raffraichissement toutes les secondes******************************
  lcd.setCursor(0, 0);
    if (now.hour()<10)
    lcd.print("0");
    lcd.print(now.hour());
    lcd.print(":");
    if (now.minute()<10)
    lcd.print("0");
    lcd.print(now.minute());
    //lcd.print(":");
   // if (now.second()<10)
   // lcd.print("0");
   // lcd.print(now.second());
  //affichage sur moniteur de la temperature***************************
  if (getTemperature(&temp)) 
  {
    Serial.print("Temperature : ");
    Serial.print(temp);
    Serial.write(176);
    Serial.write('C');
    Serial.println();
  }
  else
  {
  }
    //Chauffage******************************************************************************
  if ((temp < 24) )
  {
    digitalWrite(chauffage, LOW);
  }
  else if (temp > 26)              
  {
    digitalWrite(chauffage, HIGH);
  } 
  {
  //*****  plage horaire du fonctionnement de la rampe d'eclairage **
  lcd.setCursor (0, 1); 
  if ((now.hour() > 11) &&  (now.hour() < 21))   
  {   
    digitalWrite(relais_1, LOW); 
        lcd.print("[Led]"); 
  }
  else
  {     
    digitalWrite(relais_1, HIGH);
    lcd.print(" Led ");
  }
  //****************  plage horaire du fonctionnement de la pompe ***
  lcd.setCursor (6, 1);
  if ((now.hour() > 10) &&  (now.hour() < 22))   
  {   
    digitalWrite(relais_2, LOW);
    lcd.print("[Pom]");
  } 
  else
  {    
    digitalWrite(relais_2, HIGH);
    lcd.print(" Pom ");   
  }  
  //****************UV************************
  lcd.setCursor (12, 1); 
  if ((now.hour() > 5) &&  (now.hour() < 9))   
  {   
    digitalWrite(relais_3, LOW);
    lcd.print("[Uv]");  
  }
  else
  {       
    digitalWrite(relais_3, HIGH);
    lcd.print(" Uv ");
  }
  //*******************Affichage chauffage allumé********************************************************
    lcd.setCursor(12, 0);
  if (digitalRead(chauffage) == LOW)
  {
    lcd.print("[Ch] ");    
  }
  else
  {    
    lcd.print(" Ch ");   
  }
  //Affichage temperature****raffraichissement toutes les 5 secondes****************************
    if ( millis() >= (last_time2 + 100))
  {
    lcd.setCursor(6, 0);
   // lcd.print("T:");
    lcd.print(temp);
    lcd.print((char)223);
    last_time2 = millis();
  }

}

}


void printDigits(int digits)
{
  lcd.print(":");
  if (digits < 10)
    lcd.print('0');
  lcd.print(digits);
}

boolean getTemperature(float *temp)
{
  byte data[9], addr[8];
 

  if (!ds.search(addr))
  { 
    ds.reset_search();    
    return false;         
  }

  if (OneWire::crc8(addr, 7) != addr[7]) 
    return false;                 

  if (addr[0] != DS18B20) 
    return false;       

  ds.reset();             
  ds.select(addr);        

  ds.write(0x44, 1);      
  delay(800);             

  ds.reset();             
  ds.select(addr);        
  ds.write(0xBE);         
  for (byte i = 0; i < 9; i++) 
    data[i] = ds.read();       

  
  *temp = ((data[1] << 8) | data[0]) * 0.0625;

 
  return true;
}

Merci
Patoche

un "extrait", extrait d'un exemple de la rtc lib
facile à adapter et incruster dans ta loop
soit en fin de loop soit en la mettant sous forme de fonction que tu appelles depuis la loop

DateTime now = rtc.now();
    
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();

Merci je vais regarder sa.
Patoche