Olá pessoal, estou adaptando um codigo do cookbook para montar um termostatopara meu aquario,

consegui fazer o hardware imprimir no lcd a temperatura atual, a temperatura ideal e o estado da saida pino 13, falta agora conseguir tornar a temp ideal configuravel através de botões ou um potenciometro.

gostaria da ajuda dos feras aqui pra retirar uma mancha que aparece ao lado da temp ideal.

o funcionamento é o seguinte: configuro a temperatura ideal no pc, por exemplo 28ºC e quando a temperatura baixa até o valor setado liga o pino 13 onde vou instalar um TIC 226 para ligar o aquecedor.

o código está abaixo

//*termostato baseado no cookbook adaptado pra LCD ajustavel apenas via PC

#include <LiquidCrystal.h>
const int numRows = 2;
const int numCols = 16;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int inPin = 0; // sensor conectado no pino analogico 0
const int outPin = 13; //2; // saida digital
const int threshold = 28; // valor de leitura que habilita a saida digital
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(outPin, OUTPUT);
}
void loop()
{
int value = analogRead(inPin);
long celsius = (value * 500L) /1024; // 10 mV por graus c, see text
lcd.setCursor(0,0);
Serial.print(celsius);
lcd.print(celsius);
Serial.print(" graus Celsius: ");
lcd.print((char)223);
lcd.print("C");
if(celsius < threshold) //se celsius menor que threshold ligar pino 13
{
lcd.setCursor(6,1);
digitalWrite(outPin, HIGH);
Serial.println("pino on");
lcd.print(" ligado ");
}
else
{
lcd.setCursor(6,1);
digitalWrite(outPin, LOW);
Serial.println("pino off");
lcd.print("

desligado");

lcd.setCursor(0,1);
lcd.println(threshold);
lcd.print((char)223);
lcd.print("C");

}
delay(1000); // delay de 1 segundo
}

e a mancha que peço aos amigos para me ajudar está na foto abaixo,

no aguardo pessoal e muito obrigado.

Exibições: 3779

As respostas para este tópico estão encerradas.

Respostas a este tópico

Bom, muda no código para "char(233)" e não como "(char)233", pelo que sei (char) atua para o tratamento de uma váriavel de um tipo como outro e você está passando um valor "literal", esse deve ser o problema.

mano, não fez diferença nenhuma além de mudar a bolinha do Grau para outro ícone. essa linha lcd.print((char)223); é apenas para printar º antes do C de grau celsius, o problema é essa mancha ocupando 2 colunas do display.

mesmo assim vlw mano.

bom, se vc escreve qualquer coisa aparece isso?
Se for então parece que é a memória do LCD que ta zoada... 

 mano ivan, tentei usar o código acima e retornou um monte de erros, segue

termostato_2:7: error: expected constructor, destructor, or type conversion before '(' token
termostato_2:8: error: expected constructor, destructor, or type conversion before '=' token
termostato_2:9: error: expected constructor, destructor, or type conversion before '=' token
termostato_2:10: error: expected constructor, destructor, or type conversion before '=' token
termostato_2.cpp: In function 'void loop()':
termostato_2:21: error: 'inPin' was not declared in this scope

marcelo moscz, a mancha só aparece quando mando printar a linha threshold e não sai de jeito nenhum.

vlw pessoal pela bola, continuo tentando.

coloca 

lcd.println(threshold, DEC);

e depois tenta

int Valor_threshold = threshold;

lcd.println(Valor_threshold, DEC);

para ver se continua, talvez seja algo quanto a threshold ser uma constante, e onde é armazenado no ATMEGA.

Cara, aposto que não tem nada a ver com código. Verifica a ligação do LCD com o Arduino. Eu tinha soldado mal a barra de pinos nos buraquinhos do LCD e ele fazia exatamente a mesma coisa, mas na linha de cima. Tenta chegar os cabos, a ligação, remova (com ele ligado) os cabos de dados, um  a um, sem desligar a alimentação. Acho que é a parte de ligação.

Valeu, abração e boa sorte

marcelo mosc, tentei substituir pelas linhas que vc flw mas geram varios erros no código, talvez eu não esteja sabendo adaptar o código, se vc puder escrever o código e postar te agradeço muito.

tulio baars, já verrifiquei o cabeamento e o problema tbm não é esse, oque fiz pra me certificar: inverti as linhas, coloquei a temp atual na linha de baixo e o valor configurado em cima e a mancha acompanhou a linha threshold.

acredito, como o marcelo, que tem algo a ver com "threshold" ser uma constante, onde quer que eu configure o print a bendita mancha acompanha a linha.

bom, esse final de semana vou tentar tornar o valor configuravel via botões ou potenciometro, se alguem puder me ajudar agradeço desde já!

vlw pessoal, abraço.

Voce está usando "println" na linha lcd.println(threshold);
O println manda os caracteres quebra de linha (#13) e retorno de carro (#10), acho que é isso

que está fazendo aparecer 2 caracteres estranhos.

Pois é a unica coisa diferente que tem de todos os outros lcd.print que tem no seu código.

 Aí marcelo, tú é pica das galaxias mesmo, substituí lcd.println po lcd.print e os dois caracteres sumiram, isso que é uma rede social eficiente, reune caras genias em diversos assuntos diferentes.

muito obrigado mano!

 agora pessoal, queria tirar umas dúvida com vcs:

1º assim que escrevi o código e conectei o LM35 ele indicava 31ºC então peguei um termômetro convencional e coloquei bem ao lado do sensor para visualizar a temperatura e assim calibrar o sensor. caliberi o sensor alterando o valor da linha long celsius =  (value * 490L) /1024; e agora o sensor indica exatamente a mesma leitura do termometro, a pergunta é, mechi no lugar certo para calibrar o valor de leitura?

2º a leitura fica variando muito, nesse momento por exemplo fica mostrando 30, 31, 30, 31. como posso esabilizar isso?

3º queria colocar mais uma casa decimal na leitura, como posso fazer isso?

 e uma curiosidade, achei uma dezena de códigos para termometros apenas e cada um desses códigos dá um valor diferente de leitura com o mesmo LM35. por que isso?

flw pessoal, muito obrigado mesmo pela bola heim!

abraço.

Para tentar estabilizar a leitura, voce pode armazenar as ultimas 10 ou 20 leituras, tirar a média e exibir este  valor no LCD. Outra possibilidade seria mostrar uma casa depois da virgula.

 fala marcos, nao tenho a mínima ideia de como armazenar as ultimas 10 leituras e printar apenas a média,  no cookbook não achei nada sobre isso e quanto mostrar mais uma casa decimal, todos os exemplos que achei na ne e que mostram ate 2 casas decimais tambêm vairam pra caramba os digitos antes da virgula. estraanho né.

mas vlw, depois que calibrei com referencia num termometro comum está variando um pouco menos.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço