Sari la conținut
ELFORUM - Forumul electronistilor

Problema senzor de curent acs758


bogdan666

Postări Recomandate

Am facut un incarcator solar cu arduino, si am urmatoarea problema cu senzorul de curent, cand nu trece curent prin el ar trebui sa fie 0V, dar defapt e 0.590V, care e citit de un adc, si anume ads1115. Cum pot sa spun adc-ului sa inceapa numaratoarea doar de la 590mV?

 

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

void setup(void)
{
  pinMode(9, OUTPUT);
  lcd.init();
  lcd.backlight();
  Serial.begin(9600);
  ads.begin();
}
unsigned long startMillis;
unsigned long currentMillis;
unsigned long elapsedMillis;
byte pulseWidth = 0;

void loop(void)
{

  V1 = ((ads.readADC_SingleEnded(0)) * 0.0001875) * 7;
  V2 = ((ads.readADC_SingleEnded(1)) * 0.0001875) * 20;
  V3 = ((ads.readADC_SingleEnded(2)) * 0.0001875) * 10;
  V4 = ((ads.readADC_SingleEnded(3)) * 0.0001875) * 8;

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

  en1 = en1 += (V3 * V4) * 1 / 36000;
  en2 = en2 += (V1 * V2) * 1 / 36000; 

  lcd.setCursor(0, 0);
  lcd.print(V4, 2);
  lcd.setCursor(5, 0);
  lcd.print("V");
  lcd.setCursor(7, 0);
  lcd.print(V3, 3);
  lcd.setCursor(12, 0);
  lcd.print("A");
  lcd.setCursor(14, 0);
  lcd.print(V3 * V4, 1);
  lcd.setCursor(19, 0);
  lcd.print("W");

  lcd.setCursor(0, 1);
  lcd.print(V1, 3);
  lcd.setCursor(5, 1);
  lcd.print("V");
  lcd.setCursor(7, 1);
  lcd.print(V2, 3);
  lcd.setCursor(12, 1);
  lcd.print("A");
  lcd.setCursor(14, 1);
  lcd.print(V1 * V2, 1);
  lcd.setCursor(19, 1);
  lcd.print("W");

  lcd.setCursor(0, 2);
  lcd.print("IN");
  lcd.setCursor(4, 2);
  lcd.print(en1, 1);
  lcd.setCursor(10, 2);
  lcd.print("W/H");
  lcd.setCursor(0, 3);
  lcd.print("OUT");
  lcd.setCursor(4, 3);
  lcd.print(en2, 1);
  lcd.setCursor(10, 3);
  lcd.print("W/H");
 
  lcd.setCursor(14, 3);
  lcd.print(MM);
  lcd.print(":");
  lcd.print(SS);

  if (V1 < 28 )
  {
    if (pulseWidth != 255) pulseWidth++;
  }
  if (V1 > 28 )
  {
    if (pulseWidth = 0);
  }
  analogWrite(9, pulseWidth);
}

 

Editat de bogdan666
Link spre comentariu

Poate intereseaza pe cineva sau are aceeasi problema, am rezolvat problema cu "rotunjirile"

 

 V1 = 0;
  V2 = 0;
  V3 = 0;
  V4 = 0;
  for (int i = 0; i < 10; i++)
  {
    V1 += ads.readADC_SingleEnded(0) * 0.0001875 * 7.0;
    V2 += (ads.readADC_SingleEnded(1) * 0.0001875 - 0.588) * 20;
    V3 += (ads.readADC_SingleEnded(2) * 0.0001875 - 0.588) * 10;
    V4 += ads.readADC_SingleEnded(3) * 0.0001875 * 8.0;
    delay(1);
  }
  V1 /= 10;
  V2 /= 10;
  V3 /= 10;
  V4 /= 10;

 

Link spre comentariu

Alătură-te conversației

Poți posta acum și să te înregistrezi mai târziu. Dacă ai un cont, autentifică-te acum pentru a posta cu contul tău.
Notă: Postarea ta va necesita aprobare moderator înainte de a fi vizibilă.

Vizitator
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Răspunde la acest subiect...

×   Alipit ca text avansat.   Restituie formatare

  Doar 75 emoji sunt permise.

×   Linkul tău a fost încorporat automat.   Afișează ca link în schimb

×   Conținutul tău precedent a fost resetat.   Curăță editor

×   Nu poți lipi imagini direct. Încarcă sau inserează imagini din URL.




×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări