sábado, 26 de janeiro de 2013

Arduino - Termometro digital

Tudo bom galera ! , depois de uma semaninha corrida , voltamos a programação normal do nosso bat canal .  e mãos a obra !   Hoje vamos montar um termometro digital usando o sensor de temperatura LM35
Voce vai precisar de :
1- arduino
1-LM35
1- protoboard
e alguns jumpers .





E vamos as ligações .
Como o LM35 é muito parecido ( idêntico )com um transistor comum como um BC337 , ou seja , cuidado ao guardar esse componente por que é muito fácil confundir  e acabar danificando o sensor ou até o circuito onde possa ir um transistor !
- olhando o sensor pela parte reta , o pino da esquerda é a alimentação +5V , o pino central é o sinal analógico e o pino da direita é o GND

Datasheet


Um pouco sobre o sensor de temperatura :

A alimentação maxima dele é de 5V . Como ele é um conversor de  10 bits, consegue diferenciar 1024 bits  (de 0 a 1023) com valores entre 0V e 5V.  Ou seja, quando ele ler 5v na entrada ele vai converter para 1023.
Agora ficou fácil, pois podemos fazer um regra de três
  Bits          Voltagem
 1023 -------- 5V
   512 ---------- X

X = (5 * 512) / 1023 = 2.5 V

Ou seja, quando o conversor analogico / digital do arduino  mostrar o valor digital 512 significa que está entrando 2.5V nele.

O LM35 é um sensor  linear que fornece 10mV para cada grau celcius que ele medir. Ou seja, se ele fornecer 100mV, significa que ele está medindo 10ºC.



Vamos as ligações .
o pino da esquerda (fio branco) vai ligado ao +5V , o pino central (fio vermelho ) que é o sinal , vai ligado ao pino analogico A0
e o pino da direita , (fio preto) vai ligado ao GND






Para "selecionar" a precisão do conversor , no arduino é preciso fazer uma conta basica onde é dividida a tensão de alimentação pela quantidade de bits .


5V / 1023 = 0.00488 


O valor obtido por essa divisão , é a precisão do sensor .

Chega de papo e  vamos ao código do nosso arduino


int pinosensor = 0;
int valorlido = 0; 
float temperatura = 0; 
void setup() {
  Serial.begin(9600); 
}

void loop() {
  valorido = analogRead(pinosensor);
  temperatura = (valorlido * 0.00488); 
  temperatura = temperatura * 100; 
  Serial.print("Temperatura atual: ");
  Serial.println(temperatura);
  delay(1000); 
}

5 comentários:

  1. Boa tarde.
    Parabéns pelo blog, conteúdo muito bom para que está aprendendo assim como eu.
    Vê se pode me ajudar.
    Fiz o exemplo da temperatura e no serial monitor ok, funciona perfeitamente.
    Sabe como posso demonstrar estes valores em uma página html hospedada no cartão SD do W5100?

    Obrigado.

    ResponderExcluir
    Respostas
    1. Obrigado por acompanhar o blog ! Esse será o proximo tema abordado em uma nova sequencia de posts.. tenho tudo pronto o problema é tempo pra publicar aqui .

      Mas calma que o quanto antes que eu conseguir eu coloco aqui !

      Excluir
  2. obrigadao vlw msm cara eu gosto de caras que sao diretos como vc

    to sempre te acompanhado

    ResponderExcluir
  3. Bom dia. Fiz uma programação pra fazer uma irrigação automatica com sensor e a leitura da temperatura ambiente, porém está dando interferência na temperatura, conforme o leitor de umidade começa a funcionar a temperatura muda em relação ao aumento da condutividade no sensor.
    Alguém poderia me ajudar?

    #include

    int moistureSensor = 2;
    int moisture_val;
    int pinosensor =0;
    int valorlido=0;
    float temperatura =0;


    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

    void setup() {
    lcd.begin(16, 2);

    Serial.begin(9600); //open serial port

    }

    void loop() {
    moisture_val = analogRead(moistureSensor); // read the value from the moisture-sensing probes
    Serial.print("moisture sensor reads "); //output the value from the sensors
    Serial.println( moisture_val );
    valorlido=analogRead(pinosensor);
    temperatura=(valorlido*0.00488);
    temperatura=temperatura*100;
    Serial.print("Temperatura: ");
    Serial.println(temperatura);
    delay(1000);
    lcd.clear(); //limpa o display do LCD.
    lcd.print("Condut: ");
    lcd.print(moisture_val); //imprime a string no display do LCD.
    lcd.setCursor(0,1);
    lcd.print("Temp:");
    lcd.print(temperatura);
    delay(1000);
    }

    ResponderExcluir