Kroko
| Inviato il: 04/06/2016 12:40:34
|
sono fermo ora con questo codice TOTALE
#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.57865; //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 Tensionemax ;
float Tensionemin ;
float Correntemax_1;
float Correntemin_1;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//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();}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//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(forcent,2); //STAMPO SU LCD IL VALORE DELLA PERCENTUALE DI ERRORE DELLE MISURAZIONI
lcd.print("%");
forcent = (PotenzaAttiva_1/kw)*100;
}
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 = 0;
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;
if ( Tensionemax < Tensioneinst ) Tensionemax=Tensioneinst;
if ( Tensionemin > Tensioneinst ) Tensionemin=Tensioneinst;
if ( Correntemax_1 < Correnteinst_1 ) Correntemax_1=Correnteinst_1;
if ( Correntemin_1 > Correnteinst_1 ) Correntemin_1=Correnteinst_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_1 < 0.10) {//soglia minima
CorrenteRMS_1=0;
PotenzaAttiva_1 = SommaP_1/ NumCampionamenti;
PotenzaApparente_1 = TensioneRMS * CorrenteRMS_1;
FattorediPotenza_1 = PotenzaAttiva_1/PotenzaApparente_1;
}
} |