Se sei già registrato           oppure    

Orario: 12/05/2024 21:12:04  

 

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

Vincent
GigaWatt


Gruppo:Utente
Messaggi:1902

Stato:



Inviato il: 26/07/2017 17:16:19

If (ciclo == 5)
{
Qui codice sensori
Ogni 2.5 sec legge i sensori
Se valore 1 = 500 e
Valore 2 > 5
}

poi li puoi mettere in una procedure "void" separata per avere piu ordine



Modificato da Vincent - 26/07/2017, 17:23:45


---------------
SuperSolar
http://forum.saturnoprezzi.com/

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 26/07/2017 17:26:35


CITAZIONE

Non ho capito bene fai 1 sec di accensione e 9 spenti?

si al momento per testare si,dopo faro qualche prova per capire le tempistiche esatte.

Ok benenissimo ora provo vedo che succede



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

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 27/07/2017 10:22:13

Alla grande funziona bene ora lo devo testare sul termo, ancora grazie Vincent



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

 

Vincent
GigaWatt


Gruppo:Utente
Messaggi:1902

Stato:



Inviato il: 27/07/2017 10:35:46

Devi risolvere l apzzeramento dopo 50 giorni vediamo la tua idea



---------------
SuperSolar
http://forum.saturnoprezzi.com/

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 27/07/2017 10:57:48

In che senso? Scrivendo cosi gia dovrebbe essere sufficente
if(OldStartCoclea>millis()) {
OldStartCoclea=millis();
}
Se millis si resetta in automatico diventa minore di OldStartCoclea e viene riportato sempre allo stesso valore di millis, o sbaglio?



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

 

Vincent
GigaWatt


Gruppo:Utente
Messaggi:1902

Stato:



Inviato il: 27/07/2017 11:24:13

Direi che va bene basta non lo metti insieme alla isteuzioni che rallentano cosi non aumenta il gap
Al massimo ogni 49.7 giorni la coclea rimarra ferma 1 sec in piu o uno in meno

Per via della differenza che ce nel codice
Come variabile hai cambiato nome alla procedura della coclea giusto?



---------------
SuperSolar
http://forum.saturnoprezzi.com/

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 27/07/2017 11:29:38


CITAZIONE

Direi che va bene basta non lo metti insieme alla isteuzioni che rallentano cosi non aumenta il gap

Quindi va messo nel loop? non nel void?
CITAZIONE
Al massimo ogni 49.7 giorni la coclea rimarra ferma 1 sec in piu o uno in meno

Bo non importa
CITAZIONE
Come variabile hai cambiato nome alla procedura della coclea giusto?

Si le ho lasciate come erano se no vado in confusione
Cmq dopo ogni sensore ho dovuto riscrivere l'istruzione,perche anche bloccando i sensori quando avveniva la lettura si rallentava lo stesso,ma cosi va benissimo l'importante è che funzioni, al momento è questo
#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 = 52;                  //sonda fumi max6675
int ktcCS = 53;
int ktcCLK = 51;

int CktcSO = 47;                  //sonda camera max6675
int CktcCS = 49;
int CktcCLK = 45;

MAX6675 ktcF(ktcCLK, ktcCS, ktcSO);
MAX6675 ktcC(CktcCLK, CktcCS, CktcSO);

#define ONE_WIRE_BUS_1 12          // Il terminale data del sensore H2O TERMO è connesso alla porta 12 di Arduino
#define ONE_WIRE_BUS_2 3          // Il terminale data del sensore H2O PUFFER è 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

SoftwareSerial HMISerial(10, 11);// Nextion TX to pin 10 and RX to pin 11 of Arduino`

OneWire oneWire_in(ONE_WIRE_BUS_1);
OneWire oneWire_out(ONE_WIRE_BUS_2);

DallasTemperature sensor_inhouse(&oneWire_in);
DallasTemperature sensor_outhouse(&oneWire_out);

DHT dht(DHTPIN, DHTTYPE);   

int txh2o;                      //temperatura di soglia termocamino
int Th2oMax;                     //temperatura di soglia + 6 si massima
int Tfumi;                      //temperatura rilevata fumi
int Tcamera;                    //temperatura rilevata camera combustione
int umidita;                    //umidità rilevata
int tempamb;                    //temperatura rilevata ambiente
int temph2o;                    //temperatura acqua rilevata
int tempPuffer;                 //temperatura rilevata puffer
int allTempFumi=200;            //allarme temperatura fumi
int percentuale;                //percentuale aspiratore
int pwmfumi;                    //variabile per l'aspiratore
int Vcoclea=LOW;                //variabile velocita coclea
int Vstato=0;                     //lettura stato interrutore ON/OFF
int TcocleaOn;                    //variabile per mandata pellet ON
int TcocleaOff;                    //variabile per mandata pellet Off
int valCoclea=1;                //variabile per capire se in stato di accensione
int TempOk=1;                  //variabile per conoscere lo stato dell'acqua

unsigned long OldStartCoclea = 0;
unsigned long OldStartAccenditore = 0;

boolean PrimoCicloON = true;
boolean CocleaCicloON =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);   //T.CAMERA COMBUSTIONE page home 0
void n3PopCallback(void *ptr);   //acqua page home 0
void n5PopCallback(void *ptr);   //UMIDITA page home 0
void n6PopCallback(void *ptr);   //TEMPERATURA RILEVATA PUFFER
void n30PopCallback(void *ptr);  //bagno page bagno 2
void b31PopCallback(void *ptr);  //bagno - page bagno 2
void b0PopCallback(void *ptr);  //INTERRUTTORE ON/OFF
void b32PopCallback(void *ptr);  //bagno + page bagno 2


 
NexNumber n0 = NexNumber(0, 1, "n0"); // ambiente
NexNumber n1 = NexNumber(0, 5, "n1"); // fumi
NexNumber n2 = NexNumber(0, 20, "n2"); // T.CAMERA COMBUSTIONE
NexNumber n3 = NexNumber(0, 3, "n3"); //acqua temp rilevata
NexNumber n4 = NexNumber(0, 8, "n4"); //aspiratore
NexNumber n5 = NexNumber(0, 11, "n5");//UMIDITA
NexNumber n6 = NexNumber(0, 13, "n6");//H2O PUFFER
NexNumber n30 = NexNumber(1, 3, "n30");//acqua temp impostata
NexButton b0 = NexButton(0, 22, "b0");//INTERRUTTORE ON/OFF
NexButton b31 = NexButton(1, 1, "b31");//set acqua
NexButton b32 = NexButton(1, 2, "b32");//set acqua

NexText t8 = NexText(0, 11, "t8"); 
NexText t9 = NexText(0, 14, "t9");
NexText t25 = NexText(2, 8, "t25");//CANDELETTA ON/OFF
NexText t26 = NexText(2, 9, "t26");//VENTOLA ON/OFF
NexText t27 = NexText(2, 10, "t27");//POMPA ON/OFF
NexText t28 = NexText(2, 11, "t28");//COCLEA ON/OFF
NexText t29 = NexText(2, 12, "t29");//aspiratore ON/OFF
NexNumber n12 = NexNumber(2, 19, "n12"); // MILLIS
NexNumber n13 = NexNumber(2, 21, "n13"); // TEMPO COCLEA
NexNumber n14 = NexNumber(2, 23, "n14"); // TEMPO CANDELETTA
char buffer[100] = {0};

NexTouch *nex_listen_list[] = 
{
    &t8,
    &t9,
    &t25,
    &t26,
    &t27,
    &t28,
    &t29,
    &n0,
    &n1,
    &n2,
    &n3,
    &n4,
    &n5,
    &n6,
    &n12,
    &n13,
    &n14,
    &n30,
    &b0,
    &b31,
    &b32,
    NULL
};

void t8PopCallback(void *ptr)
{
   
}
void t9PopCallback(void *ptr)
{
   
}
void t25PopCallback(void *ptr)
{
   
}
void t26PopCallback(void *ptr)
{
   
}
void t27PopCallback(void *ptr)
{
   
}
void t28PopCallback(void *ptr)
{
   
}
void t29PopCallback(void *ptr)
{
   
}
 void n0PopCallback(void *ptr)
{
    
}
void n1PopCallback(void *ptr)
{
    
}
void n2PopCallback(void *ptr)
{
    
}
 void n3PopCallback(void *ptr)
{
   
}
void n4PopCallback(void *ptr)
{
    
}
void n5PopCallback(void *ptr)
{
    
}
void n6PopCallback(void *ptr)
{
    
}
void n12PopCallback(void *ptr)
{
    
}
void n13PopCallback(void *ptr)
{
    
}
void n14PopCallback(void *ptr)
{
    
}
 void n30PopCallback(void *ptr)
{
  
}
void b0PopCallback(void *ptr)      //h2o termocamino
{
    dbSerial.flush();
    if(Vstato==0){
    Vstato=1;
    b0.setText("ON");
    }
    else{
    Vstato=0;
    b0.setText("OFF");   
}

}
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(2, interruptDepressostato, RISING);
    attachInterrupt(3, interruptTermostato, RISING);
    attachInterrupt(4, interruptPressostato, RISING);
    
    Serial.begin(9600);
    HMISerial.begin(9600);
    dht.begin();
    sensor_inhouse.begin(); //AVVIO IL PRIMO DS18B20
    sensor_outhouse.begin(); //AVVIO IL SECONDO DS18B20
    txh2o=60;                               //temperatura di soglia acqua termocamino
    
    nexInit();
    t8.attachPop(t8PopCallback);
    t9.attachPop(t9PopCallback);
    t25.attachPop(t25PopCallback);
    t26.attachPop(t26PopCallback);
    t27.attachPop(t27PopCallback);
    t28.attachPop(t28PopCallback);
    t29.attachPop(t29PopCallback);
    n0.attachPop(n0PopCallback);   
    n1.attachPop(n1PopCallback);
    n2.attachPop(n2PopCallback); 
    n3.attachPop(n3PopCallback); 
    n4.attachPop(n4PopCallback);
    n5.attachPop(n5PopCallback);
    n6.attachPop(n6PopCallback);
    n12.attachPop(n12PopCallback);
    n13.attachPop(n13PopCallback);
    n14.attachPop(n14PopCallback);
    n30.attachPop(n30PopCallback);
    b0.attachPop(b0PopCallback);
    b31.attachPop(b31PopCallback);
    b32.attachPop(b32PopCallback);
     
    pinMode(aspiratore,OUTPUT);
    pinMode(coclea,OUTPUT);
    pinMode(circolatore,OUTPUT);
    pinMode(ventola,OUTPUT);
    pinMode(accenditore,OUTPUT);
    
 
    delay(1000);
}

void loop(void){
  if(Vstato==0){
     Vstato=1;
   }
  
  nexLoop(nex_listen_list);
  
 ///////////////////////////////////////////////////////////////////////////////////////////////////// 
 
  if((Vstato==1)&&(TempOk==1)){
   if(temph2o<90){
    if(Tfumi<allTempFumi){    // verifica se le condizioni sono vere procedo con:
       t9.setText("ON");
  
      cocleaPrimoCiclo(); 
      sensori(100);
      accensione();
      
     ////////////////////////////////////////////////////////////////////
   
      if (temph2o<txh2o){ 
         t8.setText("LAVORO");
         pwmfumi=255; 
         TcocleaOn=500;
         TcocleaOff=10000;
      }
     else if(temph2o>txh2o+6){
         pwmfumi=50;
         TcocleaOn=1000;
         TcocleaOff=1500;
         t8.setText("RIPOSO");
      }
    else  if(temph2o>txh2o+10){
         TempOk=0;
         t8.setText("STANDBY TEMP");
      }
      
   else{  
         pwmfumi=127;
         TcocleaOn=500;
         TcocleaOff=500;
         t8.setText("LAVORO MODULA");
      }   
   ////////////////////////////////////////////////////////////////////
         percentuale = map(pwmfumi,0,254,0, 100);
         digitalWrite(circolatore,HIGH);
         digitalWrite(ventola,HIGH);
         analogWrite(aspiratore,pwmfumi);

   ////////////////////////////////////////////////////////////////////
   }else{
       t9.setText("ALLARME TEMP FUMI");
       digitalWrite(aspiratore,LOW);
       digitalWrite(circolatore,HIGH);
       digitalWrite(ventola,LOW);
       digitalWrite(accenditore,LOW);
       digitalWrite(coclea,LOW);
       percentuale =0;
       
     }
   }
  else{
      t8.setText("ALLARME TEMP H2O");
      digitalWrite(aspiratore,LOW);
      digitalWrite(circolatore,HIGH);
      digitalWrite(ventola,LOW);
      digitalWrite(accenditore,LOW);
      digitalWrite(coclea,LOW);
      percentuale =0;
  }
  }
  ////////////////////////////////////////////////////////////////////////////////////////////
 else if((Vstato==0) || (TempOk==0)){
      if(Tfumi<40){
        t9.setText("OFF");
        t8.setText("SPENTO");
        digitalWrite(aspiratore,LOW);
        digitalWrite(circolatore,LOW);
        digitalWrite(ventola,LOW);
        digitalWrite(accenditore,LOW);
        digitalWrite(coclea,LOW);
        PrimoCicloON = true;
        CocleaCicloON = true;
        TempOk=1;
        percentuale=0;
     }
   else{
       t8.setText("SPEGNIMENTO");
       digitalWrite(accenditore,LOW);
       digitalWrite(circolatore,HIGH);
       digitalWrite(ventola,HIGH);
       digitalWrite(coclea,LOW);
       analogWrite(aspiratore,255);
       percentuale=100;
      
     }}
  
      n0.setValue(tempamb);
      n5.setValue(umidita);
      n6.setValue(tempPuffer);
      n1.setValue(Tfumi);
      n2.setValue(Tcamera);
      n4.setValue(percentuale);
      n3.setValue(temph2o);
      n30.setValue(txh2o);
      n12.setValue(millis());
      n13.setValue(OldStartCoclea);
      
       
      dbSerial.flush();//pulisci la seriale
      Th2oMax=txh2o+6;
      
      
     }
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
void cocleaPrimoCiclo(){
  
  if(OldStartCoclea>millis()) {
   OldStartCoclea=millis();
 }
 
  if(CocleaCicloON){ 
     OldStartCoclea = millis();   //Tiene in memoria l'ultima accensione 
     CocleaCicloON=false;
   }
   
   if(valCoclea==1){  //se il termo è in stato di accensione(PrimoCicloON) 
     if ((millis() - OldStartCoclea) < 500 ){ 
         Vcoclea=HIGH;
        }else{
          Vcoclea=LOW;
        }
         if((millis() - OldStartCoclea) > 10000){
           CocleaCicloON=true;
         }
       }else{
          if((millis() - OldStartCoclea) < TcocleaOn ){ 
         Vcoclea=HIGH;
        }else{//altrimenti se il fuoco è gia presente
          Vcoclea=LOW;
        }
         if((millis() - OldStartCoclea) > TcocleaOff){
           CocleaCicloON=true;
         }} 
     
     digitalWrite(coclea, Vcoclea);
} 
void accensione(){
  
  if(OldStartAccenditore > millis()){  // se millis si resetta (dopo circa 50 gg)
    OldStartAccenditore = millis();
     }
      
   if(PrimoCicloON){                   // se è la prima volta che entro nello stato ON
       PrimoCicloON = false;
       OldStartAccenditore = millis();
       valCoclea=1; 
     }
     
   if((millis() - OldStartAccenditore) < 280000){    // se non sono trascorsi 3 minuti
       digitalWrite(accenditore, HIGH);
       t25.setText("ON");
      }
 else{
        digitalWrite(accenditore, LOW);
        valCoclea=0;
        t25.setText("OFF");
      }
}

 void interruptDepressostato(){
      t8.setText("MANCA DEPRESSIONE");
      digitalWrite(coclea, LOW);
      digitalWrite(aspiratore, LOW);
      digitalWrite(circolatore, LOW);
      digitalWrite(ventola, LOW);
      digitalWrite(accenditore, LOW);
      
}

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

void interruptPressostato(){
      t8.setText("MANCA PRESSIONE");
      digitalWrite(coclea, LOW);
      digitalWrite(aspiratore, LOW);
      digitalWrite(circolatore, LOW);
      digitalWrite(ventola, LOW);
      digitalWrite(accenditore, LOW);
      
}
void sensori(long temp){
      cocleaPrimoCiclo();  
      Tfumi=ktcF.readCelsius();
      cocleaPrimoCiclo();   
      umidita = dht.readHumidity();           //leggo umidita ambiente
      cocleaPrimoCiclo(); 
      tempamb = dht.readTemperature();        //leggo temperatura ambiente
      cocleaPrimoCiclo(); 
      sensor_inhouse.requestTemperatures(); //AVVIO LETTURA TEMPERATURA DAL PRIMO SENSORE
      cocleaPrimoCiclo(); 
      sensor_outhouse.requestTemperatures(); //AVVIO LETTURA TEMPERATURA DAL SECONDO SENSORE
      cocleaPrimoCiclo(); 
      temph2o =sensor_inhouse.getTempCByIndex(0);    //leggo il sensore dell'acqua del termocamino
      cocleaPrimoCiclo(); 
      tempPuffer=sensor_outhouse.getTempCByIndex(0);      
}
    



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

 

Vincent
GigaWatt


Gruppo:Utente
Messaggi:1902

Stato:



Inviato il: 27/07/2017 11:45:25

Basta che sia prima di verificare il tempo trascorso
Hai sostituito le variabili a numeri giusto?

A occhio mi sembra giusto
Basta la verifica la fa prima di eseguiree istruzioni con millis()

non sono riuscito a seguirlo fino alla fine



---------------
SuperSolar
http://forum.saturnoprezzi.com/

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 27/07/2017 12:14:12


CITAZIONE

Hai sostituito le variabili a numeri giusto?

Esatto,perche durante l'accensione la coclea deve girare in tempi prestabiliti mentre invece dopo l'accensione l'erogazione del pellet la gestisce in base alla temperatura rilevata e quella impostata.

Si cosi

void accensione(){

if(OldStartAccenditore > millis()){ // se millis si resetta (dopo circa 50 gg)
OldStartAccenditore = millis();
}
.............
codice coclea.............
}
non mi resta che provare sul termo



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

 

Vincent
GigaWatt


Gruppo:Utente
Messaggi:1902

Stato:



Inviato il: 27/07/2017 23:47:20

Perche non ti crei 2 pulsati per registrare la velocita?
A parte che cosi non devi mettere mano al codice magari cambiando tipo di pellet o in giornate umide ti potrebbe essere utile



---------------
SuperSolar
http://forum.saturnoprezzi.com/

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 28/07/2017 07:17:48

Si Vincent è una buona idea, di fatti ho creato una pagina test sul display per vedere fare le regolazioni in manuale e per vedere gli stati ON/OFF



Immagine Allegata: HOME.PNG
 
ForumEA/R/HOME.PNG



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

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 28/07/2017 07:21:20

Questa qua,pero devo finire ancora la programmazione. In piu oggi che potrei andare avanti con il lavoro, non posso perche sono senza corrente fino a questa sera,mi pare che l'enel sta cambiando tutti i tralicci qui in zona.



Immagine Allegata: TEST.PNG
 
ForumEA/R/TEST.PNG



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

 

Vincent
GigaWatt


Gruppo:Utente
Messaggi:1902

Stato:



Inviato il: 28/07/2017 09:55:04

Interessante che programma/display e?
In caso aggiungi l accesso remoto da smartphone se la scheda ha il Wi-Fi
E lo puoi accendere/controllare a distanza
magari prima che arrivi a casa



---------------
SuperSolar
http://forum.saturnoprezzi.com/

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 28/07/2017 11:29:19

Il display si chiana nextion è touch e si puo prohrammare a piacimento con il suo editor nextion. Purtroppo non e wifi, ma piu in la posso aggiungere un modulo su arduino. Si avevo gia chiesto a bolle se quando avra tenpo piu in la, se era possibile creare un interfaccia anche sul pc, non sarebbe male. Ora vediamo la base se funziona dopo ci si puo divertere al meglio



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

 

dani9191

Avatar
GigaWatt


Gruppo:Utente
Messaggi:780

Stato:



Inviato il: 23/09/2017 18:05:21

Ciao ragazzi, ho avuto un'altro problema,sono saltati i pc817 tutti è 3! Da cosa puo dipendere? ho usato per il diodo una resistenza da 330R,puo essere quello il motivo? Questo è lo schema..



Immagine Allegata: schema.PNG
 
ForumEA/R/schema_2.PNG



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

 
 InizioPagina
 

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

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum