usane altri meno costosi, non sono bellissimi ma sono pure a colori :)
usane altri meno costosi, non sono bellissimi ma sono pure a colori :)
Il 12/01/2022 21:05, alfio ha scritto:
Ciao alfio, sono giunto alla fine, se non mi vengono in mente altre modifiche :-)
capire come cambiare l'uscita da invertita a diretta, per ora non ci sto capendo una mazza, ovvero, ho paura a fare delle modifiche a vanvera senza capirle :-)
class myPwm { unsigned long lastChange; unsigned period,duty,tOn,tOff; unsigned pin; bool inverted; public: myPwm ( unsigned p,bool i=false ) { pin = p; inverted=i; period =
1000; SetDuty( 0 ); }; void SetPeriod( unsigned p ) { period = p; SetDuty( duty ); } void SetDuty ( int d ); void Setup ( void ) { digitalWrite( pin,inverted ); lastChange = millis(); }; void Loop ( void ); }; void myPwm::SetDuty ( int d ) { duty = constrain( d,0,100 ); tOn = (unsigned long)duty*period/100; tOff = period-tOn; }; void myPwm::Loop ( void ) { bool pinOn = digitalRead( pin )==( inverted ? LOW : HIGH ); unsigned long nextChange = lastChange+( pinOn ? tOn : tOff ); if( millis()>=nextChange ) { lastChange = nextChange; digitalWrite( pin,pinOn ? ( tOff ? inverted : !inverted ) : ( tOn ? !inverted : inverted ) ); } }myPwm pwmResistenza( releResistenza,true ); // pin uscita, true=invertito cioe' LOW=rele' acceso
forse basta cambiare quest'ultima istruzione e mettere false al posto di true? Comunque non capisco :-) Ringrazio per l'aiuto.
-- Saluti da Drizzt, quello vero! www.agidone.altervista.org MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! http://www.tappezzeriagraziella.com/
Credo che tu debba semplicemente invertire il valore che inserisci nel digitalWrite.
digitalWrite (pin, pinOn? (tOff? inverted : !inverted) : (tOn? !inverted : inverted) );
digitalWrite (pin, !(pinOn? (tOff? inverted : !inverted) : (tOn? !inverted : inverted)) );
"Drizzt do'Urden" ha scritto nel messaggio news:sujcft$1pfe$ snipped-for-privacy@gioia.aioe.org...
true=invertito
di
non capisco, non capisco... e poi ci azzecchi al primo colpo, come e' sta storia ? :-)
Il 16/02/2022 21:38, alfio ha scritto:
Solo fortuna :-D era l'unica istruzione "semplice" per me, se fosse stata una modifica diversa non ci sarei arrivato e comunque non ho capito il funzionamento della parte di programma che hai scritto, mi piacerebbe compendere la
comprenderne il funzionamento :-)
Ringrazio anche LAB per l'aiuto, chiarameente anche la sua modifica non la comprendo :-)
Ho chiuso la macchinetta, in attesa di trovare un materiale per coibentare la caldaia, ora funziona bene, Grazie ancora :-)
-- http://www.avg.com
Il 16/02/2022 21:38, alfio ha scritto:
Sono ancora qua, ci ho smanettato un po ma non riesco a fare una modifica, praticamente se si accende la macchinetta da freddo, con i parametri (Setduty e Setperiod) che vanno bene per mantenere la temperatura al
invece metto i parametri per raggiungere la temperatura da freddo poi non riesce a mantenerla. Avevo pensato di usare un "if" per cambiare i parametri quando la
del genere? Grazie :-)
class myPwm { unsigned long lastChange; unsigned period,duty,tOn,tOff; unsigned pin; bool inverted; public: myPwm ( unsigned p,bool i=false ) { pin = p; inverted=i; period =
1000; SetDuty( 0 ); }; void SetPeriod( unsigned p ) { period = p; SetDuty( duty ); } void SetDuty ( int d ); void Setup ( void ) { digitalWrite( pin,inverted ); lastChange = millis(); }; void Loop ( void ); }; void myPwm::SetDuty ( int d ) { duty = constrain( d,0,100 ); tOn = (unsigned long)duty*period/100; tOff = period-tOn; }; void myPwm::Loop ( void ) { bool pinOn = digitalRead( pin )==( inverted ? LOW : HIGH ); unsigned long nextChange = lastChange+( pinOn ? tOn : tOff ); if( millis()>=nextChange ) { lastChange = nextChange; digitalWrite( pin,pinOn ? ( tOff ? inverted : !inverted ) : ( tOn ? !inverted : inverted ) ); } }myPwm pwmResistenza( releResistenza,false ); // pin uscita, false=azione diretta, true=azione inversa
void setup() { Serial.begin(9600); Serial2.begin(9600); //seriale Nextion
pinMode(inSwitch, INPUT); //ingresso switch acqua calda analogReference( INTERNAL2V56 ); //usa il reference di 2.56V per
pwmResistenza.Setup(); pwmResistenza.SetPeriod( 6000 ); //periodo di lavoro ON/OFF in millisecondi lavora con pwmResistenza.SetDuty // che determina la percentuale di ON sul tempo riga 126 }
void loop() {
// MAPPATURA TEMPERATURA *******************************
temperatura = map(analogRead(intemperatura), 186, 566, 150, 19); //mappa il segnale proveniente dal LMT85
if (statovapore==0) // questo serve alla partenza del micro per
{ settemp = settempcaffe; }
// TERMOSTATO************************
pwmResistenza.SetDuty( 6.5*( settemp-temperatura ) ); // modificare
pwmResistenza.Loop(); // coefficiente da moltiplicare per la differenza fra set e variabile
la percentuale di ON sul tempo di pwmResistenza.SetPeriod(xxxx) in mS riga 106
-- http://www.avg.com
Il 27/02/2022 15:28, Drizzt do'Urden ha scritto:
A forza di provare ci sono riuscito, anche se non completamente, volevo che si modificassero i due parametri SetDuty e SetPeriod, sono riuscito solo con SetDuty ma mi basta, ora partendo da zero rallenta molto verso la fine e quando mancano 3 gradi si velocizza, devo dire che
rispetto al set, sono molto soddisfatto :-)
In pratica ho creato una variabile int setduty che ho sostituito al valore di Duty
pwmResistenza.SetDuty( 6.5*( settemp-temperatura ) );
diventa
pwmResistenza.SetDuty( setduty*( settemp-temperatura ) );
e ho aggiunto
if ((settemp-temperatura) Sono ancora qua, ci ho smanettato un po ma non riesco a fare una modifica,
-- http://www.avg.com
Il 27/02/2022 16:39, LAB ha scritto:
Ho tolto il suo termostato meccanico e ho usato un LMT85 che va da -55 a
questo ho reso il conrollo lento all'inizio, poi si velocizza una volta
stabile attorno al set.
-- http://www.avg.com
"Drizzt do'Urden" ha scritto nel messaggio news:svg53e$6vf$ snipped-for-privacy@gioia.aioe.org...
ottimo!
pero' ripensandoci, sarebbe stato meglio usare un controllo PID, come un
vero termo regolatore, e googlando mi e' venuto fuori questo:
Il 27/02/2022 17:25, alfio ha scritto:
Grazie :-)
Si lo so che sarebbe stato meglio usare un vero PID e avevo letto anche quella pagina del link ma il codice proprio non l'ho capito :-D, fra l'altro la regolazione PID la conosco bene, ero strumentista in uno stabilimento chimico e questi controlli li modificavo spesso quando ancora c'erano i regolatori pneumatici, poi con l'avvento dell'elettronica ci si metteva mano solo all'installazione e se non
semplice l'uso del PI ma con le temperature spesso si doveva usare anche il Derivativo ed era sempre un casino, specialmente se cambiava qualcosa nella produzione. Usarlo per una caldaietta da 300ml mi sembrava esagerato ma il solo PI (proporzionale e integrale) non sarebbe male, comunque con la piccola
variabili fisiche da regolare non cambiano in questo caso :-)
-- Saluti da Drizzt, quello vero! www.agidone.altervista.org MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! http://www.tappezzeriagraziella.com/
Il 27/02/2022 17:46, Drizzt do'Urden ha scritto:
Dimenticavo, il termostato intelligente della mia caldaia, come quello di altre marche, ha solo il proporzionale per regolare la temperatura
l'intergrale altrimenti l'offset fra set e variabile non cambia mai.
-- Saluti da Drizzt, quello vero! www.agidone.altervista.org MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! http://www.tappezzeriagraziella.com/
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.