Calcolare Volt conì sesnore Acs 712

ciao a tutti avrei bisogno si un piccolo aiuto ,non riesco a calcolare i volt con il sensore Acs 712 ,nel senso
vorrei fare un voltmetro/amperometro
Volt max 40;
A max 20;
ho usato il sesnore acs 712 30 ;
mi sono calcolato la formula e tutto solo che i valori in Ampere sono giuste ,invece quelli in volt rimangono sempre a 2,5 ,e come se non leggesse alcun valore

grazie

ecco il sketch usato

int mVperAmp = 66; 
int RawValue= 0;
int ACSoffset = 2500;
double voltage = 0;
double current = 0;

void mostraCorrente() {

    RawValue = analogRead(analogPinCorrente);
    voltage = (RawValue / 1024.0) * 5000; // Gets you mV
    double volts = voltage / 1000;  // Get you V

    current = ((voltage - ACSoffset) / mVperAmp);  // Current in Amps
    current = fabs(current);    // Valore assoluto di corrente

    lcd.setCursor(0, 0);
    lcd.print("Amp: ");
    lcd.print(current);
    lcd.print(" A");

    lcd.setCursor(0, 1);
    lcd.print("Volt: ");
    lcd.print(volts);
    lcd.print(" V");

> kirpidik: ti ricordo che in conformità al regolamento (... che ti consiglio di leggere con MOLTA attenzione), punto 7, devi editare il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra). Grazie.

Guglielmo

capito
chiedo scusa :frowning:

per favore edita il tuo primo post e usa i tag code (metti il codice dentro a [ code] e [ /code] senza spazi)

Ti consiglio questo tutorial in italiano:
http://www.lucadentella.it/2011/11/29/sensore-di-corrente-con-arduino/

Nel codice quando fai divisioni per un double/float, le costanti numeriche meglio se le scrivi "forzando" le virgole ovvero scrivi 1000.0 invece di 1000

ho gia visto la pagina in questione ,pero li della misura dei volt non dice nulla
lui misura solo la corrente (e fino a li ci sono arrivato)
il fatto e che avendo a disposizione sia la corrente che la Voffset come potrei calcolare i Volt )
quale e la formula che lega queste grandezze,e come dovrei impostarla
(pensavo di fare un piccolo circuito esterno con il partitore di tensione e calcolarlo da li)
pero visto che ho gia il sensore Acs chiedevo se si potesse fare qualcosa

Aspetta, se ho capito bene, la lettura della corrente è corretta

Ok, quindi è corretta anche la tensione, che usi per calcolare la corrente

La tensione letta dovrebbe essere2,5 più o meno 66 mv per ampere
Per correnti basse ci sta che leggi sempre 2,5

Devi pensare anche al numero di cifre decimali visualizzate

Posta un esempio di lettura...

acs se non vado errato, misura solo la corrente.
se vuoi misurare la tensione devi fare un partitore che quando ci sono 40 volt, all'ingresso analogico di arduino devi avere max 5v, (meglio qualcosa in meno).
non dimenticare di mettere uno zener da 5.1v in modo da metterti al riparo da sgradite sorprese.
un circuito del genere l'ho realizzato per un caricabatteria e funziona bene.
an0 corrente, an1 tensione, piu' un display 16 colonne e due righe.
ciao

Comunque di default un valore float/double con Serial.print() stampa sempre SOLO 2 decimali.
prova con lcd.println(volts,4);
Protrebbe essere anche la print() di lcd fatta come la Serial (di solita classe che eredita da classe Print).
Ma avendo solo un pezzo di codice, non sappiamo che lcd e quale lib.

grazie a tutti per le risposte
si credo che andrò con il partitore
(pero avevo visto in rete che si poteva fare direttamente con il sensore :slight_smile: sarebbe stato un passo in meno da fare )
vediamo se riesco a farlo funzionare
ecco il codice completo

#include <math.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define analogPinTemperatura A0     //pin sensore temperatura
#define analogPinCorrente A1        //pin sensore corrente e voltagio

#define beta 3950 //the beta of the thermistor
#define resistance 10 //the value of the pull-up resistor

LiquidCrystal_I2C lcd(0x27, 20, 4);



void mostraTemperatura();
void mostraCorrente();

void setup() {

    lcd.init();  //initialize the lcd
    lcd.backlight();  //open the backlight


}


void loop() {
    mostraTemperatura();
    mostraCorrente();
    
    delay(2000); // Aggiorn schermo ogni x millisecondi
}

void mostraTemperatura() {
   
    long a = 1023 - analogRead(analogPinTemperatura); //read thermistor value
    float tempC = beta /(log((1025.0 * 10 / a - 10) / 10) + beta / 298.0) - 273.0;



   
    lcd.setCursor(0, 2);// set the cursor to column 0, line 0
    lcd.print("Temp: "); // Print a message of "Temp: "to the LCD.
    lcd.print(tempC); // Print a centigrade temperature to the LCD.

    lcd.write(char(223));   // char(223) restituisce il carattere speciale gradi (cerchietto)
    lcd.print("C");//print the unit" ? "
}

int mVperAmp = 66; 
int RawValue= 0;
int ACSoffset = 2500;
double voltage = 0;
double current = 0;

void mostraCorrente() {


    RawValue = analogRead(analogPinCorrente);
    voltage = (RawValue / 1024.0) * 5000; // Gets you mV
    double volts = voltage / 1000;  // Get you V

    current = ((voltage - ACSoffset) / mVperAmp);  // Current in Amps
    current = fabs(current);    // Valore assoluto di corrente

    lcd.setCursor(0, 0);
    lcd.print("Amp: ");
    lcd.print(current);
    lcd.print(" A");

    lcd.setCursor(0, 1);
    lcd.print("Volt: ");
    lcd.print(volts);
    lcd.print(" V");


}

kirpidik:
(pero avevo visto in rete che si poteva fare direttamente con il sensore :slight_smile: sarebbe stato un passo in meno da fare )

Non so cosa hai visto, però con l'ACS712 puoi misurare solo la corrente, non è possibile in nessun modo misurare la tensione visto che lavora in serie al circuito, la tensione si misura in parallelo.

hai perfettamente ragione ,(non so cosa ho visto e mi era sembrato fattibile farlo )
errore mio
comunque ho risolto tutto, fatto il partitore e funziona alla grande

grazie a tutti :slight_smile: