Ciao ragazzi.
Ho la necessità di leggere un segnale tra 0-5V, sinusoidale. La freq è di circa 50Hz. Sto visualizzando la forma d'onda su processing e per frequenze dell'odine di qualche Hz riesco a visualizzarle bene, ma se salgo fino a 50Hz quello che vedo sono solo "montagne frastagliate". Non rientro nella frequenza di campionamento del ADC di arduino UNO?
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:
- qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- qui le pinout delle varie schede by xxxPighi: Pinout
- qui una serie di link generali utili: Link Utili
Arduino campiona al massimo sino a circa 9000 sample/s (singolo canale).
Per il teorerma di Nyquist, se vuoi visualizzare una frequenza di 50Hz devi campionare ad almeno 100 sample/s, ma se vuoi apprezzare i particolari dell'onda si consiglia un campionamento di almeno 4/8/10 volte maggiore.
Quindi, Arduino è perfettamente in grado di campionare a 1k sample/s.
Forse quello che vedi è il rumore della misura.
La frequenza di campionamento la decidi tù, siccome non l'hai detta il sospetto è che la hai impostata troppo bassa
Ragazzi questo è il programmino che mi salva i livelli di tensione binati (campioni) nel buffer usb dal quale me li vado a prelevare per visualizzarli in processing. Se notate qualcosa che non va ve ne sarei davvero grato.
#define ANALOG_IN 0
void setup() {
Serial.begin(9600);
}
void loop() {
int val = analogRead(ANALOG_IN);
Serial.write( 0xff);
Serial.write( (val >> 8) & 0xff);
Serial.write( val & 0xff);
//delay(1);
}
il collo di bottiglia è la seriale a 9600, 1000 campionamenti al secondo scarsi, impostala a 115200 e riprova
una cosa: perchè hai messo Serial.write( 0xff);?
Allora ti spiego.
Ho preso un progetto di "oscilloscopio" da internet e ne ho editato qualcosa, perché purtroppo non ho tempo di farlo da zero. Il problema è il seguente: ho spinto anche la velocità della porta a 250000, sia in scrittura su Arduino con Serial.begin(250000); che in lettura con processing, sempre a 250000, ma il risultato è un'onda di questo genere:
Come si vede nell'immagine ho le forme d'onda seghettate e non va bene :.
Percaso la tua onda sinusoidale va sotto i zero Volt?
Hai controllato che sia effettivamente sinusoidale? PErché potrebbe essere distorta da qualcosa.
Dal grafico non si capisce se il segnale è tra 0 e 2Vdc.
Se è così ed il segnale è sinusoidale a 50Hz, evidentemente è un sotto campionamento (frequenza inferiore od uguale a 100Hz).
Spiega quel 0xff cosa fa. Ed anche da dove viene il tuo 50 Hz che invii alla A0.
Potresti limitarti a spedire il valore.
Inoltre... dipende anche da come interpreti i dati che giungono al PC. Spiega come sincronizzi l'asse x.