| MarKoZaKKa
| Inviato il: 19/09/2016 17:14:36
|
Pur non sapendo nulla di arduino, la logica è logica, e la programmazione pure, quindi:
1) leggi le tre temperature "contemporaneamente"
2) individua quella massima
3) agisci di conseguenza
4) ripeti il loop...
--------------- Tecnico qualificato in clownerie Windsurfer a tempo perso Slalomaro senza speranze
| | | | epry
| Inviato il: 20/09/2016 11:23:37
|
CITAZIONE (MarKoZaKKa, 19/09/2016 17:14:36 )
Pur non sapendo nulla di arduino, la logica è logica, e la programmazione pure, quindi:
1) leggi le tre temperature "contemporaneamente"
2) individua quella massima
3) agisci di conseguenza
4) ripeti il loop...
su questo non ci pioveva | | | | Bolle
| Inviato il: 20/09/2016 14:31:17
|
Deve funzicare se
1: i2 è sempre uguale a zero
2: metti nel primo if >= ( non solo maggiore)
3: elimini il secondo if e lo sostituisci con un else (prende uno solo dei rami senza fare un'altra lettura)
Sono stato chiaro? Se vuoi facciamo un ciclo di isteresi ...il quale stabilizza tutto...ma posta il codice e non l'immagine!
Ciao
Bolle
--------------- Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | epry
| Inviato il: 20/09/2016 21:11:22
|
io avevo modificato cosi ma non andava un tubo
Immagine Allegata: prova mod.jpg | | | | epry
| Inviato il: 20/09/2016 21:12:32
|
/*
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();
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) )
{
analogWrite(A1, 0); // quando t2>t1 --> ACCENDE K1 E K2 SUL PIN A1
analogWrite(A3, 1023); // quando t2>t1 --> Spegni K4 SUL PIN A3
delay(10);
}
if (sensors2.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
delay(10);
}
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 - 25/09/2016, 00:46:17
| | | | righetz
| Inviato il: 21/09/2016 21:21:11
|
ciao epry,
sembra una centralina per gestire una caldaia?
Prova a vedere anche questa discussione LINK potresti trovare qualche spunto che ti possa aiutare
--------------- Chi non si indebita fa la rabbia degli usurai
| | | | epry
| Inviato il: 22/09/2016 09:55:37
|
mi ha dato una mano un amico per programmarla e mi gestisce il pannello solare termico il termocamino e la stufa a pellet.
tramite sensore raggi uv mi gestisce il riempimento del pannello in più a un tasto per il riempimento manuale perché è a vaso aperto il pannello.
poi tramite elettrovalvole mi gestiva l'apertura della sanitaria da pannello a termocamino ed ora a pellet.
però è uscito un altro problema le elettrovalvole che ho quando sono aperte rimangono con un minimo di assorbimento perché al suo interno rimane eccitato un relè ed ora non so se modificare tutto in modo da darli un eccitamento temporizzatore oppure lasciare il mondo come | | | | marcosnout
| Inviato il: 22/09/2016 10:44:59
|
Solitamente, se l'attuatore deve gestire il comando per un tempo prolungato, si utilizzano valvole motorizzate. Le valvole motorizzate sono più costose (all'acquisto) delle elettrovalvole, ma consumano meno energia, il loro consumo è limitato al tempo necessario ad aprire o chiudere il flusso che gestiscono.
Ne esistono a una o più vie.
--------------- Laminox Hidra 24kw, pannello solare termico SunHeat open 200 lt, termoboiler 120 litri. Zona climatica D, Gradi-giorno 1427 Isola: 30 moduli SUNTECH 200wp, Inverter UPS PSW7 6048, regolatore di carica PCM8048, batterie 24 EPZS 810Ah (C10)
| | | | epry
| Inviato il: 22/09/2016 11:50:16
|
le valvole sono motorizzate ma all interno anno anche un micro relè perché hanno 2 fili positivi di cui uno per chiusura ed uno per apertura, e propio in apertura il micro relè rimane eccitato | | | | sabin
| Inviato il: 23/09/2016 14:41:06
|
Con quale programma editi il codice? Io uso Notepad++. Ha diversi strumenti di ricerca, selezionando "linguaggio/C/C++" colora il codice e si distinguono commenti dal codice e altro.
Nel codice che hai messo credo che manchi qualcosa, manca sensors3?
// Start up the library
sensors1.begin();
sensors2.begin();
lcd.begin(20, 4);
--------------- Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw) Pannelli 11,1 mq. Wp 1320 (x120 Wp mq)... n° 5 monoc. 72 celle 750 Wp (SO) su MPPT SolarMate 40A n° 3 polic. 60 celle 570 Wp (Sud) su PWM 30A... batterie: 2 coppie SMA (trazione) 24V 120 Ah C/10 (+ 2 avviamento 70Ah) Switch enel/batterie con Arduino Pro Mini
| | | | epry
| Inviato il: 23/09/2016 14:51:45
|
CITAZIONE (sabin, 23/09/2016 14:41:06 )
Con quale programma editi il codice? Io uso Notepad++. Ha diversi strumenti di ricerca, selezionando "linguaggio/C/C++" colora il codice e si distinguono commenti dal codice e altro.
Nel codice che hai messo credo che manchi qualcosa, manca sensors3?
// Start up the library
sensors1.begin();
sensors2.begin();
lcd.begin(20, 4);
grazie mille per la segnalazione perché mi era sfuggito questa cosa.
comunque io come programma uso fritzing però se facevano una applicazione dove ti simula il funzionamento in base a quello che scrivi e colleghi sarebbe una bomba perché potrei preparare e fare tutto a lavoro e a casa mi dedicherei solo al montaggio dei circuiti | | | | sabin
| Inviato il: 24/09/2016 19:39:12
|
Ho provato a capire meglio il codice ma forse il metodo che uso io è basilare.
Mi sembra che nelle porte analogiche ci sono relè. Io li metto nelle porte digitali.
Puoi liberare alcune porte digitali mettendo l'LCD con il modulo I2C nelle porte analogiche A4 A5
Il setup dei sensori DS18B20 forse è stato complicato più del necessario. Per temperature sopra lo zero, i sensori LM35 sono più semplici, ma con cavi lunghi bisogna stabilizzarli, credo con un condensatore.
--------------- Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw) Pannelli 11,1 mq. Wp 1320 (x120 Wp mq)... n° 5 monoc. 72 celle 750 Wp (SO) su MPPT SolarMate 40A n° 3 polic. 60 celle 570 Wp (Sud) su PWM 30A... batterie: 2 coppie SMA (trazione) 24V 120 Ah C/10 (+ 2 avviamento 70Ah) Switch enel/batterie con Arduino Pro Mini
| | | | BellaEli
| Inviato il: 25/09/2016 01:01:38
|
Ciao, sono col cell quindi abbrevierò le cose, puoi fare così:
if (t1 < t2 && t1 < t3)
{
K1 = 1;
K2 = 0;
K3 = 0;
}
if (t2 < t1 && t2 < t3)
{
K1 = 0;
K2 = 1;
K3 = 0;
}
if (t3 < t1 && t3 < t2)
{
K1 = 0;
K2 = 0;
K3 = 1;
}
if (t1 = t2 || t1 = t3)
{
K1 = decidi tu cosa fare se ci sono rilevazioni identiche !!!
}
Che dici, può andare ???
Elix
--------------- C'è un limite al fai da te ??? Si, ma lo stabiliamo noi !!!
| | | | calcola
| Inviato il: 25/09/2016 21:11:32
|
se ti servono porte digitali puoi usare questa espansione.
LINK
Usa l'I2C e ti aggiunge 7 porte digitali, sono molto comodi
--------------- 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.
| |
| | |
|
Versione Mobile!
|
|
|
|
|
|
|
|
|
|
|
|
|
|