Se sei già registrato           oppure    

Orario: 02/05/2024 11:05:51  

 

Energia Alternativa ed Energia Fai Da Te > Arduino

VISUALIZZA L'ALBUM

Pagine: (10)   1   2   [3]   4   5   6   7   8   9   10    (Ultimo Msg)


aiuto su variazione programmazione arduino
FinePagina

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 30/09/2016 10:30:08

è sempre uguale stesso problema. ti inserisco tutto il listato cosi vedi se ci sono altri problemi altrimenti monto 2 arduini uno per la logica di funzionamento è uno per temporizzatore i comandi è mi sbrigo prima.





/*
 Vengono utilizzati i seguenti pin

 Pin +5V         -> Alimentazione POSITIVO
 Pin GND         -> Alimentazione MASSA
 Potenziometro   -> il centrale al pin VO (3) DEL Display
 VSS DISPLAY     -> MASSA
 A DISPLAY       -> + 5V (ILLUMINAZIONE)
 VDD DISPLAY     -> + 5V
 K DISPLAY       -> MASSA
 RW DISPLAY      -> MASSA
 GND SCHEDE RALè -> MASSA
 VCC SCHEDE RELè -> + 5V 
 JD SCHEDA RELè  -> COLLEGABILE AD UNA 5V DI POTENZA ELIMINANDO IL PONTICELLO (METTERE MASSE TUTTE IN COMUNE)
 Pin Digital 2   -> Linea dati sensore T1 DS18B20 METTERE RESISTENZA 4,7k TRA PIN DATI GIALLO E +5V
 Pin Digital 3   -> Linea dati sensore T2 DS18B20 METTERE RESISTENZA 4,7k TRA PIN DATI GIALLO E +5V
 Pin Digital 4   -> Bus D4 dati LCD
 Pin Digital 5   -> Bus D5 dati LCD
 Pin Digital 6   -> Bus D6 dati LCD
 Pin Digital 7   -> Bus D7 dati LCD
 Pin Digital 8   -> terminale RS display LCD
 Pin Digital 9   -> terminale E  display LCD
 Pin Digital 10  -> DA COLLEGARE AL GALLEGGIANTE G1 e AD UNA RESISTENZA DA 4,5K VERSO MASSA (L'ALTRO PIN DEL GALLEGGIANTE A +5V)
 Pin Digital 11  -> DA COLLEGARE AL TASTO RIEMPIMENTO NA e AD UNA RESISTENZA DA 4,5K VERSO MASSA (L'ALTRO PIN DEL PULSANTE A +5V)
 
 PIN ANALOGICO A0 -> lettura SENSORE UV (PIN CENTRALE) JUG
 PIN ANALOGICO A1 -> IN2 SCHEDA 4 RELè COMANDA CONTEMPORANEAMENTE K1 E K2
 PIN ANALOGICO A2 -> IN3 SCHEDA 4 RELè COMANDA  K3
 PIN ANALOGICO A3 -> IN4 SCHEDA 4 RELè COMANDA  K4
 PIN ANALOGICO A4 -> IN1 SCHEDA 2 RELè COMANDA  K5
 PIN ANALOGICO A5 -> IN2 SCHEDA 2 RELè COMANDA  K6

 */


#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

#define ONE_WIRE_BUS2 2
#define ONE_WIRE_BUS3 3
#define ONE_WIRE_BUS12 12

// Imposta la comunicazione oneWire per comunicare
// con un dispositivo compatibile
OneWire pin2(ONE_WIRE_BUS2);
OneWire pin3(ONE_WIRE_BUS3);
OneWire pin12(ONE_WIRE_BUS12);

// Passaggio oneWire reference alla Dallas Temperature.
DallasTemperature sensors1(&pin2); //Pin 2
DallasTemperature sensors2(&pin3); //Pin 3
DallasTemperature sensors3(&pin12); //Pin 12

// RS EN D4 D5 D6 D7
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int i = 0;
int i2 = 0;
int soglia_sole = 5; //soglia UV oltre la quale è giorno
int sensoreUV = A0;    // PIN PER IL SENSORE UV
int range = 3; // oscillazione differenziale vale per uv e temperature **************************************************
int UV = 0;
int Ruv = 0 ;
String G1 = (" ");
String day = (" ");
int allarme = 80; //soglia di allarme modificabile da quì n.b. il preallarme (k6) interviene 10 gradi prima)  **************************************************  

void setup(void)
{
  analogWrite(A1, 0); // PORTA A 5V IL PIN ANALOGICO 1 QUINDI accende I RELè K1 E K2
  analogWrite(A2, 1023);
  analogWrite(A3, 1023);
  analogWrite(A4, 1023);
  analogWrite(A5, 1023); // preallarme (-10°)


  // Start up the library
  sensors1.begin();
  sensors2.begin();
  sensors3.begin();
  lcd.begin(20, 4);
  lcd.clear();
  lcd.setCursor(5, 1);
  lcd.print("Buongiorno");
  delay (2000);
  lcd.begin(20, 4);
  lcd.clear();
}

void loop(void)
{
  
  UV = analogRead(sensoreUV);
  if (digitalRead(10) == 1) G1 = ("Pieno"); else G1 = ("Vuoto");

  if (UV >= soglia_sole) day = ("SOLE");
  if (UV <= soglia_sole - range) day = ("OMBRA");

  //  if (digitalRead(13) == 1) i2 = 1; else i2 = 0; //Disabilitato x mancanza porte utili
  if (digitalRead(12) == 1) i2 = 2; else i2 = 0;

  switch (i2)

  {
    case 0:
      if (sensors2.getTempCByIndex(0) > sensors1.getTempCByIndex(0)   )
       if (sensors2.getTempCByIndex(0) > sensors3.getTempCByIndex(0)   )
      {
        analogWrite(A1, 0); // quando t2>t1 --> ACCENDE K1 E K2 SUL PIN A1
        analogWrite(A3, 1023); // quando t2>t1 --> Spegni K4 SUL PIN A3
        analogWrite(A6, 0);
        delay(10000);
        analogWrite(A3, 0);
        analogWrite(A1, 0);
        analogWrite(A6, 0);
      }

      if (sensors2.getTempCByIndex(0) < (sensors1.getTempCByIndex(0) - range)  )
      if (sensors3.getTempCByIndex(0) < (sensors1.getTempCByIndex(0) - range)  )
      {
        analogWrite(A1, 1023); // quando t2<t1-il range --> spegne K1 E K2 SUL PIN A1
        analogWrite(A3, 0); // quando t2<t1-il range --> ACCENDI K4 SUL PIN A3
        analogWrite(A6, 0);
        delay(10000);
        analogWrite(A1, 0);
        analogWrite(A3, 0); 
        analogWrite(A6, 0);
      }
      
       if (sensors3.getTempCByIndex(0) > sensors1.getTempCByIndex(0)   )
       if (sensors3.getTempCByIndex(0) > sensors2.getTempCByIndex(0)   )
      {
        analogWrite(A1, 0); // quando t2>t1 --> ACCENDE K1 E K2 SUL PIN A1
        analogWrite(A3, 0); // quando t2>t1 --> Spegni K4 SUL PIN A3
        analogWrite(A6, 1023);
        delay(10000);
        analogWrite(A6, 0);
        analogWrite(A1, 0); // quando t2>t1 --> ACCENDE K1 E K2 SUL PIN A1
        analogWrite(A3, 0);
      }
      break;

    case 1: //disabilitato x mancanza porte utili
      /*   analogWrite(A3, 0);
         analogWrite(A1, 1023);//forza k4 on e k1e2 off
         delay(10);
         */
      break;


    case 2: //forza  k4 off e k1e2 on
      analogWrite(A3, 1023);
      analogWrite(A1, 0);//forza k4 off e k1e2 on
      delay(10);
      break;

  }

  if (day == ("SI") && G1 == ("Vuoto")) analogWrite(A2, 0); else analogWrite(A2, 1023); //K3 ABILITATO QUANDO SOLE SI E G1 ABBASSATO


  if (digitalRead(11) == 1) i = 1;  // se viene premuto il tasto di riempimento pin 11
  switch (i)
  {
    case 0:
      lcd.setCursor(18, 3);
      lcd.print("  ");
      break;

    case 1: //abilita K3 FINCHè IL SERBATOIO NoN è PIENO
      analogWrite(A2, 0); //accende
      if (digitalRead(10) == 1) {
        analogWrite(A2, 1024);
        i = 0 ;
      }

      lcd.setCursor(18, 3);
      lcd.print("R.");

      break;
  }


  if (sensors1.getTempCByIndex(0) > allarme) analogWrite(A4, 0); // se T1 supera allarme abilita K4
  delay (10);
  if (sensors1.getTempCByIndex(0) < (allarme - 1)) analogWrite(A4, 1023); // se T1 scende di un grado sotto l'allarme disabilita K4

if (sensors1.getTempCByIndex(0) > allarme-10) analogWrite(A5, 0); // se T1 supera preallarme abilita K5
  delay (10);
  if (sensors1.getTempCByIndex(0) < (allarme -11)) analogWrite(A5, 1023); // se T1 scende di un grado sotto il preallarme disabilita K4



  sensors1.requestTemperatures(); // Invia il comando di lettura delle temperatura
  delay (100);
  sensors2.requestTemperatures();
  
  lcd.setCursor(0, 0);
  lcd.print("UV: ");
  lcd.setCursor(4, 0);
  lcd.print ("    ");
  lcd.setCursor(4, 0);
  lcd.print (UV);
  lcd.setCursor(15, 2);
  lcd.print("Serb:");
  lcd.setCursor(15, 3);
  lcd.print(G1);
  lcd.setCursor(13, 1);
  lcd.print(" ");
  lcd.setCursor(15, 1);
  lcd.print (day);
  lcd.setCursor(11, 0);
  lcd.print("All.: ");
  lcd.setCursor(17, 0);
  lcd.print (allarme);
  lcd.setCursor(0, 1);
  lcd.print("TS:");
  lcd.setCursor(6, 1);
  lcd.print (sensors1.getTempCByIndex(0)); delay (100);
  lcd.print ("'C ");
  lcd.setCursor(0, 2);
  lcd.print("TC:");
  lcd.setCursor(6, 2);
  lcd.print (sensors2.getTempCByIndex(0));
  lcd.print ("'C ");
  lcd.setCursor(0, 3);
  lcd.print("TP:");
  lcd.setCursor(6, 3);
  lcd.print (sensors3.getTempCByIndex(0)); delay (100);
  lcd.print ("'C ");


  delay(100);

}



Modificato da BellaEli - 30/09/2016, 10:39:45
 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 30/09/2016 13:27:30

In che senso è come prima, il led uno è sempre acceso mentre l'altro si accende ciclicamente? Ora il led 1 dovrebbe essere acceso solo se il valore della sonda1 è maggiore degli altri, in pratica dovresti avere solo un led che accende ciclicamente



---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 30/09/2016 13:50:31

Per il momento deve accendesi in modo ciclico solo un led.



---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 30/09/2016 14:41:51

si comporta sempre allo stesso modo quindi o pensato di togliere la perte temporizzata metterlo fisso come prima e montarlo ugualmente sul arduino mega poi modificheremo prendendo l'uscite dell analogici che dovrebbero comandare i relè ed apposto dei relè immetterli in un ingresso digitale libero e programmare che quando arriva un ingresso di 5v lui lo deve temporizare in un uscita digitale che sceglierò. e forse risolveremo i problemi

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 30/09/2016 15:18:40

Nel listato usi due volte il pin 12

OneWire pin12(ONE_WIRE_BUS12);

e poi

if (digitalRead(12) == 1) {i2 = 2;}
else i2 = 0;

nel primo caso è il pin della sonda t3, nel secondo caso è il pin di cosa?
Poi citi il pin 11 e non lo usi, hai per caso confuso il pin 12 con il pin 11?

Per quello che devi fare con un pro-mini ne hai d'avanzo, il mega è sprecato. Vi sono solo un sacco di errori nel listato, stamattina ho avuto due ore libere e vi ho lavorato un po',



---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 30/09/2016 15:24:36

altro:

if (day == ("SI")

la stringa "SI" non è stata generata da nessuna parte,la condizione sarà quindi sempre falsa. Anche questo è da sistemare.



---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 30/09/2016 16:12:58

CITAZIONE (calcola, 30/09/2016 15:18:40 ) Discussione.php?213983&3#MSG34

Nel listato usi due volte il pin 12

OneWire pin12(ONE_WIRE_BUS12);

e poi

if (digitalRead(12) == 1) {i2 = 2;}
else i2 = 0;

nel primo caso è il pin della sonda t3, nel secondo caso è il pin di cosa?
Poi citi il pin 11 e non lo usi, hai per caso confuso il pin 12 con il pin 11?

Per quello che devi fare con un pro-mini ne hai d'avanzo, il mega è sprecato. Vi sono solo un sacco di errori nel listato, stamattina ho avuto due ore libere e vi ho lavorato un po',

allora il pin 11 e per forzare il riempimento del serbatoio mentre il pin 12 era programmato sempre con un interruttore per forzare qualche relè ma non serve in questo caso è lo avevo modificato inserendo la terza sonda temperatura

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 30/09/2016 16:15:57

CITAZIONE (calcola, 30/09/2016 15:24:36 ) Discussione.php?213983&3#MSG35

altro:

if (day == ("SI")

la stringa "SI" non è stata generata da nessuna parte,la condizione sarà quindi sempre falsa. Anche questo è da sistemare.

questo invece è la sonda dei raggi uv che in base all'indice se ha anche il galleggiante abbassato abilità A2 per fare il riempimento

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 30/09/2016 17:08:14

chiarito il mistero del pin che rimane sempre acceso. Devi sapere che i pin analogici da A0 ad A5 sono particolari in quanto possono funzionare in digitale e se li usi in analogico puoi usarli con il comando Write in duty cycle in tal caso al valore 255 sono alti a 0 sono bassi.
Il promini ed il nano hanno anche altri due pin analogici A6 e A7 questi pin sono degli analogici solo in ingresso, non puoi impostarli in pinout. solo in pininput, quindi il relè sul pin A6 rimane sempre a 0 volt e, con i tuoi relè che sono di tipo LOW, il relè rimane sempre acceso. In pratica il pin A6 non puoi usarlo per il relè, ma il pin A0 si, quindi sposta il sensore degli UV sul pin A6 ed usa per il relè il pin A0.

Con questa modifica rimane acceso, in modo ciclico, solo un relè, va solo stabilizzato.


CITAZIONE

if (digitalRead(12) == 1) {i2 = 2;}
else i2 = 0;


Quella condizione non la si può eliminare così facilmente, la variabile I2 è usata nello switch, se la eliminiamo resterà sempre = 0. Hai ancora il pin 13 libero perchè non lo usi per quella istruzione? In origine il pin 12 cosa faceva? era un pulsante? In sintesi era un pin in ingresso o in uscita?

CITAZIONE
questo invece è la sonda dei raggi uv che in base all'indice se ha anche il galleggiante abbassato abilità A2 per fare il riempimento


Il problema è che se imposti la condizione che if day="SI" {azione}, da qualche parte del listato la variabile day deve essere posta a "SI", mentre trovo day="SOLE" e mai SI, quindi quel SI, corrisponde al valore SOLE?



---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 30/09/2016 17:40:08


CITAZIONE

if (digitalRead(12) == 1) {i2 = 2;}
else i2 = 0;

Ho impostato al posto di pin 12 il 13,

la condizione day="SI" è ora day="SOLE", se non va bene la modifichi, poi il sensore UV è ora sul pin A6, mentre il relè che era sul pin A6 è ora su A0 (digitale 14), ho inserito il blocco nel flusso di attivazione del relè.
Ora dovrebbe essere a posto.

#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

#define ONE_WIRE_BUS2 2
#define ONE_WIRE_BUS3 3
#define ONE_WIRE_BUS12 12

// Imposta la comunicazione oneWire per comunicare
// con un dispositivo compatibile
OneWire pin2(ONE_WIRE_BUS2);
OneWire pin3(ONE_WIRE_BUS3);
OneWire pin12(ONE_WIRE_BUS12);

// Passaggio oneWire reference alla Dallas Temperature.
DallasTemperature sensors1(&pin2); //Pin 2
DallasTemperature sensors2(&pin3); //Pin 3
DallasTemperature sensors3(&pin12); //Pin 12

// RS EN D4 D5 D6 D7
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

byte blocco = 1;
int i = 0;
int i2 = 0;
int soglia_sole = 5; //soglia UV oltre la quale è giorno
int sensoreUV = A6;    // PIN PER IL SENSORE UV
int range = 3; // oscillazione differenziale vale per uv e temperature **************************************************
int UV = 0;
int Ruv = 0 ;
String G1 = (" ");
String day = (" ");
int allarme = 80; //soglia di allarme modificabile da quì n.b. il preallarme (k6) interviene 10 gradi prima)  **************************************************  
float sonda1 = sensors1.getTempCByIndex(0);
float sonda2 = sensors2.getTempCByIndex(0);
float sonda3 = sensors3.getTempCByIndex(0);

void setup(void)
{
  pinMode(sensoreUV, INPUT); //A6
  pinMode(14, OUTPUT); // PORTA A 5V IL PIN ANALOGICO 1 QUINDI accende I RELè K1 E K2
  pinMode(16, OUTPUT);
  pinMode(17, OUTPUT);
  pinMode(18, OUTPUT);
  pinMode(19, OUTPUT); // preallarme (-10°)
  pinMode(14, OUTPUT);
  pinMode(15, OUTPUT);
  pinMode(10, INPUT);
  pinMode(11, INPUT);
  pinMode(13, INPUT);


  // Start up the library
  blocco = 1;
  sensors1.begin();
  sensors2.begin();
  sensors3.begin();
  lcd.begin(20, 4);
  lcd.clear();
  lcd.setCursor(5, 1);
  lcd.print("Buongiorno");
  delay (2000);
  lcd.begin(20, 4);
  lcd.clear();
}

void loop(void)
{
  if ((blocco !=1) || (blocco !=2 )|| (blocco != 3)){blocco = 1;}
  
  UV = analogRead(sensoreUV);
  if (digitalRead(10) == 1){ G1 = ("Pieno");}
                      else {G1 = ("Vuoto");}

  if (UV >= soglia_sole) {day = ("SOLE");}
  if (UV <= soglia_sole - range) {day = ("OMBRA");}

  //  if (digitalRead(13) == 1) i2 = 1; else i2 = 0; //Disabilitato x mancanza porte utili
  if (digitalRead(13) == 1) {i2 = 2;}
              else i2 = 0;

  switch (i2){

  case 0:{

  if ((sonda1 > sonda2 ) && (sonda1 > sonda3) && (blocco != 1)) {
     
        digitalWrite(15, HIGH); // quando t2>t1 --> ACCENDE K1 E K2 SUL PIN A1 
        digitalWrite(17, LOW); // quando t2>t1 --> Spegni K4 SUL PIN A3 
        digitalWrite(14, LOW); 
        delay(10000); 
        
        digitalWrite(15, LOW); 
        blocco = 1; 
        } 
        
        if ((sonda2 > (sonda1 - range)) &&  (sonda2 > (sonda3 - range)) && (blocco != 2)){
           
        digitalWrite(15, LOW); // quando t2 spegne K1 E K2 SUL PIN A1 
        digitalWrite(17, HIGH); // quando t2 ACCENDI K4 SUL PIN A3 
        digitalWrite(14, LOW); 
        delay(10000); 
        digitalWrite(17, LOW); 
        blocco = 2;
        
        } 
        
        if ((sonda3 > sonda1) && (sonda3 > sonda2) && (blocco != 3))  { 
        digitalWrite(15, LOW); // spegne t1
        digitalWrite(17, HIGH); // spegne t2
        digitalWrite(14, HIGH); // accende t3
        delay(10000); 
        digitalWrite(14, LOW);
        blocco = 3;
        
        }
        
        break;
          }


   case 1: //disabilitato x mancanza porte utili
      /*   analogWrite(A3, 0);
         analogWrite(A1, 1023);//forza k4 on e k1e2 off
         delay(10);
         */
      break;


    case 2: //forza  k4 off e k1e2 on
      {digitalWrite(17, HIGH);
      digitalWrite(15, LOW);//forza k4 off e k1e2 on
      delay(10);
      break;}

  }

  if (day == ("SOLE") && G1 == ("Vuoto")) {digitalWrite(16, LOW);} else digitalWrite(16, HIGH); //K3 ABILITATO QUANDO SOLE SI E G1 ABBASSATO


  if (digitalRead(11) == 1) {i = 1;}  // se viene premuto il tasto di riempimento pin 11
  switch (i)
  {
    case 0:
      lcd.setCursor(18, 3);
      lcd.print("  ");
      break;

    case 1: //abilita K3 FINCHè IL SERBATOIO NoN è PIENO
      {digitalWrite(16, LOW); //accende
      if (digitalRead(10) == 1) {
        digitalWrite(16, HIGH);
        i = 0 ;
      }

      lcd.setCursor(18, 3);
      lcd.print("R.");

      break;
  }
  }


  if (sonda1 > allarme) {digitalWrite(18, LOW);} // se T1 supera allarme abilita K4
  delay (10);
  if (sonda1 < (allarme - 1)) {digitalWrite(18, HIGH); }// se T1 scende di un grado sotto l'allarme disabilita K4

if (sonda1 > allarme-10) {digitalWrite(19, LOW);} // se T1 supera preallarme abilita K5
  delay (10);
  if (sonda1 < (allarme -11)) {digitalWrite(19, HIGH);} // se T1 scende di un grado sotto il preallarme disabilita K4



  sensors1.requestTemperatures(); // Invia il comando di lettura delle temperatura
  delay (100);
  sensors2.requestTemperatures();
  
  lcd.setCursor(0, 0);
  lcd.print("UV: ");
  lcd.setCursor(4, 0);
  lcd.print ("    ");
  lcd.setCursor(4, 0);
  lcd.print (UV);
  lcd.setCursor(15, 2);
  lcd.print("Serb:");
  lcd.setCursor(15, 3);
  lcd.print(G1);
  lcd.setCursor(13, 1);
  lcd.print(" ");
  lcd.setCursor(15, 1);
  lcd.print (day);
  lcd.setCursor(11, 0);
  lcd.print("All.: ");
  lcd.setCursor(17, 0);
  lcd.print (allarme);
  lcd.setCursor(0, 1);
  lcd.print("TS:");
  lcd.setCursor(6, 1);
  lcd.print (sonda1); delay (100);
  lcd.print ("'C ");
  lcd.setCursor(0, 2);
  lcd.print("TC:");
  lcd.setCursor(6, 2);
  lcd.print (sonda2);
  lcd.print ("'C ");
  lcd.setCursor(0, 3);
  lcd.print("TP:");
  lcd.setCursor(6, 3);
  lcd.print (sonda3); delay (100);
  lcd.print ("'C ");


  delay(100);

}



Modificato da calcola - 30/09/2016, 17:47:18


---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 30/09/2016 18:59:45

allora l'ho buttato cosi velocemente nell' arduino senza dissaldare le piste sulla basetta tanto ho visto che tutti i relè sono sulle uscite digitali e le sonde temperature sono rimaste sulle vecchie uscite preimpostate quindi l'ho buttato cosi giusto per vedere e per ora le temperature sul display rimangono bloccate non salgono e non scendono

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 30/09/2016 22:08:27

Prova così, se non funge, mi spiace ma senza avere la possibilità di simulare la tua scheda, più di così non posso fare.

#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

#define ONE_WIRE_BUS2 2
#define ONE_WIRE_BUS3 3
#define ONE_WIRE_BUS12 12

// Imposta la comunicazione oneWire per comunicare
// con un dispositivo compatibile
OneWire pin2(ONE_WIRE_BUS2);
OneWire pin3(ONE_WIRE_BUS3);
OneWire pin12(ONE_WIRE_BUS12);

// Passaggio oneWire reference alla Dallas Temperature.
DallasTemperature sensors1(&pin2); //Pin 2
DallasTemperature sensors2(&pin3); //Pin 3
DallasTemperature sensors3(&pin12); //Pin 12

// RS EN D4 D5 D6 D7
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

byte blocco = 1;
int i = 0;
int i2 = 0;
int soglia_sole = 5; //soglia UV oltre la quale è giorno
int sensoreUV = A6;    // PIN PER IL SENSORE UV
int range = 3; // oscillazione differenziale vale per uv e temperature **************************************************
int UV = 0;
int Ruv = 0 ;
String G1 = (" ");
String day = (" ");
int allarme = 80; //soglia di allarme modificabile da quì n.b. il preallarme (k6) interviene 10 gradi prima)  **************************************************  


void setup(void)
{
  pinMode(sensoreUV, INPUT); //A6
  pinMode(14, OUTPUT); // PORTA A 5V IL PIN ANALOGICO 1 QUINDI accende I RELè K1 E K2
  pinMode(16, OUTPUT);
  pinMode(17, OUTPUT);
  pinMode(18, OUTPUT);
  pinMode(19, OUTPUT); // preallarme (-10°)
  pinMode(14, OUTPUT);
  pinMode(10, INPUT);
  pinMode(11, INPUT);
  pinMode(13, INPUT);


  // Start up the library
  blocco = 1;
  sensors1.begin();
  sensors2.begin();
  sensors3.begin();
  lcd.begin(20, 4);
  lcd.clear();
  lcd.setCursor(5, 1);
  lcd.print("Buongiorno");
  delay (2000);
  lcd.begin(20, 4);
  lcd.clear();
}

void loop(void)
{
  if ((blocco !=1) || (blocco !=2 )|| (blocco != 3)){blocco = 1;}
  
  UV = analogRead(sensoreUV);
  if (digitalRead(10) == 1){ G1 = ("Pieno");}
                      else {G1 = ("Vuoto");}

  if (UV >= soglia_sole) {day = ("SOLE");}
  if (UV <= soglia_sole - range) {day = ("OMBRA");}

  //  if (digitalRead(13) == 1) i2 = 1; else i2 = 0; //Disabilitato x mancanza porte utili
  if (digitalRead(13) == 1) {i2 = 2;}
              else i2 = 0;

  switch (i2){

  case 0:{

  if ((sensors1.getTempCByIndex(0) > sensors2.getTempCByIndex(0) ) && (sensors1.getTempCByIndex(0) > sensors3.getTempCByIndex(0)) && (blocco != 1)) {
     
        digitalWrite(15, HIGH); // quando t2>t1 --> ACCENDE K1 E K2 SUL PIN A1 
        digitalWrite(17, LOW); // quando t2>t1 --> Spegni K4 SUL PIN A3 
        digitalWrite(14, LOW); 
        delay(10000); 
        
        digitalWrite(15, LOW); 
        blocco = 1; 
        } 
        
        if ((sensors2.getTempCByIndex(0) > (sensors1.getTempCByIndex(0) - range)) &&  (sensors2.getTempCByIndex(0) > (sensors3.getTempCByIndex(0) - range)) && (blocco != 2)){
           
        digitalWrite(15, LOW); // quando t2 spegne K1 E K2 SUL PIN A1 
        digitalWrite(17, HIGH); // quando t2 ACCENDI K4 SUL PIN A3 
        digitalWrite(14, LOW); 
        delay(10000); 
        digitalWrite(17, LOW); 
        blocco = 2;
        
        } 
        
        if ((sensors3.getTempCByIndex(0) > sensors1.getTempCByIndex(0)) && (sensors3.getTempCByIndex(0) > sensors2.getTempCByIndex(0)) && (blocco != 3))  { 
        digitalWrite(15, LOW); // spegne t1
        digitalWrite(17, HIGH); // spegne t2
        digitalWrite(14, HIGH); // accende t3
        delay(10000); 
        digitalWrite(14, LOW);
        blocco = 3;
        
        }
        
        break;
          }


   case 1: //disabilitato x mancanza porte utili
      /*   analogWrite(A3, 0);
         analogWrite(A1, 1023);//forza k4 on e k1e2 off
         delay(10);
         */
      break;


    case 2: //forza  k4 off e k1e2 on
      {digitalWrite(17, HIGH);
      digitalWrite(15, LOW);//forza k4 off e k1e2 on
      delay(10);
      break;}

  }

  if (day == ("SOLE") && G1 == ("Vuoto")) {digitalWrite(16, LOW);} else digitalWrite(16, HIGH); //K3 ABILITATO QUANDO SOLE SI E G1 ABBASSATO


  if (digitalRead(11) == 1) {i = 1;}  // se viene premuto il tasto di riempimento pin 11
  switch (i)
  {
    case 0:
      lcd.setCursor(18, 3);
      lcd.print("  ");
      break;

    case 1: //abilita K3 FINCHè IL SERBATOIO NoN è PIENO
      {digitalWrite(16, LOW); //accende
      if (digitalRead(10) == 1) {
        digitalWrite(16, HIGH);
        i = 0 ;
      }

      lcd.setCursor(18, 3);
      lcd.print("R.");

      break;
  }
  }


  if (sensors1.getTempCByIndex(0) > allarme) {digitalWrite(18, LOW);} // se T1 supera allarme abilita K4
  delay (10);
  if (sensors1.getTempCByIndex(0) < (allarme - 1)) {digitalWrite(18, HIGH); }// se T1 scende di un grado sotto l'allarme disabilita K4

if (sensors1.getTempCByIndex(0) > allarme-10) {digitalWrite(19, LOW);} // se T1 supera preallarme abilita K5
  delay (10);
  if (sensors1.getTempCByIndex(0) < (allarme -11)) {digitalWrite(19, HIGH);} // se T1 scende di un grado sotto il preallarme disabilita K4



  sensors1.requestTemperatures(); // Invia il comando di lettura delle temperatura
  delay (100);
  sensors2.requestTemperatures();
  
  lcd.setCursor(0, 0);
  lcd.print("UV: ");
  lcd.setCursor(4, 0);
  lcd.print ("    ");
  lcd.setCursor(4, 0);
  lcd.print (UV);
  lcd.setCursor(15, 2);
  lcd.print("Serb:");
  lcd.setCursor(15, 3);
  lcd.print(G1);
  lcd.setCursor(13, 1);
  lcd.print(" ");
  lcd.setCursor(15, 1);
  lcd.print (day);
  lcd.setCursor(11, 0);
  lcd.print("All.: ");
  lcd.setCursor(17, 0);
  lcd.print (allarme);
  lcd.setCursor(0, 1);
  lcd.print("TS:");
  lcd.setCursor(6, 1);
  lcd.print (sensors1.getTempCByIndex(0)); delay (100);
  lcd.print ("'C ");
  lcd.setCursor(0, 2);
  lcd.print("TC:");
  lcd.setCursor(6, 2);
  lcd.print (sensors2.getTempCByIndex(0));
  lcd.print ("'C ");
  lcd.setCursor(0, 3);
  lcd.print("TP:");
  lcd.setCursor(6, 3);
  lcd.print (sensors3.getTempCByIndex(0)); delay (100);
  lcd.print ("'C ");


  delay(100);

}



PS: ho modificato per qualche ";" di troppo



Modificato da calcola - 30/09/2016, 22:15:05


---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 01/10/2016 07:01:22

ok sembra che le temperature vadano bene ora. se riesco a collegare relè e tutto testo per bene

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 01/10/2016 07:35:35

Ora non ti resta che scambiare i pin A6 e A0



---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 01/10/2016 09:34:42

per ora ho collegato le tre sonde il sensore uv ed il galleggiante è abbiamo i seguenti problemi:
sensore 3 indica sempre 85C° mentre gli altri e 2 variano
sensore uv sempre a 0
il galleggiante anche se lo aziono indica sempre vuoto
ripasso al progetto originale e vediamo come va

 
 InizioPagina
 

Pagine: (10)   1   2   [3]   4   5   6   7   8   9   10    (Ultimo Msg)

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum