Ciao a tutti,
vorrei poter far misurare ad Arduino una tensione variabile 0-5V sul suo pin analogico 1 e fargli riportare il valore su un lcd Hitachi HD44780.
Ho già collegato l'LCD con Arduino in configurazione a 4bit in questo modo:
RS al pin 7 di Arduino
EN al pin 8 di Arduino DB4 al pin 9 di Arduino DB5 al pin 10 di Arduino DB6 al pin 11 di Arduino DB7 al pin 12 di Arduino
La libreria usata è LiquidCrystal.h
Il pin RW l'ho collegato a GND dato che l'LCD lo uso in sola scrittura.
Pertanto la funzione è LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
Qualcuno è così misericordioso da darmi qualche dritta sulla stesura del codice?
Grazie mille
Grazie per il link ma cercavo qualcosa di semplice.
Dopo vari tentativi sono riuscito a scrivere il codice di programma per misurare una tensione 0-5V e leggerla sull'LCD.
Ecco il codice:
lcd.print(misura_di_tensione*5/1024);
devi dividere per 1023. Il fonoscala non é 1024 ma 1023. Questo errore é piccolo e sicuramente non é la causa del valore letto.
Controlla se la tensione 5V é veramente 5V. è la tensione di riferimento che il ATmega attribuisce al valore 1023.
Se é tanto diversa usa la tensione di riferimento interna di 1,1V e metti un partitore di tensione che diminuisce la tensione da misurare da 5V a 1,1V.
In questo modo risolvi anche il problema di 2) perché senza entrata la resistenza tira l' entrata a massa. analogReference() - Arduino Reference
é normale; un entrata libera legge disturbi perché ha un impedenza alta.
Ciao Uwe
Ho misurato il fondoscala e alla tensione di 5V mi riporta un valore che va da 1021 a 1023, quindi è abb giusto.
È una misura che non da nessun risultato significativo.
Confronti il valore di riferimento con se stesso. Avresti lo stresso risultato quando alimenteresti l' arduino con 4V.
Devi misurare l'alimentazione 5V con un multimetro.
Gli unici collegamenti che ho fatto sono:
ho collegato l'lcd a 4 bit ai pin 7,8,9,10,11,12 di Arduino ed ho preso dal pin 5V di Arduino la tensione di 5V per alimentare l'lcd e al GND di Arduino ho riportato la massa comune.
I collegamenti sono giusti? Dove sbaglio?
Ciao a tutti.
Usando questo sketch i valori di misurazione della tensione si avvicinano alla realtà.
int analogPin = 3;
float val = 0.00;
float val2 = 0.00;
void setup()
{
Serial.begin(9600);
}
void loop()
{
val = analogRead(analogPin); //leggo il valore sul pin3
val2 = (val*5)/1023; //lo trasformo in valore di tensione
Serial.println(val2);
delay (1000);
}
Però comunque la precisione non è buona.
Una pila stilo, misurata con due multimetri diversi danno entrambi 1,48V contro 1,52V restituito da Arduino
Due pile ricaricabili in serie, misurate con due multimetri diversi danno entrambi 2,53V contro 2,61V restituito da Arduino.
La risoluzione di Arduino è di 4,9mV (0,0049).
Sono normali queste imprecisioni?
Se non lo sono, come posso avere maggiore precisione?
Grazie a tutti e Buon anno nuovo!!!
Ciao symon io ho caricato lo scketch che hai postato ho solo portato la velocità della seriale a 115200.
Con due pile ricaricabili poste in serie il multimetro legge:
2.80, 2.81
Arduino :
2.90, 2.91, 2.94, 2.92.
Quini sembra patologico di arduino questo errore.
C'è da vedere sul datasheet dell'atmel e sulle aplication note se c'è un modo per migliorare la precisione senza modificare vref.
Io non ho idea di come l'atmel ricavi la tensione interna di 5 volts, però posso essere sicuro che se si fornisce meno tensione dei 5 volts previsti qualcosa non deve funzionare correttamente, ammenochè il riferimento interno sia minore di 5volts.
Prova ad alimentare arduino dallo spinotto.
In alternativa c'è la possibilità per l'atmel di essere alimentato con due tensioni separate una per la sezione analogica e una per quella digitale.
Poi si potrebbe anche fornire un riferimento esterno Aref di 5 volts precisi sempre se tollerati.
occhio a non misurare tensioni senza interporre una restistenza nel mezzo.
ma se interponi una resistenza non modifichi anche il valore di tensione reale? inoltre le entrate analogiche non hanno già una resistenza intrinseca dell'ordine di Mohm?
posso collegare lo spinotto ad una pila 9v mentre è collegata la porta usb per la programmazione?
L'arduino comuta automaticamente tra le 2 alimentazioni. non ci sono problemi se colleghi tutte due contemporanemente.
Un alternativa ai 5V non precisi sarebbe usare la tensione di riferimento interna da 1,1V e ridurre la tensione da misurare con un partitore resistivo.
se la tensione usb non è perfettamente 5,00V, ma 5,01V Arduino non la rende stabile a 5,00V e sballa i risultati di lettura?
no, l' arduino non stabilizza i 5V riferimento.
perchè anche i risultati di Mauro sono sballati?
non so rispondere.
Pensandoci: se la tenssione 5V é piú grande dovrei misurare di meno non di piú.
4,7 V di MauroTec spiegano meglio le tensioni misurate piú alte.
ma se interponi una resistenza non modifichi anche il valore di tensione reale? inoltre le entrate analogiche non hanno già una resistenza intrinseca dell'ordine di Mohm?
Si anche io pensavo così e infatti ho collegato direttamente la tensione su AI3, poi ho tolto alimentazione ad arduino staccando l'usb, e il led power di arduino risultava debolmente acceso, per questo dicevo di interporre una resistenza da 1k o più non eccedendo i 10k.
devi dividere per 1023. Il fonoscala non é 1024 ma 1023.
Però nel datasheet usa 1024, adc = vin * 1024 / Vref.
@Tutti
Ho alimentato arduino con 9Volts ho fatto girare il programmino e adesso il tester legge 2.70 arduino 2.71 dopo un po 2.72.
Scommetto che se avessi aspettato ancora 10 minuti sarebbe salita ancora un pò.
Entrando con 9Volts entra in funzione lo stabbilizzatore mc33erotti, che stabilizza a 5volts.
Questi stabbilizzatori però non sono pensati come riferimenti di tensione, quanto occorre un riferimento stabbile si usano integrati compensati in temperatura che forniscono un riferimento stabbile e preciso.
Nel caso la precisione non dovesse essere considerata sufficiente le possibilià come si è detto sono due:
1)Usare il riferimento interno sperando sia stabile nel caso non lo sia ho scoperto che dentro l'atmel c'è un sensore di temperatura la si potrebbe leggere e corregere l'errore ADC.
2(Usare un circuito esterno come riferimento di tensione con le richiesta precisione, da fornire al pin Aref, quando si vuole anche una certa immunità ai disturbi allora separare anche le alimentazioni (si deve progettare un nuovo circuito a tal fine).