Pages: 1 2 [3]   Go Down
Author Topic: letture errate sensore lm35dz  (Read 4098 times)
0 Members and 1 Guest are viewing this topic.
Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7106
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 328
Posts: 22747
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Genova
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3390
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

no comment

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 328
Posts: 22747
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Offline Offline
Newbie
*
Karma: 1
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
« Last Edit: February 06, 2013, 11:25:23 am by ClaudioF » Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7106
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: February 06, 2013, 11:26:36 am by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

0
Offline Offline
Shannon Member
****
Karma: 131
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7106
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7106
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nel file adiosrv.pde (immagino che usi questo) la parte di codice che riguarda gli input analogici è questa
Code:
/* 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.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nel file adiosrv.pde (immagino che usi questo) la parte di codice che riguarda gli input analogici è questa
Code:
/* 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!  smiley-lol
« Last Edit: February 06, 2013, 11:51:44 am by ClaudioF » Logged

Pages: 1 2 [3]   Go Up
Jump to: