sexta-feira, 3 de abril de 2015

Sensor de temperatura LM35 e Arduino - Termômetro para Sistema de Irrigação

Olá!
Nessa nova postagem, trago algumas experiências com o sensor de temperatura LM35, e alguns incrementos. A ideia é incrementar um módulo de monitoramento de  temperatura ambiente no meu sistema de irrigação para hortas e jardins, e ainda procurar manter o padrão de postagem com experimentos significativos que realmente sirvam para alguma coisa, alem de hobbies e aprendizado.
Indo ao que interessa, a ideia é fazer um termômetro simples e preciso, utilizando componentes básicos que qualquer "usuário" de Arduino tenha em mãos, ou seja de fácil acesso. Um desses componentes é o LM35, um circuito integrado simples e barato que parece um transistor comum do tipo BC547, e é capaz de medir temperaturas que variam de -55  a +150 °C, com uma incrível precisão de mais ou menos 0,5 °C. O seu funcionamento é bem simples, onde a cada  grau Celsius de temperatura ele enviará 10mV ao microcontrolador, ou qualquer outro dispositivo que possa fazer leitura de tensão (V). Ex: Se a tensão V de saída do LM35 for igual a 250mV, teremos uma temperatura de aproximadamente 25 °C. Partindo desse princípio temos uma regra de três simples, onde os valores são diretamente proporcionais.
Então:



Para que o Arduino consiga efetuar a leitura de forma correta, precisamos converter esses valores para a faixa de leitura da entrada analógica do microcontrolador. Ou seja, as entradas analógicas do Arduino recebem valores de tensão 0 a 5V, e mapeia valores inteiros de 0 a 1023. Isso quer dizer que:

 

Agora basta associarmos os valores obtidos da primeira operação com os da segunda:

Onde:

250mV = Tensão de saída do Sensor;
5 V = Tensão máxima suportada pela porta analógica
0,0049V = Tensão por unidade da porta analógica;
100 = Conversão de milivolts (mV) para Graus Celsius.

Observando que existe uma pequena diferença entre os resultados, porém essa diferença está dentro da margem de erro que é de mais ou menos 0,5 °C.
Depois de conseguir esses dados, fica fácil escrever o programa para o Arduino: 


/*Sensor de temperatura - LM35
Computadores Fazem Arte
Computadoresfazemarte-odilon.blogspot.com.br */

int pinoSensor = 0; //Pino A0 do Arduino conectado ao LM35
int valorLido = 0; //Variável que armazena o valor lido pelo Sensor
float temperatura = 0;//Ponto flutuante, armazena a temperatura
void setup() {
 
  Serial.begin(9600); //Inicia comunincação Serial
}
void loop() {
  valorLido = analogRead(pinoSensor); //Linha de código que iguala a leitura analógica do pinoSensor com o valorLido
  temperatura = valorLido * 0.0049;  // X/5 * 0.0049 , onde X representa valor lido
  temperatura = temperatura * 100;   // Conversão de milivolts para Celcius 
  Serial.print("Temperatura Atual = "); // Escreve no serial o resultado.
  Serial.print(temperatura);
  Serial.print(" Graus Celsius");
  delay(2000); //Aguarda 2 segundo para efetuar nova leitura
}


Depois de programar o Arduino basta montar o hardware.
Necessitaremos de:


Um Arduino (modelo de sua preferência);

Um sensor de temperatura LM35;

Protoboard;

Jumpers.

O esquema de montagem é simples:


*Sempre que for montar algo, dê uma revisada no datasheet de todos os componentes para que não reste dúvida sobre o funcionamento de cada um.

Proposta de montagem na protoboard:


Depois de montar e conferir se todas as ligações estão corretas, basta ligar o Arduino e testar:
Tela serial, indicando o valor de temperatura obtido:



Você pode incrementar o projeto, de várias maneiras, por exemplo, adicionando um LED para sinalizar a temperatura muita alta, muito baixa ou os dois, adicinar dispositivos para acionar outras cargas, como relés, utilizar um display para mostrar o valor de temperatura, etc.
Em fim, basta usar a criatividade e aproveitar as infinitas possibilidades que o Arduino pode oferecer.

Até.


Fontes de pesquisa:
Arduino.cc
Blog.webtronico.com
blog.novaeletronica.com.br



domingo, 28 de dezembro de 2014

Arduino e LEDs - Parte 2, Variação de acendimento de 5 LEDs com Potenciômetro.

Esse post tem o intuito de mostrar como variar o acionamento de LEDs através da leitura de um sinal analógico. No meu caso utilizei um potenciômetro que quando conectado a uma porta analógica do Arduino, fornece uma leitura que varia de acordo com a tensão aplicada. Explicando melhor: O potenciômetro nada mais é do que uma resistência variável, e quando aplicamos uma tensão sobre ele (Vin = 5V), podemos variar a tensão de saída girando o pendulo seu pino central.







Com isso podemos ler a variação  de tensão (de 0 a 5V) utilizando uma das entradas analógicas do Aduino, o que pode ser utilizado para variados projetos. Nesse caso utilizei para fazer um sequencial de LEDs. Esse mesmo principio foi utilizado para fazer o controle dos servos que foram utilizados no projeto do braço robótico, http://computadoresfazemarte-odilon.blogspot.com.br/2012/12/braco-robotico-com-arduino-e-servos.html. 
Logo abaixo temos a parte de hardware do projeto.


Esquema elétrico

 Esquema para montagem em um protoboard

Agora a parte de software, ou seja, o código para programar o Arduino:

int sensorPotenciometro = 0; 
int led1 = 2 ; 
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int valor = 0; // Essa variável armazenará a leitura do potenciometro

void setup() {
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
}

void loop() {
  valor = analogRead(sensorPotenciometro); //Armazena os valores obtidos pelo sensor na variável "valor"
  Serial.println(valor); //Escreve na serial as leituras obtidas que vão de 0 a 1023
  if(valor == 0){ // Compara as leituras e faz o que se pede no bloco abaixo ...
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    delay (1000);
    digitalWrite(led1, LOW);
    delay (1000);
  }
  else if(valor >= 0 && valor < 200){ // compara as leituras e faz o que se pede no bloco abaixo...
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
  }
  else if(valor >= 201 && valor < 400){//...
    digitalWrite(led1, HIGH); 
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
  }  
  else if(valor >= 401 && valor < 600){ //...
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, LOW);
  }
  else if(valor >= 601 && valor < 800){ //...
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);
  }
  else if(valor > 801){  //...
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    delay(1000);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);
    delay(1000);
  }

}

O código é bem simples, apenas cruza valores colhidos pela porta analógica e executa sinais binários nas portas digitais.
Agora é colocar a criatividade pra funcionar e incrementar o projeto de acordo com cada necessidade.
A seguir um vídeo do projeto em funcionamento:




Até o próximo projeto.