collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Sensor temperatura LM35DZ  (Lida 5270 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Sensor temperatura LM35DZ
« em: 31 de Março de 2012, 21:04 »
Boas pessoal

Tenho um lm35dz,e ja vi alguns codigos e esquemas na net, mas não estou a conseguir obter valores aceitaveis.O melhor que consegui foi a 23.8º (medidos com outro termometro) ele fazia 24, até aí, tudo bem, mas ao aquecer, quando o termometro estava em 55, obtinha o valor 44 no arduino.

E para conseguir fazer isso tive que ligar assim:

lm35dz  + ----------------------- 5v
lm35dz  -  ---------2.2k  -------gnd
lm35dz  data ------------------- A0

com o seguinte código:
Código: [Seleccione]
int potPin = 0;
float temp = 0;
long val=0;

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

void loop(){
val = analogRead(potPin);
temp = (5*val*100/1024);   
Serial.println(temp);
delay(2000);
}

Será problema de calibração?
Como se faz isso?

Offline CBX

  • Mini Robot
  • *
  • Mensagens: 1.315
Re: Sensor temperatura LM35DZ
« Responder #1 em: 31 de Março de 2012, 21:42 »
retira a resistência de 2.2k, está ai a mais...

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Sensor temperatura LM35DZ
« Responder #2 em: 31 de Março de 2012, 22:11 »
Ja tirei, mas n da.

tenho 23 no termometro e 17 no arduino, e quando aumento a temp, fica 64, 43.

:X

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Sensor temperatura LM35DZ
« Responder #3 em: 31 de Março de 2012, 22:16 »
Altera isto:
Código: [Seleccione]
temp = (5*val*100/1024);

Para:
Código: [Seleccione]
temp = (5.0*val*100.0/1024.0);

Para obrigar o compilador a fazer todas as contas em virgula flutuante.
Avr fanboy

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Sensor temperatura LM35DZ
« Responder #4 em: 31 de Março de 2012, 22:39 »
Se fizer isso, aparece.me "0.00" em todos os resultados, independentemente do analogread.

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Sensor temperatura LM35DZ
« Responder #5 em: 04 de Abril de 2012, 23:42 »
Pode ser o sensor estragado?

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Sensor temperatura LM35DZ
« Responder #6 em: 05 de Abril de 2012, 01:49 »
E tens a certeza que ambos os "termómetros" estavam mesmo à mesma temperatura, ou seja, deste tempo para as temperaturas estabilizarem, etc? A única forma de garantir isso é fixar a temperatura ambiente por igual e dar-lhes tempo para a atingirem, isto mais mais que se lhe diga do que parece, as resistências térmicas dos pacotes são diferentes.

Ficas com melhor precisão se fizeres

long  temp;
temp = ( (5 * val * 100 + 512) / 1024);

Ou então como  senso disse, se quiseres ter casas decimais.
« Última modificação: 05 de Abril de 2012, 01:51 por Njay »

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Sensor temperatura LM35DZ
« Responder #7 em: 05 de Abril de 2012, 17:16 »
Boas, ja  descobri o problema, não dava tempo suficiente para estabilizarem, tenho apenas uma diferença de 1 / 2 graus.

Obrigado pela dica Njay

Agora surgiu outro , neste momento tenho este codigo:

Código: [Seleccione]
int potPin = 5;

long temp;
long val;
long temp2;

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

void loop(){
 val = analogRead(potPin);

temp = 5*val;
temp2 = temp /10.24;

Serial.print(temp);
Serial.print(" - ");
Serial.print(temp2);
Serial.print(" - ");
Serial.println(val);
delay(3000);

Tive que criar aquele temp2, porque se fizesse a conta toda junta, nao dava valores constantes, de vez em quando "saltava" 5 ou mais graus.... erros.. lol

agora, se declarar as variaveis temp como float, e puser  a casa decimal nos numeros dos calculos, apenas obtenho uma casa decimal de valor zero. Nunca muda...

Será do serial print?

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Sensor temperatura LM35DZ
« Responder #8 em: 05 de Abril de 2012, 18:36 »
É porque todas as tuas variáveis são do tipo long, que é um tipo inteiro. Para o que queres fazer, temp2 tem que ser do tipo float; como não é, após a divisão por 10.24 a parte decimal é deitada fora e a parte inteira vai então para temp2, pois este só guarda inteiros.

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Sensor temperatura LM35DZ
« Responder #9 em: 05 de Abril de 2012, 19:58 »
sim, mas se declarar temp2 como float, vai aparecer 0.0 em todos os resultados.

Fiz uma experiencia, em que fazia:

float var = 5.5;

Serial.print (var);
delay(1000);


e no ecran aparece 5.10

:S

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Sensor temperatura LM35DZ
« Responder #10 em: 05 de Abril de 2012, 22:06 »
Dá uma olhada no Serial.xxx na doc do arduino.

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Sensor temperatura LM35DZ
« Responder #11 em: 06 de Abril de 2012, 01:49 »
Boas

em relação a questão li que:
- podia escolher o num de casas decimais que queria assim:  Serial.println(1.23456, 2) gives "1.23"
- As float são enviadas com asci
-Não posso mostrar o valor de uma float com o Serial.write();

mas axo que nada disto me ajuda.

Se eu escrever isto : Serial.print(22.5,1);
Vai-me aparecer:  22.1

E se escrever isto:  Serial.print(22.5,5);
Aparece : 22.10000


Offline zordlyon

  • Mini Robot
  • *
  • Mensagens: 1.768
Re: Sensor temperatura LM35DZ
« Responder #12 em: 06 de Abril de 2012, 11:02 »
Usa o Itoa e converte para String e já consegues mandar o numero como quiseres...

Cumprimentos,
André Carvalho.

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Sensor temperatura LM35DZ
« Responder #13 em: 06 de Abril de 2012, 12:03 »
Se eu escrever isto : Serial.print(22.5,1);
Vai-me aparecer:  22.1

E se escrever isto:  Serial.print(22.5,5);
Aparece : 22.10000

Esses resultados não estão em conformidade com o que está descrito na documentação, estranho.
E se fizeres

Serial.print((float)22.5)
Serial.print((double)22.5)

o que é que obténs?

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Sensor temperatura LM35DZ
« Responder #14 em: 06 de Abril de 2012, 13:22 »
Boas Njay:

Serial.print((float)22.5)       ------->  22.10

Serial.print((double)22.5) --------->  22.10


Boas zordlyon

Tambem posso fazer isso, mas devia estar a dar daquela maneira....