Se sei già registrato           oppure    

Orario: 14/05/2024 20:54:54  

 

Energia Alternativa ed Energia Fai Da Te > Arduino

VISUALIZZA L'ALBUM

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


Progetto controllo
FinePagina

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 02/06/2016 07:01:05

Non funziona essenzialmente perchè nel codice ho commesso un errore, non si scrive (P1==HIGH), si scrive (digitalRead(P1) == HIGH); Ora ho sistemato il codice ed ho aggiunto un debug sulla porta seriale, così potrai verificare il funzionamento della lettura degli impulsi.

Prima di aggiungere le istruzioni a tutto il resto ti consiglio di provare il listato da solo.

La mia schedina fotoled funziona in questo modo: è normalmente in stato HIGH, all'impulso va in LOW, non so come funziona la tua, nel caso in cui funzionasse al contrario devi modificare le istruzioni: (digitalRead(sensLamp) == LOW) in (digitalRead(sensLamp) == HIGH).

Buon lavoro.


#define LED 6 //led lettura abilitata
#define sensLamp 8 //sensore fotodiodo
unsigned long T1;
unsigned long T2;
unsigned long T3;
const int P1 = 7; //pulsante per misura
byte blocco_letture;
int n_letture;
float kw; // consumo istantaneo
float Tkw; //totale consumo
float MTkw; // media consumo
float Tempo;



void setup() {
 
 Serial.begin(115200);
  pinMode(LED, OUTPUT);
  pinMode(sensLamp, INPUT);
  pinMode(P1, INPUT);
  T1 = 0;
  T2 = 0;
  T3 = 0;
  n_letture = 0;
  blocco_letture = 0;
  
}

void loop() {

  if (digitalRead(P1) == HIGH){n_letture = 0;  T1=0; T2=0; T3=0; Tempo = 0; kw = 0; Tkw = 0; MTkw = 0; delay(300); misura(); }
  Serial.print("letture: "); Serial.print(n_letture); Serial.print("   kW "); Serial.print(kw); Serial.print("   MTkw "); Serial.println(MTkw);
  
}

void misura(){
   
   Serial.println("ingresso");delay(300);
   digitalWrite(LED, HIGH);
   blocco_letture = 0;
  while (digitalRead(P1) != HIGH){ 
                     switch (blocco_letture) {
                                        case 0: { if (digitalRead(sensLamp) == LOW){T1 = millis(); 
                                                  Serial.print("entro T1 ");Serial.println(T1);
                                                  blocco_letture = 1;delay(300);}}
                                        
                                        case 1: {
                                        
                                        if (digitalRead(sensLamp) == LOW){n_letture ++;
                                                 Serial.println(n_letture);Serial.print("T1 ");Serial.println(T1);
                                                 T2 = millis();
                                                 Serial.print("T2 ");Serial.println(T2);
                                                 T3 = (T2 - T1); 
                                                 Tempo = T3;
                                                 Serial.print("T3 ");Serial.println(T3);
                                                 kw = 3600/Tempo; Tkw = Tkw + kw; MTkw = Tkw / n_letture; delay(300);T1 = T2; T2 = 0; T3 = 0;Tempo=0;
                                                 Serial.print("kW");Serial.println(kw); Serial.print("MTkw"); Serial.println(MTkw);}}
                                        
                                             }
                     }
  Serial.println("uscita");
  digitalWrite(LED, LOW); delay(300);
  
  }
      
  





Immagine Allegata: schermata.png
 
ForumEA/L/schermata.png



Modificato da calcola - 02/06/2016, 08:54:02


---------------
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: 02/06/2016 07:11:03

Come vedi dalla schermata allegata, ora il programmino funziona.

Se hai altri problemi chiedi pure, penso che troverai qualcuno disposto ad aiutarti, io prima del prossimo lunedì sera io non potrò esserti d'aiuto.



---------------
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.

 

Kroko
KiloWatt


Gruppo:Utente
Messaggi:101

Stato:



Inviato il: 03/06/2016 16:32:23

Ragazzi progetto concluso almeno per ora non mi resta che calibrare il tutto
Volevo solo ringraziare tutti per l'aiuto che mi avete dato
Grazie mille

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 03/06/2016 16:35:55

Faccine/eek.gif Faccine/eek.gif Faccine/eek.gif Faccine/eek.gif

Ma stai scherzando ??? Vorresti dire: "arrivederci e grazie" ???

Ma come chiedi aiuto al forum e non condividi schemi, codice, nulla ???

Cioè ci tratti come una mucca da spremere ???

Spero cambi idea... Elix



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

 

Kroko
KiloWatt


Gruppo:Utente
Messaggi:101

Stato:



Inviato il: 03/06/2016 20:33:22

ci avete creduto...
vi ho messo alla prova per capire se vi eravate affezionati
ma da come vedo no

 

Kroko
KiloWatt


Gruppo:Utente
Messaggi:101

Stato:



Inviato il: 03/06/2016 20:34:00


#include "DHT.h" // INCLUDO LIBRERIA PER SENSORI DHT





//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//STRINGHE DISPLAY LCD CON MODULO I2C
#include <Wire.h> 
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); //PER IL DISPLAY 2X16 è IDONEO IL VALORE 0X3F PER IL 4X20 è 0X27
const int BACKLIGH_PIN = 10; 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//STRINGA PHOTOLED
#define LED 6          //LED LETTURA ABILITATA
#define sensLamp 3     //SENSORE FOTODIODO
unsigned long T1;
unsigned long T2;
unsigned long T3;
const int P1 = 9;      //PULSANTE ABILITAZIONE MISURA
byte blocco_letture;
int n_letture;
float kw;              //CONSUMO ISTANTANEO
float Tkw;             //CONSUMO TOTALE
float MTkw;            //CONSUMO MEDIO
float Tempo;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//STRINGHE WATTMETRO
int OffsetPin = A3; 
int TensionePin = A1; 
int CorrentePin_1 = A2; 
//Nuovo_Fattore_Conversione=Valore_Reale/Valore_Arduino*Fattore_Conversione_Attuale 
float Fattore_Conversione_Tensione = 0.61054; //da calcolare 
float Fattore_Conversione_Corrente_1 = 0.302; //da calcolare 
float TensioneRMS ; 
float CorrenteRMS_1 ; 
float CorrenteRMS_2 ; 
float PotenzaAttiva_1; 
float PotenzaAttiva_2; 
float PotenzaApparente_1; 
float PotenzaApparente_2; 
float FattorediPotenza_1; 
float FattorediPotenza_2;
float forcent;
float XXX;
float diff;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//STRINGHE SENSORI TEMPERATURA DHT11
#define DHTPIN0 2                  // PIN DOVE è CONNESSO IL SENSORE DHT11 N°1 (TEMP. ESTERNA)
#define DHTPIN1 4                  // PIN DOVE è CONNESSO IL SENSORE DHT11 N°2 (TEMP. TR ALTERNATA)
#define DHTPIN2 5                  // PIN DOVE è CONNESSO IL SENSORE DHT11 N°3 (TEMP. TR CONTINUA)
#define DHTTYPE DHT11              // DEFINISCO IL TIPO DI SENSORE 
DHT dht0(DHTPIN0, DHTTYPE);        // SELEZIONA PIN E TIPO DEL SENSORE DHT11 N°1
DHT dht1(DHTPIN1, DHTTYPE);        // SELEZIONA PIN E TIPO DEL SENSORE DHT11 N°2
DHT dht2(DHTPIN2, DHTTYPE);        // SELEZIONA PIN E TIPO DEL SENSORE DHT11 N°3
float h0 = dht0.readTemperature(); // imposto la variabile h0 per la lettura del valore di dht0
float h1 = dht1.readTemperature(); // imposto la variabile h1 per la lettura del valore di dht1
float h2 = dht2.readTemperature(); // imposto la variabile h2 per la lettura del valore di dht2


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() { 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  pinMode(13, OUTPUT); //PIN LED GIALLO SEGNALAZIONE TEMPERATURA TR ALTERNATA 0<T<29
  pinMode(12, OUTPUT); //PIN LED ROSSO SEGNALAZIONE TEMPERATURA TR ALTERNATA  T>=30
  pinMode(11, OUTPUT); //PIN LED GIALLO SEGNALAZIONE TEMPERATURA TR CONTINUA  T>=30
  pinMode(10, OUTPUT); //PIN LED ROSSO SEGNALAZIONE TEMPERATURA TR CONTINUA  T>=30



//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//STRINGA PHOTOLED
  pinMode(LED, OUTPUT);      
  pinMode(sensLamp, INPUT);
  pinMode(P1, INPUT);
  T1 = 0;
  T2 = 0;
  T3 = 0;
  n_letture = 0;
  blocco_letture = 0;
  Serial.begin(115200);

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  dht0.begin(); //FAI PARTIRE IL SENSORE DHT11 N°1
  dht1.begin(); //FAI PARTIRE IL SENSORE DHT11 N°2
  dht2.begin(); //FAI PARTIRE IL SENSORE DHT11 N°3
  
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//STRINGHE DISPLAY LCD CON MODULO I2C
  pinMode(BACKLIGH_PIN, OUTPUT); 
  digitalWrite(BACKLIGH_PIN, HIGH); 
  lcd.init();                      // INIZIALIZZA IL MODULO LCD 
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0); 
  lcd.print("ZeraSim Project"); //SCRIVI SULLA PRIMA RIGA
  lcd.setCursor(0,1); 
  lcd.print("VERSIONE FV 1.3"); //SCRIVI SULLA SECONDA RIGA
  delay(5000); 
  lcd.clear(); 
  ADCSRA&=0X90+ 0b101; //Setta ADC prescaler a 32 
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//STRINGA PHOTOLED
if (digitalRead(P1) == HIGH){n_letture = 0;  T1=0; T2=0; T3=0; Tempo = 0; kw = 0; Tkw = 0; MTkw = 0; delay(300); misura(); }
  Serial.print("letture: "); Serial.print(n_letture); Serial.print("   kW "); Serial.print(kw); Serial.print("   MTkw "); Serial.println(MTkw);
  
{delay(300);
wattmetro();}


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
//STRINGHE WATTMETRO 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//STRIGHE DISPLAY
{
  lcd.setCursor(0, 0);             //IMPOSTO IL PUNTO SUL DISPLAY
  lcd.print(TensioneRMS,0);        //IMPOSTO IL VALORE DA LEGGERE SENZA VIRGOLA
  lcd.print("V ");                 //IL VALORE SARà SEGUITO DALLA LETTERA V
  lcd.setCursor(5, 0);             //IMPOSTO IL PUNTO SUL DISPLAY
  lcd.print(CorrenteRMS_1,2);      //IMPOSTO IL VALORE DA LEGGERE CON UNA CIFRA DOPO LA VIRGOLA
  lcd.print("A ");                 //IL VALORE SARà SEGUITO DALLA LETTERA A
  lcd.setCursor(11,0);             //IMPOSTO IL PUNTO SUL DISPLAY
  lcd.print(PotenzaAttiva_1,0);    //IMPOSTO IL VALORE DA LEGGERE SENZA VIRGOLA
  lcd.print("W ");                 //IL VALORE SARà SEGUITO DALLA LETTERA W
  lcd.setCursor(16,0);             //IMPOSTO IL PUNTO SUL DISPLAY
  lcd.print(FattorediPotenza_1,1); //IMPOSTO IL VALORE DA LEGGERE CON UNA CIFRA DOPO LA VIRGOLA
  lcd.print("");                   //
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
//ACCENSIONE O MENO DEI LED DI SEGNALAZIONE LUMINOSA DELLA TEMPERATURA
  if (28<dht1.readTemperature()<29){    // se il sensore h1 rileva una determinata temperatura accende LED GIALLO
    digitalWrite (13, HIGH);
  }
  if (dht1.readTemperature()>=30){      // se il sensore h1 rileva una determinata temperatura accende LED ROSSO
    digitalWrite (12,HIGH);
  }
  else{                                 //ALTRIMENTI IL LED ROSSO RESTA SPENTO
    digitalWrite (12,LOW);
  }
  
  if (28<dht2.readTemperature()<29){    // se il sensore H2 rileva una determinata temperatura accende LED GIALLO
    digitalWrite (11, HIGH);
  }
  if (dht2.readTemperature()>=30){      // se il sensore H2 rileva una determinata temperatura accende LED ROSSO
    digitalWrite (10,HIGH);
  }
  else{                                 //ALTRIMENTI IL LED ROSSO RESTA SPENTO
    digitalWrite (10,LOW);
  }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//LETTURA E STAMPA SU LCD DEI VALORI DI TEMPERATURA
  float h0 = dht0.readTemperature();
  float h1 = dht1.readTemperature();
  float h2 = dht2.readTemperature();

  lcd.setCursor(0, 1);             //PRENDO COME RIFERIMENTO IL PUNTO SULLA 1A STRINGA DELLO SCHERMO LCD
  lcd.print(h0,0);                 //STAMPO SU LCD IL VALORE DEL SENSORE h0
  lcd.print("EXT");  //IL VALORE SARà SEGUITO DALLA LETTERA E
  lcd.setCursor(6, 1);             //PRENDO COME RIFERIMENTO IL PUNTO SULLA 1A STRINGA DELLO SCHERMO LCD
  lcd.print(h1,0);                 //STAMPO SU LCD IL VALORE DEL SENSORE h1
  lcd.print("CA");                  //IL VALORE SARà SEGUITO DAL SIMBOLO ^
  lcd.setCursor(11, 1);             //PRENDO COME RIFERIMENTO IL PUNTO SULLA 1A STRINGA DELLO SCHERMO LCD
  lcd.print(h2,0);                 //STAMPO SU LCD IL VALORE DEL SENSORE h2
  lcd.print("CC");  
  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //photoled

  lcd.setCursor(0, 2);             //PRENDO COME RIFERIMENTO IL PUNTO SULLA 1A STRINGA DELLO SCHERMO LCD
  lcd.print((kw*1000),0);          //STAMPO SU LCD IL VALORE DELLA POTENZA IN WATT
  lcd.print("W");
  lcd.setCursor(0, 3);             //PRENDO COME RIFERIMENTO IL PUNTO SULLA 1A STRINGA DELLO SCHERMO LCD
  lcd.print(diff,2);            //STAMPO SU LCD IL VALORE DELLA PERCENTUALE DI ERRORE DELLE MISURAZIONI
  lcd.print("%");  
  
  
  forcent = (PotenzaAttiva_1/kw)*100;      //FUNZIONE PER IL CALCOLO DELL'ERRORE PERCENTUALE
  XXX= ((PotenzaAttiva_1*100)/kw);
  diff=(100-XXX);
  
}
void misura(){                                                             //FUNZIONE PER FAR FUNZIONARE IL PHOTOLED ALLA PRESSIONE DEL PULSANTE P1

Serial.println("ingresso");delay(300);
   digitalWrite(LED, HIGH);
   blocco_letture = 0;
  while (digitalRead(P1) != HIGH){ 
     switch (blocco_letture) {
       case 0: { if (digitalRead(sensLamp) == LOW){T1 = millis(); 
         Serial.print("entro T1 ");Serial.println(T1);
          blocco_letture = 1;delay(300);}}
                                        
       case 1: {                                        
        if (digitalRead(sensLamp) == LOW){n_letture ++;
        Serial.println(n_letture);Serial.print("T1 ");Serial.println(T1);
        T2 = millis();
        Serial.print("T2 ");Serial.println(T2);
        T3 = (T2 - T1); 
        Tempo = T3;
        Serial.print("T3 ");Serial.println(T3);
        kw = 3600/Tempo; Tkw = Tkw + kw; MTkw = Tkw / n_letture; delay(300);T1 = T2; T2 = 0; T3 = 0;Tempo=0;
        Serial.print("kW");Serial.println(kw); Serial.print("MTkw"); Serial.println(MTkw);}}
                                        
        }
   }
   
  Serial.println("uscita");
  digitalWrite(LED, LOW); delay(300);  
}


void wattmetro(){                  //FUNZIONE PER TENERE IN STAMPA SU LCD I VALORI DI V,A,W E COSFI  
  float SommaV=0; 
  float SommaI_1=0; 
  float SommaP_1=0; 
  int NumCampionamenti = 5;   //CONSIDERO 5 CAMPIONAMENTI
  int Offset = analogRead(OffsetPin); 
  unsigned long start = micros() ; 
  while (micros() < (start + 20000)){ 
    float Tensioneinst = (analogRead(TensionePin)-Offset)*Fattore_Conversione_Tensione; 
    float Correnteinst_1 = (analogRead(CorrentePin_1)-Offset)*Fattore_Conversione_Corrente_1; 
    SommaV += pow(Tensioneinst,2); 
    SommaI_1 += pow(Correnteinst_1,2); 
    SommaP_1 += (Tensioneinst*Correnteinst_1); 
    NumCampionamenti++; 
  } 
  TensioneRMS = sqrt(SommaV / NumCampionamenti); 
  CorrenteRMS_1 = sqrt(SommaI_1 / NumCampionamenti); 

  if (CorrenteRMS_2 < 0.10) {//soglia minima 
    CorrenteRMS_2=0; 
    PotenzaAttiva_1 = SommaP_1/ NumCampionamenti; 
    PotenzaApparente_1 = TensioneRMS * CorrenteRMS_1; 
    FattorediPotenza_1 = PotenzaAttiva_1/PotenzaApparente_1;
  
  }
}

 

Kroko
KiloWatt


Gruppo:Utente
Messaggi:101

Stato:



Inviato il: 03/06/2016 20:39:17

questo è il programma che abbiamo creato fin ora
ciò che vorrei migliorare sono le letture del wattmetro poiché sono molto ballerine ad esempio la tensione varia troppo velocemente e varia di diversi valori arrivando addirittura ad aumentare o diminuire di 10volt
cioè mi ritrovo una tensione che in pochi secondi mi fa tipo questi scatti: 230/235/227/217/234/241...
lo stesso discorso vale anche per la corrente
cio mi sballa tutta la misurazione

 

Kroko
KiloWatt


Gruppo:Utente
Messaggi:101

Stato:



Inviato il: 03/06/2016 20:42:50

ho provato ad agire sia sul numero di campionamenti sia sul fattore di conversione ma non ottengo risultati
i valori sono sempre troppo ballerini
Ho provato anche ad inserire nelle stampe su lcd dei valori del wattmetro un delay di 3o4 secondi le cose erano migliorate ma non riuscivo più ad utilizzare il photoled poiche non riuscivo ad attivare la misurazione perché il pulsante P1 sembrava inesistente

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 03/06/2016 20:44:14

CITAZIONE (Kroko, 03/06/2016 20:33:22 ) Discussione.php?213706&9#MSG128

ci avete creduto...
vi ho messo alla prova per capire se vi eravate affezionati
ma da come vedo no




Si... ci avevo creduto...

In ogni caso non è vero che non ci siamo affezionati... certo non essendoci schemi elettrici o altro è un post di non facile comprensione, ma è seguito da me, calcola e altri utenti.

Poi se il progetto va in porto e ne esce fuori un strumento bello e funzionale vedrai che la discussione sarà molto molto seguito...

Ma a che punto sei ? Sei riuscito a risolvere i problemi di lettura ?

Elix



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

 

Kroko
KiloWatt


Gruppo:Utente
Messaggi:101

Stato:



Inviato il: 03/06/2016 20:45:11

a proposito come vi ho accennato ho inserito nel mio progetto 2 ventole per il raffreddamento dei trasformatori è possibile che quando le accendo mi sballano ancor più i valori di tensione e corrente?
eppure non assorbono tanto sono da 0.2A e il TR è da 5A 5V

 

Kroko
KiloWatt


Gruppo:Utente
Messaggi:101

Stato:



Inviato il: 03/06/2016 20:46:15

Purtroppo i problemi ci sono e sono ancora tanti

 

Kroko
KiloWatt


Gruppo:Utente
Messaggi:101

Stato:



Inviato il: 03/06/2016 20:47:10

direi per fortuna in quanto mi sta prendendo talmente tanto che non vedo l'ora di tornare da lavoro per continuare

 

Kroko
KiloWatt


Gruppo:Utente
Messaggi:101

Stato:



Inviato il: 03/06/2016 20:49:09

comunque tornando al progetto idee per migliorare le misure?
non so più cosa provare

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 03/06/2016 20:51:53

Ma se non metti metti un minimo di schema elettrico come possiamo aiutarti ???



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

 

Kroko
KiloWatt


Gruppo:Utente
Messaggi:101

Stato:



Inviato il: 03/06/2016 21:15:04

Se riesco cerco di farlo o stasera o domani

 
 InizioPagina
 

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

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum