leggere corrente con ACS712

:o
Salve posto il mio problema voglio misurare delle correnti
attraverso ACS712 ora mi succede questo .
Se utilizzo i 5volt attaverso un potenziometro il
centrale lo mando ad Analog Read tutto ok con
resistenza nulla valore dig 1024 man mano che giro il potenziometro
mi cambia come deve i valori fino a zero .
Ora siccome voglio misurare corrente da una fonte superiore
a 5 volt ho collegato ACS712 pero mi succede
che ho sempre un valore digitale 512 anche se non
ce carico resistivo inserito e dove sbaglio i 12 volt
attraversano una resistenza di 100ohm 5watt

grazie

ho fatto un giro in internet ho visto
che il modulo puo misurare valore positivi
che negativi di corrente e quando la corrente
e zero amper da in uscita 2,5 volt
quindi il valore digitale 512

devo vedere quale e la formula per darmi la corrennte
qualcuno mi puo aiutare,unaltro problema se ho ad esempio
3 di questi modulini come faccio a distinguerli se li
vedo passo nella seriale ce un modo quando faccio Serialprint
assieme alla variabile intenger di passare una variabile char
testuale per dire che quello amperagio e del modulo numero1-
numero2-numero3 cosi si so quale carico sto misurando

grazie

Devi indicare anche i valori di range minimo e massimo per poter fare dei calcoli.
P.es. se il sensore legge ±2A avrai:
-2A = 0
0A = 512
2A = 1024
poiché l'intero range è di 4A avrai che ogni bit vale 4/1024= 3,9mA circa, da qui in poi è solo un poco di matematica....

Se hai tre sensori li collegherai a tre pin analogici separati, che leggerai ciclicamente, la risposta al tuo quesito è affermativa, puoi inviare alla seriale stringhe di testo assieme ai valori calcolati ottenendo una cosa di questo tipo:
Sensore 1 = 500mA
Sensore 2 = 1,4A
Sensore 3 = -120mA

Salvo1969:
ho fatto un giro in internet ho visto
che il modulo puo misurare valore positivi
che negativi di corrente e quando la corrente
e zero amper da in uscita 2,5 volt
quindi il valore digitale 512

Questo si chiama offset. Serve come hai scritto di poter misurare correnti negative e avere un uscita tra 0 e 5V.
Un offset si usa anche per gli acelerometri o certi sensori di temperatura.

Ciao Uwe

Il sensore ACS712 secondo il modello ha tre range: da -5A a +5A, da -20A a +20A e da -30A a +30A.

Alimentandolo con +5V, l'offset (0A) risulta +2.5V, come ti ha già spiegato il buon Michele.

La formula per determinare la corrente per il +/- 20A di fondo scala è perciò:

float Corrente = 20.0 * (analogRead(A0) - 512) / 512;

:slight_smile:
Grazie per avermi aiutato
volevo chiedere se e possibbile passare
attraverso la seriale una variabile
che poi la vado a recuperare con appinventor 2
e che in quella variabile contiene solo ad esempio corrente1

perche il mio problema e che ricevo tutte le informazioni attraverso Bluetooht
ad appinventor pero io li voglio selezionare ognuna per i
fatti suoi non so se sono stato chiaro

grazie

:frowning:
non ci sto capendo piu niente la sfortuna e di non essere esperto in materia.
Forse per riprendere i dati che invio alla seriale .
Per richiamarli non tutti cosi come e il mio caso ma ad esempio
tipo che avrei una stringa che do un nome e che la posso richiamare
dallaltro lato tramite appinventor php ecc , e che in questa stringa
contiene ad esempio i dati da me inseriti

Perdonami, ma da come ti poni rispetto ai suggerimenti che ti sono stati dati, forse dovresti dare prima una buona occhiata al Reference o ad uno dei tanti manuali di base che circolano su Arduino, che ti forniscono le necessarie informazioni sulla programmazione di base. Se vai nella sezione Megatopic c'è il Topic "Link utili" dove troverai un sacco di materiale gratuito, compreso l'ultimissimo lavoro di Simone Majocchi, che certamente ti schiariranno le idee. Vedrai che dopo tutto ti apparirà più semplice. Ciao

Grazie per il consiglio nella sezione Megatopic ci sono molte cose interessanti.
Volevo chiedere speriamo che non dico ancora stronzate,
come ho citato sopra sono in possesso di un ACS712 5A
ora inserisco questo piccolo codice sotto per misurare la corrente

float corrente;
int analogPin = (A0);
int val = 0;
void setup() {
Serial.begin(9600);

}

void loop() {
val = analogRead(analogPin);
Serial.println(val);
float corrente =((float) analogRead(A0) / 512.0 - 1.0) * 2.5 / 2 * 20;
Serial.print ("la mia corrente e di");
Serial.println(corrente);
}


drovei misurare col mio carico inserito circa 240mA
infati se inserisco in serie il mio amperometro me lo conferma
vado al nocciolo del problema dalla formula sopra dove ho scritto
-----20; alla fine sul ciclo void loop()-----
dovrebbe essere per un ACS712 di 10A
pero in questo modo vedo nel mio caso i 240mA che leggo nella seriale
se invece inserisco 10; mi da altri valori cosa sbaglio

grazie

Perché hai modificato la formula che ti ho scritto?

Se hai un sensore da +/- 5A la gormula corretta è:

float Corrente = 5.0 * (analogRead(A0) - 512) / 512;

:confused:
ciao intanto grazie per l`aiuto ,
ho fatto la prova ho inseriro di nuovo la
formula che mai dato qualcosa faccio di sbagliato
il mio amperometro inserito mi da 20mA.
Mentre nel serial monitor non si muove niente

ciao

scusa queto e il codice inserito la corrente che mi appare nel serial monitor e di 50 mA
mentre il mio amperometro me se indica 200mA
forse sono questi operazinali che non sono precisi pero la differenza e tanta

grazie attendo risposta

float corrente;
int analogPin = (A0);    
int val = 0;  
void setup() {
  Serial.begin(9600); 
 
  }

void loop() {
     val = analogRead(analogPin); 
 Serial.println(val);    
   float Corrente = 5.0 * (analogRead(A0) - 512) / 512     //float corrente =((float) analogRead(A0) / 512.0 - 1.0) * 2.5 / 2 * 20; ho tolto la riga commentandola 
  Serial.print ("la mia corrente e di"); 
   Serial.println(corrente);
}

:slight_smile:
corrente lo scritto con la c minuscola e l `amperometro mi da 200mA
e non 20mA come ho scritto sopra.

byte analogPin = A0;
const float fondoScala = 5.0;   // fondo scala +/- 5A (dipende dal modello di ACS712)
float corrente = 0.0;

void setup() {
  Serial.begin(9600); 
  }

void loop() {
  corrente = fondoScala * (analogRead(analogPin) - 512) / 512;
  Serial.print ("la mia corrente e di"); 
  Serial.println(corrente, 3);    // visualizza con tre decimali
  delay(1000);    // ritardo 1 secondo per consentire visualizzazione
}

Manca un uguale:

byte analogPin = A0;

E il punto virgola finale sulla prima istruzione nella loop (il calcolo)

Grazie NID

:slight_smile: grazie di nuovo per l aiuto
Volevo chiedere quando do
Nel ciclo loop un delay di 1000ms
Non mi rallenta adesempio
Se ci sono dei sensori in ascolto
Oppure se comando attraverso
Dei tasti delle uscite che devo
Attivare non vengono rallentate
Di un secondo?
Poi se ho bisogno di misurazioni
Che vanno dell ordine di milliamper
Cosa mi consigliate forse dei
Sensori con corrente di Range
Inferiori per avere. da 0 a1024
Nella scala piu misurazioni possibbili
Perche cosi mi va da 512 a 518

Grazie

Il delay come sai è bloccante, quindi deve essere usato con moderazione.

Per l'esempio va bene, ma nei casi pratici come quello che hai accennato va ridotto o eliminato.

Con un fondo scala +/- 5A puoi apprezzare 5A / 512 = 0.0009A = circa 1mA per step.

Da quanto dici, stai misurando circa +6mA (518-512 = 6)

:slight_smile:
ciao
ho fatto la prova di nuovo col codice che mi hai postato per misurare corrente
amperometro mi da 200mA
mentre io leggo questi dati non vorrei che i sensori che ho comprato
sono indicati come 5A mentre me ne hanno mandati altri
grazie di nuovo la serial mi da la scala da 512 a 518

39 mA

grazie

:slight_smile:
non 39 mA
ma 0,060 quindi 6mA
non lo capisco perche il carico e una banale resistenza 47ohm 5Watt