boa tarde amigos,

Estou enfrentando problemas com meu projeto, seguinte, tenho um Arduino Uno com uma tela 16x2 lcd keypad shield que tem botoes

a parte do codigo que faz a leitura da temperatura funciona, porém quando chega no laço do if para acender ou nao o led a determinada temperatura, nao funciona !!!

segue o código:

/*
'*****************************************************************
'* Projeto : Projeto - Temômetro LCD com sensor LM35 e Arduino
'* Indicador de temperatura Média, Mínima e Máxima
'* Autor : Alessandro Gouvea
'* Version : v1.0
'* www.oarduino.com
'*****************************************************************
*/
#include <LiquidCrystal.h>
//#define LED_R 8

// Variaveis
float tempC = 0; // variavel de ponto flutuante para a temperatura em Graus Celcius
int tempPin = 1; // Declaração do pino de entrada analógica 0 (A1) no Arduino
float samples[8]; // matriz para armazenar oito amostras para o cálculo da temperatura média
float maxi = 0,mini = 100; // variáveis ​​de temperatura máxima/mínimo com valores iniciais
int i;


// Inicialização do display e pinos correspondentes
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup()
{
lcd.begin(16, 2); // configura o número de linhas e colunas do LCD
lcd.setCursor(0, 0); // seta posição do cursor (coluna, linha) do LCD
lcd.print("Telemetria V_1.0 "); // imprime texto no LCD
lcd.setCursor(0, 1);
lcd.print("Fabio Wielewski"); // imprime texto no LCD
delay(6000); // aguarda 6s
lcd.clear(); // limpa LCD
pinMode(12, OUTPUT);
digitalWrite(12, LOW);
}

void loop()
{
// Início dos cálculos para o laço FOR
for(i = 0;i<=7;i++){ // colhe 8 amostras de temperatura
samples[i] = ( 4.8 * analogRead(tempPin) * 100.0) / 1024.0; // conversão matemática para amostra legível de temperatura do LM35 e armazena resultado de conjunto de amostras. 1024 é a profundidade de bits (quantização) do Arduino.
// 5 é a voltagem fornecida ao LM35. Alterar apropriadamente para ter a medida correta. No meu circuito é de 4.8Volts.

// Exibição atual para temperatura em grau Celcius no LCD
simbolotermometro();
lcd.setCursor(0, 0);
lcd.write(2);
lcd.setCursor(1, 0); // set posição do cursor LCD
lcd.print(" Atual: "); // imprime no LCD
lcd.setCursor(9, 0);
lcd.print(samples[i]); // imprime amostra da temperatrua atual no LCD
simbolograu();
lcd.setCursor(14,0);
lcd.write(1);
lcd.print("C");

tempC = tempC + samples[i]; // faz a adição de temperatura média
delay(800); // aguarda 800ms
} // FIM de faço FOR

// O PROBLEMA ESTA AQUI, EU JA TENTEI ATÉ COLOCAR O samples[i] E NAO DEU


if (tempC >= 23){    
digitalWrite(12, HIGH); // Se a temperatura for maior ou igual a 25 acenda LED vermelho
}
else{
digitalWrite(12, LOW); //mantem o vermelho apagado
}

tempC = tempC/8.0; // calculada a média de 8 amostras em grau Celcius

if(tempC > maxi) {maxi = tempC;} // grava a temperatura maxima na variavel maxi
if(tempC < mini) {mini = tempC;} // grava a temperatura minima na variavel mini

// Envia resultados ao LCD.
lcd.setCursor(0, 0);
lcd.print("Media Maxim Mini");
lcd.setCursor(0, 1); // seta o cursor para a coluna 0, linha 1
lcd.print(tempC); // imprime a temperatura media medida
lcd.setCursor(6, 1);
lcd.print(maxi); // imprime a temperatura maxima
lcd.setCursor(12, 1);
lcd.print(mini); // imprime a temperatura minima
delay(3000); // Aguarde cerca de 3 segundos para exibir os resultados antes de iniciar o ciclo da sua tela LCD novamente
tempC = 0; // Seta tempC a 0 para que os cálculos possam ser feitos novamente
} //Fim da rotina principal

void simbolograu()
{
byte grau[8] = { // Cria um array de bytes com o simbolo de grau
B00110,
B01001,
B00110,
B00000,
B00000,
B00000,
B00000,
B00000};
lcd.createChar(1, grau); // Cria o caractere personalizado de grau
} // fim rotina simbolograu

void simbolotermometro()
{
byte termometro[8] = { // Cria um array de bytes com o simbolo de termometro
B00100,
B01010,
B01010,
B01110,
B01110,
B11111,
B11111,
B01110};
lcd.createChar(2, termometro); // Cria o caractere personalizado 1 (termometro)
} // fim rotina simbolotermometro

no aguardo, agoniado

Obrigado

Exibições: 450

Responder esta

Respostas a este tópico

Olá,

Tente mudar a posição das linha:

tempC = tempC/8.0; // calculada a média de 8 amostras em grau Celcius

para antes das linhas de comparação:

if (tempC >= 23){    
digitalWrite(12, HIGH); // Se a temperatura for maior ou igual a 25 acenda LED vermelho
}
else{
digitalWrite(12, LOW); //mantem o vermelho apagado
}


lhe agradeço, amanha mesmo estarei testando no arduino e lhe dou respaldo.

infelizmente nao tivemos sucesso !!!

mais alguma sugestao?

/*
'*****************************************************************
'* Projeto : Projeto - Temômetro LCD com sensor LM35 e Arduino
'* Indicador de temperatura Média, Mínima e Máxima
'* Autor : Alessandro Gouvea
'* Version : v1.0
'* www.oarduino.com
'*****************************************************************
*/
#include <LiquidCrystal.h>
//#define LED_R 8

// Variaveis
float tempC = 0; // variavel de ponto flutuante para a temperatura em Graus Celcius
int tempPin = 1; // Declaração do pino de entrada analógica 0 (A1) no Arduino
float samples[8]; // matriz para armazenar oito amostras para o cálculo da temperatura média
float maxi = 0,mini = 100; // variáveis ​​de temperatura máxima/mínimo com valores iniciais
int i;
//int LED_R = 3; // Declaramos uma variável inteira com valor igual a 8 (conectada no pino 8 do Arduino)
//pinMode(LED_R, OUTPUT); // Define ledPin como pino de saída


// Inicialização do display e pinos correspondentes
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup()
{
lcd.begin(16, 2); // configura o número de linhas e colunas do LCD
lcd.setCursor(0, 0); // seta posição do cursor (coluna, linha) do LCD
lcd.print("Telemetria V_1.0 "); // imprime texto no LCD
lcd.setCursor(0, 1);
lcd.print("Fabio Wielewski"); // imprime texto no LCD
delay(6000); // aguarda 6s
lcd.clear(); // limpa LCD
pinMode(3, OUTPUT);
digitalWrite(3, LOW);
}

void loop()
{
// Início dos cálculos para o laço FOR
for(i = 0;i<=7;i++){ // colhe 8 amostras de temperatura
samples[i] = ( 4.8 * analogRead(tempPin) * 100.0) / 1024.0; // conversão matemática para amostra legível de temperatura do LM35 e armazena resultado de conjunto de amostras. 1024 é a profundidade de bits (quantização) do Arduino.
// 5 é a voltagem fornecida ao LM35. Alterar apropriadamente para ter a medida correta. No meu circuito é de 4.8Volts.

// Exibição atual para temperatura em grau Celcius no LCD
simbolotermometro();
lcd.setCursor(0, 0);
lcd.write(2);
lcd.setCursor(1, 0); // set posição do cursor LCD
lcd.print(" Atual: "); // imprime no LCD
lcd.setCursor(9, 0);
lcd.print(samples[i]); // imprime amostra da temperatrua atual no LCD
simbolograu();
lcd.setCursor(14,0);
lcd.write(1);
lcd.print("C");

tempC = tempC + samples[i]; // faz a adição de temperatura média
delay(800); // aguarda 800ms
} // FIM de faço FOR

tempC = tempC/8.0; // calculada a média de 8 amostras em grau Celcius

//TESTANDO
if (tempC >= 23){
digitalWrite(3, HIGH); // Se a temperatura for maior ou igual a 23 acenda LED vermelho
}
else{
digitalWrite(3, LOW); //mantem o vermelho apagado
}

if(tempC > maxi) {maxi = tempC;} // grava a temperatura maxima na variavel maxi
if(tempC < mini) {mini = tempC;} // grava a temperatura minima na variavel mini

// Envia resultados ao LCD.
lcd.setCursor(0, 0);
lcd.print("Media Maxim Mini");
lcd.setCursor(0, 1); // seta o cursor para a coluna 0, linha 1
lcd.print(tempC); // imprime a temperatura media medida
lcd.setCursor(6, 1);
lcd.print(maxi); // imprime a temperatura maxima
lcd.setCursor(12, 1);
lcd.print(mini); // imprime a temperatura minima
delay(3000); // Aguarde cerca de 3 segundos para exibir os resultados antes de iniciar o ciclo da sua tela LCD novamente
tempC = 0; // Seta tempC a 0 para que os cálculos possam ser feitos novamente
} //Fim da rotina principal

void simbolograu()
{
byte grau[8] = { // Cria um array de bytes com o simbolo de grau
B00110,
B01001,
B00110,
B00000,
B00000,
B00000,
B00000,
B00000};
lcd.createChar(1, grau); // Cria o caractere personalizado de grau
} // fim rotina simbolograu

void simbolotermometro()
{
byte termometro[8] = { // Cria um array de bytes com o simbolo de termometro
B00100,
B01010,
B01010,
B01110,
B01110,
B11111,
B11111,
B01110};
lcd.createChar(2, termometro); // Cria o caractere personalizado 1 (termometro)
} // fim rotina simbolotermometro

Acho que tá fazendo confusão aí com os pinos, codigo um vc usou o pino 12 pro led, depois vc usou o pino 3.

Assim foi de boa aqui:

/*
'*****************************************************************
'* Projeto : Projeto - Temômetro LCD com sensor LM35 e Arduino
'* Indicador de temperatura Média, Mínima e Máxima
'* Autor : Alessandro Gouvea
'* Version : v1.0
'* www.oarduino.com
'*****************************************************************
*/
#include <LiquidCrystal.h>
//#define LED_R 8

// Variaveis
float tempC = 0; // variavel de ponto flutuante para a temperatura em Graus Celcius
int tempPin = 1; // Declaração do pino de entrada analógica 0 (A1) no Arduino
float samples[8]; // matriz para armazenar oito amostras para o cálculo da temperatura média
float maxi = 0,mini = 100; // variáveis ​​de temperatura máxima/mínimo com valores iniciais
int i;


// Inicialização do display e pinos correspondentes
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup()
{
lcd.begin(16, 2); // configura o número de linhas e colunas do LCD
lcd.setCursor(0, 0); // seta posição do cursor (coluna, linha) do LCD
lcd.print("Telemetria V_1.0 "); // imprime texto no LCD
lcd.setCursor(0, 1);
lcd.print("Fabio Wielewski"); // imprime texto no LCD
delay(6000); // aguarda 6s
lcd.clear(); // limpa LCD
pinMode(12, OUTPUT);
digitalWrite(12, LOW);
}

void loop()
{
// Início dos cálculos para o laço FOR
for(i = 0;i<=7;i++){ // colhe 8 amostras de temperatura
samples[i] = ( 4.8 * analogRead(tempPin) * 100.0) / 1024.0; // conversão matemática para amostra legível de temperatura do LM35 e armazena resultado de conjunto de amostras. 1024 é a profundidade de bits (quantização) do Arduino.
// 5 é a voltagem fornecida ao LM35. Alterar apropriadamente para ter a medida correta. No meu circuito é de 4.8Volts.

// Exibição atual para temperatura em grau Celcius no LCD
simbolotermometro();
lcd.setCursor(0, 0);
lcd.write(2);
lcd.setCursor(1, 0); // set posição do cursor LCD
lcd.print(" Atual: "); // imprime no LCD
lcd.setCursor(9, 0);
lcd.print(samples[i]); // imprime amostra da temperatrua atual no LCD
simbolograu();
lcd.setCursor(14,0);
lcd.write(1);
lcd.print("C");

tempC = tempC + samples[i]; // faz a adição de temperatura média
delay(10); // aguarda 800ms
} // FIM de faço FOR

tempC = tempC/8.0; // calculada a média de 8 amostras em grau Celcius

if (tempC >= 23){
digitalWrite(12, HIGH); // Se a temperatura for maior ou igual a 25 acenda LED vermelho
}
else{
digitalWrite(12, LOW); //mantem o vermelho apagado
}

if(tempC > maxi) {maxi = tempC;} // grava a temperatura maxima na variavel maxi
if(tempC < mini) {mini = tempC;} // grava a temperatura minima na variavel mini

// Envia resultados ao LCD.
lcd.setCursor(0, 0);
lcd.print("Media Maxim Mini");
lcd.setCursor(0, 1); // seta o cursor para a coluna 0, linha 1
lcd.print(tempC); // imprime a temperatura media medida
lcd.setCursor(6, 1);
lcd.print(maxi); // imprime a temperatura maxima
lcd.setCursor(12, 1);
lcd.print(mini); // imprime a temperatura minima
delay(3000); // Aguarde cerca de 3 segundos para exibir os resultados antes de iniciar o ciclo da sua tela LCD novamente
tempC = 0; // Seta tempC a 0 para que os cálculos possam ser feitos novamente
} //Fim da rotina principal

void simbolograu()
{
byte grau[8] = { // Cria um array de bytes com o simbolo de grau
B00110,
B01001,
B00110,
B00000,
B00000,
B00000,
B00000,
B00000};
lcd.createChar(1, grau); // Cria o caractere personalizado de grau
} // fim rotina simbolograu

void simbolotermometro()
{
byte termometro[8] = { // Cria um array de bytes com o simbolo de termometro
B00100,
B01010,
B01010,
B01110,
B01110,
B11111,
B11111,
B01110};
lcd.createChar(2, termometro); // Cria o caractere personalizado 1 (termometro)
} // fim rotina simbolotermometro

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço