Tm1637 - sensore pressione 5v

Salve a tutti, sono nuovo qui nel forum e spero di non aver sbagliato sezione. Ho un problema con lo sketch di un mio progetto. Ho realizzato un manometro per monitorare la pressione del turbo sulla mia autovettura tramite un sensore di pressione (5V) ed un TM1637. il tutto funziona abbastanza bene, ma i valori che mi compaiono sono diversi dai valori effettivi della turbina. Esempio, al minimo la mia auto vettura dovrebbe avere un valori di -0,70 e nel momento del picco turbina arrivare a circa 1,1 Bar di pressione. Sul manometro leggo come valore minimo -1,41 e come massimo 0,60 Bar. Esiste un modo di correggere i valori convertiti sullo Sketch? Vi allego il mio Sketch.

#include <TM1637Display.h>
#define CLK 2
#define DIO 3

TM1637Display tm(CLK, DIO);

const uint16_t DELAY_TIME = 250;

void setup () {
  Serial.begin (9600);
  tm.setBrightness(1);
}

void loop () {
  delay(DELAY_TIME);
  int sensorVal = analogRead (A0);
  Serial.print ("Valore sensore:");
  Serial.print (sensorVal);

  float voltage = (sensorVal * 5.0) / 1024.0;
  Serial.print ("Volt:");
  Serial.print (voltage);

  float pressure_pascal = (3.0 * ((float) voltage - 0.47)) * 1000000.0;
  float pressure_bar = (pressure_pascal / 10e6);
  Serial.print ("Pressure =");
  Serial.print (pressure_bar);
  Serial.println ("bar");
  Serial.print ("Pressure =");

  float bar_dec = (pressure_bar * 100);
  tm.showNumberDecEx(bar_dec, 0b10000000, true, 3, 1);}

Grazie a tutti.

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO ...

... dopo di che, in conformità al suddetto regolamento , punto 7, cortesemente edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona TUTTA la parte di codice e premi l'icona </> nella barra degli strumenti per contrassegnarla come codice.

Inoltre, così com'è, non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac all'intero del IDE). Per maggiori informazioni ... punto 17.2 del succitato regolamento. Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread e sistemato il codice come da regolamento, nel rispetto del citato regolamento nessuno ti risponderà (eventuali risposte verrebbero temporaneamente nascoste), quindi ti consiglio di fare il tutto al più presto.

Fatto tutto come mi ha descritto, Grazie.

Il primo problema è che come riferimento per l'ADC di Arduino usi l'alimentazione a 5V che ... tutto è meno che stabile e quindi avrai sempre delle misure che non sono esatte.

Una possibiità sarebbe di abbassare il valore che genera il sensore esterno (es. con un partitore resistivo) nel range 0V .. 1V ed usare il generatore di tensione costante interno ad Arduino che genera circa 1.1V piuttosto stabili (guarda analogReference()).

Poi, naturalmente occorre sempre fare una calibrazione ed agguungere al valore calcolato la correzione data dalla suddetta calibrazione.

Guglielmo

Credo che comunque ci sia da guardare bene il sensore, hai un link?

Perché-1,41 signififica che il sensore da zero V in uscita, è credibile?

Si, sul monitor seriale il sensore da come valore zero! Però appena accelero ed il turbo entra in funzione i valori cambiano notevolmente, è come se non rispettasse la realtà.

Metti il link al sensore che stai usando.

Guglielmo

E come lo hai collegato ?

Io intendevo: è possibile che il sensore dia zero come uscita?

Tu hai inteso che volevo sapere se leggevi realmente zero
Io quello lo sapevo...

Comunque: no, quel tipo di sensore non da zero come uscita, quindi è come minimo mal cablato

Alimentanzione a 5V positiva presa da Arduino. Negativo presa da GND Arduino e filo giallo sensore collegato sul pin A0 di Arduino

Occhio che quello è un sensore 4-20mA ... NON genera una tensione in uscita, ma una corrente ... devi tu, con un carico resistivo trasformarla in tensione da dare in pasto ad Arduino !!!

Cerca su Google, troverai esempi di come si usano questo tipo di sensori.

Guglielmo

Non si usa cosi, mi spiace

Ma tu veramente hai speso 34 euro per comprare una cosa che non sai usare ?

E non basta ancora, tensione minima di alimentazione 8 volt

Si, infatti ... 4-20 mA 8-32 V ... :roll_eyes:

Guglielmo

No ragazzi ho sbagliato link. il mio è questo con tensione 5V https://www.amazon.it/gp/product/B08CXK1B1F/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1

Inoltre serve trovare il datasheet del sensore, per sapere se misura pressioni assolute o relative, e conoscere esattamente il fondo scala, dato che viene venduto in 5 differenti fondo scala (citati 3 ed elencati due uguali, già questo la dice molto sull'affidabilità della documentazione)

Ok, allora, per la lettura del valore, torniamo al mio discorso iniziale ... post #4 ... :roll_eyes:

Resta comunque valida l'osservazione di Standardoil qui sopra ... serve la documentazione per avere le caratteristiche precise.

Guglielmo

Certo. Partendo dal presupposto che per la realizzazione di questo progetto mi son basato su alcuni video caricati su Youtube di qualche persona inglese che usava il mio stesso sensore (con massimale 100psi). il mio sensore ha un massimale di 30 PSI = 2,08Bar (Ciò che mi serve per la mia auto). Queste persone ho visto che lavoravano su delle costanti ed impostavano loro manualmente il valore ZERO a circa 102,4, il valore massimo a 921,6 che sommati otteniamo sempre 1024.
in Allegato il video su cui sto basando le mie teorie

Emmm ... scusa ma non capisco il senso di questa affermazione ... :roll_eyes:

Il ADC di arduino da un numero INTERO ch va da 0 a 1023 (ovvero 1024 gradini diversi) ... ritorna 0 quando sul pin analogico sono presenti 0V e 1023 quando sul pin analogico è presente una tensione pari o superiore alla tensione di riferimemto scelta (sempre nei limiti della massima tensione che Arduino sopporta). Ovviamente, per valori intermedi di tensione, da valori intermedi INTERI compresi tra tali due estremi.

Quindi ... non riesco a capire i valori con la vigola che riporti ... cosa sono? I valori del ADC sono solo numeri interi ...

Guglielmo