Se sei già registrato           oppure    

Orario: 12/05/2024 20:24:52  

 

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)


Controllo termocamino
FinePagina

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 16/05/2017 16:53:01


CITAZIONE

...e fin qua ci siamo l'accenditore è stato acceso per 3 minuti..

Fin qui tutto perfetto

Una domanda: ma cos'è l'accenditore ??? Io l'ho considerato alla pari della candeletta della stufa a pellet, è corretto ???


CITAZIONE
E qui la parte che purtroppo ancora non riesco a comprendere:
durante tutto il ciclo fino alla prossima accensione VarMillis andra avanti e OldStartAccenditore rimarrà a 6 fino alla prossima accensione che diventerà di nuovo uguale a VarMillis. Giusto?

Torniamo un'attimo ha questa benedetta istruzione

if(OldStartAccenditore > VarMillis)
{
DeltaRestartMillis = 4294967295 - OldStartAccenditore;
OldStartAccenditore = 0;
}

VarMillis ha raggiunto 10 e si riparte da 0, ma OldStartAccenditore è rimasto a 6.

E no !!! Proprio sopra hai scritto: "fino alla prossima accensione VarMillis andra avanti e OldStartAccenditore rimarrà a 6 fino alla prossima accensione che diventerà di nuovo uguale a VarMillis".
L'hai già dimenticato ???
Nel ciclo successivo OldStartAccenditore verrà inizializzato a VarMillis, quindi non sta a 6 ma al valore di VarMillis dell'inizializzazione !
In quell'if ci si entra solo 1 volta ogni 50 giorni a patto che la stufa sia in funzione !


CITAZIONE

Quindi gli stiamo dicendo che DeltaRestartMillis deve essere il risultato di 10-6 è diventerà 4,mentre OldStartAccenditore lo riportiamo a 0.

Il risultato ora sarà (0+4-0<8), quindi saranno passati gia 4(1,5minuti) e l'accenditore resterà acceso solo altri 4(1,5minuti), ma noi pero vogliamo che l'accenditore resti acceso per 8(3minuti)..

Ovviamente questa deduzione è errata poichè OldStartAccenditore non sta + a 6


CITAZIONE
Dimmi almeno che sono sulla giusta strada

Si ora inizi a ragionare correttamente...



Modificato da BellaEli - 16/05/2017, 17:03:48


---------------
C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 16/05/2017 17:19:16

Ok bene questa sera o domani assemblo una scheda prova e inizio a provare, perche con la pratica riesco a focalizzare meglio.


CITAZIONE

Una domanda: ma cos'è l'accenditore ??? Io l'ho considerato alla pari della candeletta della stufa a pellet, è corretto ???


Si sono indeciso tra candeletta ho aria calda.Questo lo decido in corso d'opera.
Credo che per il mese prossimo dovrei riuscire ad assemblare il termo oggi ho confermato l'ordine al taglio laser per il nuovo scambiatore..

Un'ultima cosa (per ora) la parte della coclea gli faccio delle variabili a parte giusto? Cioè nello stesso codice ci possono essere 2 millis?



---------------
Non è impossibile se è fattibile!

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 16/05/2017 19:23:04

Puoi fare quello che ti pare, ovviamente, ma non ha senso avere 2 millis, cioè quella variabile rappresenta l'istante attuale, averne 2 vorrebbe dire solo avere un duplicato, a che pro ?



---------------
C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 16/05/2017 20:49:52


CITAZIONE

Puoi fare quello che ti pare, ovviamente, ma non ha senso avere 2 millis, cioè quella variabile rappresenta l'istante attuale, averne 2 vorrebbe dire solo avere un duplicato, a che pro ?

Ok no era solo per capire quale fosse la soluzione migliore.

Torniamo a noi ho testato il firmware su arduino uno e non funziona niente, o meglio il display ha problemi con la seriale non sta leggendo ne scrivendo,ma questo è dovuto alla libreria nextion che è nata per arduino mega(ho cercato di modificarla),ma è un fallimento(mi importa poco perche a giorni aarriva arduino mega è ho risolto il problema).Per quanto riguarda l'accenditore funziona in parte, cioè se porto lo stato a ON il led(accenditore) si accende per 3 minuti e poi si spegne,ma se durante questi 3 minuti riporto lo stato ad OFF rimane ugualmente acceso per i suoi 3 minuti e poi si spegne.
Quando si è spento se dallo stato OFF ritorno allo stato ON il led non si accende piu,per farlo riaccendere devo staccare/attaccare l'alimentazione di arduino..



---------------
Non è impossibile se è fattibile!

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 16/05/2017 21:06:46



Io ho fatto solo una parte del codice, è ovvio che devi modificare anche il "Case 0" per far si che si resettino/spegngano le variabili/attuatori...

Provaci tu, poi posta e poi correggiamo, ok ?


P.S. Lo sai che non indovini mai una "e" al posto di una "è" così come un "o" da un "ho" ???

Elix



---------------
C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 16/05/2017 21:12:47


CITAZIONE

Io ho fatto solo una parte del codice, è ovvio che devi modificare anche il "Case 0" per far si che si resettino/spegngano le variabili/attuatori...

Provaci tu, poi posta e poi correggiamo, ok ?



Ok ci provo

CITAZIONE
P.S. Lo sai che non indovini mai una "e" al posto di una "è" così come un "o" da un "ho" ???


Hai ragione, ma l'italiano lo parlo da quando mi sono trasferito in friuli e anche con questo sono autodidatta



---------------
Non è impossibile se è fattibile!

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 16/05/2017 21:33:10

?? E perchè di dove sei ???



---------------
C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 16/05/2017 21:47:26

sono pugliese,ho sempre parlato il dialetto



---------------
Non è impossibile se è fattibile!

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 17/05/2017 11:36:00

Bene una buona notizia, ho testato il firmware è sembra funzionare tutto,testate tutte le uscite, temperature e gl'interrupt(quando si aziona l'interrupt pero bisogna spegnere e accendere la scheda).Ho risolto anche con la libreria per arduino uno e il problema della lentezza del display era dovuta a while,lo eliminitato è va benissimo. Per il discorso dei delay(500) se li elimino o uso millis il sistema si rallenta(cioè aumenta/diminuisce in piu tempo),se lascio il delay invece va bene.
Questo un piccolo videoLINK il led giallo è l'accenditore quello rosso è la coclea.

Questo è il codice

#include "DHT.h"                 // DHT & AM2302 library
#include "Nextion.h"             //librearia nextion
#include <SoftwareSerial.h>      //libreria seriale
#include <OneWire.h>             //libreria per ds18b20
#include <DallasTemperature.h>   //libreria per conversione valore
#include "max6675.h"

int ktcSO = 44;                  //sonda fumi max6675
int ktcCS = 45;
int ktcCLK = 46;

MAX6675 ktc(ktcCLK, ktcCS, ktcSO);

#define ONE_WIRE_BUS 12          // Il terminale data del sensore è connesso alla porta 12 di Arduino
#define DHTTYPE DHT22            // DHT 22  (AM2302)
#define aspiratore 4             //imposto il pin 4 per l'aspiratore
#define coclea 5                 //imposto il pin 5 per la coclea
#define circolatore 6            //imposto il pin 6 per il circolatore
#define ventola 7                //imposto il pin 7 per la ventola
#define accenditore 8            //imposto il pin 8 per l'accenditore
#define DHTPIN 9
#define stato 13
SoftwareSerial HMISerial(10, 11);// Nextion TX to pin 10 and RX to pin 11 of Arduino`

OneWire oneWire(ONE_WIRE_BUS);   // Imposto la comunicazione oneWire per il ds18b20 h2o

DallasTemperature sensors(&oneWire);

DHT dht(DHTPIN, DHTTYPE);   

int txh2o;                       //temperatura di soglia termocamino
int Tfumi;                       //temperatura rilevata fumi
int umidita;                     //umidità rilevata
int tempamb;                    //temperatura rilevata ambiente
int temph2o;                    //temperatura acqua rilevata
int allTempFumi=150;            //allarme temperatura fumi
int percentuale;                //percentuale aspiratore
int pwmfumi;                    //variabile per l'aspiratore
int Vcoclea=LOW;                //variabile velocita coclea
int Vstato;                     //lettura stato interrutore ON/OFF
int Tcoclea;          //variabile per mandata pellet

unsigned long OldStartCoclea = 0;
unsigned long VarMillis = 0;
unsigned long OldStartAccenditore = 0;
unsigned long DeltaRestartMillis = 0;
boolean PrimoCicloON = true;

void t8PopCallback(void *ptr);   //ambiente page home 0  
void t9PopCallback(void *ptr);   //ambiente page home 0  
void n0PopCallback(void *ptr);   //ambiente page home 0
void n1PopCallback(void *ptr);   //fumi page home 0
void n4PopCallback(void *ptr);   //fumi page home 0
void n2PopCallback(void *ptr);   //bagno page home 0
void n3PopCallback(void *ptr);   //acqua page home 0
void n5PopCallback(void *ptr);   //UMIDITA page home 0
void n30PopCallback(void *ptr);  //bagno page bagno 2
void b31PopCallback(void *ptr);  //bagno - page bagno 2
void b32PopCallback(void *ptr);  //bagno + page bagno 2


NexText t8 = NexText(0, 11, "t8"); 
NexText t9 = NexText(0, 14, "t9"); 
NexNumber n0 = NexNumber(0, 1, "n0"); // ambiente
NexNumber n1 = NexNumber(0, 6, "n1"); // fumi
NexNumber n3 = NexNumber(0, 3, "n3"); //acqua temp rilevata
NexNumber n4 = NexNumber(0, 9, "n4"); //aspiratore
NexNumber n5 = NexNumber(0, 12, "n5");//UMIDITA
NexNumber n30 = NexNumber(1, 3, "n30");//acqua temp impostata
NexButton b31 = NexButton(1, 1, "b31");//set acqua
NexButton b32 = NexButton(1, 2, "b32");//set acqua

char buffer[100] = {0};

NexTouch *nex_listen_list[] = 
{
    &t8,
    &t9,
    &n0,
    &n1,
    &n3,
    &n4,
    &n5,
    &n30,
    &b31,
    &b32,
    NULL
};

void t8PopCallback(void *ptr)
{
   
}
void t9PopCallback(void *ptr)
{
   
}
 void n0PopCallback(void *ptr)
{
    
}
void n1PopCallback(void *ptr)
{
    
}
 void n3PopCallback(void *ptr)
{
   
}
void n4PopCallback(void *ptr)
{
    
}
void n5PopCallback(void *ptr)
{
    
}
 void n30PopCallback(void *ptr)
{
  
}
void b31PopCallback(void *ptr)      //h2o termocamino
{
    dbSerial.flush();
    txh2o -= 1;
    n30.setValue(txh2o);
    delay(500);   
}
void b32PopCallback(void *ptr)     //h2o termocamino
{ 
    dbSerial.flush();
    txh2o += 1;
    n30.setValue(txh2o);
    delay(500);      
}


void setup(void)
{
    attachInterrupt(0, interruptPressostato, RISING);
    attachInterrupt(1, interruptTermostato, RISING);
    
    HMISerial.begin(9600);
    dht.begin();
    sensors.begin();
    txh2o=30;                               //temperatura di soglia acqua termocamino
    
    nexInit();
    t8.attachPop(t8PopCallback);
    t9.attachPop(t9PopCallback);
    n0.attachPop(n0PopCallback);   
    n1.attachPop(n1PopCallback); 
    n3.attachPop(n3PopCallback); 
    n4.attachPop(n4PopCallback);
    n5.attachPop(n5PopCallback);
    n30.attachPop(n30PopCallback);
    b31.attachPop(b31PopCallback);
    b32.attachPop(b32PopCallback);
     
    pinMode(aspiratore,OUTPUT);
    pinMode(coclea,OUTPUT);
    pinMode(circolatore,OUTPUT);
    pinMode(ventola,OUTPUT);
    pinMode(accenditore,OUTPUT);
    pinMode(stato,INPUT);
 
    delay(1000);
}

void loop(void){
   
  Vstato=digitalRead(stato);              //variabile pin 12 per conoscere lo stato di acceso/spento 
  
  nexLoop(nex_listen_list);
  
  Tfumi=ktc.readCelsius();
  umidita = dht.readHumidity();           //leggo umidita ambiente
  tempamb = dht.readTemperature();        //leggo temperatura ambiente
  sensors.requestTemperatures(); 
  temph2o =sensors.getTempCByIndex(0);    //leggo il sensore dell'acqua del termocamino
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////// 
 
  if(Vstato==HIGH){
     if(Tfumi<allTempFumi){               // verifica se le condizioni sono vere procedo con:
       t9.setText("ON");
       VarMillis = millis();
       
     if(PrimoCicloON){                   // se è la prima volta che entro nello stato ON
       PrimoCicloON = false;
       OldStartAccenditore = VarMillis;
       DeltaRestartMillis = 0;
      } 
      
     if(OldStartAccenditore > VarMillis){  // se millis si resetta (dopo circa 50 gg)
        DeltaRestartMillis = 4294967295 - OldStartAccenditore;
        OldStartAccenditore = 0;
      }
      
     if(VarMillis + DeltaRestartMillis - OldStartAccenditore < 180000){    // se non sono trascorsi 3 minuti
       digitalWrite(accenditore, HIGH);
      }
  else{
        digitalWrite(accenditore, LOW);
      }
      if (temph2o<txh2o){ 
         pwmfumi=255; 
      }
  else{
         pwmfumi=127,5;
      }
       
         percentuale = map(pwmfumi,0,254,0, 100);
         digitalWrite(circolatore,HIGH);
         digitalWrite(ventola,HIGH);
         analogWrite(aspiratore,pwmfumi);
     
      if (temph2o<txh2o){
         Tcoclea=600;
      }
  else{
         Tcoclea=1800;
      }
  
   ///////////////////////////////////////////////////////////////////////////////////////////  
      
      if (VarMillis  + DeltaRestartMillis - OldStartCoclea > Tcoclea ){
          OldStartCoclea = VarMillis;  //Tiene in memoria l'ultima accensione

      if (Vcoclea == LOW){
          Vcoclea = HIGH;
 }else{
          Vcoclea = LOW;
      }
         digitalWrite(coclea, Vcoclea);
     }}    
    else{
       t9.setText("ALLARME TEMP FUMI");
       digitalWrite(aspiratore,LOW);
       digitalWrite(circolatore,HIGH);
       digitalWrite(ventola,LOW);
       digitalWrite(accenditore,LOW);
       digitalWrite(coclea,LOW);
       percentuale =0;
       
     }}
 else if(Vstato==LOW){
      if(Tfumi<40){
        t9.setText("OFF");
        digitalWrite(aspiratore,LOW);
        digitalWrite(circolatore,LOW);
        digitalWrite(ventola,LOW);
        digitalWrite(accenditore,LOW);
        digitalWrite(coclea,LOW);
        PrimoCicloON = true;
        percentuale=0;
     }
   else{
     if(coclea==HIGH){
       digitalWrite(coclea,LOW);
     }
       t9.setText("SPEGNIMENTO");
       PrimoCicloON = true;
       digitalWrite(accenditore,LOW);
       digitalWrite(circolatore,HIGH);
       digitalWrite(ventola,HIGH);
       analogWrite(aspiratore,255);
       percentuale=100;
      
     }}
  
      n0.setValue(tempamb);
      n5.setValue(umidita);
      n1.setValue(Tfumi);
      n4.setValue(percentuale);
      n3.setValue(temph2o);
      n30.setValue(txh2o);
    
      dbSerial.flush();//pulisci la seriale
      delay(500);
     }
     
 void interruptPressostato(){
      t9.setText("MANCA DEPRESSIONE");
      digitalWrite(coclea, LOW);
      digitalWrite(aspiratore, LOW);
      digitalWrite(circolatore, LOW);
      digitalWrite(ventola, LOW);
      digitalWrite(accenditore, LOW);
}

 void interruptTermostato(){
      t9.setText("ALLARME TEMPERATURA");
      digitalWrite(coclea, LOW);
      digitalWrite(aspiratore, LOW);
      digitalWrite(circolatore, LOW);
      digitalWrite(ventola, LOW);
      digitalWrite(accenditore, LOW);
}
    



---------------
Non è impossibile se è fattibile!

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 18/05/2017 07:33:41

Ciao Elix hai avuto modo di guardare questo codice? Cosa ti sembra?Dove miglioreresti tu?
Lo tenuto acceso tutto ieri e continuato a fare diverse prove e per il momento sembrerebbe andare bene,ma sentire la tua opinione,mi farebbe piacere.

Volevo aggiungere in questo codice un'altra sonda max6675,una che legge la temperatura fumi e l'altra nella camera di combustione,ma come si fa?

#include "max6675.h"

int ktcSO = 44; //sonda fumi max6675
int ktcCS = 45;
int ktcCLK = 46;

MAX6675 ktc(ktcCLK, ktcCS, ktcSO);

E stessa cosa per il ds18b20,ne vorrei aggiungere un'altro per il puffer,quando ho provato la lettura dei ds18b20 era identica tra di loro,cioè se scaldo la solda numero1 a 30°,sul display anche la sonda numero 2 mi legge sempre 30°..
Mi puoi indirizzare sulla strada giusta?



---------------
Non è impossibile se è fattibile!

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 28/05/2017 11:46:50

Io sto andando avantiLINK. Funziona tutto,ma c'e un ma! lm7805 appena accendo scalda tantissimo e dopo 5 minuti inizia a oscillare la tensione da 3v a 5v e poi arduino si blocca. Ha cosa è dovuto questo problema? C'e un corto? Ma se c'e il corto non dovrebbe accendersi neanche o sbaglio?



Immagine Allegata: 20170528_114100.jpg
 
ForumEA/Q/20170528_114100.jpg



---------------
Non è impossibile se è fattibile!

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 28/05/2017 11:52:54

è corretta questa parte di schema?Cioè i 2 regolatori (10v e 5v) possono avere la stessa massa?



Immagine Allegata: SCHEMA.PNG
 
ForumEA/Q/SCHEMA_4.PNG



---------------
Non è impossibile se è fattibile!

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 28/05/2017 11:58:28

Aggiungo un'altro dettaglio, con la scheda tutta assemblata tra +5v e GND ho 430ohm.Tra +10V e GND 10K..



---------------
Non è impossibile se è fattibile!

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 29/05/2017 07:44:53

E vabbe se non interessa piu a nessuno la chiudiamo qui,non c'e problema!



---------------
Non è impossibile se è fattibile!

 

Riccardo

Avatar
GigaWatt


Gruppo:Utente
Messaggi:2915

Stato:



Inviato il: 29/05/2017 08:27:26

Ma quanto è l'assorbimento sui due alimentatori,il trasformatore è adeguato al suo utilizzo?Quei diodi indicati nello schema(1N4148) non vanno bene!Sono diodi per piccoli segnali non per raddrizzatori



---------------
Q.CELLS Q.PEAK 4575W sud-est
Solar Frontier CIS 850W sud-ovest
Inverter PIP5048MST
Batterie:LifePo4 Seplos MASON-48280-DIY EVE280AK 28,6 kWh
Scaldabagno Ferroli 30l 1500w
Scaldabagno Ariston 80l 1200w

 
 InizioPagina
 

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

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum