Se sei già registrato           oppure    

Orario: 27/05/2024 00:43:35  

 

Energia Alternativa ed Energia Fai Da Te > Applicazioni E Realizzazioni Pratiche

VISUALIZZA L'ALBUM

Pagine: (18)   1   2   3   4   5   6   7   [8]   9   10   11   12   13   14   15   16   17   18    (Ultimo Msg)


Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
FinePagina

5a2v0
Watt


Gruppo:Utente
Messaggi:66

Stato:



Inviato il: 12/10/2013,09:41

nono, completamente chiuso. Devo provare con una lampadina da 100watt se la trovo cosi da vedere se legge bene il valore anche di quella con lo stesso fattore di conversione.

 

5a2v0
Watt


Gruppo:Utente
Messaggi:66

Stato:



Inviato il: 12/10/2013,15:13

CITAZIONE (ElettroshockNow @ 12/10/2013, 10:02)
Così differente !!!! Pensavo che al massimo avevamo un 10% di differrenza ..
È inutile che ti dica di controllare che il sensore sia ben chiuso ..... a me inizialmente mi era sfuggito aperto faccine/sad.gif .
Ciao

mmmm... nono non va comunque il tutto.. collegando una lampada a incandescenza da 60 watt mi segnala 90 watt poi !!! ci deve essere qualcosa che non va... tu hai trovato qualche soluzione ?

 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 12/10/2013,15:44

CITAZIONE (5a2v0 @ 12/10/2013, 16:13)
ci deve essere qualcosa che non va... tu hai trovato qualche soluzione ?

No faccine/cry.gif ......
Per ora ho aumentato il tempo campionato da 20mS a 200mS e non ho ridotto il prescaler, lasciandolo al valore originale ed ho tarato il tutto con un assorbimento di 3Kw.
Cosi' ho parzialmente tamponato ,ma bisogna trovare una soluzione per l'uso di questi sensori.

Stavo leggendo il codice segnalato da Elia ,forse li' c'è la soluzione definitiva faccine/smile.gif .

Ciao

Ps: vorrei dire W gli ACS ...... ma ho paura faccine/biggrin.gif .....

 

5a2v0
Watt


Gruppo:Utente
Messaggi:66

Stato:



Inviato il: 12/10/2013,20:24

allora... solo ora grazie all'accortezza di un amico sono riuscito a risolvere in parte il problema...

io ho il sensore sct-013-030 (30 ampere) e non il sct-013-000 (100 ampere) !!!

Cosa cambia ? guardando il datasheet, il sensore da 100 (che usano su openenergy) NON HA nessuna resistenza interna quindi io avevo usato le formule di openenergy e mi ero calcolato una resistenza da 105ohm da mettere tra il sensore e la porta analogica !!!

Il sensore da 30ampere mio invece ha già all'interno una res. da 62ohm !!!

Per cui avendo già la resistenza ed essendo quindi (si suppone) tarato per dare a 0 a 1v per la lettura da 0 a 30 ampere, io sfalsavo i parametri avendo un altra resistenza sul circuito !!!

Scollegata quella e impostato 0.166 come fattore di conversione (non poi così lontano dal tuo 0.108) riesco a leggere:
- 24watt per la lampada da 25;
- 57watt per la lampada da 60;
- 84 se entrambe sono accese !!!

Che sia un punto di svolta ?

 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 12/10/2013,21:24

CITAZIONE (5a2v0 @ 12/10/2013, 21:24)
Che sia un punto di svolta ?

Lo spero ... cmq i risultati sono molto incoraggianti faccine/smile.gif .
Quindi la resistenza di shunt è già integrata nel sensore ? ..... io ci son cascato con tutte le scarpe aggiungendone un'altra da 100ohm ..... faccine/biggrin.gif
Grazie
Ps: appena posso metto tutto sotto torchio ..... analizzo tutto sull'oscilloscopio e poi voglio vedere l'onda che vede Arduino ......
Molti test li ho eseguiti con un Mega (quindi un Atmega2560) e senza troppe preoccupazioni li ho trasferiti sull'uno ..... Forse i due convertitori A/D si comportano diversamente quando si modifica la velocità di conversione .....
Bisogna testare

Ciao e nuovamente grazie
ElettroshockNow

 

5a2v0
Watt


Gruppo:Utente
Messaggi:66

Stato:



Inviato il: 13/10/2013,12:30

datasheeets:
- modello 30 A
- modello 100 A

Io i valori che ho letto ieri li ho ottenuti lasciando sempre 20ms e con la stringa che aumenta la velocità...dovrei provare a mettere 200ms e commentare la riga e appena provo ti faccio sapere le letture...

bye

P.s. giusto per non fare copia incolla di un valore, per cercare di capire... faccine/smile.gif
il tuo valore 0.055 che usavi con ACS e 0.108 usato con il tuo SCT, lo hai in qualche modo calcolato o lo hai ottenuto leggendo un carico noto e ricavandoti quindi il fattore di conversione ?

 

5a2v0
Watt


Gruppo:Utente
Messaggi:66

Stato:



Inviato il: 13/10/2013,19:20

se imposto come te 200ms di tempo e levo l'impostazione del prescaler, senza carico mi segna 36 anzichè 0 però la lampada da 25 appena accesa poi mi dice 30 e quella da 60 mi dice qualcosa piu'.... insieme accese mi danno 87 !!!!

Ma xkè 36 senza carico O.o

 

5a2v0
Watt


Gruppo:Utente
Messaggi:66

Stato:



Inviato il: 14/10/2013,16:27

mi rispondo da solo in quanto mi è capitato di leggere questo valore anche con il prescaler impostato a 16mhz.

In pratica, ogni tanto in base a cosa non so, anzichè leggere 508 senza carichi, l'arduino mi legge 509 !!! In questo caso quell' 1 in più moltiplicato 0.166 (fattore di conversione) e poi per 230 (tensione) mi restituisce quel consumo.

La cosa positiva è che se in quel momento accendo la lampada da 25 o da 60 o entrambe, non mi sballa la lettura sommando le lampade al valore letto già senza carico ma mi riporta solo il valore delle lampade !!!

Quindi a questo punto in realtà nel mio caso forse cambia poco tra lasciare il prescaler a default o portarlo a 16mhz !!!

Farò un po di prove e vi faccio sapere...

 

5a2v0
Watt


Gruppo:Utente
Messaggi:66

Stato:



Inviato il: 14/10/2013,20:24

Allego attuale sketch:

CITAZIONE
//Includo la libreria per il corretto funzionamento del display
#include <LiquidCrystal.h>
// Dichiaro i pin del display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Dichiaro il pin a cui sono collegati i bottoni e la variabile in cui viene memorizzato il valore letto dal pin
int buttonPin = A0;
int buttonValue = 0;
//Dichiaro il pin del sensore di corrente, la variabile in cui sarà memorizzato il valore letto dal sensore e una variabile per il test del sensore
int sensorPin = A5;
float sensorValue = 0.00;
int sensorTest = 0;
//Dichiaro il valore dell'offset, ovvero il valore letto da arduino sulla porta del sensore in assenza di carico
#define sensorOffset 510
//Dichiaro le variabili in cui sarà memorizzato il valore di ampere totali assorbiti ed il numero di letture effettuate
float ampere = 0.00;
int numeroCampionamenti = 0;
long inizioCampionamenti = 0;
//Dichiaro la variabile della tensione stabilita a 230V
float tensione = 230.00;
//Dichiaro la variabile per il calcolo del consumo in watt
int consumo = 0;
//Dichiaro i pin del buzzer, dei led e dei relè
int buzzer = 6;
int verde1 = 7;
int verde2 = 8;
int rosso1 = 1;
int rosso2 = 13;
int bagni = 9;
int stanze = 10;
//Dichiaro variabili per memorizzare lo stato (0 o 1) dei relè e dei bottoni
int rele1 = 0;
int rele2 = 0;
int buttonState = 0;
//Variabili per prevenire ritardi ai pulsanti e regolare il refresh del display
#define intervallcd 3000
unsigned long previousMillslcd = 0;
#define interval1 2000
unsigned long previousMills1 = 0;
#define interval2 2000
unsigned long previousMills2 = 0;


void setup() {
//Setta ADC prescaler a 16 Mhz cambiando quindi la velocita delle letture analogiche
ADCSRA&=0X90+ 0b100;
//Definisco la porta seriale per leggere dati dal monitor seriale. NB: causa l'accensione del led sul PIN 1
//Serial.begin(9600);
//Inizializzo il display
lcd.begin(16, 2);
//Imposto i pin dei led, del buzzer e dei relè come uscite digitali
pinMode(verde1, OUTPUT);
pinMode(verde2, OUTPUT);
pinMode(rosso1, OUTPUT);
pinMode(rosso2, OUTPUT);
pinMode(bagni, OUTPUT);
pinMode(stanze, OUTPUT);
pinMode(buzzer, OUTPUT);
//Accendo i due led verdi e tengo spenti i due rossi
digitalWrite(verde1, HIGH);
digitalWrite(verde2, HIGH);
digitalWrite(rosso1, LOW);
digitalWrite(rosso2, LOW);
//I relè sono normalmente chiusi e con HIGH la bobina non viene eccitata
digitalWrite(bagni, HIGH);
digitalWrite(stanze, HIGH);
}


void loop() {
//Eseguo solo una volta all'accensione delle letture a vuoto per l'assestamento dei valori ottenuti dal sensore di corrente
if (sensorTest == 0) {
do {
sensorValue = analogRead(sensorPin);
lcd.setCursor(0,0);
lcd.print("Check in corso...");
lcd.setCursor(0,1);
//Calcolo e scrivo una percentuale sul display in relazione alla seguente equazione
//sensorOffset : 100% = sensorValue : x %
sensorTest = (sensorValue / sensorOffset) * 100;
lcd.print(sensorTest);
lcd.print("% ");
//Riga utilizzata per leggere il valore senza carico in fase di programmazione
//lcd.print(sensorValue);
//Se il sensore legge prima dei 10 secondi il giusto valore di offset, accorcia l'attesa e parte con il vero loop
if (sensorValue == sensorOffset) {
lcd.clear();
break;
}
}
//Sono necessari circa 10 secondi affinchè l'alimentazione e i condensatori forniscano un valore stabile alla linea 5v usata dal sensore
while(millis() < 10000);
sensorTest = 1;
//Note di fine check e test funzionamento buzzer
tone(buzzer, 4699, 125);
delay(160);
noTone(buzzer);
tone(buzzer, 4699, 125);
delay(160);
noTone(buzzer);
}


//Lettura dati del sensore e calcolo della corrente assorbita e del consumo in watt
ampere = 0.00;
numeroCampionamenti = 0;
inizioCampionamenti = millis() ;
do
{
numeroCampionamenti++;
//sensorOffset è la lettura senza carico quindi l'offset e lo sottraiamo alle letture
sensorValue = (analogRead(sensorPin) - sensorOffset);
//Alcune letture potrebbero avere valore negativo per cui noi consideriamo il valore assoluto
ampere+= abs(sensorValue);
}
//20 sono i millisecondi che verranno campionati
while((millis() - inizioCampionamenti) < 20);
//Per ottenere gli ampere reali moltiplichiamo la media di ampere letti nei 20ms per 0.166 che è il fattore di conversione
ampere=(ampere / numeroCampionamenti) * 0.166;
//Infine moltiplichiamo gli ampere per la tensione stabilita per ottenere il consumo in Watt
consumo = ampere * tensione;
//Per evitare letture negative in assenza di carico
if (consumo < 0) consumo = 0;


//Lettura pin dei bottoni e azioni di distacco manuale o ripristino della corrente tramite i relè
buttonValue = analogRead(buttonPin);
if (millis() - previousMills1 > interval1 ) {
previousMills1 = millis();
//Codice che viene eseguito per il bottone relativo alla linea "bagni"
if ((buttonValue >= 150) && (buttonValue <= 200)) {
switch (rele1) {
//Se rele1 == 0 e viene premuto il bottone, bisogna accendere il relativo led rosso, spegnere il verde ed eccitare la bobina del relè
case 0:
//Il codice viene eseguito solo se il bottone nel precedente loop non era già premuto così da doverlo lasciare e ripremere per eseguire un'altra azione
if (buttonState == 0) {
digitalWrite(verde1, LOW);
digitalWrite(rosso1, HIGH);
digitalWrite(bagni, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Distacco manuale");
lcd.setCursor(0,1);
lcd.print("Linea 1 OFF");
analogWrite(buzzer, 20);
delay(1000);
analogWrite(buzzer, 0);
//Cambio lo stato del relè e specifico che il bottone è attualmente premuto
rele1 = 1;
buttonState = 1;
}
break;
//Se rele1 == 1 e viene premuto il bottone, bisogna accendere il relativo led verde, spegnere il rosso e diseccitare la bobina del relè
case 1:
//Il codice viene eseguito solo se il bottone nel precedente loop non era già premuto così da doverlo lasciare e ripremere per eseguire un'altra azione
if (buttonState == 0) {
digitalWrite(verde1, HIGH);
digitalWrite(rosso1, LOW);
digitalWrite(bagni, HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Intervento:");
lcd.setCursor(0,1);
lcd.print("Linea 1 ON");
tone(buzzer, 4699, 125);
delay(160);
noTone(buzzer);
tone(buzzer, 4699, 125);
delay(160);
noTone(buzzer);
//Resetto lo stato del relè e specifico che il bottone è attualmente premuto
rele1 = 0;
buttonState = 1;
}
break;
}
}
}
if (millis() - previousMills2 > interval2 ) {
previousMills2 = millis();
if ((buttonValue >= 800) && (buttonValue <= 900)) {
switch (rele2) {
//Se rele2 == 0 e viene premuto il bottone, bisogna accendere il relativo led rosso, spegnere il verde ed eccitare la bobina del relè
case 0:
//Il codice viene eseguito solo se il bottone nel precedente loop non era già premuto così da doverlo lasciare e ripremere per eseguire un'altra azione
if (buttonState == 0) {
digitalWrite(verde2, LOW);
digitalWrite(rosso2, HIGH);
digitalWrite(stanze, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Distacco manuale");
lcd.setCursor(0,1);
lcd.print("Linea 2 OFF");
analogWrite(buzzer, 20);
delay(1000);
analogWrite(buzzer, 0);
//Cambio lo stato del relè e specifico che il bottone è attualmente premuto
rele2 = 1;
buttonState = 1;
}
break;
//Se rele2 == 1 e viene premuto il bottone, bisogna accendere il relativo led verde, spegnere il rosso e diseccitare la bobina del relè
case 1:
//Il codice viene eseguito solo se il bottone nel precedente loop non era già premuto così da doverlo lasciare e ripremere per eseguire un'altra azione
if (buttonState == 0) {
digitalWrite(verde2, HIGH);
digitalWrite(rosso2, LOW);
digitalWrite(stanze, HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Intervento:");
lcd.setCursor(0,1);
lcd.print("Linea 2 ON");
tone(buzzer, 4699, 125);
delay(160);
noTone(buzzer);
tone(buzzer, 4699, 125);
delay(160);
noTone(buzzer);
//Resetto lo stato del relè e specifico che il bottone è attualmente premuto
rele2 = 0;
buttonState = 1;
}
break;
}
}
}
//Codice da eseguire ad ogni loop mentre nessun bottone è premuto per aggiornare lo stato delle linee ed il consumo in watt
if ((buttonValue >= 0) && (buttonValue <= 100)) {
if (millis() - previousMillslcd > intervallcd ) {
previousMillslcd = millis();
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Watt: ");
lcd.setCursor(7,1);
lcd.print(consumo);
}
//In base allo stato delle variabili rele1 e rele2, scrivo sul display l'attuale stato delle linee
lcd.setCursor(0,0);
if ((rele1 == 0) && (rele2 == 0)) {
lcd.print("Linee ON");
}
if ((rele1 == 0) && (rele2 == 1)) {
lcd.print("L1 ON L2 OFF");
}
if ((rele1 == 1) && (rele2 == 0)) {
lcd.print("L1 OFF L2 ON");
}
if ((rele1 == 1) && (rele2 == 1)) {
lcd.print("Linee OFF");
}
//Specifico che nessun bottone è premuto così da rendere possibili gli interventi sulle linee
buttonState = 0;
}
}

 

5a2v0
Watt


Gruppo:Utente
Messaggi:66

Stato:



Inviato il: 23/10/2013,15:51

ElettroshockNow hai fatto altri boom ? faccine/chair.gif

non ti si legge + !!!

io intanto ho modificato un bel po il codice che avevo postato appena sopra adattandolo di piu alle mie esigenze..

ho trovato anche il manuale del contatore enel monofase dove sono specificate le soglie e i tempi di intervento in modo da fare agire prima arduino faccine/tongue.gif

appena raggiungo una versione più definitiva (per ora è in test) riposto il codice...

P.s. Siccome faccio uso dei millis() molte volte per valorizzare delle variabili per contare quanto tempo è passato dall'ultima volta che si sono verificati degli eventi (tipo esuberi, azioni di distacco), ho letto nelle reference di Arduino che dopo circa 50giorni di stare sempre acceso si arriva al limite per la funzione millis che si azzera e inizia a contare da 0 appunto ...

per prevenire problemi legati a questo fenomeno avevo pensato di mettere al termine del loop:

totalmillis = millis();

e all'inizio del loop un controllo del tipo:

if (millis() < totalmillis) {
//azzera le variabili che facevano uso del valore precedente
previousmillis_xxxxxx = millis();
previousmillis_yyyyyy = millis();
previousmillis_zzzzzzz = millis();
goto to continua:
}

e per questo loop controllerà quindi solo i bottoni se premuti o meno, aggiornerà il display ma eviterà i controlli del carico che verranno ripresi dal successivo loop...

unica pecca è che se il sistema stava già contando i secondi perchè c'era un esubero in corso, conterà di nuovo da capo... ma mi sembra un bug piccolo...

altrimenti potrei fare che al termine del loop:

totalmillis = millis();

e all'inizio del loop un controllo del tipo:

if (millis() < totalmillis) {
//sottraggo a tutte le variabili con il precedente valore di millis (elevato) il valore max che può contenere la funzione millis() ottenendo così un valore negativo
previousWattReset -= 4294967296
previousmillis_yyyyyy -= 4294967296
previousmillis_zzzzzzz -= 4294967296
}

e dove poi c'è:

if (consumo <= limitWatt) {
if (millis() - previousWattReset > intervalWattReset)
previousWattReset = millis();

ECC ECC

in teoria cosi facendo il timer non viene mai perso faccine/smile.gif

che ne dite ?

 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 24/10/2013,18:34

CITAZIONE (5a2v0 @ 23/10/2013, 16:51)
ElettroshockNow hai fatto altri boom ? faccine/chair.gif

non ti si legge + !!!

Ho perso il sincronismo con il tempo faccine/mad.gif .

Devo chiudere delle cose in sospeso e torno per miglirare la lettura dell'SCT ...... per ora il mio powermeter lavora ,anche se non soddisfa minimamente i miei requisiti ....

Ciao
ElettroshockNow

PS:Ti consiglio di aprire una discussione per il tuo progetto,in quanto merita un suo palco faccine/biggrin.gif .

 

prius2008

Avatar
MegaWatt


Gruppo:Utente
Messaggi:439

Stato:



Inviato il: 9/11/2013,12:13

Ciao ragazzi.......una domanda forse stupida.....dovrei misurare i watt prodotti dai pannelli fotovoltaici e anche i watt che consuma l'inverter. è possibile con un bel display? O con due. Il mio, è un impianto a 24v e ho a disposizione due shunt da 150A/ 75mv. Grazie in anticipo!



---------------
8 kwp di pannelli disposti a sud con inclinazione di 41 gradi. 3kw di pannelli a sud inclinazione 25 gradi.
n°4 regolatori da 60A mppt collegati in parallelo. Inverter ibrido 48v 5KW Mppt per casa. 4 pacchi Lifepo4 da 105ah con relativo bms ed equalizzatore in parallelo. Inverter ibrido Pwm 48v 5Kw per ricarica auto elettrica.

 

Daniele Idrogeno

Avatar
milliWatt


Gruppo:Utente
Messaggi:2

Stato:



Inviato il: 16/11/2013,18:01

B.sera a tutti. Mi chiamo Daniele è sono appassionato dall' elettronica. seguo molto le vostre discussioni che trovo interessanti. Ora sto trovando interessante arduino e in particolar modo il progetto di Elettroshock e a cui vorrei fargli una domanda. Io sto facendo un circuito fatto dal signor Marco Plessi. La mia domanda è posso interfacciare entrambi i progetti? Se si come potrei fare? Grazie a tutti voi anticipante

http://www.tecnovolt.altervista.org/index....tro-con-arduino
A scusate ho dimanticato il disegno del progetto che vorrei interfacciare.




Modificato da ElettroshockNow - 16/11/2013, 20:37
 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 16/11/2013,20:44

Ciao Daniele,
interessante progetto ,ma aimè per fonderlo con il mio ben più semplice realizzazione, bisognerebbe stravolgere il codice .
Il motivo è perchè vengono usati interrupt nella libreria FreqPeriod che contrasterebbero con il flusso del mio programma faccine/sad.gif .

Ciao
ElettroshockNow

 

5a2v0
Watt


Gruppo:Utente
Messaggi:66

Stato:



Inviato il: 17/11/2013,09:43

piccolo aggiornamento VIDEO della situazione:

parte 1


parte2


faccine/laugh.gif

 
 InizioPagina
 

Pagine: (18)   1   2   3   4   5   6   7   [8]   9   10   11   12   13   14   15   16   17   18    (Ultimo Msg)

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum