Go Down

Topic: Controllo e gestione carico casalingo con sistema di priorità ! (Read 8693 times) previous topic - next topic

Brunello

quello che volevo dirti e' che fino a che e' collegato all'USB, Arduino viene alimentato dall'USB ( se la tensione sul Vin <6.6V )

Al momento che scolleghi l'USB , con solo 5,08V sul Vin, probabilmente hai una tensione di poco superiore a 4V per alimentare Arduino

5a2v0

riporto quanto leggo dalla pagina guida di YUN

Quote
There is no built in 5V regulator. If you power your Yún with more than 5V, you will likely damage it. If you are not powering the Yún from the micro-USB connection, you can apply power to the VIN and 5V pins on the board. If using the VIN pin, you cannot provide more than 5V, it will damage your board. It is recommended to power the Yún from the USB connection whenever possible.


http://arduino.cc/en/Guide/ArduinoYun

Brunello


5a2v0

credo di aver sistemato  8) 8)
Dico credo perché ho fatto a distanza l'upload del nuovo sketch e attualmente il tutto è montato senza i sensori...

Visto che fare una sola (o una manciata: si ho provato anche a mettere 3 o 4 letture consecutive di ogni porta prima di leggere la seguente) letture a vuoto prima della lettura ritenuta affidabile non risolveva, ho provato in quest'altro modo:

Code: [Select]

//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 (tempo di ciclo della corrente elettrica alternata a 50 Hz utilizzata in Europa)
  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 (tempo di ciclo della corrente elettrica alternata a 50 Hz utilizzata in Europa)
  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 (tempo di ciclo della corrente elettrica alternata a 50 Hz utilizzata in Europa)
  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 (tempo di ciclo della corrente elettrica alternata a 50 Hz utilizzata in Europa)
  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;


e ho 0 watt in tutte e 4 le variabili:  consumoTot, consumoCucina, consumoStanze, consumoBagni.

Appena torno sul posto, provo a collegare i sensori per accertarmi che non ci siano errori  o altri problemi  :smiley-red:

5a2v0

Aggiornamento situazione:
ho collegato i sensori e provato a leggere i 4 valori .. non erano attendibili, avevo spesso 0 oppure 38 oppure 76 oppure maxxxx su quello del totale 114 !!

però seguono il consumo, infatti se accendo un utilizzatore in bagno (phon da circa 1800watt) il valore di quel sensore sale, il totale pure, gli altri no ---> OK!

Però ovviamente non riportano valori giusti... ho provato ad abbassare il tempo di campionamento per ogni sensore (su Uno campionavo in 20 ms sia l'unico sensore che l'offset)... ho messo 10ms (a testa)  e i sensori hanno iniziato a mostrare valori piu reali (2000watt per la cucina con forno acceso!) ma se aggiorno velocemente la pagina che mostra i valori, vedo che ho dei brevi intervalli che mostrano valori più bassi del normale.

esempio ancora con cucina con forno acceso:

2050 - 2100 - 2050 - 1200 - 2050 (sono dati di esempio eh !!)

come posso aggirare il nuovo problema ?

5a2v0

Ci tengo, mentre cerco ancora di risolvere il problema,  a pubblicare 4 fotine dell'app per android che è uscita fuori:


gateway74

perché hai utilizzato un contattore NO e non NC ?
Nella normale operatività sarebbe stato non alimentato (minor usura, minor consumo di corrente) 

pablos

perché hai utilizzato un contattore NO e non NC ?
Nella normale operatività sarebbe stato non alimentato (minor usura, minor consumo di corrente)
??... NO = contatto Normalmente Open e quindi non alimentato perciò minor consumo, tutti i contattori hanno i contatti NO e non sono deviati come i relay a bassa potenza, non esiste NO-C-NC nei contattori ... cosa vuoi dire?
no comment

gateway74



Quote
??... NO = contatto Normalmente Open e quindi non alimentato perciò minor consumo, tutti i contattori hanno i contatti NO e non sono deviati come i relay a bassa potenza, non esiste NO-C-NC nei contattori ... cosa vuoi dire?
NO non vuol dire non alimentato.. vuol dire che senza tensione il suo contatto è aperto.

esistono contattori NC cioè nella normalità chiudono il circuito e quindi senza essere alimentati.
quando sono eccitati aprono il circuito.

Nell'impianto di casa considerando la normalità, tutti i circuiti devono essere alimentati, quindi mi chiedevo: perchè utilizzare un contattore NO e  tenerlo alimentato per farlo diventare NC?

ecco un esempio


Go Up