Go Down

Topic: letture errate sensore lm35dz (Read 5288 times) previous topic - next topic

PaoloP

Di questo problema ne ha parlato Michele in un post. Se lo trovo metto qui il link.

leo72

Si può passare da internal ad external ma va messo una R sul pin Aref, altrimenti si crea un corto nel passaggio da un riferimento all'altro. C'è scritto nel datasheet nonché nel reference.

pablos

si, ma non hai risposto alla domanda riguardo ai danni, si danneggia o no se metto 5v a un pin con reference 1.1v? o leggo sempre high da 1.2v a 5v?
no comment

leo72

Da 1,1V in poi legge 1023. I danni avvengono se la tensione fornita al pin è superiore a quella max tollerata dal chip, 5,5V.

ClaudioF

#34
Feb 06, 2013, 05:17 pm Last Edit: Feb 06, 2013, 05:25 pm by ClaudioF Reason: 1
Magari dirò delle banalità o delle castronerie, ma giusto per capire se ho appreso il concetto!

Dal datasheed dell'Arduino vien fuori che il valore in uscita dall'analogico è:

ADC  =Vin*1024/Vref

Quindi per calcolare la tensione in uscita dal sensore devo calcolare:

Vin = ADC*Vref/1024

con Vref:

  • 5000 (mV) se uso la DEFAULT (in realtà forse 5500 è meglio, visto che il tester in uscita ne segnava 5.5V),

  • 1100 se uso la INTERNAL.



A questo punto, poiché ogni 10 mV ho un grado centigrado misurato, per avere la temperatura non devo far altro che:

temp°C = Vin/10.

Spero di averci azzeccato!

Detto questo, ho dei grossi dubbi con Matlab poiché quando digito a.analogicRead(0), con sensore collegato al pin A0, escono valori totalmente fasulli!

PaoloP

#35
Feb 06, 2013, 05:24 pm Last Edit: Feb 06, 2013, 05:26 pm by PaoloP Reason: 1
Si.
Ricorda che il valore di Vin da te calcolato è in mV.

Se leggi direttamente il valore da analogRead ti restituisce un numero che varia tra 0 e 1023.

ClaudioF


Si.
Ricorda che il valore di Vin da te calcolato è in mV.


Ti riferisci al mio problema con Matlab?
Perchè su Arduino ne tengo conto, infatti utilizzo 5000(5500) ,1100 e 10 che sono appunto in millivolts!
Sarebbe meglio usare 5000 o 5500?

Per utilizzare il sensore sull'intero range ho visto, sempre dal datasheet, di collegare una resistenza, il cui valore viene calcolato in base alla tensione di entrata, in parallelo all'uscita; quella resistenza deve essere collegata a terra?

lesto

ma che sia la forma dei pin del sensore che fa a pugni con le bread-board?
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

PaoloP

No.
Deve essere collegata a una tensione negativa.
Se ne è parlato in un altro topic.
Ma se non ti serve misurare temperature inferiori allo zero puoi lasciare perdere.

ClaudioF


ma che sia la forma dei pin del sensore che fa a pugni con le bread-board?


Lo escluso, dalla uscita seriale di Arduino leggo la temperatura corretta!
Poi carico arduino su Matlab, roba di 60 secondi per cui la temperatura non dovrebbe cambiare poiché la misuro in regime stazionario, e i valori che vengono fuori non riesco a ricondurli con nessuna conversione!

PaoloP

Nel file adiosrv.pde (immagino che usi questo) la parte di codice che riguarda gli input analogici è questa
Code: [Select]
/* s=30 means ANALOG INPUT *************************** */
     
      case 30:
      /* the second received value indicates the pin
         from abs('a')=97, pin 0, to abs('p')=112, pin 15    */
      if (val>96 && val<113) {
        pin=val-97;                /* calculate pin          */
        agv=analogRead(pin);       /* perform Analog Input   */
Serial.println(agv);       /* send value via serial  */
      }
      s=-1;  /* we are done with AI so next state is -1      */
      break; /* s=30 taken care of                           */

In pratica viene letto il valore dell'analogRead e sparato sulla seriale.
Quindi matlab riceve il valore nel range 0-1023.

ClaudioF

#41
Feb 06, 2013, 05:47 pm Last Edit: Feb 06, 2013, 05:51 pm by ClaudioF Reason: 1

Nel file adiosrv.pde (immagino che usi questo) la parte di codice che riguarda gli input analogici è questa
Code: [Select]
/* s=30 means ANALOG INPUT *************************** */
     
     case 30:
     /* the second received value indicates the pin
        from abs('a')=97, pin 0, to abs('p')=112, pin 15    */
     if (val>96 && val<113) {
       pin=val-97;                /* calculate pin          */
       agv=analogRead(pin);       /* perform Analog Input   */
Serial.println(agv);       /* send value via serial  */
     }
     s=-1;  /* we are done with AI so next state is -1      */
     break; /* s=30 taken care of                           */

In pratica viene letto il valore dell'analogRead e sparato sulla seriale.
Quindi matlab riceve il valore nel range 0-1023.


Esatto, parlo proprio di questo!
Questa sera faccio ulteriori approfondimenti, grazie ragazzi!

Ovviamente approfondisco...dopo Homeland!  XD

Go Up