Show Posts
Pages: [1] 2 3 ... 21
1  International / Generale / Re: Lettura valori sensore di pressione on: August 12, 2014, 12:25:14 pm
OK Michele ed Astro, adesso mi è più chiaro! Quindi aspettiamo schema di collegamento da Pakino.
2  International / Generale / Re: Lettura valori sensore di pressione on: August 12, 2014, 07:25:48 am
Magari non sarebbe necessario un circuito di step down, magari con un partitore resistivo si riesce a ridurre ad un range 0-1V  o anche con un op amp .  Ma io ti consiglierei di rimanere nel range 0-5V, a te serve il massimo di segnale in volts per poter disporre di tutta la scala a 10 bit del convertitore AD.  quindi, io ti consiglierei di usare a questo punto, un bel regolatore di tensione lineare LDO collegato al pin di Aref e configurare lo sketch all'uso del segnale di riferimento creato.


Bella sta spiaggia!  Beato te! heheheeee!!   Buone Vacanze !!! 
3  International / Generale / Re: Lettura valori sensore di pressione on: August 12, 2014, 06:27:22 am
Astro, toglimi una curiosità, ma se usiamo il reference interno da 1,1V poi, possiamo sempre misurare range 0-5V o dobbiamo poi usare segnali adeguatamente ricalibrati a 0-1,1V ?  secondo me è quest'ultima ma non mi è mai capitato di dover usare Vref diverse da quelle a 5V interne.   

Michele, secondo i miei test, con il codice così come lo abbiamo impostato, se la lettura ADC è compresa tra i due range, minimo e massimo (quindi non strettamente relazionato alla tensione REALE presente su pin Analogico e su Vref del convertitore ADC) ottengo un numero preciso, a 102 ADC ottengo 0.00V e a 920 ADC ottengo 600.00V   Ovviamente, la precisione non è assoluta causa la perdita dei decimali durante la conversione AD, 0,5V dovrebbero essere  102,4xxx ma ovviamente, la MCU tira fuori 102, mentre in corrispondenza di 4,5V otteniamo 920,69727 ma dal onvertitore AD otteniamo 920 quindi abbiamo perso qualche centesimo si V (920 * 0,0048876V = 4,496592 V , quindi meno di 1 centesimo per la precisione).

Quindi, se dal mio 5V sulla UNO misuro 5,14V è questo il mio Vref per il convertitore AD, giusto?  se così, allora in realtà dovrei fare:

5,14V / 1023 = 0.0050244 V

Quindi 0,5V sarebbero   99,51 = 99 ADC
e con 4,5V  sarebbero 895,63 = 895 ADC

nel caso di Pakino, ricordo che lui otteneva 128 ADC a 0,5V quindi a lui la tensione è superiore ai 0,5V "misurati"  o il suo Vref è di 3,996V ma che a 4,5V andrebbe in overflow secondo i miei calcoli.  Purtroppo sono solo supposizioni, non mi sono mai imbattuto nelle studio e verifiche di questo genere, io ho sempre dato per scontato la precisione del segnale Vref interno quindi mi fa piacere che mi chiarite se ho capito bene l'argomento, di sicuro sarà di interesse per altri utenti del forum.
4  International / Generale / Re: Lettura valori sensore di pressione on: August 11, 2014, 04:45:16 pm
....ma c'è la possibilità di dividere in due il display e scrivere i numeri su due righe?!...vale a dire un numero scritto su due righe!

Con i display 16x2 ci ho giocato pochissimo un anno fa, appena per verificare che potevo riutilizzare vecchi display nel cassetto, ma si, credo sia fattibile dividere un numero e farlo visualizzare su due righe anche se non ne capisco la finalità... ma prima ti conviene imparare un pò come si manda del testo al display (lo si può fare anche senza l'uso di librerie, i due display seriali da me provati, li ho collaudati sulla stessa linea TX/RX della seriale della scheda (ovviamente non possiamo disporre del serial monitor da PC)...  All'ccorrenza, esiste la seriale "software" ovvero puoi usare qualsiasi altro pin digitale (ma qui richiederebbe di librerie secondo me)...
5  International / Generale / Re: Lettura valori sensore di pressione on: August 11, 2014, 04:34:46 pm
Si Michele, con le ultime modifiche, quelle di sottrarre 102 e poi moltiplicare per 0,733.....   se abbiamo un segnale rientrante i due range, min e max, otteniamo valori di pressione del tutto esatti al datasheet del sensore.

Purtroppo, vedo che forse il problema sia di tensioni, o di alimentazione Arduino che farebbe (lo farebbe?) sfasare i Vref del convertitore AD interno facendo sfasare il risultato misurato, o la tensione del segnale simulato non è consona alla cifra del display dell'alimentatore o del multimetro usato per la sua misurazione.  Facendo prove sul mio, alimentato da USB, ho visto che la tensione sul piedino 5V della scheda (UNO rev3 SMD edition) era di 5,14V  
Onestamente, credo che internamente, la MCU abbia una circuiteria atta a stabilizzare a 5V in Vref,  ovviamente non è il caso in cui la tensione di alimentazione fosse già al di sotto dei 5V, per esempio 4,88V sarebbero già al di sotto della soglia del Vref e quindi sfaserebbe ogni lettura del convertitore Analogico Digitale...

Che ne dite, è fattibili questa mia supposizione?


Michele, a me in lettura 102 ADC mi da 0.00 Bar e a 920 mi da 600.00 Bar, quindi non sarebbe nemmeno necessario quel 102,4   ma si, alla fine, avere un centesimo in più o in meno cosa ci da?  tanto alla fine, nella realtà, per ogni valore ADC avremmo una pressione di 0,733.... Bar quindi in realtà dovremmo avere sempre multipli di questo valore "risoluzione" .
6  International / Generale / Re: Lettura valori sensore di pressione on: August 11, 2014, 04:17:20 pm
ho provato cn un altro alimentatore....950adc  709bar 0,5 volt 128adc 94bar

Allora ci sta di sicuro un problema o sull'alimentazione arduino che magari non è 5V ma leggermente diverso, a questo proposito, misura la tensione presente sul pin 5V della scheda (sopra i due GND del lato pin Analogici) probabile non siano propio 5V ma 4,88 o poco più.

Perchè? Perchè a 0,5V dovresti avere 102 e non 128, in sostanza, sei spostato di 26 ADC * 0,0048876V =0,127 V e quindi o il Voltaggio di riferimento interno di Arduino non è quello corretto, o la tensione in entrata è superiore di 0,127V a quella indicata, ovvero:  0,5V + 0,127V = 0,627V

Se usi lo sketch modificato da Michele e ad esso apporti la modifica che ho suggerito nel post precedente, otterrai la formula esatta.


Diciamo che i calcoli che ti sono stati indicati in precedenza sono esatti, ma purtroppo, qualsiasi differenza tra lettura reale e voltaggio di riferimento interno al micro diverso da 5V comporta una deviazione delle letture effettuate, se si conoscono queste tensioni di riferimento, basterebbe applicare una correzzione che ne tenga conto e il risultato ritornerebbe nuovamente ad essere corretto.   Esempio, se si riesce a stabilire che il modulo AD sta funzionando a 5,14V anzicchè 5,0V allora nella formula andremmo a fare:  5,14V / 1023 = 0,0050244V invece di 5V / 1023 = 0,0048876V  

ottima notizia per il sensore, infatti, se normalmente viene fatto così, è per poter fare diagnostica, se desse letture inferiori a 0,5V vi sarebbe o un cortocircuito a GND o scollegato, mentre se si riscontrasse una tensione superiore a 4,5V vi sarebbe un cortocircuito a positivo,  almeno così ragionano tutte le Centraline Motore OEM esistenti in circolazione.

l'uso del metodo indicato da Michele ti farebbe risparmiare almeno 500 bytes sul conteggio flash e magari almeno 20-40 byte sulla RAM rispetto al metodo che usa map().
7  International / Generale / Re: Lettura valori sensore di pressione on: August 11, 2014, 03:56:33 pm
ok Michele, ho trovato il giusto valore, basterà fare:

 PressioneBar = ( ValoreADC - 102) * 0.7334963  ;

con il -102 andiamo a indicare che la scala partirà da 0,5V   il valore 0.7334963 sono i Bar per ogni unità ADC  resta però il fatto che al di sotto di 102 avremo una lettura pressione con numeri negativi mentre oltre 920 avremo pressioni di oltre 600 Bar.

Come ho detto prima, sono quasi sicuro che con il VERO sensore, che darà solo quella scala non vi sarà necessità di aggiungere degli if() per delimitare il range 102-920 ADC (0,5 @ 4,5V) a meno che, questo sensore dia comunque una tensione oltre i 4,5V anche se poi, non sarebbe attendibile (avvolte i sensori vanno oltre la scala dichiarata, ma danno valori poco lineari).

Nel caso si voglia avere maggiore precisione, allora mettendo i due if() non avreste letture al di sotto di 0 bar e oltre 600 bar.
8  International / Generale / Re: Lettura valori sensore di pressione on: August 11, 2014, 03:41:05 pm
Strano, io ho provato il codice modificato da Michele e non ottengo i tuoi stessi risultati, io a:


Valore ADC    Volts   Pressione (Bar)

    51                  0,25V               -36,31
 102                  0,50V                    1,48
 920                 4,50V               607,62

il fatto che tra noi due non abbiamo un risultato congruo indica che ci stà qualcosa di errato.  Quando hai 0,5V ottieni una lettura ADC pari a 102?  e a 4,5V ottieni 920?  Se non è così, allora ti consiglio di cambiare multimetro o verificarlo con un'altro ancora migliore (sai di multimetri digitali ne ho cambiati molti negli anni, non so perchè, ma si scalibrano con il tempo, e sto valutando di spendere oltre 350 euro per uno da banco a 5-6 cifre decimali, è da poco che ho compreso l'importanza di certi  attrezzi!!).     

Michele, la formula da te indicata non funziona così com'è ma il ragionamento non fa una piega, ci manca solo compensare il fatto che il sensore, non parte da 0V ma da 0,5V e finisce a 4,5V invece di 5V.    Con i picaxe avevo affrontato questo problema perchè anche i sensori che uso io hanno la stessa scala, ma adesso non ricordo come ho risolto, vedo di darci un'occhiata e posto la soluzione che adoperai io.

PS: ok, ho dato un'occhiata ai codici che feci per i picaxe, allora, facevo questo:

Pressione = ValoreADC - 25 * 51    Valore ADC era a 8 bit quindi compreso tra 0 e 255, 25 equivaleva alla tensione pari a 0,5V come lettura ADC a 8 bit e quindi (5V/255 = 0,0196078V)   -> 25 * 0,0196078V = 0,49V  il 51 per il nostro caso, non ci importa.

Quindi, rapportato al nostro caso Arduino:  Dobbiamo restargli il valore 102 che equivale a 0,5V !! (e che per fortuna ci serve sia ad inizio scala che fine scala del sensore!!).

PS 2:  Ho collaudato anche questo, ma è ok solo in corrispondenza di 0,5V ovvero a 102 ADC mi da 0.00 bar, ma a 4,5V (920 ADC) mi da 606,14 bar   quindi forse il valore 0,741 è ancora troppo approssimato, magari richiede più decimali.




                   
9  International / Generale / Re: Lettura valori sensore di pressione on: August 11, 2014, 01:42:21 pm
Non mi risulta che esista una funzione come map() ma con valori float, a questo punto, dovrai crearti il tuo sistema di calcolo tutto in valori float,  non conosco la tua applicazione, ma non credo ti serva granchè avere 599,73 bar invece di 599 0 600 bar cosa potrebbe cambiare?

Ricorda che con un ADC a 10 bit, nel tuo caso, il minimo di risoluzione che hai e di 0,73 bar (per ogni unità ADC misurata che equivalgono a 0,0048876 V ).

Se vuoi avere più precisione (a patto che il sensore sia poi così esteso di segnale output) dovrai adottare un ADC esterno a 12 bit (0 a 4096 e  quindi, avresti che il minimo voltaggio misurabile sarà di 5V/4096 = 0,0012207V ovvero 1,22 mV invece degli attuali 4,88mV a 10 bit) o passare addirittura ad uno a 16 bit (65535 valori, ovvero, 5 / 65535 = 0,0000763 V  ovvero 0,00763 mV per ogni valore ADC) ma questo complicherebbe un bel pò la messa in esecuzione del progetto e complicherebbe non di poco i calcoli ed il potere computazionale della scheda Arduino.  Normalmente, non se ne vede la necessità di avere così tanta risoluzione su un valore di 600 bar.  Con i sensori ad uso Automotive con i quali ho avuto a che fare, più è esteso il range pressione misurabile, più si riduceva la precisione dello stesso, quindi viene usato il sensore più idoneo al compito da svolgere, se il nostro range utile da misurare va da 0 a 5 bar, è inutile prendere un sensore 0-10 bar, ci perdiamo in precisione, figuriamoci se prendessimo uno 0-100 bar !!

Ok, fammi sapere come esegue il mio sketch, sul mio funziona benissimo (a meno che non vengano eliminati i due if() che fanno da limitatori entro il range "possibile" , in tal caso, continuerebbe a funzionare bene se il segnale in ingresso fosse sempre compreso tra 0,5V = 102 ADC, e 4,5V = 920 ADC,  se al di sotto o al di sopra, avresti i valori da te riscontrati) 
10  International / Generale / Re: Lettura valori sensore di pressione on: August 11, 2014, 11:33:57 am
Mi sa che hai qualche confusione o almeno è quello che "deduco" dalle tue risposte.  Allora, se Arduino misura correttamente il valore sul pin analogico restituendoti il suo valore compreso tra 0 e 1023 (a cui corrispondono 0 e 5V) applicando i calcoli della funzione map() otterrai i valori di pressione equivalenti a tale valore ADC che a sua volta, sarà l'equivalente dei volts in ingresso.

A me pare che tu, dopo aver ottenuto il valore ADC da Arduino, poi lo riconverti in volts per poi rifare il calcolo per ottenere la pressione, non è che sia del tutto sbagliato, ma considerando ogni passaggio in cui per forza di cose si perde un pò di precisione, fare la conversione a volt dopo che arduino l'ha fatta da volt a valoreADC mi sembra ridondante, perdi precisione ad ogni conversione che fai.

Poi, credo che tu stia convertendo a volts quindi ti servirebbero svariati decimali per avere la precisione necessaria senza contare che dovresti usare per forza i float ma come detto in precedenza da uno dei ragazzi, la funzione map usa valori int e non float.  

Considera che mischiare in un calcolo valori float con int può portare (in alcuni casi) a risultati poco corretti (mi è capitato, e mi ha fatto perdere un bel pò di tempo per capire il problema)

Giusto per curiosità, se carichi ed esegui il mio sketch, cosa ti da?

Se poi ho sbagliato io ad interpretare, mi scuso!
11  International / Generale / Re: Lettura valori sensore di pressione on: August 11, 2014, 10:30:15 am
Ho fatto un piccolo sketch usando la funzione map() e mi funziona perfettamente come sperato, se la lettura ADC è compresa tra 102 e 920 le pressioni visualizzate sul serial monitor cono assolutamente quelle di specifica del sensore, ma se scendiamo al di sotto di 102 otteniamo valori in negativo (si -74 equivalgono a 0V erogati e 0 come valore ADC) e se andiamo oltre 4,5V e quindi oltre 920 di valore ADC, abbiamo pressioni di oltre 600 bar.

Per ovviare a questo, ho aggiunto due if() che limitano il range passato alla funzione map() entro il range utile.  Forse con il sensore montato, non sarà necessario visto che sono molto precisi e la tensione erogata dubito sarebbe molto diversa da quella del datasheet perchè solitamente hanno un margine di errore inferiore al 4%...

Questo il codice:
Code:

int ValoreADC;
int PressioneBar;



void setup(){
 
  Serial.begin(9600);
 
 
}

void loop(){
 
  ValoreADC = analogRead(A0);
  if (ValoreADC < 102){
    ValoreADC = 102 ;}
   
    if (ValoreADC > 920){
      ValoreADC = 920 ;}
     
     
  PressioneBar = map (ValoreADC, 102,920, 0, 600);
 
  Serial.print(ValoreADC);
  Serial.print(",");
  Serial.println(PressioneBar);
 
  delay(200);
 
}

12  International / Generale / Re: Lettura valori sensore di pressione on: August 11, 2014, 10:09:37 am
Mi sembra strano, sia con la soluzione di Brunello che con quella di Mennitti dovresti avere dati congrui se ti limiti al range 0,5V a 4,5V  (del resto, ho riletto la soluzione di Michele e mi sono accorto che era in sostanza simile a quella che ti ho dato io, la prima volta la avevo letta molto frettolosamente e non la avevo capito del tutto,mmm  la fretta!!)

Sei sicuro che la tensione erogata come "test" sia davvero quella?

Perchè non fai la prova da me indicata, metti un ->      Serial.print(ValoreADC);  e poi calcola manualmente la sua equivalenza sia in volts in modo da corroborare la tensione in ingresso e sia la pressione "misurata" in corrispondenza.  in corrispondenza di una tensione di 0,50000V  dovresti avere un valore di 102, se la tensione fosse 0,50050V avresti 103 ecc...     (dovresti misurare la tensione simulata con un buon multimetro (l'esempio con 5 decimali purtroppo è per coloro che dispongono di multimetri da banco professionali).

PS. ti consiglio anche di verificare il "tipo" di dato dichiarato, avvolte ho avuto risultati simili (pazzi) per aver usato un "tipo" non idoneo in un certo calcolo.   Quindi usa sempre lo stesso tipo (diciamo int o meglio ancora, unsigned int) per tutti i calcoli, ma verifica se i range usati vanno in overflow !!!   

 
13  International / Generale / Re: Lettura valori sensore di pressione on: August 11, 2014, 09:41:29 am
io ho usato molte volte i sensori di pressione assoluta (ma da range 0-3,5 Bar) con range lineare che partivano da 0,5V e finivano a 4,5V, e con arduino, l'uso della funzione map() come ti ha indicato Brunello è l'approccio corretto, ma ovviamente, di sicuro ne esistono di altre altrettanto valide.   Purtroppo la tua applicazione di quel metodo ha peccato dei valori float invece di int come ben ha fatto notare cyberhs,    Se usi i valori così come te li ha indicati Brunello, cosa ti da?  Di solito i sensori hanno comunque un range oltre i 4,5V ma li perdono precisione e quindi il fabbricante limita il range a quello lineare e preciso, almeno, così erano i sensori con cui ho lavorato.

il problema della precisione è dovuto al fatto che il convertitore AD è a 10 bit quindi solo 1023 campioni per poter spaziare da 0 a 600 bar,  MA...   nel nostro caso, la nostra lettura inizia a 0,5V (quindi equivamenti a 102,2997 = 102 ) e quella massima di 4,5V (equivalente a 920,69727 = 920) e quindi, il tutto, dal valore minimo al massimo di lettura del sensore, è di 920 -102  = 818  questo significa che per ogni unità di lettura ADC, la pressione salirà di :  600 bar / 818 = 0,7334963 bar ( poniamolo a 0,73 bar per comodità)  questa è la pressione minima che puoi leggere dal tuo sensore, ma considerando che il canale ADC spesso non mantiene una lettura fissa ma leggermente fluttuante, è facile che ottieni letture leggermente fluttuanti.  La funzione map() semplifica quest0 calcolo non di poco, quando usavo i basicx BX24 prima e i picaxe poi, di doveva fare una serie di calcoli come quelli indicati da Mennitti.

Giusto per farti stare meglio sulla precisione, sulle centraline delle auto (sia stradale che da corsa) la fluttuazione dei valori rilevati dai sensori è sempre presente (almeno per quelle con ADC a 10 bit, infatti, i sistemi più recenti, usano ADC a 12 e 16 bit che garantiscono una risoluzione ancora maggiore dei mV misurabili)

Ovviamente, con la funzione map() se la tensione fosse al di sotto di 0,5V incomincieresti a vedere "pressioni" negative e se superiore a 4,5V pressioni oltre i 600 bar, quindi verifica con un buon multimetro, se la tensione che simuli è davvero quella che il tuo alimentatore ti dice di star erogando (si sa che avvolte piccole imprecisioni siano possibili, specie su prodotti non professionali di un certo livello).

Per verificare quale possa essere il tuo problema, prova a fare un Serial.print dei dati ADC letti e poi della loro conversione, poi verifica manualmente, se ad un determinato valore ADC corrisponde davvero la conversione fatta dalla funzione map()
14  International / Generale / Re: Limitatore di velocità veicolo on: August 11, 2014, 09:04:15 am
l'integrato da usare dipenderà dalla grandezza (e quindi dal suo assorbimento) del solenoide, dovresti procurarti il datasheet del solenoide.   Ci sono diversi integrati che potresti usare se il solenoide non è molto "vorace" in corrente, per esempio un Darlington driver come l' ULN2003 che ha 7 darlington al suo interno, ogn'uno di essi può fornire fino a 500mA e possono essere messi insieme più di uno in parallelo per raggiungere correnti maggiori, anche se io al massimo userei 2  uscite in modo da avere fino ad 1A di corrente.   Esistono anche integrati singoli che possono fornire fino a 12A di picco o 8A costanti come il BDX53 ma richiedono l'implementazione di altri componenti (come il diodo di protezione contro correnti di flyback).  Ti consiglio di consultare le ottime guide di  "piggy" li potrai trovare tutte le idee per pilotare solenoidi ad Arduino.  Quelli che ti ho indicato, sono solo alcuni di quelli che ho utilizzato in passato per pilotare carichi induttivi come motori DC e solenoidi.  Volendo, potresti anche usare un L298N, che potrebbe esserti utile anche per pilotare fino a 4 solenoidi (solitamente, viene usato per pilotare motori passo passo bipolari).

 
15  International / Generale / Re: Info pilotaggio relè da remoto on: August 08, 2014, 06:21:02 am
Parlo da "principiante" quindi prendilo con le "pinze",  dipende dalla estensione del tuo codice e dalla giusta implementazione delle variabili in RAM, se sai giostrare correttamente, penso che potresti anche farcela, ma non conoscendo cosa stai facendo, onestamente non saprei dirti di più.   

Per il fatto che si blocchi, questo è strano, ma non impossibile, anche a mè mi è capitato di bloccare la UNO dove nemmeno il reset sortiva effetto, se non ricordo male, aveva a che fare con la seriale, ovvero, se tentavo di spedire al PC una mole di dati che in realtà, nel mio caso, bloccava l'IDE e anche la UNO, solo un riavvio dell'IDE e un riavvio della UNO normalizzava la cosa, da premettere che potrebbe essere anche un problema del mio PC, non so.

Perchè non posti lo sketch, così gli utenti più esperti ti potranno dare consigli più utili.

Sulla potenza della UNO, io posso dirti che ci sto facendo una "centralina Gestione Motore" e fino  ad ora, se la sta cavando benissimo  (mediante l'uso degli interrupt e dei timers più lo sfruttamento di codice C puro in alcune funzioni "critiche" per ottimizzare il corretto funzionamento, fino ad ora sono a buon punto), peccato che la EEPROM è troppo piccola per contenere tutte le mappe necessarie, e quindi presto farò un porting verso un micro più capiente (Atmega1284p)  e forse in futuro, quando avrò perfezzionato il tutto, verso un bel 32 bit (sempre atmel, ma non la DUE, troppo grosso e poco "Automotive")...
Pages: [1] 2 3 ... 21