Ciao a tutti, vi scrivo per chiedervi alcuni consigli sperando di aver scritto nella sezione giusta.
Sto realizzando a scopo di sperimentazione con Arduino, una scheda di controllo (lettura) di alcuni valori di un'amplificatore lineare. Mi interessa leggere, tensioni e tramutarle in dati "visual" su display.
Il range di lettura va da 0 a 12V DC. Li sto adattando, con un circuito RC o LC per "filtrare" il segnale in ingresso e regolati con trimpot da 10K per limitare il tutto a 5V.
Arrivo al dunque: ho necessità di convertire 1Volt in lettura su un pin analogico in dato visual 30Ampere; sto utilizzando la funzione map come segue:
amp_50 = map (analogRead(leggi_50i),0,800,0,1100);
ma noto nei dati i seguenti valori:
dato raw: 204
dato volt: 1.00V (ricavato da voltage_50i = (leggi_50i * (5.0 / 1023)); )
dato Amp: 29.0 (ricavato dalla funzione map sopra indicata).
A parte questa anomalia nella lettura ed elaborazione dei dati, c'è un altro metodo più semplice per la visualizzazione del dato?
Inoltre, il dato raw non dovrebbe essere che, a 200 corrisponde 1 volt ??
Spero di essermi spiegato. Allego sketch..
#include <Wire.h>
#include <math.h>
#include <PCF8574_HD44780_I2C.h>
PCF8574_HD44780_I2C lcd(0x3f,20,4);
#define ingresso_50i A2
long leggi_50i = 0;
float voltage_50i = 0;
unsigned long leggi_50i_p = 0;
int amp_50 = 0;
void setup() {
Serial.begin(9600); // debug seriale
Serial.println("Ho fatto il setup");
/* INIZIALIZZO E ACCENDO IL DISPLAY */
lcd.init ();
lcd.backlight ();
inizializzaDisplay();
}
void inizializzaDisplay() {
lcd.setCursor(0,0);
lcd.print( "Grezzo:");
lcd.setCursor(0,1);
lcd.print("Volt:");
lcd.setCursor(0,2);
lcd.print("Amp:");
}
void loop() {
/////// INGRESSO AMPERE PIN A2 ///////
leggi_50i = analogRead(ingresso_50i); //lettura dato raw
voltage_50i = (leggi_50i * (5.0 / 1023)); //converti dato raw in voltaggio
Serial.println("FWD Grezzo:");
Serial.println(leggi_50i);
Serial.println("FWD VOLT:");
Serial.println(voltage_50i);
Serial.println("--------------------------");
lcd.setCursor (8, 0);
lcd.print (leggi_50i);
lcd.print (" ");
lcd.setCursor (7, 1);
lcd.print ((voltage_50i));
lcd.print (" ");
lcd.setCursor (6, 2);
amp_50 = map (analogRead(leggi_50i),0,800,0,1100);
lcd.print((amp_50/10), DEC);
lcd.print(".");
lcd.print((amp_50)%10, DEC);
lcd.print (" ");
delay (250);
} /////////////////// FINE LOOP /////////////////////