//Lettura sensore e calcolo Ampere assorbiti e Watt consumati con eventuale distacco automatico in caso di esubero
sensorValue = analogRead(sensorPin);
//Il sensore restituisce da 0 a 1v se legge da 0 a 30 Ampere (valore max di lettura) e lo somma al voltaggio reference 5v diviso in 2.
//Utilizzeremo però 2.49v anzichè 2.50v poichè in lettura senza carico il valore letto oscillava tra 2.48 e 2.50.
//Per cui abbiamo [ 1.00v : 30 A = (sensorValue - 2.49v) : ampere ] quindi [ ampere = (sensorValue - 2.49) * 30.00 / 1.00 ]
//Trasformo il valore letto sulla A5 in volt sapendo che 5 è il voltaggio reference e 1024 sono le parti in cui viene suddiviso per la lettura.
sensorValue = (((5.00 * sensorValue) / 1024.00) - 2.49);
if (sensorValue < 0) sensorValue = 0;
ampere = sensorValue * 30.00;
consumo = ampere * tensione;
ovviamente ho aggiunto anche la riga che mi dicevi di mettere nel void setup () !
Situazione attuale:
Arduino senza carico mi dice che consumo 250watt.
Quando collego e accendo un phon da 1800watt totali messo a metà potenza mi dice 1800(circa eh, l'lcd refresha senza che leggo il valore bene)
Quando alzo la potenza del phon al suo max legge 3500
Quando spengo, ritorna a 250.
Che può essere ?
ElettroshockNow il 11/10/2013, 8:52
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Pian pianino facciamo dama
...
Controlla se senza carico il sensore ti resistuisce circa 2, 5v ....
Se si credo che devi solo tararlo:
-senza carico modifica il valore di offset (510 ...509...508 ...511...)per avere una lettura prossima allo 0 (10w di toll )
-poi connetti un carico noto e modifica il fattore di conversione (.55 ... 0.56 ....0.50 .... sperimentalmente o facendo la proporzione)
Ciao
Ps: non misurando la tensione avrai una potenza molto simile al valore reale , ma con una tolleranza del 10% .... ma dovrebbe essere più che sufficiente ai tuoi scopi ..
Ariciao
5a2v0 il 11/10/2013, 9:46
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
aspetttttttttttttta un attimo
DOMANDISSIMA:
nel tuo sketch ho letto che scrivi:
CITAZIONE [quote]const float Fattore_Conversione_Corrente =
.055;
mentre a me hai scritto prima:
CITAZIONE [quote]-poi connetti un carico noto e modifica il fattore di conversione (
.55 ... 0.56 ....0.50 .... sperimentalmente o facendo la proporzione)
qual'è il parametro giusto ?
Per ora sono a lavoro e non posso fare la prova, ma può essere che l'errore è dato da quello 0 mancante ?
ElettroshockNow il 11/10/2013, 9:53
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Nono c'è il punto
quindi scrivere 0.55 o .55 è indifferente .
Per quanto invece il valore in se ,dipende dalle tolleranze della resitenza di shunt ecco perché devj modificarlo per adattarlo al tuo circuito ...
Se non sbagli quell .55 era uscito per un sensore acs712 da 20A ... ma come ti dicevo ognuno deve eseguire la taratura .
Ciao
5a2v0 il 11/10/2013, 10:07
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
dicevo
0.055 al posto di
0.55 !!! Mi riferivo allo zero dopo il punto !
inoltre, il fatto che non uso un ACS ma un SCT-013-030 non cambia nulla ?
ElettroshockNow il 11/10/2013, 11:28
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Hai ragione .... mia colpa
Oggi controllo e posto il fattore che uso per gli Sct
Acs o Sct (con schema) vengono gestiti nello stesso modo . Sottointeso per misurazioni AC ed ognuno la sua taratura.
Ciao grande
5a2v0 il 11/10/2013, 12:56
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Allora intanto tornato a casa ho fatto una prova mettendo:
fattore di conversione=
0.055e offset mio =
508 (al posto dei 510 del tuo sketch)
e rilevo adesso:
- senza carico un valore che oscilla tra
0 e 01 watt- con una lampada non a risparmio (da verificare wattaggio) appena accendo ho un valore di circa 30 watt per qualche secondo e poi scende ad un valore che oscilla tra 3 e 6 watt
- con il phon da 1800w max alla max potenza ho un valore sui 300watt
Cercherò di provare una lampada da watt conosciuti prima possibile e ti faccio sapere
)))))
Domanda da niubbo: se SPENGO la lampadina (carico) ma lascio collegata la spina, arduino mi dice 0 o 01... se invece scollego proprio la spina (quindi nessun carico nel sensore) arduino mi restituisce 16-18 watt O.o !!! come è possibile ?
ElettroshockNow il 11/10/2013, 13:20
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Curioso
... cmq ci avviciniamo alla dama ....
Posta il codice così lo carico sul mio powermeter .
Ciao
5a2v0 il 11/10/2013, 13:31
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE [quote][color=#7E7E7E]//Includo la libreria per il corretto funzionamento del display
#include <[color=#CC6600]LiquidCrystal.h>
[color=#7E7E7E]// Dichiaro i pin del display
[color=#CC6600]LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
[color=#7E7E7E]// Dichiaro il pin a cui sono collegati i bottoni e la variabile in cui viene memorizzato il valore letto dal pin
[color=#CC6600]int buttonPin = A0;
[color=#CC6600]int buttonValue = 0;
[color=#7E7E7E]//Dichiaro il pin del sensore di corrente e la variabile in cui sarà memorizzato il valore letto dal sensore
[color=#CC6600]int sensorPin = A5;
[color=#CC6600]float sensorValue = 0.00;
[color=#7E7E7E]//Dichiaro la variabile in cui sarà memorizzato il valore di Ampere totali assorbiti
[color=#CC6600]float ampere = 0.00;
[color=#7E7E7E]//Variabile per il consumo in watt (ottenuto moltiplicando il valore in Ampere ottenuto dal sensore di corrente per la tensione stabilita di 230v)
[color=#CC6600]float tensione = 230.00;
[color=#CC6600]int consumo = 0;
[color=#7E7E7E]//Dichiaro i pin del buzzer, dei led e dei relè
[color=#CC6600]int buzzer = 6;
[color=#CC6600]int verde1 = 7;
[color=#CC6600]int verde2 = 8;
[color=#CC6600]int rosso1 = 1;
[color=#CC6600]int rosso2 = 13;
[color=#CC6600]int bagni = 9;
[color=#CC6600]int stanze = 10;
[color=#7E7E7E]//Dichiaro variabili per memorizzare lo stato (0 o 1) dei relè e dei bottoni
[color=#CC6600]int rele1 = 0;
[color=#CC6600]int rele2 = 0;
[color=#CC6600]int buttonState = 0;
[color=#7E7E7E]//Variabili per prevenire ritardi ai pulsanti e regolare il refresh del display
#define intervallcd 3000
[color=#CC6600]long previousMillslcd = 0;
#define interval1 2000
[color=#CC6600]long previousMills1 = 0;
#define interval2 2000
[color=#CC6600]long previousMills2 = 0;
[color=#7E7E7E]//Note di check funzionamento buzzer
[color=#CC6600]int melody[] = {
4699, 4699};
[color=#7E7E7E]//Durata delle note: 4 = quarter note, 8 = eighth note, etc.:
[color=#CC6600]int noteDurations[] = {
8, 8};
[color=#CC6600]void [color=#CC6600]
setup() {
ADCSRA&=0X90+ 0b100; [color=#7E7E7E]//Setta ADC prescaler a 16 quindi la velocita delle conversioni
[color=#7E7E7E]//Imposto il voltaggio di riferimento per le letture analogiche a 1.10v o lascio 5v se commentato
[color=#7E7E7E]//analogReference(INTERNAL);
[color=#7E7E7E]//Definisco l'eventuale porta seriale per leggere dati dal monitor seriale N.B. si accenderà fisso il led sul PIN 1 !!!
[color=#7E7E7E]//Serial.begin(9600);
[color=#7E7E7E]//Inizializzo il display
lcd.[color=#CC6600]begin(16, 2);
[color=#7E7E7E]//Imposto i pin dei led e dei relè come uscite digitali
[color=#CC6600]pinMode(verde1, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(verde2, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(rosso1, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(rosso2, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(bagni, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(stanze, [color=#006699]OUTPUT);
[color=#7E7E7E]//Accendo i due led verdi e spengo i due rossi (i relè sono normalmente chiusi e la variabile dei relè è gia impostata a 0 di default all'avvio del programma)
[color=#CC6600]digitalWrite(verde1, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(verde2, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(rosso1, [color=#006699]LOW);
[color=#CC6600]digitalWrite(rosso2, [color=#006699]LOW);
[color=#CC6600]digitalWrite(bagni, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(stanze, [color=#006699]HIGH);
[color=#7E7E7E]//Codice di esecuzione delle note di check funzionamento buzzer
[color=#CC6600]for ([color=#CC6600]int thisNote = 0; thisNote < 2; thisNote++) {
[color=#CC6600]int noteDuration = 1000/noteDurations[thisNote];
[color=#CC6600]tone(buzzer, melody[thisNote],noteDuration);
[color=#CC6600]int pauseBetweenNotes = noteDuration * 1.30;
[color=#CC6600]delay(pauseBetweenNotes);
[color=#CC6600]noTone(buzzer);
}
}
[color=#CC6600]void [color=#CC6600]
loop() {
ampere = 0.00;
[color=#CC6600]int NumCampionamenti = 0;
[color=#CC6600]long start = [color=#CC6600]millis() ;
[color=#7E7E7E]//Serial.println(analogRead(sensorPin));
[color=#CC6600]do
{
NumCampionamenti++;
[color=#7E7E7E]//508 è la lettura senza carico quindi l'offset e lo sottraiamo alle letture
ampere+= [color=#CC6600]abs([color=#CC6600]analogRead(sensorPin) - 508);
}
[color=#CC6600]while(([color=#CC6600]millis()-start)<20); [color=#7E7E7E]// 20 sono i millisecondi che verranno campionati
ampere=(ampere/NumCampionamenti) * 0.055; [color=#7E7E7E]//0.055 è il fattore di conversione
consumo = ampere * tensione;
[color=#7E7E7E]//Per evitare letture negative in assenza di carico
[color=#CC6600]if (consumo < 0) consumo = 0;
[color=#7E7E7E]//Lettura pin dei bottoni e azioni di distacco manuale o ripristino della corrente nelle sezioni collegate ai contattori
buttonValue = [color=#CC6600]analogRead(buttonPin);
[color=#CC6600]if ([color=#CC6600]millis() - previousMills1 > interval1 ) {
previousMills1 = [color=#CC6600]millis();
[color=#CC6600]if ((buttonValue >= 150) && (buttonValue <= 200)) {
[color=#CC6600]switch (rele1) {
[color=#CC6600]case 0:
[color=#CC6600]if (buttonState == 0) {
[color=#CC6600]digitalWrite(verde1, [color=#006699]LOW);
[color=#CC6600]digitalWrite(rosso1, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(bagni, [color=#006699]LOW);
rele1 = 1;
buttonState = 1;
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"
istacco manuale");
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Linea 1 OFF");
}
[color=#CC6600]break;
[color=#CC6600]case 1:
[color=#CC6600]if (buttonState == 0) {
[color=#CC6600]digitalWrite(verde1, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(rosso1, [color=#006699]LOW);
[color=#CC6600]digitalWrite(bagni, [color=#006699]HIGH);
rele1 = 0;
buttonState = 1;
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"Intervento:");
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Linea 1 ON");
}
[color=#CC6600]break;
}
}
}
[color=#CC6600]if ([color=#CC6600]millis() - previousMills2 > interval2 ) {
previousMills2 = [color=#CC6600]millis();
[color=#CC6600]if ((buttonValue >= 800) && (buttonValue <= 900)) {
[color=#CC6600]switch (rele2) {
[color=#CC6600]case 0:
[color=#CC6600]if (buttonState == 0) {
[color=#CC6600]digitalWrite(verde2, [color=#006699]LOW);
[color=#CC6600]digitalWrite(rosso2, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(stanze, [color=#006699]LOW);
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"
istacco manuale");
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Linea 2 OFF");
rele2 = 1;
buttonState = 1;
}
[color=#CC6600]break;
[color=#CC6600]case 1:
[color=#CC6600]if (buttonState == 0) {
[color=#CC6600]digitalWrite(verde2, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(rosso2, [color=#006699]LOW);
[color=#CC6600]digitalWrite(stanze, [color=#006699]HIGH);
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"Intervento:");
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Linea 2 ON");
rele2 = 0;
buttonState = 1;
}
[color=#CC6600]break;
}
}
}
[color=#CC6600]if ((buttonValue >= 0) && (buttonValue <= 100)) {
[color=#CC6600]if ([color=#CC6600]millis() - previousMillslcd > intervallcd ) {
previousMillslcd = [color=#CC6600]millis();
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Watt: ");
lcd.[color=#CC6600]setCursor(7,1);
lcd.[color=#CC6600]print(consumo);
}
lcd.[color=#CC6600]setCursor(0,0);
[color=#CC6600]if ((rele1 == 0) && (rele2 == 0)) {
lcd.[color=#CC6600]print([color=#006699]"Linee ON");
}
[color=#CC6600]if ((rele1 == 0) && (rele2 == 1)) {
lcd.[color=#CC6600]print([color=#006699]"L1 ON L2 OFF");
}
[color=#CC6600]if ((rele1 == 1) && (rele2 == 0)) {
lcd.[color=#CC6600]print([color=#006699]"L1 OFF L2 ON");
}
[color=#CC6600]if ((rele1 == 1) && (rele2 == 1)) {
lcd.[color=#CC6600]print([color=#006699]"Linee OFF");
}
buttonState = 0;
}
}
mi156 il 11/10/2013, 16:00
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (ElettroshockNow @ 11/10/2013, 06:47) [quote]
CITAZIONE (mi156 @ 11/10/2013, 05:34) [quote]SALVE IL CODICE MI DA DEI PROBLEMI
Ciao mii157,
volevo informarti che hai il tasto Maiuscolo inserito , sembra quasi che urli
..
Cmq anche se il progetto in questione illude di essere di facile realizzazione ,in realtà non lo è ,almeno che non usi gli stessi identici hardware.
Quindi ti consiglio di iniziare con progetti più semplici e fare esperienza sull'uso dei display LCD ,in quanto credo che sia li' il problema da te riscontrato .
Giusto a titolo informativo nel codice trovi una sezione chiamata "setup" nella quale vengono impostati i parametri hardware ....
Esempio :
Il mio display deve essere settato :
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);invece quello di 5a2v0 :
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Ciao
ElettroshockNow
PS: il progetto powermeter funziona ininterrottamente da 8 mesi ... tranne quel breve periodo del Boom
( A proposito devo un Grazie ad Elia per la pacca sulla spalla , GRAZIE ELIA )
grazie della risposta devi scusarmi non mi ero accorto dell maiuscolo,quindi quando provo a compilare il programma gli errori sono dovuti agli hardware scollegati le librerie sono tutte scritte in nero. elettro scusa per il disturbo ti faccio i miei complimenti per la bellissima realizzazione
Dimenticavo domani posto le foto dei display in mio possesso
ElettroshockNow il 11/10/2013, 16:18
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao mi156 e grazie.
Cmq oggi ho fatto alcune prove riscontrando :
il fattore di conversione usando un sensore sct si aggira intorno a
0.108 (info utile per 5a2v0)
e che 2 Atmega su 3 non digeriscono molto bene l'aumento della velocità di conversione A/D.
Quindi il progetto powermeter deve tornare nella fase test per convivere felicemente con i sensori SCT
Ciao a tutti
eliafino il 11/10/2013, 16:18
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (ElettroshockNow @ 11/10/2013, 06:47) [quote]PS: il progetto powermeter funziona ininterrottamente da 8 mesi ... tranne quel breve periodo del Boom
( A proposito devo un Grazie ad Elia per la pacca sulla spalla , GRAZIE ELIA )
Grazie a te, stavo per acquistare una partita di 10 sensori hall, ma visto l'inconveniente ho optato anche io per quelli amperometrici... io sono ancora in alto mare col mio progetto
Ciaooo
ElettroshockNow il 11/10/2013, 16:20
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao Elia ,
C'è qualche problema da risolvere con gli SCT ..... appena ho tempo analizzo tutto all'oscilloscopio
Comunque non torno sugli ACS ... troppo pericolosi
Ciao
eliafino il 11/10/2013, 16:24
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Per arduino ho visto qui qualcosa di utile...
5a2v0 il 12/10/2013, 8:22
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (ElettroshockNow @ 11/10/2013, 17:18) [quote]Ciao mi156 e grazie.
Cmq oggi ho fatto alcune prove riscontrando :
il fattore di conversione usando un sensore sct si aggira intorno a
0.108 (info utile per 5a2v0)
e che 2 Atmega su 3 non digeriscono molto bene l'aumento della velocità di conversione A/D.
Quindi il progetto powermeter deve tornare nella fase test per convivere felicemente con i sensori SCT
Ciao a tutti
Oggi ho collegato il sensore a una lampada ad incandescenza di valore notissimo
25Watt e infatti con 0.055 il sensore mi restituisce un consumo di 3watt
Però se metto su equazione:
3watt : 0.055 = 25watt : x
il mio valore di conversione ideale per leggere i 25 watt sarebbe
0,4583333333333333sbaglio ??
Stessa lampadina da 25 watt con fattore di conversione 0.108 mi legge 6 watt infatti
ElettroshockNow il 12/10/2013, 9:02
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
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
.
Ciao
5a2v0 il 12/10/2013, 9:41
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
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 il 12/10/2013, 15:13
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (ElettroshockNow @ 12/10/2013, 10:02) [quote]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
.
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 il 12/10/2013, 15:44
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (5a2v0 @ 12/10/2013, 16:13) [quote]ci deve essere qualcosa che non va... tu hai trovato qualche soluzione ?
No
......
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
.
Ciao
Ps: vorrei dire W gli ACS ...... ma ho paura
.....
5a2v0 il 12/10/2013, 20:24
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
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 !!!
[u]Il sensore da 30ampere mio invece ha già all'interno una res. da 62ohm !!![/u]
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 il 12/10/2013, 21:24
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (5a2v0 @ 12/10/2013, 21:24) [quote]Che sia un punto di svolta ?
Lo spero ... cmq i risultati sono molto incoraggianti
.
Quindi la resistenza di shunt è già integrata nel sensore ? ..... io ci son cascato con tutte le scarpe aggiungendone un'altra da 100ohm .....
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 il 13/10/2013, 12:30
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
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...
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 il 13/10/2013, 19:20
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
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 il 14/10/2013, 16:27
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
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 il 14/10/2013, 20:24
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Allego attuale sketch:
CITAZIONE [quote][color=#7E7E7E]//Includo la libreria per il corretto funzionamento del display
#include <[color=#CC6600]LiquidCrystal.h>
[color=#7E7E7E]// Dichiaro i pin del display
[color=#CC6600]LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
[color=#7E7E7E]// Dichiaro il pin a cui sono collegati i bottoni e la variabile in cui viene memorizzato il valore letto dal pin
[color=#CC6600]int buttonPin = A0;
[color=#CC6600]int buttonValue = 0;
[color=#7E7E7E]//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
[color=#CC6600]int sensorPin = A5;
[color=#CC6600]float sensorValue = 0.00;
[color=#CC6600]int sensorTest = 0;
[color=#7E7E7E]//Dichiaro il valore dell'offset, ovvero il valore letto da arduino sulla porta del sensore in assenza di carico
#define sensorOffset 510
[color=#7E7E7E]//Dichiaro le variabili in cui sarà memorizzato il valore di ampere totali assorbiti ed il numero di letture effettuate
[color=#CC6600]float ampere = 0.00;
[color=#CC6600]int numeroCampionamenti = 0;
[color=#CC6600]long inizioCampionamenti = 0;
[color=#7E7E7E]//Dichiaro la variabile della tensione stabilita a 230V
[color=#CC6600]float tensione = 230.00;
[color=#7E7E7E]//Dichiaro la variabile per il calcolo del consumo in watt
[color=#CC6600]int consumo = 0;
[color=#7E7E7E]//Dichiaro i pin del buzzer, dei led e dei relè
[color=#CC6600]int buzzer = 6;
[color=#CC6600]int verde1 = 7;
[color=#CC6600]int verde2 = 8;
[color=#CC6600]int rosso1 = 1;
[color=#CC6600]int rosso2 = 13;
[color=#CC6600]int bagni = 9;
[color=#CC6600]int stanze = 10;
[color=#7E7E7E]//Dichiaro variabili per memorizzare lo stato (0 o 1) dei relè e dei bottoni
[color=#CC6600]int rele1 = 0;
[color=#CC6600]int rele2 = 0;
[color=#CC6600]int buttonState = 0;
[color=#7E7E7E]//Variabili per prevenire ritardi ai pulsanti e regolare il refresh del display
#define intervallcd 3000
[color=#CC6600]unsigned [color=#CC6600]long previousMillslcd = 0;
#define interval1 2000
[color=#CC6600]unsigned [color=#CC6600]long previousMills1 = 0;
#define interval2 2000
[color=#CC6600]unsigned [color=#CC6600]long previousMills2 = 0;
[color=#CC6600]void [color=#CC6600]
setup() {
[color=#7E7E7E]//Setta ADC prescaler a 16 Mhz cambiando quindi la velocita delle letture analogiche
ADCSRA&=0X90+ 0b100;
[color=#7E7E7E]//Definisco la porta seriale per leggere dati dal monitor seriale. NB: causa l'accensione del led sul PIN 1
[color=#7E7E7E]//Serial.begin(9600);
[color=#7E7E7E]//Inizializzo il display
lcd.[color=#CC6600]begin(16, 2);
[color=#7E7E7E]//Imposto i pin dei led, del buzzer e dei relè come uscite digitali
[color=#CC6600]pinMode(verde1, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(verde2, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(rosso1, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(rosso2, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(bagni, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(stanze, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(buzzer, [color=#006699]OUTPUT);
[color=#7E7E7E]//Accendo i due led verdi e tengo spenti i due rossi
[color=#CC6600]digitalWrite(verde1, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(verde2, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(rosso1, [color=#006699]LOW);
[color=#CC6600]digitalWrite(rosso2, [color=#006699]LOW);
[color=#7E7E7E]//I relè sono normalmente chiusi e con HIGH la bobina non viene eccitata
[color=#CC6600]digitalWrite(bagni, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(stanze, [color=#006699]HIGH);
}
[color=#CC6600]void [color=#CC6600]
loop() {
[color=#7E7E7E]//Eseguo solo una volta all'accensione delle letture a vuoto per l'assestamento dei valori ottenuti dal sensore di corrente
[color=#CC6600]if (sensorTest == 0) {
[color=#CC6600]do {
sensorValue = [color=#CC6600]analogRead(sensorPin);
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"Check in corso...");
lcd.[color=#CC6600]setCursor(0,1);
[color=#7E7E7E]//Calcolo e scrivo una percentuale sul display in relazione alla seguente equazione
[color=#7E7E7E]//sensorOffset : 100% = sensorValue : x %
sensorTest = (sensorValue / sensorOffset) * 100;
lcd.[color=#CC6600]print(sensorTest);
lcd.[color=#CC6600]print([color=#006699]"% ");
[color=#7E7E7E]//Riga utilizzata per leggere il valore senza carico in fase di programmazione
[color=#7E7E7E]//lcd.print(sensorValue);
[color=#7E7E7E]//Se il sensore legge prima dei 10 secondi il giusto valore di offset, accorcia l'attesa e parte con il vero loop
[color=#CC6600]if (sensorValue == sensorOffset) {
lcd.[color=#CC6600]clear();
[color=#CC6600]break;
}
}
[color=#7E7E7E]//Sono necessari circa 10 secondi affinchè l'alimentazione e i condensatori forniscano un valore stabile alla linea 5v usata dal sensore
[color=#CC6600]while([color=#CC6600]millis() < 10000);
sensorTest = 1;
[color=#7E7E7E]//Note di fine check e test funzionamento buzzer
[color=#CC6600]tone(buzzer, 4699, 125);
[color=#CC6600]delay(160);
[color=#CC6600]noTone(buzzer);
[color=#CC6600]tone(buzzer, 4699, 125);
[color=#CC6600]delay(160);
[color=#CC6600]noTone(buzzer);
}
[color=#7E7E7E]//Lettura dati del sensore e calcolo della corrente assorbita e del consumo in watt
ampere = 0.00;
numeroCampionamenti = 0;
inizioCampionamenti = [color=#CC6600]millis() ;
[color=#CC6600]do
{
numeroCampionamenti++;
[color=#7E7E7E]//sensorOffset è la lettura senza carico quindi l'offset e lo sottraiamo alle letture
sensorValue = ([color=#CC6600]analogRead(sensorPin) - sensorOffset);
[color=#7E7E7E]//Alcune letture potrebbero avere valore negativo per cui noi consideriamo il valore assoluto
ampere+= [color=#CC6600]abs(sensorValue);
}
[color=#7E7E7E]//20 sono i millisecondi che verranno campionati
[color=#CC6600]while(([color=#CC6600]millis() - inizioCampionamenti) < 20);
[color=#7E7E7E]//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;
[color=#7E7E7E]//Infine moltiplichiamo gli ampere per la tensione stabilita per ottenere il consumo in Watt
consumo = ampere * tensione;
[color=#7E7E7E]//Per evitare letture negative in assenza di carico
[color=#CC6600]if (consumo < 0) consumo = 0;
[color=#7E7E7E]//Lettura pin dei bottoni e azioni di distacco manuale o ripristino della corrente tramite i relè
buttonValue = [color=#CC6600]analogRead(buttonPin);
[color=#CC6600]if ([color=#CC6600]millis() - previousMills1 > interval1 ) {
previousMills1 = [color=#CC6600]millis();
[color=#7E7E7E]//Codice che viene eseguito per il bottone relativo alla linea "bagni"
[color=#CC6600]if ((buttonValue >= 150) && (buttonValue <= 200)) {
[color=#CC6600]switch (rele1) {
[color=#7E7E7E]//Se rele1 == 0 e viene premuto il bottone, bisogna accendere il relativo led rosso, spegnere il verde ed eccitare la bobina del relè
[color=#CC6600]case 0:
[color=#7E7E7E]//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
[color=#CC6600]if (buttonState == 0) {
[color=#CC6600]digitalWrite(verde1, [color=#006699]LOW);
[color=#CC6600]digitalWrite(rosso1, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(bagni, [color=#006699]LOW);
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"
istacco manuale");
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Linea 1 OFF");
[color=#CC6600]analogWrite(buzzer, 20);
[color=#CC6600]delay(1000);
[color=#CC6600]analogWrite(buzzer, 0);
[color=#7E7E7E]//Cambio lo stato del relè e specifico che il bottone è attualmente premuto
rele1 = 1;
buttonState = 1;
}
[color=#CC6600]break;
[color=#7E7E7E]//Se rele1 == 1 e viene premuto il bottone, bisogna accendere il relativo led verde, spegnere il rosso e diseccitare la bobina del relè
[color=#CC6600]case 1:
[color=#7E7E7E]//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
[color=#CC6600]if (buttonState == 0) {
[color=#CC6600]digitalWrite(verde1, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(rosso1, [color=#006699]LOW);
[color=#CC6600]digitalWrite(bagni, [color=#006699]HIGH);
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"Intervento:");
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Linea 1 ON");
[color=#CC6600]tone(buzzer, 4699, 125);
[color=#CC6600]delay(160);
[color=#CC6600]noTone(buzzer);
[color=#CC6600]tone(buzzer, 4699, 125);
[color=#CC6600]delay(160);
[color=#CC6600]noTone(buzzer);
[color=#7E7E7E]//Resetto lo stato del relè e specifico che il bottone è attualmente premuto
rele1 = 0;
buttonState = 1;
}
[color=#CC6600]break;
}
}
}
[color=#CC6600]if ([color=#CC6600]millis() - previousMills2 > interval2 ) {
previousMills2 = [color=#CC6600]millis();
[color=#CC6600]if ((buttonValue >= 800) && (buttonValue <= 900)) {
[color=#CC6600]switch (rele2) {
[color=#7E7E7E]//Se rele2 == 0 e viene premuto il bottone, bisogna accendere il relativo led rosso, spegnere il verde ed eccitare la bobina del relè
[color=#CC6600]case 0:
[color=#7E7E7E]//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
[color=#CC6600]if (buttonState == 0) {
[color=#CC6600]digitalWrite(verde2, [color=#006699]LOW);
[color=#CC6600]digitalWrite(rosso2, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(stanze, [color=#006699]LOW);
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"
istacco manuale");
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Linea 2 OFF");
[color=#CC6600]analogWrite(buzzer, 20);
[color=#CC6600]delay(1000);
[color=#CC6600]analogWrite(buzzer, 0);
[color=#7E7E7E]//Cambio lo stato del relè e specifico che il bottone è attualmente premuto
rele2 = 1;
buttonState = 1;
}
[color=#CC6600]break;
[color=#7E7E7E]//Se rele2 == 1 e viene premuto il bottone, bisogna accendere il relativo led verde, spegnere il rosso e diseccitare la bobina del relè
[color=#CC6600]case 1:
[color=#7E7E7E]//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
[color=#CC6600]if (buttonState == 0) {
[color=#CC6600]digitalWrite(verde2, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(rosso2, [color=#006699]LOW);
[color=#CC6600]digitalWrite(stanze, [color=#006699]HIGH);
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"Intervento:");
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Linea 2 ON");
[color=#CC6600]tone(buzzer, 4699, 125);
[color=#CC6600]delay(160);
[color=#CC6600]noTone(buzzer);
[color=#CC6600]tone(buzzer, 4699, 125);
[color=#CC6600]delay(160);
[color=#CC6600]noTone(buzzer);
[color=#7E7E7E]//Resetto lo stato del relè e specifico che il bottone è attualmente premuto
rele2 = 0;
buttonState = 1;
}
[color=#CC6600]break;
}
}
}
[color=#7E7E7E]//Codice da eseguire ad ogni loop mentre nessun bottone è premuto per aggiornare lo stato delle linee ed il consumo in watt
[color=#CC6600]if ((buttonValue >= 0) && (buttonValue <= 100)) {
[color=#CC6600]if ([color=#CC6600]millis() - previousMillslcd > intervallcd ) {
previousMillslcd = [color=#CC6600]millis();
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Watt: ");
lcd.[color=#CC6600]setCursor(7,1);
lcd.[color=#CC6600]print(consumo);
}
[color=#7E7E7E]//In base allo stato delle variabili rele1 e rele2, scrivo sul display l'attuale stato delle linee
lcd.[color=#CC6600]setCursor(0,0);
[color=#CC6600]if ((rele1 == 0) && (rele2 == 0)) {
lcd.[color=#CC6600]print([color=#006699]"Linee ON");
}
[color=#CC6600]if ((rele1 == 0) && (rele2 == 1)) {
lcd.[color=#CC6600]print([color=#006699]"L1 ON L2 OFF");
}
[color=#CC6600]if ((rele1 == 1) && (rele2 == 0)) {
lcd.[color=#CC6600]print([color=#006699]"L1 OFF L2 ON");
}
[color=#CC6600]if ((rele1 == 1) && (rele2 == 1)) {
lcd.[color=#CC6600]print([color=#006699]"Linee OFF");
}
[color=#7E7E7E]//Specifico che nessun bottone è premuto così da rendere possibili gli interventi sulle linee
buttonState = 0;
}
}
5a2v0 il 23/10/2013, 15:51
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
ElettroshockNow hai fatto altri boom ?
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
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
che ne dite ?
ElettroshockNow il 24/10/2013, 18:34
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (5a2v0 @ 23/10/2013, 16:51) [quote]ElettroshockNow hai fatto altri boom ?
non ti si legge + !!!
Ho perso il sincronismo con il tempo
.
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
.
prius2008 il 9/11/2013, 12:13
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
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!
Daniele Idrogeno il 16/11/2013, 18:01
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
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.
ElettroshockNow il 16/11/2013, 20:44
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
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
.
Ciao
ElettroshockNow
5a2v0 il 17/11/2013, 9:43
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
piccolo aggiornamento VIDEO della situazione:
parte 1
parte2
ElettroshockNow il 17/11/2013, 10:41
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
oohhhhh mi piace ...
Sono felice che vai avanti con la sperimentazione ottenendo come vedo degli ottimi risultati ...
Io non ho ancora migliorato lo sketch , ma dovrò farlo ..... almeno che non lo hai fatto te
.
Nuovamente bel lavoro
5a2v0 il 16/12/2013, 9:24
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
ri-ciao a tutti.. ho montato (finalmente) a parete il tutto dentro una "graziosa" scatoletta e collegato all'impianto di casa !!
Ora vedo di postare qualche foto..
Ho notato un problema dovuto CREDO a qualche interferenza... quando stacco e riattacco i relè, [u]se fatto troppo velocemente[/u] a volte mi spuntano dei caratteri strani nello schermo Lcd... ma questo è il male minore perchè ogni 1,5 secondi ho il refresh e scompaiono subito... il problema vero e proprio è se l' interferenza è TALE da far scomparire i caratteri dal monitor !!!!!!!
Il sistema infatti resta attivo e funzionante... legge i consumi e suona se sono alti, i bottoni continuano a staccare e/o riattaccare le linee solo che il display rimane soltanto retroilluminato senza nessun carattere a vista ! Non spunta piu' nulla finche non riavvio arduino!
per fortuna mi è capitato solo 2 volte quando praticamente avevo finito di montare e ho provato un po di volte con i bottoni manualmente a fare i distacchi e i riallacci per vedere se avevo collegato tutto bene..
Non esiste un modo per "riavviare" solo la parte monitor senza dover riavviare arduino completamente ?
ElettroshockNow il 16/12/2013, 9:52
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Hai inserito i diodi in parallelo alle bobine dei relè ?
ElettroshockNow il 16/12/2013, 11:06
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ops ... usi i moduli gia' fatti ...
Ma il difetto lo fa' anche senza carichi connessi ?
Se è no, prova ad allontanare i relè ....
Se è si ... aggiungi un condensatore da 100nF in parallelo all'alimentazione sul display ...
Per la parte software non saprei in quanto è il display che si impalla...
Una soluzione potrebbe essere usare un piedino di arduino per alimentare il display e resettarlo a piacimento....
5a2v0 il 16/12/2013, 11:51
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Qui un po di fotine:
https://imageshack.com/a/mKLb/1
Se basta disattivare e riattivare qualche piedino in particolare, posso farlo semplicemente con la pressione di un bottone !!!
Si può fare ? Se si, su che pin del display devo lavorare per riavviare il display?
ElettroshockNow il 16/12/2013, 12:32
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE [quote]
gran bel lavoro
...
5a2v0 il 19/12/2013, 9:48
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ho trovato soluzione al problema dell'interferenza !!!
Per il momento per provare ho messo un IF..
Se premo i 2 bottoni contemporaneamente, arduino fa un bel
CODICE
lcd.begin(16, 2);
e "resetta" il monitor lcd... fancendo andare via cosi eventuali caratteri strani o se peggio erano spariti i caratteri, rispunta tutto !!!
ora devo fare la prova se funziona mettendo il comando lcd.begin nel codice dopo ogni azione del relè (manuale o automatica che sia) in modo che il problema non si presenti mai piuttosto che spuntare e dover intervenire manualmente...
Se funziona, lo considero come se fosse una sorta di lcd.clear che però mi ri inizializza il monitor (tanto è immediata la cosa) !!
5a2v0 il 3/1/2014, 16:44
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ok, ritrovata la discussione nel nuovo forum, ci tenevo a postare l'ultimo aggiornamento della mia situazione del mio codice:
Ho ordinato altri 2 sensori SCT-013-030 in modo da calcolare i consumi delle sezioni Cucina e Stanze che per il momento però non vengono poi usati...(aspetto i sensori e poi vedo...) tolto il codice di LCD.BEGIN alla pressione contemporanea dei due pulsanti, nella quale ho invece messo una funzione che mostra l'UPTIME del sistema...
LCD.BEGIN viene invece fatto SEMPRE subito dopo ogni distacco o riallaccio così da non presentarsi mai il problema dei caratteri strani...
Qui il codice completo fin ora:
ElettroshockNow il 4/1/2014, 17:37
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento CITAZIONE (5a2v0, 03/01/2014 16:44:30 ) [quote]
LCD.BEGIN viene invece fatto SEMPRE subito dopo ogni distacco o riallaccio così da non presentarsi mai il problema dei caratteri strani...
Grazie del trucchetto condiviso
....
Sarebbe interessante capirne il motivo ,ma anche arginare il problema và cmq bene
Ciao
alealfredo il 14/1/2014, 23:39
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Salve a tutti,visto che, restando nel tema del fai da te, mi sono autocostruito una pdc aria/acqua per il riscaldamento dei pannelli radianti e ora vorrei monitorare il tutto per valutarne la reale resa/convenienza della macchina.
Volevo quindi chidere al nostro caro ElettroshockNow se il progetto del powermeter, si poteva adattare anche al monitoraggio di assorbimento e temperature acqua al fine di stilare un resoconto sui costi di gestione.
CIAO
ciccioro il 2/2/2014, 10:41
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Salve ho visto questo progetto simpatico per la regolazione dei carichi di casa
possibile capire dove si trova lo schema
sono nuovo e anche scompetente mi aiutate?
Grazie anticipatamente
calcola il 9/2/2014, 9:45
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Scusate, ma i sensori SCT-013-030 riuscite ad usarli anche con corrente continua? Probabilmente mi sono perso qualche passaggio della discussione.
ElettroshockNow il 9/2/2014, 10:02
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (calcola, 09/02/2014 09:45:12 ) [quote]Scusate, ma i sensori SCT-013-030 riuscite ad usarli anche con corrente continua? Probabilmente mi sono perso qualche passaggio della discussione.
No,sono in grado di misurare solo AC.
Per la DC aimè devi proseguire sui classici ACS .... oppure LEM ... oppure il Ronwal Sensor (anello di ferro che si richiude su un A1302 e nell'anello ci passi il cavo di alimentazione DC).
Ciao
ElettroshockNow il 9/2/2014, 10:06
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (ciccioro, 09/02/2014 10:02:01 ) [quote]Salve ho visto questo progetto simpatico per la regolazione dei carichi di casa
possibile capire dove si trova lo schema
sono nuovo e anche scompetente mi aiutate?
Grazie anticipatamente
Il progetto di 5a2v0 non è stato fornito di schema di collegamenti,ma lo puoi estrapolare dal listato che ha condiviso nella pagina precedente.
Ciao
calcola il 9/2/2014, 14:30
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Elettro grazie, avevo capito male. Conosco il progetto di Ronwal, preferirei qualcosa di commerciale. Al momento uso degli acs758 già con basetta, purtroppo non sono molto precisi.
ElettroshockNow il 9/2/2014, 17:54
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Hai ragione.
Maggiore sara' il fondoscala e minore sara' la sensibilità.
Però se il problema è aumentare la sensibilità con basse correnti puoi amplificare il segnale del sensore e usare un secondo ingresso analogico.
In pratica avrai due sensibilità con due fondi scala.
Il circuito è realizzabile con un semplice operazionale e puoi prendere spunto del circuito da questo....
5a2v0 il 18/3/2014, 20:08
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento CITAZIONE (ElettroshockNow, 09/02/2014 17:54:42 ) [quote]
CITAZIONE (ciccioro, 09/02/2014 10:02:01 ) [quote]Salve ho visto questo progetto simpatico per la regolazione dei carichi di casa
possibile capire dove si trova lo schema
sono nuovo e anche scompetente mi aiutate?
Grazie anticipatamente
Il progetto di 5a2v0 non è stato fornito di schema di collegamenti,ma lo puoi estrapolare dal listato che ha condiviso nella pagina precedente.
Ciao
Oltre al fatto che vedendo che "funziona" quello che ho già, pur sapendo che lo posso migliorare mi sono un po cullato sugli allori...
Sono stato inoltre preso da altri "purtroppo troppi" progetti che ho in corso ma non ho assolutamente abbandonato...anzi !!! XD
Ho addirittura acquistato un Arduino Yun per sperimentare qualcosa di aggiuntivo per il mio progetto. In particolare sin ora ho fatto:
- Preso Arduino Yun;
- Comprato e collegato un lcd più grande (20x4) al posto del 16x2 precedente e l'ho collegato tramite adattatore seriale (interfaccia I2C) cosi da usare solo 2 pin digitali anzichè 6 !!!
- Attualmente montati ho 3 sensori SCT-013-030 e ne ho un 4° (e ultimo penso) in arrivo...
Ho in parte modificato lo sketch, in modo che grazie alle potenzialità di Arduino Yun, io possa collegarmi da casa e da fuori casa ad una pagina web che gira su Arduino (connesso al router tramite wifi presente su YUN) e visualizzare i consumi in qualsiasi momento.
I sensori sono diventati 4 perchè oltre a leggere il consumo totale, voglio leggere anche i consumi nelle sezioni "cucina, bagni e stanze".
Cosi posso staccare quella che effettivamente consuma piuttosto di andare secondo una logica prestabilita (priorità da me assegnate) che magari mi stacca una sezione con consumo basso/bassimo/zero...
Per ora Yun è montato su breadboard in modo che testo le varie funzioni che vado scrivendo (anche se ho esaurito lo spazio per gli sketch e devo "pulire" il codice fatto fin ora).
Appena mi sento "pronto" stacco la cassetta con Arduino Uno e ci trasferisco dentro lo Yun... vi terrò informati
supermomo717 il 18/4/2014, 14:36
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Il progetto di questo misuratore è veramente notevole e infatti sto aspettando mi arrivi il materiale per poterlo realizzare. Quello che mi piace in modo particolare è il poter gestire le uscite in funzione dei carichi misurati e delle soglie impostate.
Tuttavia, sempre se riesco a farlo funzionare, vorrei provare una soluzione, che potrebbe risolvermi diverse problematiche inerenti agli utilizzatori e la loro ubicazione. Ma vi spiego meglio il motivo e cosa vorrei ottenere ...
Il motivo principale è che mi piacciono le cose pulite e funzionali e non per ultimo, mi sono chiesto che cosa posso fare se conosco i consumi della mia casa, se conosco la produzione del mio FV ma non posso gestire i miei carichi se non in prossimità di Arduino?
Ho visto dei blog dove degli smanettoni di arduno sono riusciti a controllare delle "prese telecomandate" (facilmente ed economicamente recuprabili) direttamente con il modulo 433 mhz, inviando alle prese dei segnali di accensione/spegnimento, operando una sorta di "emulazione" del telecomando originale. Il tutto quindi andrebbe ad impegnare una sola uscita digitale di arduino ma quello che è veramente il plus della cosa è che non siamo vincolati dai fili.
In pratica potrei decidere di accendere un utilizzatore in una stanza superata una certa soglia, accendere un condizionatore o pompa di calore in una diversa oltre la successiva soglia e così via.
Qundi andrei a sperimentare per prima cosa il lavoro fatto da ElettroshockNow e da quanti hanno cooperato e sfruttare il lavoro fatto da altri di cui vi parlavo e provare a metterli insieme. Io di mio non ho queste capacità di scrivere codice anche perchè lo sto cercando di imparare ma sono alle prime armi e dunque mi destreggio nel copia/incolla.
Dite che arduino posso avere le risorse per gestire questo ulteriore carico di lavoro?
Buona Pasqua!
ElettroshockNow il 18/4/2014, 15:47
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (supermomo717, 18/04/2014 14:36:34 ) [quote]Io di mio non ho queste capacità di scrivere codice anche perchè lo sto cercando di imparare ma sono alle prime armi e dunque mi destreggio nel copia/incolla.
Dite che arduino posso avere le risorse per gestire questo ulteriore carico di lavoro?
Buona Pasqua!
Allora siamo in due.
Se vedi i miei codici fanno pena ,ma funzionano .
Arduino ? ... Lo può fare tranquillamente ....
Devi però recuperare il protocollo che usano le prese ... dobbiamo sapere che lingua parlano
BUONA PASQUA
supermomo717 il 19/5/2014, 14:48
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ho fatto un po diverso del lavoro che avevo in mente. Ho modificato il codice del ricevente e ho realizzato un PowermeterRemo. In pratica arrivando tutti i dati belli e pronti dall'arduino Master, ho lavorato con le variabili IF ELSE per gestire le uscite esattamente come sul powermeter.Adesso però dispongo di molte uscite e direttamente nel loco di utilizzo, svincolandomi dai fili. Se qualcuno vuole il codice client remoto lo posso postare se ElettroshockNow acconsente in quanto la creatura è sua, io l'ho solo adattata alle mie esigenze.
ElettroshockNow il 19/5/2014, 15:12
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (supermomo717, 19/05/2014 14:48:43 ) [quote]Se qualcuno vuole il codice client remoto lo posso postare se ElettroshockNow acconsente in quanto la creatura è sua, io l'ho solo adattata alle mie esigenze.
Ci mancherebbe che devo dare il consenso violerebbe il mio modo di essere ...
e poi .... vedere il progetto evolversi e migliorarsi mi fà solo piacere
.
supermomo717 il 3/6/2014, 23:12
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Perdonate la poca esperienza ma ho cercato comunque di fare del mio meglio.
Stuzzicato dal progetto che ElettroshockNow ha presentato in questo 3d, ho voluto realizzare un ricevitore che accoppiato al trasmettitore Powermeter3_5 potesse permettermi di godere di maggiore "libertà di movimento", in pratica avere le uscite da gestire non vincolate fisicamente (fili) al ricevitore stesso.
Modificando il codice del ricevitore che ElettroshockNow ha gentilmente offerto alla community, me lo sono personalizzato come dicevo, facendolo diventare un aggieggino simpatico da tenere anche in vista per gli ospiti, dipende da quanto siete "artistici" e fantasiosi.
Veniamo al dunque con le caratteristiche:
- Niente fili dei sensori, quindi trasportabile dove volete compatibilmente con le prestazioni dei piccoli moduli wireless.
- Numero uscite a piacere, anche se 2 mi sono più che sufficienti.
- Niente display, solo indicatore a led di veloce lettura della potenza monitorata.
- Led che informa la corretta ricezione dei segnale del TX
- Led che informa che la produzione FV è minore del consumo domestico.
- 2 Tasti, Up e Down per modifica delle soglie impostate senza bisogno di pc.
- Led indicatore ad impulsi (ogni impulso sono 100 watt) di quanto è impostata la nuova soglia una volta modificata.
- Introduzione di un misuratore di intervallo di tempo prima che le uscite vengano disattivate al raggiungimento della soglia di spegnimento impostata.
Il lavoro grosso è svolto naturalmente dal TX mentre questo ricevitore elabora solamente i dati che riceve e opera di conseguenza.
Mettendo mano allo sketch potete fare qualsiasi cosa; la cosa più difficile? capire cosa si vuole fare.
[quote]
[color=#7E7E7E]/* Progetto RemoteRice Powermeter 1.2
[color=#7E7E7E] "" Energia Alternativa & Energia Fai Da Te ""
[color=#7E7E7E] http://www.energialternativa.org/
[color=#7E7E7E] Ricevitore personalizzato da Supermomo717 per PowerMeter_TX3_5 realizzato da ElettroshockNow.
[color=#7E7E7E] Si tratta di un sistema remoto per gestione uscite , 2 in questo caso.
[color=#7E7E7E] Il Ricevitore Remote Powermeter 1.2, rielavora i valori ricevuti dal PowerMeter_TX3_5
[color=#7E7E7E] e ne gestisce i carichi, collegati.
[color=#7E7E7E] - Introdotti 4 Led di controllo della potenza che si desidare monitorare, con soglie a
[color=#7E7E7E] diversi valori impostabili.
[color=#7E7E7E] - Introdotto Led di avviso ricezione segnale da TX
[color=#7E7E7E] - Introdotto intervallo di tempo antecedente lo spegnimento a raggiungimento una determinata soglia (per ovviare al problema che
[color=#7E7E7E] un carico in avvio possa far leggere al ricevitore un raggiungimento di sottosoglia e staccare
[color=#7E7E7E] l'uscita al momento in cui il carico stesso dovrebbe avviarsi).
[color=#7E7E7E] - Introdotti pulsanti per aumento delle soglie di accensione e spegnimento.
[color=#7E7E7E] */
#include
[color=#CC6600]const [color=#CC6600]int Uscita2 = 12; [color=#7E7E7E]//assegnazione pin uscita 2
[color=#CC6600]const [color=#CC6600]int Uscita1 = 10; [color=#7E7E7E]//assegnazione pin uscita 1
[color=#CC6600]const [color=#CC6600]int LedNegativo = 9; [color=#7E7E7E]//assegnazione pin uscita led consumo da rete
[color=#CC6600]const [color=#CC6600]int Led1 = 8; [color=#7E7E7E]//assegnazione pin led1
[color=#CC6600]const [color=#CC6600]int Led2 = 7; [color=#7E7E7E]//assegnazione pin led2
[color=#CC6600]const [color=#CC6600]int Led3 = 6; [color=#7E7E7E]//assegnazione pin led3
[color=#CC6600]const [color=#CC6600]int Led4 = 5; [color=#7E7E7E]//assegnazione pin led4
[color=#CC6600]const [color=#CC6600]int LedControllo = 4; [color=#7E7E7E]//assegnazione pin led controllo segnale e soglie
[color=#CC6600]const [color=#CC6600]int PulsanteUp = 3; [color=#7E7E7E]// pulsante aumento soglie
[color=#CC6600]const [color=#CC6600]int PulsanteDown = 2; [color=#7E7E7E]//pulsante diminuzione soglie
[color=#CC6600]const [color=#CC6600]int ledPin = 13; [color=#7E7E7E]//pin del led per controllo segnale da scheda
[color=#CC6600]int a=0; [color=#7E7E7E]// usata per impulsi al led quando cambio le soglie
[color=#CC6600]int b=0; [color=#7E7E7E]// contatore degli impulsi al led per cambio soglie
[color=#CC6600]int ledState = [color=#006699]LOW; [color=#7E7E7E]// ledState usato per settare il led
[color=#CC6600]long previousMillis = 0; [color=#7E7E7E]//conteggio per led quando c'è verifica segnale
[color=#CC6600]long interval = 100;
[color=#CC6600]int statoPulsanteUp = 0;
[color=#CC6600]int statoPulsanteDown = 0;
[color=#CC6600]byte monitor = 1;
[color=#CC6600]int Uscita_1_ON ;
[color=#CC6600]int Uscita_1_Time_On ;
[color=#CC6600]int Uscita_1_Time_Off ;
[color=#CC6600]unsigned [color=#CC6600]long TUscita1in = 0;
[color=#CC6600]unsigned [color=#CC6600]long TUscita1out = 0;
[color=#CC6600]int Uscita_1_OFF ;
[color=#CC6600]int Uscita_2_ON ;
[color=#CC6600]int Uscita_2_Time_On;
[color=#CC6600]int Uscita_2_Time_Off ;
[color=#CC6600]unsigned [color=#CC6600]long TUscita2in = 0;
[color=#CC6600]unsigned [color=#CC6600]long TUscita2out = 0;
[color=#CC6600]int Uscita_2_OFF;
[color=#CC6600]int Led1_On;
[color=#CC6600]int Led2_On;
[color=#CC6600]int Led3_On;
[color=#CC6600]int Led4_On;
[color=#CC6600]int PotenzaMon;[color=#7E7E7E]//Potenza da Monitorare
[color=#CC6600]int Tensione;
[color=#CC6600]int PotenzaPro;
[color=#CC6600]int PotenzaAss;
[color=#CC6600]float CorrentePro;
[color=#CC6600]float CorrenteAss;
[color=#CC6600]float TotalePro;
[color=#CC6600]float TotaleAss;
[color=#CC6600]void [color=#CC6600]setup()
{
[color=#7E7E7E]//aggiunta dami
[color=#CC6600]pinMode(Uscita1, [color=#006699]OUTPUT);
[color=#CC6600]digitalWrite(Uscita1, [color=#006699]LOW);
[color=#CC6600]pinMode(Uscita2, [color=#006699]OUTPUT);
[color=#CC6600]digitalWrite(Uscita2, [color=#006699]LOW);
[color=#CC6600]pinMode(LedControllo, [color=#006699]OUTPUT);
[color=#CC6600]digitalWrite(LedControllo, [color=#006699]LOW);
[color=#CC6600]pinMode(LedNegativo, [color=#006699]OUTPUT);
[color=#CC6600]digitalWrite(LedNegativo, [color=#006699]LOW);
[color=#CC6600]pinMode(Led1, [color=#006699]OUTPUT);
[color=#CC6600]digitalWrite(Led1, [color=#006699]LOW);
[color=#CC6600]pinMode(Led2, [color=#006699]OUTPUT);
[color=#CC6600]digitalWrite(Led2, [color=#006699]LOW);
[color=#CC6600]pinMode(Led3, [color=#006699]OUTPUT);
[color=#CC6600]digitalWrite(Led3, [color=#006699]LOW);
[color=#CC6600]pinMode(Led4, [color=#006699]OUTPUT);
[color=#CC6600]digitalWrite(Led4, [color=#006699]LOW);
[color=#CC6600]pinMode(PulsanteUp, [color=#006699]INPUT);
[color=#CC6600]pinMode(PulsanteDown, [color=#006699]INPUT);
[color=#CC6600]pinMode(ledPin, [color=#006699]OUTPUT);
monitor = 3; [color=#7E7E7E]//Potenza da monitorare 1=prodotta - 2=assorbita - 3 = prodotta-assorbita - 4= assorbia-prodotta
Uscita_1_ON = 800; [color=#7E7E7E]//Accendi a XXX Watt
Uscita_1_Time_On = 20; [color=#7E7E7E]//Accendi dopo TOT secondi raggiunti XXX Watt
Uscita_1_Time_Off = 10; [color=#7E7E7E]//Spegni dopo TOT secondi raggiunti YYY Watt
Uscita_1_OFF = 0; [color=#7E7E7E]//Spegni a YYY Watt
Uscita_2_ON = 2000; [color=#7E7E7E]//Accendi a xxx Watt
Uscita_2_Time_On = 5; [color=#7E7E7E]//Accendi dopo tot secondi raggiunti xxx Watt
Uscita_2_Time_Off = 5; [color=#7E7E7E]//Spegni dopo tot secondi raggiunti yyy Watt
Uscita_2_OFF = 1000 ; [color=#7E7E7E]//Spegni a yyy Watt
[color=#7E7E7E]//Parte visiva
Led1_On = 250; [color=#7E7E7E]//Accendi led 1 superati determinati watt
Led2_On = 500; [color=#7E7E7E]//Accendi led 2 superati determinati watt
Led3_On = 750; [color=#7E7E7E]//Accendi led 3 superati determinati watt
Led4_On = 1000; [color=#7E7E7E]//Accendi led 4 superati determinati watt
[color=#CC6600]Serial.[color=#CC6600]begin(9600); [color=#7E7E7E]// Debugging only
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"setup");
[color=#7E7E7E]// Initialise the IO and ISR
vw_set_ptt_inverted([color=#CC6600]true); [color=#7E7E7E]// Required for DR3100
vw_setup(2000); [color=#7E7E7E]// Bits per sec
vw_rx_start(); [color=#7E7E7E]// Start the receiver PLL running
}
[color=#CC6600]void [color=#CC6600]loop()
{
statoPulsanteUp = [color=#CC6600]digitalRead(PulsanteUp);
statoPulsanteDown = [color=#CC6600]digitalRead(PulsanteDown);
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
[color=#CC6600]if (vw_get_message(buf, &buflen)) [color=#7E7E7E]// Non-blocking
{
[color=#7E7E7E]// parte relativa al lampeggio del led di controllo quando RX ha segnale da TX
[color=#CC6600]unsigned [color=#CC6600]long currentMillis = [color=#CC6600]millis();
[color=#CC6600]if(currentMillis - previousMillis > interval) {
[color=#7E7E7E]// save the last time you blinked the LED
previousMillis = currentMillis;
[color=#7E7E7E]// if the LED is off turn it on and vice-versa:
[color=#CC6600]if (ledState == [color=#006699]LOW)
ledState = [color=#006699]HIGH;
[color=#CC6600]else
ledState = [color=#006699]LOW;
[color=#7E7E7E]// set the LED with the ledState of the variable:
[color=#CC6600]digitalWrite(LedControllo, ledState); [color=#7E7E7E]// originale è ledPin per lampeggio led 13 su Arduino
[color=#7E7E7E]/*
[color=#7E7E7E]int i;
[color=#7E7E7E]digitalWrite(13, true); // Flash a light to show received good message
[color=#7E7E7E]// Message with a good checksum received, dump it.
[color=#7E7E7E]Serial.print("Got: ");
[color=#7E7E7E]for (i = 0; i < buflen; i++)
[color=#7E7E7E]{
[color=#7E7E7E]Serial.print(buf[i], DEC);
[color=#7E7E7E]Serial.print(" ");
[color=#7E7E7E]}
[color=#7E7E7E]*/
Tensione = buf[1];
PotenzaPro = ([color=#CC6600]int(buf[3]<<8)+buf[2]);
PotenzaAss = ([color=#CC6600]int(buf[5]<<8)+buf[4]);
CorrentePro = [color=#CC6600]float([color=#CC6600]int(buf[7]<<8)+buf[6])/100;
CorrenteAss = [color=#CC6600]float([color=#CC6600]int(buf[9]<<8)+buf[8])/100;
TotalePro = [color=#CC6600]float([color=#CC6600]long(buf[12]<<16)+[color=#CC6600]int(buf[11]<<8)+buf[10])/10;
TotaleAss = [color=#CC6600]float([color=#CC6600]long(buf[15]<<16)+[color=#CC6600]int(buf[14]<<8)+buf[13])/10;
[color=#7E7E7E]/*
[color=#7E7E7E]Serial.write ("Tensione= ");
[color=#7E7E7E]Serial.print(Tensione);
[color=#7E7E7E]Serial.println(" Volt");
[color=#7E7E7E]Serial.write ("Potenza Assorbita= ");
[color=#7E7E7E]Serial.print(PotenzaAss);
[color=#7E7E7E]Serial.println(" Watt");
[color=#7E7E7E]Serial.print ("Potenza Prodotta= ");
[color=#7E7E7E]Serial.print(PotenzaPro);
[color=#7E7E7E]Serial.println(" Watt");
[color=#7E7E7E]Serial.write ("Corrente Assorbita= ");
[color=#7E7E7E]Serial.print(CorrenteAss);
[color=#7E7E7E]Serial.println(" Amper");
[color=#7E7E7E]Serial.write ("Corrente Prodotta= ");
[color=#7E7E7E]Serial.print(CorrentePro);
[color=#7E7E7E]Serial.println(" Amper");
[color=#7E7E7E]Serial.write ("Totale Consumata= ");
[color=#7E7E7E]Serial.print(TotaleAss);
[color=#7E7E7E]Serial.println(" Kwh");
[color=#7E7E7E]Serial.write ("Totale Prodotta= ");
[color=#7E7E7E]Serial.print(TotalePro);
[color=#7E7E7E]Serial.println(" Kwh");
[color=#7E7E7E]*/
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]"Registro una Potenza Prodotta di ");
[color=#CC6600]Serial.[color=#CC6600]print(PotenzaPro);
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]" Watt");
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"");
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]"Registro una Potenza Assorbita di ");
[color=#CC6600]Serial.[color=#CC6600]print(PotenzaAss);
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]" Watt");
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"");
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]"Immetto in rete una Potenza di ");
[color=#CC6600]Serial.[color=#CC6600]print(PotenzaMon);
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]" Watt");
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"");
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]"Accensione Uscita 1 Impostata a ");
[color=#CC6600]Serial.[color=#CC6600]print(Uscita_1_ON);
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"");
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]"Spegnimento Uscita 1 Impostata= ");
[color=#CC6600]Serial.[color=#CC6600]print(Uscita_1_OFF);
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"");
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]"Accensione Uscita 2 Impostata a ");
[color=#CC6600]Serial.[color=#CC6600]print(Uscita_2_ON);
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"");
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]"Spegnimento Uscita 2 Impostata= ");
[color=#CC6600]Serial.[color=#CC6600]print(Uscita_2_OFF);
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"");
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]"Totale Prodotta= ");
[color=#CC6600]Serial.[color=#CC6600]print(TotalePro);
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]" Kwh");
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"");
[color=#7E7E7E]//Serial.println("");
[color=#CC6600]digitalWrite(13, [color=#CC6600]false);
[color=#CC6600]switch (monitor){ [color=#7E7E7E]//Non modificare sopra non qui. Selettore potenza da monitorere
[color=#CC6600]case 1:
PotenzaMon=PotenzaPro;
[color=#CC6600]break;
[color=#CC6600]case 2:
PotenzaMon=PotenzaAss;
[color=#CC6600]break;
[color=#CC6600]case 3:
PotenzaMon=PotenzaPro-PotenzaAss;
[color=#CC6600]break;
[color=#CC6600]case 4:
PotenzaMon=PotenzaAss-PotenzaPro;
[color=#CC6600]break;
}
[color=#CC6600]if (PotenzaMon();
[color=#CC6600]else [color=#CC6600]if ([color=#CC6600]millis()>(Uscita_1_Time_On*1000+TUscita1in)) [color=#CC6600]digitalWrite(Uscita1,[color=#006699]HIGH);
[color=#CC6600]if (PotenzaMon>Uscita_1_OFF) TUscita1out=[color=#CC6600]millis();
[color=#CC6600]else [color=#CC6600]if ([color=#CC6600]millis()>(Uscita_1_Time_Off*1000+TUscita1out)) [color=#CC6600]digitalWrite(Uscita1,[color=#006699]LOW);
[color=#CC6600]if (PotenzaMon();
[color=#CC6600]else [color=#CC6600]if ([color=#CC6600]millis()>(Uscita_2_Time_On*1000+TUscita2in)) [color=#CC6600]digitalWrite(Uscita2,[color=#006699]HIGH);
[color=#CC6600]if (PotenzaMon>Uscita_2_OFF) TUscita2out=[color=#CC6600]millis();
[color=#CC6600]else [color=#CC6600]if ([color=#CC6600]millis()>(Uscita_2_Time_Off*1000+TUscita2out)) [color=#CC6600]digitalWrite(Uscita2,[color=#006699]LOW);
[color=#CC6600]if (PotenzaMon>Led1_On) [color=#CC6600]digitalWrite(Led1,[color=#006699]HIGH);
[color=#CC6600]else [color=#CC6600]digitalWrite(Led1,[color=#006699]LOW);
[color=#CC6600]if (PotenzaMon>Led2_On) [color=#CC6600]digitalWrite(Led2,[color=#006699]HIGH);
[color=#CC6600]else [color=#CC6600]digitalWrite(Led2,[color=#006699]LOW);
[color=#CC6600]if (PotenzaMon>Led3_On) [color=#CC6600]digitalWrite(Led3,[color=#006699]HIGH);
[color=#CC6600]else [color=#CC6600]digitalWrite(Led3,[color=#006699]LOW);
[color=#CC6600]if (PotenzaMon>Led4_On) [color=#CC6600]digitalWrite(Led4,[color=#006699]HIGH);
[color=#CC6600]else [color=#CC6600]digitalWrite(Led4,[color=#006699]LOW);
[color=#CC6600]if (PotenzaAss>PotenzaPro) [color=#CC6600]digitalWrite(LedNegativo,[color=#006699]HIGH);
[color=#CC6600]else [color=#CC6600]digitalWrite(LedNegativo,[color=#006699]LOW);
}
[color=#7E7E7E]// parte relativa ai tasti di modifica soglie intervento
}
[color=#CC6600]if (statoPulsanteUp == [color=#006699]LOW){
[color=#CC6600]Serial.[color=#CC6600]print([color=#006699]"Aumento Soglie Intervento, accensione Uscita 1 a ");
Uscita_1_ON = Uscita_1_ON + 100;
Uscita_2_ON = Uscita_2_ON + 100;
Uscita_1_OFF = Uscita_1_OFF + 100;
Uscita_2_OFF = Uscita_2_OFF + 100;
[color=#CC6600]Serial.[color=#CC6600]print(Uscita_1_ON);
[color=#CC6600]Serial.[color=#CC6600]print([color=#006699]" e uscita 2 a ");
[color=#CC6600]Serial.[color=#CC6600]print(Uscita_2_ON);
[color=#CC6600]delay(500);
[color=#CC6600]while (b {[color=#CC6600]digitalWrite(LedControllo, [color=#006699]HIGH);
[color=#CC6600]delay(300);
[color=#CC6600]digitalWrite(LedControllo, [color=#006699]LOW);
[color=#CC6600]delay(300);
b++;
}
b=0;
}
[color=#CC6600]else [color=#CC6600]if (statoPulsanteDown == [color=#006699]LOW){
[color=#CC6600]Serial.[color=#CC6600]print([color=#006699]"Diminuzione Soglie Intervento, accensione Uscita 1 a ");
Uscita_1_ON = Uscita_1_ON - 100;
Uscita_2_ON = Uscita_2_ON - 100;
Uscita_1_OFF = Uscita_1_OFF - 100;
Uscita_2_OFF = Uscita_2_OFF - 100;
[color=#CC6600]Serial.[color=#CC6600]print(Uscita_1_ON);
[color=#CC6600]Serial.[color=#CC6600]print([color=#006699]" e uscita 2 a ");
[color=#CC6600]Serial.[color=#CC6600]print(Uscita_2_ON);
[color=#CC6600]delay(500);
[color=#CC6600]while (b {[color=#CC6600]digitalWrite(LedControllo, [color=#006699]HIGH);
[color=#CC6600]delay(300);
[color=#CC6600]digitalWrite(LedControllo, [color=#006699]LOW);
[color=#CC6600]delay(300);
b++;
}
b=0;
}
}
5a2v0 il 16/7/2014, 11:15
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Rieccomi...finalmente ho potuto testare il lavoro realizzato in questo ultimo periodo e come promesso al mio post precedente, vi aggiorno sulla situazione:
Messo da parte Arduino Uno, ho "inscatolato" il nuovo Yun, con una proto-shield leggermente modificata dalla precedente per leggere tutti i sensori e per collegare il display via I2C e usare solo 2 pin digitali anzichè 6pin come con il normale collegamento..
Ho inoltre sostituito il buzzer usato per le segnalazioni acustiche, con una cassa (
Lo sketch differisce quindi per la parte che si occupa della comunicazione dei dati ottenuti (consumi) da arduino alla sua parte linux che poi sarebbe quella che mi permette di leggere i dati e interagire con i relè anche da remoto
Ma per quanto riguarda il calcolo dei consumi, lo sketch è basato sulla stessa logica di prima e quindi del lavoro di ElettroshockNow !
Subito dopo il montaggio (avevo cercato di curare al meglio lo sketch per non avere sorprese) ho visto che in linea generale, funzionava...
I sensori riportavano valori dei consumi delle linee monitorate attendibili, MA: nelle linee in cui non avevo carichi, per esempio, la linea bagni con a monte il magnetotermico messo su OFF, arduino mi riportava un consumo "fantasma" di circa 80 - 90 watt !!
Ho provato addirittura a staccare TUTTI i magnetotermici del quadro elettrico (tranne quello che da l'alimentazione ad arduino) e mi aspettavo quindi un bel 0 dai sensori CUCINA, BAGNI, STANZE e qualcosa (MA POCO) dal TOTALE... questo test con Arduino UNO l'avevo effettuato ed effettivamente riportava una manciata di watt.
Purtroppo con Yun e con quello sketch ho ottenuto il consumo "fantasma" su tutti e 4 i sensori... ora, potrei anche fare finta di nulla, tanto alla fine è una condizione rara quella in cui non ci sia davvero nessun utilizzatore che assorbe un po di corrente in ogni stanza, ma il problema è che potenzialmente questo consumo "fantasma" si va ad aggiungere alle letture reali quando invece il consumo C'E', inoltre avendo sviluppato anche l'app per android che mi mostra:
Consumo Totale
Consumo Cucina
Consumo Bagni
Consumo Stanze
non è particolarmente bello leggere valori come (esempio):
totale 2250 watt
cucina 2200 watt
bagni 90 watt
stnze 80 watt
perchè giustamente fa capire che qualcosa non va !!
(riporto la parte di codice che effettua la lettura)
[code]
//###################
//LETTURA SENSORI ###
//###################
//Lettura dati dei sensori e calcolo della corrente assorbita e dei consumi in watt
ampereTot = 0.00;
ampereCucina = 0.00;
ampereStanze = 0.00;
ampereBagni = 0.00;
numeroCampionamenti = 0;
inizioCampionamenti = millis() ;
do
{
numeroCampionamenti++;
sensorTotValue = analogRead(sensorTotPin);
sensorCucinaValue = analogRead(sensorCucinaPin);
sensorStanzeValue = analogRead(sensorStanzePin);
sensorBagniValue = analogRead(sensorBagniPin);
//offsetValue è la lettura senza carico quindi lo sottraiamo alle letture dei sensori
offsetValue = analogRead(offsetPin);
sensorTotValue -= offsetValue;
sensorCucinaValue -= offsetValue;
sensorStanzeValue -= offsetValue;
sensorBagniValue -= offsetValue;
//Alcune letture potrebbero avere valore negativo per cui noi consideriamo il valore assoluto
ampereTot += abs(sensorTotValue);
ampereCucina += abs(sensorCucinaValue);
ampereStanze += abs(sensorStanzeValue);
ampereBagni += abs(sensorBagniValue);
}
//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 calcolato con un carico noto
ampereTot = (ampereTot / numeroCampionamenti) * fattoreConversione;
ampereCucina = (ampereCucina / numeroCampionamenti) * fattoreConversione;
ampereStanze = (ampereStanze / numeroCampionamenti) * fattoreConversione;
ampereBagni = (ampereBagni / numeroCampionamenti) * fattoreConversione;
//Infine moltiplichiamo gli ampere per la tensione stabilita per ottenere il consumo in Watt
consumoTot = ampereTot * tensione;
consumoCucina = ampereCucina * tensione;
consumoStanze = ampereStanze * tensione;
consumoBagni = ampereBagni * tensione;
Ho provato allora a moficare qualcosa (aumentando SOLO il tempo di campionamento) visto che ora avevo più sensori, magari serviva più tempo per effettuare un adeguato numero di letture per ogni porta analogica e fare una giusta media ecc ecc... --> Nulla di risolto
Allora ho provato tante altre modifiche, ma senza raggiungere mai buoni risultati, anzi ho addirittura incontrato un NUOVO problema, ovvero:
Facendo consecutivamente tante letture analogiche di porte DIVERSE, alcune letture (le prime) di ogni pin vengono influenzate dalla lettura precedene del pin precedente in quanto (se ho ben capito) la parte che si occupa di effettuare la lettura analogica, per farlo, carica un condensatore che quindi va a falsare la lettura del prossimo pin, specialmente se le tensioni sono molto simili..
io in particolare con lo sketch eseguivo nei 20ms le letture così:
A1, A2, A3, A4, A5, A1, A2, A3, A4, A5, e cosi via quindi l'ADC cambiava la porta ad ogni lettura falsando quindi TUTTE le letture...
Seguendo un consiglio ottenuto sul forum di arduino, ho provato il seguente codice:
[code]
do
{
numeroCampionamenti++;
//offsetValue è la lettura senza carico quindi lo sottraiamo alle letture dei sensori
offsetValue = analogRead(offsetPin);
offsetValue = analogRead(offsetPin);
sensorTotValue = analogRead(sensorTotPin);
sensorTotValue = analogRead(sensorTotPin) - offsetValue;
sensorCucinaValue = analogRead(sensorCucinaPin);
sensorCucinaValue = analogRead(sensorCucinaPin) - offsetValue;
sensorStanzeValue = analogRead(sensorStanzePin);
sensorStanzeValue = analogRead(sensorStanzePin) - offsetValue;
sensorBagniValue = analogRead(sensorBagniPin);
sensorBagniValue = analogRead(sensorBagniPin) - offsetValue;
//20 sono i millisecondi che verranno campionati
while ((millis() - inizioCampionamenti) < 20);
che avrebbe dovuto effettuare una lettura a vuoto per ogni pin analogico per avere la seconda lettura più precisa, ma avevo sempre problemi con le letture..
In preda alla disperazione, o forse colto da un improvvisa ispirazione, ho pensato che la strada giusta fosse quella di fare tante letture consecutive per ogni pin e POI cambiare e leggere il successivo, così ho riscritto la parte delle letture così:
[code]
//###################
//LETTURA SENSORI ###
//###################
//Lettura dati dei sensori e calcolo della corrente assorbita e dei consumi in watt
sensorTotValue = 0;
sensorCucinaValue = 0;
sensorStanzeValue = 0;
sensorBagniValue = 0;
offsetValue = 0;
//SENSORE BAGNI
numeroCampionamenti = 0;
inizioCampionamenti = millis() ;
do
{
numeroCampionamenti++;
sensorBagniValue += analogRead(sensorBagniPin);
}
//20 sono i millisecondi che verranno campionati per ogni sensore
while ((millis() - inizioCampionamenti) < 20);
sensorBagniValue /= numeroCampionamenti;
//SENSORE STANZE
numeroCampionamenti = 0;
inizioCampionamenti = millis() ;
do
{
numeroCampionamenti++;
sensorStanzeValue += analogRead(sensorStanzePin);
}
//20 sono i millisecondi che verranno campionati per ogni sensore
while ((millis() - inizioCampionamenti) < 20);
sensorStanzeValue /= numeroCampionamenti;
//SENSORE CUCINA
numeroCampionamenti = 0;
inizioCampionamenti = millis() ;
do
{
numeroCampionamenti++;
sensorCucinaValue += analogRead(sensorCucinaPin);
}
//20 sono i millisecondi che verranno campionati per ogni sensore
while ((millis() - inizioCampionamenti) < 20);
sensorCucinaValue /= numeroCampionamenti;
//SENSORE TOTALE
numeroCampionamenti = 0;
inizioCampionamenti = millis() ;
do
{
numeroCampionamenti++;
sensorTotValue += analogRead(sensorTotPin);
}
//20 sono i millisecondi che verranno campionati per ogni sensore
while ((millis() - inizioCampionamenti) < 20);
sensorTotValue /= numeroCampionamenti;
//OFFSET
numeroCampionamenti = 0;
inizioCampionamenti = millis() ;
do
{
numeroCampionamenti++;
//offsetValue è la lettura senza carico che poi sottraiamo alle letture dei sensori
offsetValue += analogRead(offsetPin);
}
//20 sono i millisecondi che verranno campionati per ogni sensore
while ((millis() - inizioCampionamenti) < 20);
offsetValue /= numeroCampionamenti;
sensorTotValue -= offsetValue;
sensorCucinaValue -= offsetValue;
sensorStanzeValue -= offsetValue;
sensorBagniValue -= offsetValue;
//Alcune differenze potrebbero avere valore negativo per cui noi consideriamo il valore assoluto
sensorTotValue = abs(sensorTotValue);
sensorCucinaValue = abs(sensorCucinaValue);
sensorStanzeValue = abs(sensorStanzeValue);
sensorBagniValue = abs(sensorBagniValue);
//Per ottenere gli ampere reali moltiplichiamo la media di ampere letti nei 20ms per 0.166 che è il fattore di conversione calcolato con un carico noto
ampereTot = sensorTotValue * fattoreConversione;
ampereCucina = sensorCucinaValue * fattoreConversione;
ampereStanze = sensorStanzeValue * fattoreConversione;
ampereBagni = sensorBagniValue * fattoreConversione;
//Infine moltiplichiamo gli ampere per la tensione stabilita per ottenere il consumo in Watt
consumoTot = ampereTot * tensione;
consumoCucina = ampereCucina * tensione;
consumoStanze = ampereStanze * tensione;
consumoBagni = ampereBagni * tensione;
Con 5 cicli do-while (1 per ogni porta analogica) ho ottenuto finalmente dei bei 0 (o valori comunque bassi e accettabili) in condizioni di NIENTE CARICO, cosa STRANA invece in condizioni di carico dove leggo si un consumo ma BASSO rispetto all'assorbimento di utilizzatori NOTI..(esempio un phon da max 1800 watt me lo leggeva 160watt)
Facendo di nuovo prove sul TEMPO DI CAMPIONAMENTO, ho provato ad abbassarlo per tutti e 5 i cicli do-while da 20ms a 10ms e magicamente spunta il consumo VERO... ma ancora con un altro problema:
il consumo è letto ad intervalli (esempio): phon max 1800watt acceso, il consumo Totale mi mostra 1750watt (ok) dopo 1 secondo mi dice 1780watt (ok) dopo ancora mi dice 1740watt (ok) dopo mi dice di colpo 500watt e dopo magari riprende con valori attendibili ma sempre con un valore nettamente inferiore in mezzo..
altro esempio: consumo STANZE con 1 pc acceso, qualche tv in preaccensione, modem, switch ecc ecc mi da 160 watt circa (ci può stare) poi 190 poi 200 ma ogni tanto mi dice 30!
Ho provato ad abbassare ulteriormente e poi anche ad aumentare oltre i 20ms il tempo di campionamento, ma i risultati peggioravano addirittura...
Diciamo che rispetto all'inizio non ho più le letture fantasma ma ho sempre qualche problemino.. sono sicuro che mi sfugge qualcosa, ma non so cosa, per cui chiedo aiuto a Voi...
Che mi consigliate ?
ElettroshockNow il 16/7/2014, 20:06
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao,
Misura a vuoto tutti gli input , probabilmente l'offset è diverso.
Se invece usi una tensione offset in comune per tutti i sensori devi necessariamente usare un operazionale per abbassare l'impedenza , altrimenti i sensori si disturbano a vicenda, in quesyo caso potrai usare un pin analogico per misurare tale valore e sottrarlo in tempo reale hai valori dei sensori.
A titolo di curiosità:
Visto che stai usando yun , testa anche quanti campionamenti riesce ad eseguire a periodo di default..
5a2v0 il 17/7/2014, 11:38
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Attualmnte ho rimesso questo codice (che era quello che avevo preparato per yun prima ancora di montarlo, sulla base di quello che usavo per UNO):
[code]
//###################
//LETTURA SENSORI ###
//###################
//Lettura dati dei sensori e calcolo della corrente assorbita e dei consumi in watt
ampereTot = 0.00;
ampereCucina = 0.00;
ampereStanze = 0.00;
ampereBagni = 0.00;
numeroCampionamenti = 0;
inizioCampionamenti = millis() ;
do
{
numeroCampionamenti++;
sensorTotValue = analogRead(sensorTotPin);
sensorCucinaValue = analogRead(sensorCucinaPin);
sensorStanzeValue = analogRead(sensorStanzePin);
sensorBagniValue = analogRead(sensorBagniPin);
//offsetValue è la lettura senza carico quindi lo sottraiamo alle letture dei sensori
offsetValue = analogRead(offsetPin);
sensorTotValue -= offsetValue;
sensorCucinaValue -= offsetValue;
sensorStanzeValue -= offsetValue;
sensorBagniValue -= offsetValue;
//Alcune letture potrebbero avere valore negativo per cui noi consideriamo il valore assoluto
ampereTot += abs(sensorTotValue);
ampereCucina += abs(sensorCucinaValue);
ampereStanze += abs(sensorStanzeValue);
ampereBagni += abs(sensorBagniValue);
}
while ((millis() - inizioCampionamenti) < 80);
/*Serial.print(offsetValue);
Serial.println(sensorTotValue);
Serial.println(sensorCucinaValue);
Serial.println(sensorBagniValue);
Serial.println(sensorStanzeValue);
Serial.println("-------------------");*/
//Per ottenere gli ampere reali moltiplichiamo la media di ampere letti nei 20ms per 0.166 che è il fattore di conversione calcolato con un carico noto
ampereTot = (ampereTot / numeroCampionamenti) * fattoreConversione;
ampereCucina = (ampereCucina / numeroCampionamenti) * fattoreConversione;
ampereStanze = (ampereStanze / numeroCampionamenti) * fattoreConversione;
ampereBagni = (ampereBagni / numeroCampionamenti) * fattoreConversione;
//Infine moltiplichiamo gli ampere per la tensione stabilita per ottenere il consumo in Watt
consumoTot = ampereTot * tensione;
consumoCucina = ampereCucina * tensione;
consumoStanze = ampereStanze * tensione;
consumoBagni = ampereBagni * tensione;
Che in fin dei conti mi da il problema minore, ovvero qualche lettura più alta del normale in assenza di carico...
Per completezza preciso che uso un partitore di tensione in comune per tutti i sensori e per l'offset ed effettuando prove sia con tester sia con sketch appositamete modificato, senza sensori collegati, il voltaggio arriva uguale ad ogni porta!
p.s. allego stavolta un (seppur elementare) schema fatto con Fritzing..
Andrò a cercare qualche info sugli "operazionali" che mi hai menzionato per vedere come funzionano e cercare di capire come posso usarlo nel mio caso..
" />