progetto fuori portata

salve, mi sto cimentando da una decina di giorni nel realizzare la gestione dell’acquario, premetto che non sono a digiuno di elettronica ma di linguaggio C si, del tutto.

ho gia imparato qualcosina da buon autodidatta ma la strada e mooolto piu tortuosa del previsto e ho dei grossi limiti da colmare ancora.

comunque uno straccio di codice scopiazzando qua e la e leggendo qualche tutorial, sono riuscito ad arrivare a questo:

#include <DS1302.h>                         // compilare i giorni in italiano
DS1302 rtc(6, 7, 8);

#define RELE1 2                                // prima luce neon pin2
#define RELE2 3                                // seconda luce neon pin 3
#define RELE3 4                                // terza luce neon pin 4
#define RELE4 5                                // ossigenatore notturno pin 5
#define CLK 6                                  //
#define DAT 7                                  // pin 6, 7, 8, collegti alds1302
#define RST 8                                  //
#define RELE5 9                                // riscaldatore gestito da lm35 Pin9
#define RELE6 10                               // ventole d raffreddamento
#define RELE7 11                               // luce luna pin 11
#define RELE8 12                               // luce alba tramonto pin 12
#define RELE9 13                               // non in uso

int SEC;                                       // definisce secondi
int MIN;                                       // definisce minuti
int ORE;                                       // definisce ore
int LM35Pin = A5;                            // ingresso LM35 pin A5 analogico
int potPin2 = A0;                              // ingresso sonda ph pin A0 analogico
int temperature = 0;                           // variabile di calcolo
int PH = 0;                                    // valore di calcolo
double val = 0;                                // variabile per memorizzare il valore del sensore temperatura
double val2 = 0;                               // variabile2 per memorizzare il valore del sensore PH

void setup()                                  //  carica i parametri di sistema

{rtc.halt(false);                            // impedisce lo stop
  rtc.writeProtect(false);                    // abilita l'aggiornamento
  Serial.begin(9600);                         // velocita della seriale
  rtc.setDOW(MARTEDI);                        // aggiorna il giorno
  rtc.setTime(21, 11, 0);                     // aggiorna l'ora
  rtc.setDate(1, 9, 2015);                    // aggiorna la data

  ORE = 21;                                   //
  MIN = 10;                                   // valore iniziale dei valori variandoli si riparte dalle ore attuali
  SEC = 00;                                   //

  pinMode(RELE1, OUTPUT);                    // uscita prima luce neon pin2
  pinMode(RELE2, OUTPUT);                    // uscita seconda luce neon pin 3
  pinMode(RELE3, OUTPUT);                    // uscita terza luce neon pin 4
  pinMode(RELE4, OUTPUT);                    // uscita ossigenatore notturno pin 5
  pinMode(RELE5, OUTPUT);                    // uscita riscaldatore gestito da lm35 Pin9
  pinMode(RELE6, OUTPUT);                    // uscita ventole pin 9
  pinMode(RELE7, OUTPUT);                    // uscita luce luna led pin 11
  pinMode(RELE8, OUTPUT);                    // uscita luce alba tramonto led pin 12
}
void loop ()                                // ciclo dei processi
{
  {
    SEC = SEC + 1;                   // valore di incremento dei secondi
    if (SEC >= 60)                   // se i secondi sono >= a --
      MIN = MIN + 1;                 // valore di incremento dei minuti
    if (SEC >= 60)                   // se i secondi sono >= a --
      SEC = 0;                       // ricomincia da 0
    if (MIN >= 60)                   // se i minuti sono >= a --
      ORE = ORE + 1;                 // valore di incremento delle ore
    if (MIN >= 60)                   // se i minuti sono >= a --
      MIN = 0;                       // ricomincia da 0
    if (ORE >= 24)                   // se le ore sono >= a --
      ORE = 0;                       // ricomincia da 0

  }
 
  if (ORE >= 8)                     
    digitalWrite(RELE1, LOW);           // accende il RELE1 prima luce neon pin 2
  if (ORE >= 12)                    
    digitalWrite(RELE2, LOW);           // accende il RELE2 seconda luce neon pin 3
  if (ORE >= 15)                 
    digitalWrite(RELE3, LOW);           // accende il RELE3 terza luca neon pin 4
  if (ORE >= 17)                   
    digitalWrite(RELE1, HIGH);          // spegne il RELE1 prima luce neon pin 2
  if (ORE >= 19)                   
    digitalWrite(RELE2, HIGH);          // spegne il RELE2 seconda luce neon pin 3
  if (ORE >= 20)                     
    digitalWrite(RELE3, HIGH);          // spegne il RELE3 terza luce neon pin 4
  if (ORE >= 20)                   
    digitalWrite(RELE4, LOW);           // accende il RELE4 ossigenatore notturno pin 5
  if (ORE >= 20)
    digitalWrite(RELE7, LOW);           // accende il RELE7 luce luna pin 11
  if (ORE >= 20)                    
    digitalWrite(RELE8, LOW);           // accende il RELE8 luce tramonto pin 12
  if (ORE >= 21)                     
    digitalWrite(RELE8, LOW);           // spegne il RELE8 luce tramonto pin 12
  if (ORE >= 21)                    
    digitalWrite(RELE4, HIGH);          // spegne il RELE4 ossigenatore notturno pin 5
  if (ORE >= 22)                     
    digitalWrite(RELE4, LOW);           // accende il RELE4 ossigenatore notturno pin 5
  if (ORE >= 23)                  
    digitalWrite(RELE4, HIGH);          // spegne il RELE4 ossigenatore notturno pin 5

  Serial.println("        ACQUARIO TROPICALE V 1.0   ");
  Serial.println(" ");
  Serial.println("                  CIAO             ");
  Serial.println(" ");
  Serial.print("        OGGI E ");                 //
  Serial.print(rtc.getDOWStr());                   //
  Serial.print(" ");                               // ora e data del ds 1302
  Serial.println(rtc.getDateStr());                //
  Serial.print("          SONO LE ORE   ");        //
  Serial.println(rtc.getTimeStr());                //
  Serial.println(" ");
  Serial.print("LA TEMPERATURA DELLA VASCA E DI ");
  Serial.print ((double)temperature);              //comunica la temperatura alla seriale
  Serial.println(" C*");
  Serial.print("       IL PH DELLA VASCA E ");
  Serial.println ((double)PH);                     //comunica il PH  alla seriale
  Serial.println(" ");
  Serial.print("IL TIMER INTERNO E IMPOSTATO ALLE ");
  Serial.print(ORE);                               // comunica le ore alla seriale
  Serial.print(":");                               //
  Serial.print(MIN);                               // comunica i minuti alla seriale // ora del count interno per verifica tempo
  Serial.print(",");                               //
  Serial.println(SEC);                             // comunica i secondi alla seriale
  Serial.println("~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~");

  val = analogRead(LM35Pin/*A1*/);        //legge il valore del sensore lm35 pin A5
   val2 = analogRead(potPin2/*A0*/);       //legge il valore del sensore PH pin A0
  temperature = (5.0 * 100 * val / 1024); //converte i volt in temperatura C?
  //PH = (5.0 * val * 100 / 1024);        // converte i volt in PH

  if (temperature <= 20)                //quando la temperatura e minore o = a 20
  {
    digitalWrite (RELE5, LOW);          // accende il RELE6 riscaldatore pin 9
  }
  else
  {
    digitalWrite (RELE5, HIGH);         // spegne il RELE6 riscaldatore pin 9
  }
  if (temperature >= 30)                //quando la temperatura e maggiore o = a 30
  {
    digitalWrite (RELE6, LOW);         // accende il RELE6 ventola di raffreddamento pin 10 
  }
  else
  {
    digitalWrite (RELE6, LOW);         // spegne il RELE6 ventola di raffreddamento pin 10 
  }
  
  delay(715);                        // imposta il tempo dei cicli, 1000 = 1 secondo  delay(715);
}

ovvio che per ora e piu una ciofeca scopiazzata che altro ma funziona sta girando da 2 giorni senza problemi sperando che non vada via la luce o si resetta.

non riesco a capire il passaggio tra recupero dell’orario dall’rtc allaccensione dei rele.
qualche consigli o meglio ancora qualche lettura dettagliata su questo?
un’altra domanda il pin A5 che mellosketch ho usato come imput per lm35 puo creare problemi in presenza del ds1302? ho la temperatura che fluttua

C'è già un bel progetto di gestione acquari in MegaTopic (http://forum.arduino.cc/index.php?topic=141419.0), però capisco anche che il "fai da te" dia più soddisfazioni.

Per LM35, essendo un sensore analogico, devi prendere vari accorgimenti per avere una lettura stabile. Ad esempio non esagerare con la lunghezza del cavo. Inoltre se hai una UNO, non usare contemporaneamente il bus I2C e i pin A4/A5. Sposta il sensore su un altro pin.

PaoloP: C'è già un bel progetto di gestione acquari in MegaTopic (http://forum.arduino.cc/index.php?topic=141419.0), però capisco anche che il "fai da te" dia più soddisfazioni.

Per LM35, essendo un sensore analogico, devi prendere vari accorgimenti per avere una lettura stabile. Ad esempio non esagerare con la lunghezza del cavo. Inoltre se hai una UNO, non usare contemporaneamente il bus I2C e i pin A4/A5. Sposta il sensore su un altro pin.

si ho visto quel progetto e devo dire che e favoloso, ma male si adatta alle esigenze di altri, cosi come e strutturato e adatto per il suo acquario, (adattabile al mio sicuro ) ma non p&p, e poi vuoi mettere farmelo da solo o prendi e monta uno gia pronto....

per il pin A5 avevo letto qualcosa, ma anche collegandolo su altri pin tipo A0 la lettura e poco stabile sfarfalla i 2o 3 gradi, per evitare sbattimenti ho preso una sonda gia pronta con circa 80cm di cavo, i collegamenti sono fatti benesenza fili volanti o accrocchi vari.

una domanda se non e chiedere troppo, come ho strutturato il programma? cioe ho scritto castronerie o cosi com'è puo andare?

abbiate pieta, sono 10 giorni che smanetto con codici linguaggi macchina e sketch, devo studiare a fondo come si struttura un programma a dovere. grazie