Ciao, vi scrivo perché mi sta capitando una cosa che non riesco a capire.
Praticamente nel mio codice misuro una tensione sul pin A0 (una tensione da 0 a 12v, in questo momento proveniente da un alimentatore ma solitamente da una o piu batterie da auto).
Ho usato un metodo piuttosto empirico (credo) per calcolarla e il circuito che ci va dietro sinceramente non lo ho fatto io personalmente quindi non sarei in grado di postarvelo.
Il problema è che la primissima lettura - arduino appena partito - è sbagliata e di molto, circa 1v7 ed è una cosa che mi da fastidio perché non comprendo..
E' vero che dopo un po' di warm up, il problema si risolve e la tensione comincia ad essere sempre più vicina alla realtà.
La parte di codice che ho usato per misurare la tensione è semplicemente:
Ho usato internal perché mi è sembrato più preciso / più lineare
45.83 è perchè quando misuro quello che ho su A0 trovo 550 e siccome so che l'alimentazione attuale è 12V ho fatto i conti..
Senza avere lo schema del circuito e lo sketch completo è impossibile capire dove puoi sbagliare, potrebbero essere tante cose.
Per usare il reference interno la tensione esterna deve essere ridotta nel range 0-1,1V. Sopra a 1,1V tutto viene letto a fondo scala (1023). Inoltre la tensione in arrivo dall'esterno deve essere ridotta a max 5,5V: dare più di questo valore su un pin dell'Arduino equivale a fare seri danni.
Purtroppo lo schema non saprei nemmeno dartelo perché è stato fatto così, non so come dire.
Per quanto riguarda i seri danni, che tipo di seri danni ?
Io sto usando reference interno ma leggendo semplicemente il valore in A0 leggo 550.00 e non 1023.00 e quindi penso che non arrivi una tensione + alta di 5.5v su quel pin
seri danni = bruciare il pin o, nella peggiore delle ipotesti, anche il chip
analogRead restituisce un numero di tipo int e non float, per cui il range va da 0 a 1023 e non da 0.0 a 1023.0.
se usi il riferimento interno, esso è pari a 1,1V per cui la tensione in ingresso deve essere riportata anch'essa nel range 0-1,1 altrimenti fai letture senza senso.
Immagino ci sia un partitore di tensione sul pin, fatto da chi ha realizzato il circuito. Hai un tester per vedere che tensione c'è in ingresso sul pin?
Ho capito! ma è una cosa che succede dopo un uso prolungato o subito ? perché sinceramente, è da un po' che sta funzionando e non ho ancora avuto problemi
vero, ma salvando il valore in un double mi da la virgola.. ci sta come cosa ?
ottimo consiglio questo, grazie!
Per il partitore e per quant'altro ti so dire tutto più tardi / domani
Ah, allora direi che ha un partitore o qualcosa perchè come ti dicevo da tempo sto usando questo programma e non ho ancora avuto problematiche!
Dai, lunedì riesco sicuramente a darti tutte le informazioni di cui hai bisogno!
Ma cosa ad occhio che cosa può essere ? la posizione di quel pezzo di codice nel programma ? il circuito proprio ?
Grazie comunque, come sempre per gli aiuti che date !
Oltre al circuito serve capire come questo funziona, nonché vedere il programma che usi.
Mi spiego con un esempio: potresti iniziare a campionare prima che sia effettivamente presente il segnale sul pin, per cui la prima lettura sarebbe prossima a zero, evidentemente sballata.
Ho controllato, c'è un partitore e la tensione sul pin a0 va da 0 a 1.1 volt e probabilmente il fatto che la prima lettura sia sbagliata è dovuta alla presenza di dei condensatori..
Grazie delle risposte!
Va visto anche il valore delle R usate nel partitore. L'ADC interno all'Atmega è strutturato per gestire segnali in ingresso com un'impedenza max di 10K, se siamo oltre ci vuole più tempo per la campionatura e la prima potrebbe essere sfalsata anche per questo.
Comunque visto che hai trovato l'inghippo, metti un delay di un mezzo secondo prima di iniziare a fare le letture.