Segnale "ballerino" pin Analogici

Ciao a tutti,

chiedo aiuto per trovare una soluzione per rendere più stabili dei sensori analogici (2 sensori di pressione 0-5V e 2 partitori di tensione, da 12v a 1.2v) collegati ai pin analog di Arduino. I cavetti hanno lunghezza massima di 2m. Attualmente i segnali fluttuano in positivo e negativo rispetto a quello che è il segnale desiderato.
Presumo sia un problema di disturbo sul cavo, forse troppo lungo, cosa potrei inserire per stabilizzare il segnale?

Ho provato a fare 3 letture di seguito e fare una media dei 3, ma non migliora molto.

Ringrazio in anticipo.

Domanda: la “ballerinità” del segnale è data da disturbi elettrici o sono semplicemente i sensori che hanno questo comportamento?
Cioè, se hai lo stesso comportamento anche con 2cm di cavo allora è il sensore, se invece queste variazioni diventano più intense quando accendi qualcosa nei paraggi allora è il cavo che cattura disturbi. Le due situazioni sono un po’ diverse, soprattutto come “velocità”, quello che hai proposto tu è un filtro software. Si potrebbero fare filtri software più potenti, filtri fisici LC, schermare meglio i cavi, ecc… Però prima c’è da capire qual è la cosa da risolvere. Sarebbe importante anche sapere qual è la “gamma dinamica” che ti interessa. Cioè, quanto velocemente il segnale dovrebbe poter cambiare. In pratica, se il segnale è la temperatura in una stanza anche 0.1°C/s sono sufficienti, mentre per un tachimetro di un’auto magari è il caso di avere anche 30km/h/s.

daysleeper:
Domanda: la "ballerinità" del segnale è data da disturbi elettrici o sono semplicemente i sensori che hanno questo comportamento? .....

Grazie per la risposta, sicuramente è il cavo, con pochi cm il segnale rimane più stabile. I sensori misurano la carica di 2 batterie e la pressione di 2 bombole d'aria. Non mi serve che cambi velocemente. Un filtro fisico come lo potrei "costruire" ?

Puoi postare i link ai sensori? E i valori delle resistenze dei partitori di tensione?

Il sensore che fornisce un valore di tensione analogico lo fornisce chiuso su un'impedenza (resistenza) che non può essere MINORE di un certo valore. I pin di arduino SENZA pullup o pulldown "offrono" al sensore un'impedenza MOLTO elevata (dell'ordine dei megaohm). Su questa impedenza tensioni elettromagnetiche di disturbo anche di basso valore riescono a indurre correnti tali da falsare significativamente il valore in uscita dal sensore, letto dall'arduino.

Una prima prova da fare consiste nell'abbassare l'impedenza (resistenza) d'ingresso del pin di Arduino attraverso una resistenza fra il pin stesso e GND. Il valore di questa resistenza dipende da quanta corrente in uscita può fornire il sensore SENZA alterazione del valore stesso, e dipende ovviamente dall'impedenza (resistenza) di uscita del sensore. Più bassa sarà la resistenza in parallelo al pin di arduino, più alta sarà la corrente che il sensore dovrà fornire, più saranno alterati i valori del sensore stesso, ma minori saranno le interferenze elettromagnetiche.

Questa NON è la soluzione, è una prova.

Ciao,
P.

Un filtro fisico lo puoi fare con un condensatore e una resistenza o una induttanza, suggerisco l'induttanza.
Il condensatore va in parallelo al sensore, la resistenza o l'induttanza in serie. Di base più grossi sono i componenti più il filtro è potente. Cercando filtri LC o RC ti usciranno tutte le info che vuoi.

In alternativa puoi provare a schermare i cavi avvolgendoli nel domopack e collegando quest'ultimo a GND. Potrebbe anche essere utile twistare i cavi.

Fossi in te, avendo un micro a valle, agirei via software. Forse una media di soli tre campioni filtra poco ma nessuno ha detto che non si possa aumentare la cosa a dieci o cento campioni. Oppure potresti usare un semplice filtro Kalman, il cui intervento è regolabile modificando il parametro kk tra 0-1:

float kk=0.75;
float sensorValue = 0;

void loop() {
 sensorValue = kk*sensorValue + (1.0-kk)*analogRead(sensorPin);
}

Con kk a 0,75 è già abbastanza filtrante, ma fino a 0.9999999 il concetto non cambia.

Grazie a tutti per le risposte.

I partitori sono questi http://wiki.seeedstudio.com/Grove-Voltage_Divider/ . Per quanto riguarda i sensori di pressione, non sono riuscito a trovare informazioni, li ho acquistati su ebay mercato cinese, non danno specifiche.

daysleeper:
Fossi in te, avendo un micro a valle, agirei via software. Forse una media di soli tre campioni filtra poco ma nessuno ha detto che non si possa aumentare la cosa a dieci o cento campioni ....

Ti ringrazio daysleeper per questo suggerimento del filtro di Kalman, forse per l'uso che ne devo fare è perfetto. Ho fatto delle simulazioni con excel e sembra fare al caso mio. Mercoledì dovrei riuscire a provarlo e vi informo. In alternativa proverò con dei filtri fisici come suggerito.

Grazie mille ancora

>cesco: Quando si quota un post, NON è necessario riportarlo (inutilmente) tutto; bastano poche righe per far capire di cosa si parla ed a cosa ci si riferisce. Gli utenti da device "mobile" ringrazieranno per la cortesia :wink:

Guglielmo

*P.S.: Ho "troncato" i il tuoi "quote" qui sopra *

gpb01:
>cesco: Quando si quota un post, NON è necessario riportarlo (inutilmente) tutto;

OPS! :grinning: Scusate...

Prova mettendo 10kOhm tra il segnale che arriva e massa, poi 22kOhm (preferibilmente, altrimenti 18~10kOhm) tra il segnale e il pin di ingresso e 47uF tra il pin d'ingresso e massa.

potrebbe dipendere anche da cosa usi per visualizzare i dati un pc può dare interferenze,
anche i display 7 segmenti (max 7219) possono destabilizzare le letture se non vengono gestiti bene nel software

un minimo di accortezza nella progettazione hardware ci vuole sempre, cavi schermati sono sempre meglio di cavi non schermati (che captano impulsi come antenne)
a volte un piccolo condensatore (1000 pf) all'inizio e alla fine del cavo risolve