Jump to content
ELFORUM - Forumul electronistilor

Afisare W\h


bogdan666

Recommended Posts

Am o problema cu afisarea totala a puterii la un incarcator solar, si anume, totul merge ok pana cand variabilele se schimba, daca V si A sunt constanti tot timpul nu e nici o problema, deci as avea nevoie ca arduino sa adauge puterea curenta cu puterea de acum 10ms sa zicem. In codul actual, daca sa zicem A = 0, toata ecuatia e 0. atasez codul.

 

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#include <Adafruit_ADS1015.h>
Adafruit_ADS1115 ads(0x4B);
Adafruit_ADS1115 adsa(0x4A);
float V1 = 0.0;
float V2 = 0.0;
float V3 = 0.0;
float V4 = 0.0;
float V5 = 0.0;
float V6 = 0.0;

void setup(void)
{
  lcd.init();
  lcd.backlight();
  Serial.begin(9600);
  ads.begin();
  adsa.begin();
}
unsigned long startMillis;
unsigned long currentMillis;
unsigned long elapsedMillis;

void loop(void)
{
  int16_t adc1;
  adc1 = ads.readADC_SingleEnded(1);
  V1 = (adc1 * 0.0001875) * 6;
  int16_t adc2;
  adc2 = ads.readADC_SingleEnded(2);
  V2 = (adc2 * 0.0001875) * 6;
  int16_t adc3;
  adc3 = ads.readADC_SingleEnded(3);
  V3 = (adc3 * 0.0001875) * 6;
  int16_t adc4;
  adc4 = adsa.readADC_SingleEnded(1);
  V4 = (adc4 * 0.0001875) * 10;
  int16_t adc5;
  adc5 = adsa.readADC_SingleEnded(2);
  V5 = (adc5 * 0.0001875) * 10;
  int16_t adc6;
  adc6 = adsa.readADC_SingleEnded(3);
  V6 = (adc6 * 0.0001875) * 10;

  currentMillis = millis();
  elapsedMillis = (currentMillis - startMillis);
  unsigned long SS = (elapsedMillis / 1000) % 60;
  unsigned long MM = (elapsedMillis / (60000)) % 60;
  unsigned long HH = (elapsedMillis / (3600000));

  lcd.setCursor(0, 0);
  lcd.print(V1, 2);
  lcd.setCursor(5, 0);
  lcd.print("V");
  lcd.setCursor(7, 0);
  lcd.print(V2, 2);
  lcd.setCursor(12, 0);
  lcd.print("V");
  lcd.setCursor(14, 0);
  lcd.print(V3, 2);
  lcd.setCursor(19, 0);
  lcd.print("V");

  lcd.setCursor(0, 1);
  lcd.print(V4, 2);
  lcd.setCursor(5, 1);
  lcd.print("A");
  lcd.setCursor(7, 1);
  lcd.print(V5, 2);
  lcd.setCursor(12, 1);
  lcd.print("A");
  lcd.setCursor(14, 1);
  lcd.print(V6, 2);
  lcd.setCursor(19, 1);
  lcd.print("A");

  lcd.setCursor(0, 2);
  lcd.print(V1 * V4, 1);
  lcd.setCursor(5, 2);
  lcd.print("W");
  lcd.setCursor(7, 2);
  lcd.print(V2 * V5, 1);
  lcd.setCursor(12, 2);
  lcd.print("W");
  lcd.setCursor(14, 2);
  lcd.print(V3 * V6, 1);
  lcd.setCursor(19, 2);
  lcd.print("W");

  lcd.setCursor(0, 3);
  lcd.print((((V1 * V4) + (V2 * V5)) * elapsedMillis) / 3600000, 0);
  lcd.setCursor(7, 3);
  lcd.print(((V3 * V6) * elapsedMillis) / 3600000, 0);
  lcd.setCursor(14, 3);
  lcd.print(MM);
  lcd.setCursor(17, 3);
  lcd.print(":");
  lcd.setCursor(19, 3);
  lcd.print(" ");
  lcd.setCursor(18, 3);
  lcd.print(SS);
}

 

Link to comment
  • Replies 6
  • Created
  • Last Reply

Top Posters In This Topic

Foloseşti o variabilă float "energy" care pleacă de la zero şi la fiecare ciclu de 10ms se incrementează cu V x A x 1 / 360000.

energy = energy += V * A * 1/360000;

Dacă schimbi viteza buclei trebuie modificat şi raportul de înmulţire.

Edited by mihaicozac
Link to comment

Asta nu e mare scofală, stabileşti 2 praguri V_Max şi V_Min funcţie de chimia bateriilor, şi faci condiţiile:

charge = V < V_Max ? TRUE : FALSE; 
digitalWrite(un_pin_liber, charge);

Variabila booleană "charge" comandă printr-o ieşire releul sau tranzistorul sau ce ai pe acolo între panoul solar şi baterie.

Asta e o funcţie de bază, în practică ar mai trebui introdus şi un histerezis ca să nu tot comute aiurea când ajunge în jurul pragului V_Max.

V_Min se poate folosi ca să decuplezi ieşirea când bateria e descărcată:

output = V > V_Min ? TRUE : FALSE;
digitalWrite(alt_pin_liber, output);

 

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.




×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines