| BellaEli
| Inviato il: 31/05/2016 00:39:33
|
Kroko, quello che vuoi fare tu non è semplice come accendere un Led, un minimo di complessità la devi prevedere...
In ogni caso il progetto linkato da Giorgio54 è proprio quello che serve a te, quali sono i punti su cui vuoi chiarimenti ?
Elix
--------------- C'è un limite al fai da te ??? Si, ma lo stabiliamo noi !!!
| | | | Kroko
| Inviato il: 31/05/2016 07:03:30
|
Vi ripeto non essendo ferrato sulla programmazione non so quale parte del codice mi serve e quale no
Poi quello che ho capito fa un campionamento di un ora considerando solo il numero degli impulsi quantizzandoli in 1wh e facendo una media
Non mi avete detto che dovevo considerare sia il numero di impulsi sia il tempo tra un impulso e l'altro? | | | | calcola
| Inviato il: 31/05/2016 08:55:37
|
Quello che posso fare è di scrivere un pezzo del codice, poi tu lo provi e le modifiche/migliorie le facciamo tutti insieme.
Intanto prova ad aggiungere alla scheda questo semplice circuito per comandare il pulsante:
Modificato da calcola - 31/05/2016, 09:05:06
--------------- 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
| Inviato il: 01/06/2016 00:22:44
|
CITAZIONE (calcola, 31/05/2016 08:55:37 )
Quello che posso fare è di scrivere un pezzo del codice, poi tu lo provi e le modifiche/migliorie le facciamo tutti insieme.
Intanto prova ad aggiungere alla scheda questo semplice circuito per comandare il pulsante:
Fatto ora? | | | | Kroko
| Inviato il: 01/06/2016 10:50:25
|
ciao calcola ho preparato questo circuito ora se puoi mi dai il codice ?
grazie | | | | Kroko
| Inviato il: 01/06/2016 12:49:18
|
c'è nessuno ...... | | | | calcola
| Inviato il: 01/06/2016 12:54:51
|
Devi avere pazienza, non ho avuto tempo. Stasera sul tardi inizierò a lavorarci e spero di riuscire a postare qualcosa.
--------------- 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.
| | | | BellaEli
| Inviato il: 01/06/2016 13:00:30
|
Ciao Kroko,
non voglio essere antipatico ma ci devi mettere anche un po' del tuo impegno per il progetto...
Voglio dire, noi siamo qui che ti suggeriamo, ti indichiamo possibili soluzioni, proviamo a correggere errori se ne troviamo ma il lavoro dovresti farlo tu !
Inizia a buttare giù qualche riga di codice, facci capire che almeno sai far accendere un Led con Arduino diversamente occorre che prima prendi familiarità con Arduino...
Dai, non cercare la pappa bella e pronta, cucinala tu e vedrai che sarà più buona !!!
Elix
--------------- C'è un limite al fai da te ??? Si, ma lo stabiliamo noi !!!
| | | | Kroko
| Inviato il: 01/06/2016 13:21:03
|
#include "DHT.h" // INCLUDO LIBRERIA PER SENSORI DHT
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//STRINGHE DISPLAY LCD CON MODULO I2C
#include <Wire.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
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//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;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//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 1 // 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
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
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
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//STRINGHE WATTMETRO
float SommaV=0;
float SommaI_1=0;
float SommaP_1=0;
int NumCampionamenti = 20; //CONSIDERO 20 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;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//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(""); //
lcd.setCursor(16,1); //IMPOSTO IL PUNTO SUL DISPLAY
lcd.print("OK"); //SCRIVO OK
delay (7000); //LO LASCIO PER 7 SECONDI
lcd.setCursor(16,1); //IMPOSTO IL PUNTO SUL DISPLAY
lcd.print("WAIT"); //SCRIVO WAIT
delay(2000); //LO LASCIO PER 2 SECONDI
lcd.setCursor(16, 1); //IMPOSTO IL PUNTO SUL DISPLAY
lcd.print(' '); //LO SOVRASCRIVO CON UNO SPAZIO VUOTO
lcd.setCursor(17, 1); //IMPOSTO IL PUNTO SUL DISPLAY
lcd.print(' '); //LO SOVRASCRIVO CON UNO SPAZIO VUOTO
lcd.setCursor(18, 1); //IMPOSTO IL PUNTO SUL DISPLAY
lcd.print(' '); //LO SOVRASCRIVO CON UNO SPAZIO VUOTO
lcd.setCursor(19, 1); //IMPOSTO IL PUNTO SUL DISPLAY
lcd.print(' '); //LO SOVRASCRIVO CON UNO SPAZIO VUOTO
lcd.setCursor(16, 0); //IMPOSTO IL PUNTO SUL DISPLAY
lcd.print(' '); //LO SOVRASCRIVO CON UNO SPAZIO VUOTO
lcd.setCursor(17, 0); //IMPOSTO IL PUNTO SUL DISPLAY
lcd.print(' '); //LO SOVRASCRIVO CON UNO SPAZIO VUOTO
lcd.setCursor(18, 0); //IMPOSTO IL PUNTO SUL DISPLAY
lcd.print(' '); //LO SOVRASCRIVO CON UNO SPAZIO VUOTO
lcd.setCursor(19, 0); //IMPOSTO IL PUNTO SUL DISPLAY
lcd.print(' '); //LO SOVRASCRIVO CON UNO SPAZIO VUOTO
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//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 LཇMO PUNTO SULLA 1A STRINGA DELLO SCHERMO LCD
lcd.print(h0,0); //STAMPO SU LCD IL VALORE DEL SENSORE h0
lcd.print("E"); //IL VALORE SARà SEGUITO DALLA LETTERA E
lcd.setCursor(4, 1); //PRENDO COME RIFERIMENTO LཇMO PUNTO SULLA 1A STRINGA DELLO SCHERMO LCD
lcd.print(h1,0); //STAMPO SU LCD IL VALORE DEL SENSORE h1
lcd.print("w"); //IL VALORE SARà SEGUITO DAL SIMBOLO ^
lcd.setCursor(8, 1); //PRENDO COME RIFERIMENTO LཇMO PUNTO SULLA 1A STRINGA DELLO SCHERMO LCD
lcd.print(h2,0); //STAMPO SU LCD IL VALORE DEL SENSORE h0
lcd.print("-");
}
Modificato da BellaEli - 01/06/2016, 13:35:54
| | | | Kroko
| Inviato il: 01/06/2016 13:32:08
|
questo è il codice che ho composto fin ora e riesco ad avere il valore della tensione, della corrente, della potenza, cosfi, le temperature dei due trasformatori che vengono anche segnalate tramite led, implemento il sistema di raffreddamento con delle ventole che per scelta vengono attivate manualmente, in più anche se non mi sembra il modo più corretto ho cercato di tenere in stampa su lcd i valori per 7sec in modo da aver eventualmente il tempo di trascriverli | | | | Kroko
| Inviato il: 01/06/2016 13:43:46
|
1)il problema ora è che non so proprio da dove cominciare con il photodiodo
2)un altro dubbio,
che voi sappiate esiste un modo per fermare le scritte su lcd senza fermare il loop di arduino?
cioè fermare le scritte su lcd senza usare il delay?
Modificato da Kroko - 01/06/2016, 13:47:55
| |
| | |
|
Versione Mobile!
|
|
|
|
|
|
|
|
|
|
|