KenFalco

Calcolo Consumo-Ah

Jun 16th, 2021
657
136 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "millis.h"
  2.  
  3. void aggiorna();
  4. void draw(); //display
  5.  
  6. static const float scaleFactor = 100.0;
  7.  
  8. static float corrente = 0.0;
  9. static float consumo_totale = 0.0;
  10.  
  11. static unsigned long tempo_precedente = 0;
  12.  
  13. //float consumo = 0.0; //consumo "sul momento".
  14. //float media_sensore = 0.0;
  15. //float tensione = 0.0;
  16.  
  17.  
  18. static Millis timer; //default 500ms
  19.  
  20.  
  21. void setup()
  22. {
  23.    
  24. }
  25.  
  26. void loop()
  27. {
  28.     timer.toCall(aggiorna);
  29. }
  30.  
  31. void aggiorna()
  32. {
  33.     float sensore_corrente = 0.0;
  34.    
  35.     const unsigned long start = millis();
  36.     for(int i=0; i<100; i++)
  37.     {
  38.         sensore_corrente += analogRead(0);
  39.         delay(1);
  40.     }
  41.     const unsigned long dt_1 = millis() - start;
  42.    
  43.     sensore_corrente /= 100.0; //calcolo della media
  44.     const float tensione = (sensore_corrente / 1023.0) * 5000.0; // [mV]
  45.     corrente = (tensione - 2492.0) / scaleFactor; // [A]
  46.     //In questo momento ho gli ampere medi nel periodo di 100ms.
  47.    
  48.     //const float consumo = (time / dt) * corrente; //[Ah]; calcolo iniziale di consumo, riferito esclusivamente ai 100ms per il calcolo della media, il valore nel tempo totale viene perso.
  49.    
  50.     const unsigned long dt_2 = millis() - tempo_precedente;
  51.     const float tempo_trascorso_totale = dt_1 + dt_2;
  52.     constexpr float time = 3600.0 * 1000.0; // 1 ora in ms.
  53.     const float consumo = (time / tempo_trascorso_totale) * (corrente * (dt_2 / dt_1)); //[Ah]; ora viene tenuto conto il tempo "perso" stimando che venga usata la stessa energia nell'arco dei "500ms" precedenti.
  54.     consumo_totale += consumo;
  55.    
  56.     tempo_precedente = millis();
  57.     //aggiorna i dati sul display
  58.     draw();
  59. }
  60.  
  61. void draw()
  62. {
  63.    
  64. }
RAW Paste Data