byte a[8]=
{
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
}
lcd.createchar(0,a);
lcd.write(0);
valor_lido=analogRead(sensor); /* Lê tensao do LM35 */
temperatura1=(valor_lido*5*100)/1024; /* Conversao do valor lido */
delay(100); /* Espera 100 mili segundos antes de prosseguir para a próxima medição*/
valor_lido=analogRead(sensor); /* Lê tensao do LM35 */
temperatura2=(valor_lido*5*100)/1024; /* Conversao do valor lido */
delay(100); /* Espera 100 mili segundos antes de prosseguir para a próxima medição*/
valor_lido=analogRead(sensor); /* Lê tensao do LM35 */
temperatura3=(valor_lido*5*100)/1024; /* Conversao do valor lido */
delay(100); /* Espera 100 mili segundos antes de prosseguir para a próxima medição*/
valor_lido=analogRead(sensor); /* Lê tensao do LM35 */
temperatura4=(valor_lido*5*100)/1024; /* Conversao do valor lido */
temperatura=(temperatura1+temperatura2+temperatura3+temperatura4)/4;
Para melhorar a visualização e entendimento do código é recomendado o uso de funções, nos próximos projetos farei uso desta caracteristica da linguagem C.
A montagem segue o mesmo padrão dos artigos utilizando um display de LCD e leitura de temperatura. Porém combinaremos as duas.Para poupar o trabalho de consultar os artigos anteriores siga as imagens abaixo. Lembre-se de consultar o datasheet de seu Display LCD para conferir a compatibilade do seu módulo com o usado neste projeto.
O código
#define sensor 0
#include <LiquidCrystal.h>
/* Biblioteca com funcoes para uso de um LCD baseado no Hitachi HD 44780 */
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
/* Define os pinos de ligacaoi do LCD ao arduino com esta ordem LiquidCrystal(rs, enable, d4, d5, d6, d7) */
float temperatura=0;
float temperatura1=0;
float temperatura2=0;
float temperatura3=0;
float temperatura4=0;
float valor_lido=0;
void setup()
{
/*lcd.begin(cols, rows) */
lcd.begin(20, 4); /* Tipo de LCD usado no meu caso de 20 colunas por 4 linhas */
lcd.setCursor(0, 0); /* O Cursor iniciara na coluna zero linha 0 */
lcd.print(” Central AVR!”);
}
void loop()
{
byte a[8] = { B01110, B01010, B01010, B001110, B00000, B00000, B00000, B00000}; // Caractete criado
lcd.createChar(0,a); // define nosso caractere º como uma variável
valor_lido=analogRead(sensor); /* Lê tensao do LM35 */
temperatura1=(valor_lido*5*100)/1024; /* Conversao do valor lido */
delay(100); /* Espera 100 mili segundos antes de prosseguir para a próxima medição*/
valor_lido=analogRead(sensor); /* Lê tensao do LM35 */
temperatura2=(valor_lido*5*100)/1024; /* Conversao do valor lido */
delay(100); /* Espera 100 mili segundos antes de prosseguir para a próxima medição*/
valor_lido=analogRead(sensor); /* Lê tensao do LM35 */
temperatura3=(valor_lido*5*100)/1024; /* Conversao do valor lido */
delay(100); /* Espera 100 mili segundos antes de prosseguir para a próxima medição*/
valor_lido=analogRead(sensor); /* Lê tensao do LM35 */
temperatura4=(valor_lido*5*100)/1024; /* Conversao do valor lido */
temperatura=(temperatura1+temperatura2+temperatura3+temperatura4)/4;
lcd.setCursor(0, 2); /* O Cursor iniciara na coluna zero linha 2 */
lcd.print(“Temperatura= “);
lcd.print(temperatura); // imprime no LCD o conteúdo da variável temperatura
lcd.write(0); // Imprime º na tela do LCD
lcd.print(“C”);
delay(600);
}
O resultado final
muito bom ! parabens ! eu estou a realizar um projecto de escola, e o meu projecto é praticamente a mesma coisa que este ! só que o meu, nao tem arduino, tenho apenas 2 atmega16, LCD 16×2, LM35DZ, LDR, ainda nao consegui meter aquilo a funcionar, não consigo ver a temperatura e luminosidade no meu lcd, enfim tenho de ter paciencia eheheh continuaçao de bom trabalho !
O problema com a luminosidade deve ser por causa da ligação do potenciometro com o pino de contraste, de uma conferida na minha montagem de circuito. Quanto ao funcionamento do código com o atmega16 eu estou esperando chegar um conversor serial USB para lançar mais tutóriais para ele, caso precise tenho o código funcionando para 8051 bem comentado, o segredo é obedecer os tempos para enviar cada comando.
Olá, você falou em excluir o valor máximo e mínimo lidos e tirar a média dos restantes, como seria este procedimento? obrigado
Leia esse post para ter uma ideia melhor de como tratar esses dados
http://centralavr.blogspot.com.br/2011/07/incrementando-um-projeto-termometro-com.html
O processo não é complicado, o primeiro passo é ler a variável desejada diversas vezes, por exemplo posso ler 4 vezes a temperatura em um intervalo de 1 segundo, o importante é em casa leitura salvar o valor em uma variável diferente
float temperatura1=0;
float temperatura2=0;
float temperatura3=0;
float temperatura4=0;
Após ler 4 vezes faça um bloco de comparação usando IF e descubra qual é o maior valor das 4 e após o menor valor das 4.
some todas as 4 leituras e exclua o valor maximo e o valor minimo e divida por 2 e pronto =)
Bloco responsável por imprimir a temperatura máxima
if (temp_maximavalor_arredondado)
{
temp_minima=valor_arredondado;
lcd.setCursor(0,3);
lcd.print("Temp min: " );
lcd.print(temp_minima);
lcd.write(0); // Imprime o caractere º
lcd.print(C");
}
Olá
apareceu isso daqui quando mandei fazer up…
Binary sketch size: 4950 bytes (of a 30720 byte maximum)
avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51
poderia me ajudar?
desde já agradeço…
Guilherme
Procure o suporte do arduino, creio que pode ser um problema com drives ou cabo USB, tente reinstalar os drives do arduino e mudar a porta USB ou o cabo.