Ir ao conteúdo
  • Cadastre-se

Termostato para geladeira


mauroviana

Posts recomendados

Ola a todos. estou tentando fazer um termostato, par substituir o da minha geladeira que pifou. Pretendo fazer no projeto um LCD para amostragem da temperatura com menu, botões que eu possa escolher a temperatura que vai desligar o compressor e ligar a resistência degelo, e outras coisas como aviso sonoro de porta aberta por mais de 2minutos. Fico muito grato se alguém puder me ajudar, segue ai o codigo em c, compilador pic c compiler, que inicie com a com varias pesquisas e horas bundas na frente do PC. Trabalho no ramo diferente desse, mas sou apaixonado por tudo isso que vocês fazem aqui. E admiro mito vocês.

   


while(1){
lcd_gotoxy(1,1);
lcd_putc(" ELETROLUX");
delay_ms(1000);

for (i=1;i<=1000;i++)
{
set_adc_channel(0); //Habilita canal 0
delay_us(20); //Espera um pouco, obrigatório!
valor = valor+read_adc(); //Lê canal 0
adc=valor/1000;

set_adc_channel(1); //Habilita canal 1
delay_us(20); //Espera um pouco, obrigatório!
valor_2 = valor_2+read_adc(); //Lê canal 1
adc_2=valor_2/1000;
}

sub = adc - adc_2;
tempe = (1.5 * sub * 333.33) / 1024; //5 100 201.0 //Conversão para tensão.

if (tempe<=-5.0)output_high(pin_b0);
if (tempe>=-5.0)output_low(pin_b0);

lcd_gotoxy(1,2);
printf(lcd_putc,"\n%2.2f%cTemperatura",tempe,0xdf,);
valor=0;
valor_2=0;


delay_ms(1000);

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...
ainda nao teve resultados.. precisa de ajuda ou desistiu? se quiser posso colaborar..

abraço

kd o Mauroviana rsrsrs...

Ola a todos. estou tentando fazer um termostato, par substituir o da minha geladeira que pifou. Pretendo fazer no projeto um LCD para amostragem da temperatura com menu, botões que eu possa escolher a temperatura que vai desligar o compressor e ligar a resistência degelo, e outras coisas como aviso sonoro de porta aberta por mais de 2minutos. Fico muito grato se alguém puder me ajudar, segue ai o codigo em c, compilador pic c compiler, que inicie com a com varias pesquisas e horas bundas na frente do PC. Trabalho no ramo diferente desse, mas sou apaixonado por tudo isso que vocês fazem aqui. E admiro mito vocês.

#include <16F877A.h>
#device adc=10 //Habilitar ADC de 10 bits, obrigatório. Pode
//ser utilizado de 8 bits também.
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Clock <=4Mhz
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#use delay(clock=4000000)
#include <lcd.c>

//#use fast_io(
//#define trisb 0b00000000; // 0 output, 1 input

float valor_2;
float valor;
int32 i;
int16 adc_2;
int16 adc;
float tempe;
signed int16 sub;

void main(){

setup_adc_ports(AN0_AN1_AN3); //Configura canal 0 analógico
setup_adc(ADC_CLOCK_DIV_8); //De acordo com relógio interno/8.
lcd_init();


while(1){
lcd_gotoxy(1,1);
lcd_putc(" ELETROLUX");
delay_ms(1000);

for (i=1;i<=1000;i++)
{
set_adc_channel(0); //Habilita canal 0
delay_us(20); //Espera um pouco, obrigatório!
valor = valor+read_adc(); //Lê canal 0
adc=valor/1000;

set_adc_channel(1); //Habilita canal 1
delay_us(20); //Espera um pouco, obrigatório!
valor_2 = valor_2+read_adc(); //Lê canal 1
adc_2=valor_2/1000;
}

sub = adc - adc_2;
tempe = (1.5 * sub * 333.33) / 1024; //5 100 201.0 //Conversão para tensão.

if (tempe<=-5.0)output_high(pin_b0);
if (tempe>=-5.0)output_low(pin_b0);

lcd_gotoxy(1,2);
printf(lcd_putc,"\n%2.2f%cTemperatura",tempe,0xdf,);
valor=0;
valor_2=0;


delay_ms(1000);

pelo o que entedi do projeto, basta apenas uma leitura de temperatura(sensor), no caso o Lm35 resolve seu prob.

Pela leitura de temperatura do sensor você poderia ligar os desligar o compressor e ainda acionar o degelo..

Link para o comentário
Compartilhar em outros sites

  • mês depois...

Olá galera, me desculpem a demora é que me sobra pouco tempo pra eu curtir meu hobby mas não desisti.

Vamos lá, fiz umas mudanças no programa que citei acima e acho que esta ficando bom, acrescentei um botão para seta a temperatura desejada, não sei muito bem como é o ciclo de uma frost free, mais acho que com o alcance da temperatura desejada o compressor deve desligar, e aguardar o aumento da temperatura para que ligue a resistência de degelo e depois voltar a ligar novamente o compressor.

Ao ligar a geladeira devera aparecer uma tela de boas vindas e depois a tela que aparecerá o tempo real e o tempo programado, ao acionar o botão de seta a temperatura desejada, se não houver nem uma mudança depois de alguns segundos, deverá voltar para a tela permanente.

Tem que haver também um alarme sonoro, e um sinal no visor do LCD com um limite de tempo de porta aberta de 2 minutos.

Preciso de ajuda para deixar o código mais limpo e também modificar o que for preciso,

Obrigado.

 


Link para o comentário
Compartilhar em outros sites

Boa noite,

Vou descrever por extenso a lógica, pois não sei programação direito, espero que sirva.

O ciclo de degelo (esta é a lógica da Eletrolux linha DF35/37 - placa eletrônica sem microprocessador) seria assim:

- um timer conta as horas trabalhadas do compressor (cronometra as somas dos tempos que o compressor esteve ligado);

- quando as horas trabalhadas do compressor somar 8 horas, inicia o degelo; Desliga o compressor, o ventilador e aciona a resistência de degelo;

- Esse tempo de duração do degelo tem o tempo máximo limitado em 25 minutos.

- Em série com a resistência de degelo tem um termostato de bimetálico que abre os contatos quando a temperatura atingir +7,5°C, interrompe a corrente na resistência de degelo, pois assim ele entende que o gelo acabou e não pode continuar com a resistência alimentada.

- Esgotado os 25 minutos de degelo, abre o contato que acionava o degelo (a resistência já estava interrompida sua alimentação pelo

bimetálico), e comuta para ligar o compressor e a ventoinha e recomeça a contagem das horas trabalhadas do compressor, quando completa 8 horas, novamente repete o ciclo de degelo.

- o bimetálico fecha novamente seu contato quando a temperatura atingir -2,2°C.

- Em série ainda com a resistência de degelo, além do bimetálico, tem um fusível térmico para última proteção, caso o bimetálico colar seus contatos.

Obs. os números acima variam de acordo com o fabricante.

---------------------------------------------------------------------------------------------------

Ciclo de degelo para linha com placa eletrônica microprocessada

Aqui, o termostato bimetálico de degelo além de interromper o circuito da resistência de aquecimento, envia o sinal para a placa microprocessada.

Intervalo mínimo entre degelos: 8 horas e intervalo máximo entre degelos: 12 horas

A cada acionamento da resistência de degelo, é cronometrado o tempo até o bimetálico abrir = tempo de duração do degelo;

Supondo que a geladeira estava desligado da tomada, ao ligar:

1. assume que [intervalo entre degelos] = 8horas;

2. Cronometra e vai somando as horas trabalhadas do compressor;

3. Se horas trabalhadas do compressor for maior que 8h então:

- desliga compressor

- desliga ventilador

- liga resistência de degelo

- inicia contagem de tempo até o termostato bimetálico enviar sinal de abertura.

4. Se este [tempo de duração do degelo] < 20 min, acrescentar 2hs ao [intervalo entre degelos] anterior, lembrando máx=12hs;

assim, por ex, no caso 8h + 2h ---> próximo degelo daqui a 10hs----->[intervalo entre degelos]=10;

5. Se este [tempo de duração do degelo] > 20 min, subtrair 2hs do [intervalo entre degelos anterior], lembrando mín=8hs;

por ex, supondo que o [intervalo entre degelos anterior] = 12hs, próximo degelo será daqui a 10hs;

e assim por diante, resumindo, sempre o próximo intervalo entre degelos é em função do tempo de duração do degelo atual, se > ou < que 20min, intervalo entre degelo limitado entre 8 a 12hs.

Obs. se faltar energia, sempre volta a iniciar do ítem 1.

Não sei se consegui descrever direito, qualquer coisa, pergunte, se eu souber...

T+

Ops, esqueci, toda vez que o bimetálico abrir (fim do degelo), tem que ter um delay de 3 minutos antes de acionar qualquer saída digital, tempo necessário para a água escoar totalmente para a bandeja lá em baixo.

Link para o comentário
Compartilhar em outros sites

Nelio2012, obrigado pela sua postagem foi sim de grande ajuda essas informações.

Não sabia como funcionavam esses sensores.

rede-sensor-degelo-p-refrigerador-electrolux-dff-paralelo_MLB-O-3666029564_012013.jpg.

Agora fiquei em duvida qual sensor usar, acho que o bimetálico seria mais pratico porque não sei como fazer a rotina de programa para ler o sensor original.

Nelio2012 é possível eliminar essa diferença de 2hs, pra mais ou pra menos no ciclo degelo, pois parece que não tem muita necessidade ou tem?

Espero ajuda dos colegas aqui do fórum também na melhora desse programa, lembrando que estou usando o compilador ccs, agradeço muito a atenção de todos.

Link para o comentário
Compartilhar em outros sites

com certeza nelio2012 forneceu informações q nesse projeto é de suma importancia.. Tinha escrito um programa imaginando q o degelo era apenas acionado por um botao. kkkk . em tempo : deve ser bem escrito e vamos aguardar mais amigos ajudarem...

meu ccs esta travado, ja reinstalei, mas qd compilo tenho essa msg: "I/O ERRO 103". alguma ideia do q pode ser?

Link para o comentário
Compartilhar em outros sites

Acho que com bimetálico ficaria mais prático, porque assim, do jeito que imagino, para usar o sensor existente, teria que obter de alguma forma a curva Temperatura x resistência do sensor usado, daí fica a dificuldade.

é possível eliminar essa diferença de 2hs, pra mais ou pra menos no ciclo degelo, pois parece que não tem muita necessidade ou tem?

Então, acho que a ideia desta lógica que o fabricante fez, foi de otimizar o ciclo de degelo, é mais eficiente, mas se usar a lógica de acionar degelo sempre de 8 em 8 horas no programa, e pegar o sinal do bimetálico (on-off) para interpretar como fim do degelo, simplifica e vai funcionar bem sem problemas.

Só preciso corrigir uma coisa que citei na mensagem anterior, no item 3:

- O programa não precisa desligar o ventilador, porque o ventilador é ligado em paralelo com o compressor, quando manda desligar o compressor, vai desligar o ventilador junto, ok?

T+

Link para o comentário
Compartilhar em outros sites

meu ccs esta travado, ja reinstalei, mas qd compilo tenho essa msg: "I/O ERRO 103". alguma ideia do q pode ser?

Não sei dizer o que pode ser esse erro, mas quando eu tenho problemas com instalações assim alem de desinstalar o programa eu excluo a pasta no disco c:/, e reinicio o PC antes de reinstala novamente às vezes resolve.

Acho que com bimetálico ficaria mais prático, porque assim, do jeito que imagino, para usar o sensor existente, teria que obter de alguma forma a curva Temperatura x resistência do sensor usado, daí fica a dificuldade.

Concordo plenamente. Para mim é ainda mais difícil eu não sou programador eu apenas só apaixonado por eletrônica. eu recorto as partes que preciso dos programas já prontos dos amigos aqui do fórum, e vou montando o programa que preciso, ai eu vou aprendendo como funciona.

Tenho que prender o bimetalico na resistência? Ele é a prova d’água?

Ainda preciso de ajuda no programa para acrescentar o alarme de porta aberta, e o que mais for preciso.

Só lembrando que o compressor vai se desligar quando a temperatura alcança a que for setada no menu.

Será usado também um display de LCD para mostrar a temperatura atual e a programada. Seria legal também se desse para mostrar a hr se não fosse pedir de mais :D.

Obrigado a todos.

Link para o comentário
Compartilhar em outros sites

to te passando o esboço q imaginei antes de saber como funciona o dege-lo.. olha ali a ideia de porta aberta...

A questao de incluir hrs é fácil.. só vai complicar um pouco se quiser ter memoria das horas com o ds1307 por ex.

#include <16F877a.h>
#device adc=10
#FUSES NOWDT
#FUSES PUT
#FUSES NOPROTECT
#FUSES BROWNOUT
#FUSES NOLVP
#FUSES NOCPD

#use delay(clock=4000000)

#include <lcd.c>
#define LISTA PIN_b0
#define soma PIN_b1
#define subt PIN_b2
#define porta PIN_b3 // sensor de porta
#define buzzer PIN_c6 // saida p transistor buzzer
#define degelo PIN_c7 //
#define motor PIN_c5


int16 q=0,adc, adc_2;
signed int16 sub; // sub e adc2 p negativos
int s=0;
int8 menu;
float t;
byte c=1,x;

#int_ccp2
void trata_ccp_2()
{
menu++;
}

#int_TIMER1
void temp1s(void)
{
q++;
set_timer1 (3036);
}

void main()
{

lcd_init();
output_high(pin_c0); // ligado mcu
menu = 0;
x = 0;

setup_ccp2(CCP_CAPTURE_RE);
enable_interrupts (int_ccp2);
enable_interrupts (global);


setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);
set_timer1 (3036);
disable_interrupts(INT_TIMER1); //inicia desligado
enable_interrupts(global);

setup_adc_ports(AN0_AN1_AN3);
setup_adc(ADC_CLOCK_DIV_8);

printf(lcd_putc, "\f ELECTROLUX\n DF50");
delay_ms(1000);

while (TRUE)
{
if ( t > x )
{

output_high(motor);
}
else
{
output_low(motor);
}

s=q / 1.6; // para dar certo com horario
delay_ms(3000);
if (input_state(lista)==0)&& (input_state(soma)==0)&& (input_state(subt)==0)
{
menu=0;
}
if (input_state(Porta)==1)
{
enable_interrupts(INT_TIMER1);
if (s>60)
{
output_high(buzzer);
delay_ms(300);
output_low(buzzer);
delay_ms(300);
}
}
if (input_state(Porta)==0)
{
q=0;
disable_interrupts(INT_TIMER1);
if (s < 60)
{
output_low(buzzer);
}
}

set_adc_channel(0); // DUVIDA EM relação A LM35 MEDINDO
delay_us(20); // TEMP NEGATIVAS
adc = read_adc();

set_adc_channel(1);
delay_us(20);
adc_2 = read_adc();

sub = adc - adc_2;

t = (5 * sub * 100)/1024 ;

if (menu>2){MENU=0;}
switch(menu)
{

case 1 :
{
printf(lcd_putc,"\fAJUSTE TEMP. \n %u%cC",x,0xdf);
delay_ms(200);
if (input(soma))
{
x+=1;
if (x > 10)
{
x = 0;
}
do{}
while (input(soma));
}

if (input(subt))
{
x -=1;
if (x < -10)
{
x = 10;
}
do{}
while (input(subt));
}
write_eeprom (1, x);
break;
}

case 2 :
if(c == 2) {output_high(degelo);printf(lcd_putc," \f FUNCAO DEGELO \n LIGADO ");delay_ms(200); }
if(c == 1) {output_low(degelo); printf(lcd_putc,"\f FUNCAO DEGELO \n DESLIGADO ");delay_ms(200); }
{
if (input(soma))
{
c++;
if (c > 2)
{
c = 1;
}
do{}
while (input(soma));
}
break;
}

default :
{
x = read_eeprom(1);
if (input_state(Porta)==1)
{
printf(lcd_putc,"\f PORTA ABERTA \n %02u SEGUNDOS",s);
delay_ms(500);
printf(lcd_putc,"\f \n %02u SEG",s);
delay_ms(500);
}
else
{
printf(lcd_putc,"\fTEMPERAT %f%cC \n SETADO %u%cC ",t,0xdf,x,0xdf);
delay_ms(300);
}
}
}
}
}

Link para o comentário
Compartilhar em outros sites

Cesarlg. Puts... cara você manja em, vou compilar seu codigo e simular no Proteus depois eu postu o resutado.

Obriga.

Cesarlg. Desculpe minha ignorância, mas na hora de compilar da erro nessa linha.

if (input_state(lista)==0)&&(input_state(soma)==0)&&(input_state(subt)==0).

Devo substituir o 0 por algum outro numero?

Essa parte do programa é tirada uma media de 500 leituras do lm35, para dar uma estabilidade pra não ficar oscilando tanto no display.

 
for (i=1;i<=500;i++)
{
set_adc_channel(0);
delay_us(20);
valor = valor+read_adc();
adc=valor/500;

set_adc_channel(1);
delay_us(20);
valor_2 = valor_2+read_adc();
adc_2=valor_2/500;
}

Quanto à memorização da hr não tem necessidade.

Corrigindo.

Desculpe cesarlg, achei a onde errei, agora compilo.

if ((input_state(lista)==0)&& (input_state(soma)==0)&& (input_state(subt)==0));

Link para o comentário
Compartilhar em outros sites

Tenho que prender o bimetalico na resistência? Ele é a prova d’água?

Tem dois jeitos de instalar:

- Se for esse bimetálico:

-termostato-de-degelo-hussmann-bimetalico-de-degelo-hussmann-1343846724_24236_g_zps6eaaa73e.jpg

Ele é instalado assim:

Fixaccedilatildeobimetalbrastemp_zps5e89d059.png

- Se for parecido com esse:

sensor-de-degelo-refrigerador-electrolux-ds38-ds41_zps2165e4c1.jpg

Ele é colocado no espaço que fica no meio da serpentina. Não tenho imagem para te mostrar, mas ficaria assim: de frente para o fundo do freezer, teria a resistência, depois a placa da serpentina, depois o espaço onde vai o bimetálico, depois a outra placa de serpentina, depois a resistência.

Todas são à prova d´água. As peças em si que não são à prova, ficam protegidas pela bolsa plástica.

Ao ligar a geladeira devera aparecer uma tela de boas vindas e depois a tela que aparecerá o tempo real e o tempo programado, ao acionar o botão de seta a temperatura desejada, se não houver nem uma mudança depois de alguns segundos, deverá voltar para a tela permanente.
Só lembrando que o compressor vai se desligar quando a temperatura alcança a que for setada no menu.

Então... a lógica usada para controle de temperatura, as que conheço é mais ou menos assim:

- O compressor precisa de uma temperatura para ligar e outra para desligar, certo?

- vamos supor que o freezer tenha que ser mantida entre -5°C e -15°C.

Então, se a temperatura estiver acima de -5°C (-1,0,5°C por ex.) o compressor é ligado e permanece ligado até chegar a -15°C.

- Daí, com o tempo, a temperatura começa a subir, o compressor fica desligado até chegar a -5°C, aí liga de novo, etc... e assim fica ciclando nessa faixa.

- Mas nesse caso, o usuário teria que setar sempre duas temperaturas, a de liga e desliga.... mas na prática, o usuário só seta um valor de temperatura.

Daí, na prática é usado dois conceitos:

- A "banda morta" que é a largura da faixa entre o liga e o desliga, no caso do exemplo, de -5 a -15°C, diferença de 10°C.

- O "offset" que é a metade do valor da banda morta, seria 5°C.

- O "Set-Point" que é a temperatura que o usuário seta e quer manter.

Daí, ficaria assim:

- Liga = (set-point) + offset

- Desliga =(set-point) - offset

O valor da banda morta ou offset é setado no programa ou fica disponível no modo configuração do termostato.

Obs. se o aparelho for ligado na tomada e a temperatura estava dentro da faixa de banda morta, a lógica espera até chegar a temperatura de liga.

Eu não sei interpretar direito o código da linguagem, se essa lógica já estava postada, pode desconsiderar o trecho citado, só coloquei para tentar ajudar.

T+

Link para o comentário
Compartilhar em outros sites

Nelio2012. Fique avontade para opinar, você está contribuindo e muito com suas informações.

A respeito do bimetálico eu entendi, quanto a logica do programa você esta correto.

- vamos supor que o freezer tenha que ser mantida entre -5°C e -15°C.

Então, se a temperatura estiver acima de -5°C (-1,0,5°C por ex.) o compressor é ligado e permanece ligado até chegar a -15°C.

- Daí, com o tempo, a temperatura começa a subir, o compressor fica desligado até chegar a -5°C, aí liga de novo, etc... e assim fica ciclando nessa faixa.

Mas temos que achar uma maneira de acionar a resistência de degelo dentro dessa faixa de temperatura ex.: -15ºC e -5ºC.

- Mas nesse caso, o usuário teria que setar sempre duas temperaturas, a de liga e desliga.... mas na prática, o usuário só seta um valor de temperatura.

A ideia é essa, fazer o programa de uma maneira que precise escolher só a temperatura que ira desligar o compressor, mais ou menos assim: if(temperat -10 == setado)

desliga compressor.

Obs. se o aparelho for ligado na tomada e a temperatura estava dentro da faixa de banda morta, a lógica espera até chegar a temperatura de liga.

Correto, dai também a importância de usar a eeprom, se acabar a energia e a geladeira for religada, o tempo escolhido será o mesmo de quando foi desligada para que não inicie um novo ciclo.

Nelio2012. Muito agradecido.

Link para o comentário
Compartilhar em outros sites

Cesarlg. Vamos por parte, consegui compilar o código, mas clico no botão menu, e não acontese nada, ao iniciar no proteus a temperatura setada começa com 255.

Verifique ai no proteus se esta configurado o cristal certo. aqui ta funcionando. Bom menu esta ligado ao pino ccp2 e ele esta limitado a apenas 2 cases (pode ser estendido a qts opções quiseres)

o botao "soma" esta ligado ao b1 que alem de mudar a temperatura setada, tb aciona o degelo qd esta no case 2.

botao "subt" ligado ao b2 apenas decresce a temperatura setada..

o pino b3 esta como entrada, simulando a porta, qd estiver pressionado começa a contagem..

eu nao lembro bem, o 255, foi falta de contornar a situaçao, pois em inicio comparava temperatura real(float) com setada (float). como queria gravar na eepron a setada, para evitar um procedimento q nem eu domino bem, resolvi escrever setada em Byte, assim ela pode ser guardada na memoria e ainda pode ser comparada com temp., claro com esse incoviniente do 255 inicial, mas depois do primeiro ajuste nao mais aparece Eu tb

nao sou expert em programacao kkkk

lembre-se q isso q fiz antes de saber aquelas informaçoes q fazem diferenca (off-set, funcao degelo , etc). no mais estou tentado arrumar meu pcw, ta osso, ai poderia te ajudar mais.. assim q conseguir começo q escrever algo mais definitivo kkkkk.. t+

Link para o comentário
Compartilhar em outros sites

Ola gostaria de saber exatamente a q faixa de temperatura a geladeira vai trabalhar.. Se o sensor ira ler temperaturas negativas, o codigo para temperatura setada vai ter q ser em Float, para evitar esse incoviniente de 255.., mas tem a desvantagem de ser bem mais difícil desmembrar para byte e gravar na eeprom...

Agora se a temperatura setada sempre for na faixa positiva, acima de 0graus celsius, ai fica bem mais fácil e o 255 nao ira aparecer kkk.

outra questao seria: é necessario realmente essa faixa de T.max e Tmin? porque? porque nao se pode estipular uma temperatura e abaixo dela desliga e acima liga?

estou começando a escrever o codigo, depois peço ajuda p complementar e corigir

Link para o comentário
Compartilhar em outros sites

Se o sensor ira ler temperaturas negativas, o codigo para temperatura setada vai ter q ser em Float, para evitar esse incoviniente de 255.., mas tem a desvantagem de ser bem mais difícil desmembrar para byte e gravar na eeprom...

Ola. Cesarlg imagino que a temperatura de trabalho de um refrigerador seja sempre a baixo de -0, estive olhando o manual do refrigerador a qual irei instalar o que diz ser a temperatura mínima -15.5 e a máximo -23. Acredito que esses valores são os limites de trabalho que o refrigerador é capaz de trabalhar independentemente da parte eletrônica de controle.

A rotina para escrever na eeprom eu já defini.


#

outra questao seria: é necessario realmente essa faixa de T.max e Tmin? porque? porque nao se pode estipular uma temperatura e abaixo dela desliga e acima liga?

Á lógica ficaria +ou- assim ex. setamos -23º no alcance dessas, o compressor ira desligar, com o aumento da temperatura ao chegar +ou - -16º teria que entrar na função degelo e quando termina a função degelo iniciaria um novo ciclo.

Temos q fazer a rotina que vai setar a tmp. Com um ranger de -7º graus para menos para acionar o degelo do tipo se, 23-7=16,/ 20-7=13,/ 15-7=8.

Não sei se fui bem claro, pois também não conheço a rotina de um refrigerador.

Também gostaria de incrementar um relógio no projeto também tem que haver um delay pra quando entrar no menu e não for feito nem uma alteração, terá que voltar pra tela inicial, isso é importante se alguém se esquecer de retorna para a tela inicial, acredito que travaria o ciclo na função menu e isso não seria bom.

Gostaria se possível que as mudanças fossem feita aparte do código que citei isso me ajudaria muito a entender as mudanças já que não sou programador.

capturarqb.jpg

capturar2b.jpg

Obrigado.

Link para o comentário
Compartilhar em outros sites

Bom hj tirei um bom tempo p escrever algo.. deixo aqui p vocês corrigirem e/ou implementarem.. Sei que erros vão aparecer, principalmente na logica de operacao da geladeira!!!

Gostaria lembrar que neste estagio as horas visualizadas nao usam timer de tempo real, ou seja, se faltar energia o horario se reseta..

tb sobre a questao de gravar em eeprom a temperatura setada, nao consegui então espero q alguem consiga e mostre aqui p nos..

No mais : possui relogio, indicador de porta aberta com alarme, menu se nao pressionado tecla volta ao default, funcao black ligh quando usado, temperatura setavel, minimo e maximo (temperatura) e visualizador de tempo para degelo..

o hardware foi mudado um pouco, se precisarem posto a imagem

#

Link para o comentário
Compartilhar em outros sites

Olá. cesarlg cara muito obrigado por ta me ajudando, e se mais alguém do fórum também quiser colaborar fiquem a vontade.

Quanto à hr está de bom tamanho só precisa ser um pouco precisa, o relógio indicador de porta aberta, contador e com alarme e mais o black light ficou show de bola cara, mais do q eu esperava.

A função de retorno para default achei ela muito importante ficou ótimo, só queria que fosse tirado do menu, a visualização do Max e min., ela poderia ficar na tela principal eu poderia colocar um display 16x4 dai da pra colocar a hr, o Max/min. e o alarme quando a porta for aberta ou o relógio de degelo o que você acha?

cesarlg queria tirar também essa parte de setar o valor de diferença do Max/min. para o degelo, acho ela um pouco confusa e sem necessidade, ela não pode ser incluída no hardware? Ex. se for setado Max -23° e o compressor desligar e a temperatura subir para -16° (7° graus de diferença) já iniciaria o degelo sem precisar de setar essa diferença, dessa forma precisaríamos setar somente o Maximo.

Ficou muito bom cara, bom mesmo...

Duvida.

if ( hd > 7 ) // qd for 8hrs de motor ligado e se temperatura interna for maior que a temperatura max.

Essa função serve para que, caso a temperatura maxima não for alcançada em até 8hr, o compressor desliga para q não tenha uma queima do mesmo? Se for isso, bem pensado da sua parte, é uma segurança importante.

Link para o comentário
Compartilhar em outros sites

Quanto à hr está de bom tamanho só precisa ser um pouco precisa, .

Amigo nao entendi essa questao de precisao?

tirado do menu, a visualização do Max e min., ela poderia ficar na tela principal eu poderia colocar um display 16x4 dai da pra colocar a hr, o Max/min. e o alarme quando a porta for aberta ou o relógio de degelo o que você acha?

O projeto pode ser adaptado como você pretende. Minha opiniao é q nao seria necessario. essas opcao sao só configuraçoes e nao necessita a qm passar por ela saber dessas configs. alem do mais q vai ficar um display maior de tamanho e maior custo, eu nao faria. qt o alarme de porta aberta se você verificou, qd fica aberta o visor deixa todos informações de lado e avisa sobre a porta.. nao acho q essa informacao precise ficar na tela a td tempo, afinal é mais fácil você olhar a porta aberta do q a msg na tela kkkk. mas o buzzer vai fazer oi alerta , claro alem da info..

Sobre o min e max, ainda nao me convenci sobre isso, nao acredito q uma geladeira tenha isso.. imagine um produto nela q deva ser conservado a 2ºC.. deve ficar perto disso.... ai você poe dif de 5graus p mais e p menos, então, a geladeira hrs vai estar a -3ºC e hrs a 10º C .. isso é muito,, até q nao se confirme, eu nem colocaria essa grande variacao, mas sei la posso ter entendido mal kkkk..

Mas se você quiser isso é fácil,, deleta o case referente a min/max e la no programa, seta "x "com o valor fixo q queres

Ex. se for setado Max -23° e o compressor desligar e a temperatura subir para -16° (7° graus de diferença) já iniciaria o degelo sem precisar de setar essa diferença, dessa forma precisaríamos setar somente o Maximo.

nao entendi.. o degelo se da pelo q entendi na contagem de motor ligado, nao por temperatura
if ( hd > 7 ) // qd for 8hrs de motor ligado e se temperatura interna for maior que a temperatura max

{

enable_interrupts ( int_timer0);

ts=50;

output_low(motor); // desl. motor

output_high(degelo); // liga resistencia

}

poderia ter outro jeito de escrever, mas optei assim, entenda: qd for maior q 7 graus, ou seja,, 8hrs... continua contagem timer0.... aumenta a temperatura setada p um valor bem alto para impedir q o motor ligue (pois la no inicio do programa eu determinei q se o temperatura > temp setada =ligasse, então como o 50 só no deserto kkk fiz assim temperatura>50ºC= ligasse.. impossivel kkk..) se nao fizesse isso ia contradizer duas condicoes. essa e a da temperatura.. imagina ser 8hrs pedindo p motor parar e em outro lado a temperatura setada pedindo p motor ligar.. o micro ia ficar louco..

Quanto à hr está de bom tamanho só precisa ser um pouco precisa, .

Amigo nao entendi essa questao de precisao?

tirado do menu, a visualização do Max e min., ela poderia ficar na tela principal eu poderia colocar um display 16x4 dai da pra colocar a hr, o Max/min. e o alarme quando a porta for aberta ou o relógio de degelo o que você acha?

O projeto pode ser adaptado como você pretende. Minha opiniao é q nao seria necessario. essas opcao sao só configuraçoes e nao necessita a qm passar por ela saber dessas configs. alem do mais q vai ficar um display maior de tamanho e maior custo, eu nao faria. qt o alarme de porta aberta se você verificou, qd fica aberta o visor deixa todos informações de lado e avisa sobre a porta.. nao acho q essa informacao precise ficar na tela a td tempo, afinal é mais fácil você olhar a porta aberta do q a msg na tela kkkk. mas o buzzer vai fazer oi alerta , claro alem da info..

Sobre o min e max, ainda nao me convenci sobre isso, nao acredito q uma geladeira tenha isso.. imagine um produto nela q deva ser conservado a 2ºC.. deve ficar perto disso.... ai você poe dif de 5graus p mais e p menos, então, a geladeira hrs vai estar a -3ºC e hrs a 10º C .. isso é muito,, até q nao se confirme, eu nem colocaria essa grande variacao, mas sei la posso ter entendido mal kkkk..

Mas se você quiser isso é fácil,, deleta o case referente a min/max e la no programa, seta "x "com o valor fixo q queres

Ex. se for setado Max -23° e o compressor desligar e a temperatura subir para -16° (7° graus de diferença) já iniciaria o degelo sem precisar de setar essa diferença, dessa forma precisaríamos setar somente o Maximo.

nao entendi.. o degelo se da pelo q entendi na contagem de motor ligado, nao por temperatura
if ( hd > 7 ) // qd for 8hrs de motor ligado e se temperatura interna for maior que a temperatura max

{

enable_interrupts ( int_timer0);

ts=50;

output_low(motor); // desl. motor

output_high(degelo); // liga resistencia

}

poderia ter outro jeito de escrever, mas optei assim, entenda: qd for maior q 7 graus, ou seja,, 8hrs... continua contagem timer0.... aumenta a temperatura setada p um valor bem alto para impedir q o motor ligue (pois la no inicio do programa eu determinei q se o temperatura > temp setada =ligasse, então como o 50 só no deserto kkk fiz assim temperatura>50ºC= ligasse.. impossivel kkk..) se nao fizesse isso ia contradizer duas condicoes. essa e a da temperatura.. imagina ser 8hrs pedindo p motor parar e em outro lado a temperatura setada pedindo p motor ligar.. o micro ia ficar louco..

qq coisa estamos ai.. e lembre-se sempre de dar uma posicao p o povo aqui alem de fotos de montagem e etc...

Link para o comentário
Compartilhar em outros sites

Olá. cesarlg, peço desculpas a você se falei alguma coisa q não devia ou me exprecei mal.

Minha intenção no forum é aprender e fazer coisas q eu gosto, e na hora certa também ajudar.

Esses dias estava pesquisando aqui no forum e achei uma pessoa pedindo ajuda a respeito de como estabilizar a leitura do lm35, fiquei com muita vontade de ajuda-lo só não o fiz por achar que não estou preparado, pois poderia, ao invés de ajuda-lo eu iria atrapalhar.

qq coisa estamos ai.. e lembre-se sempre de dar uma posicao p o povo aqui alem de fotos de montagem e etc...

Não postei aqui somete fotos, postei também o código que consigui montar, e debatemos o assunto e com sua ajuda e também do amigo Nelio2012, tenho certeza que poderá servir de ajuda para mais alguém.

Obrigado.

Sr. Moderador pode fechar o tópico, Obrigado.

Link para o comentário
Compartilhar em outros sites

Qd falo em postar fotos, montagens, é porque na vdd esse é um projeto meu para um futuro bem distante q pretendo realizar, no entanto se eu conseguir ajudar em teoria , fico feliz e se você conseguir realizar na pratica, ficarei feliz e muito curioso em saber se deu certo e o q tem q ser mudado.. Seu trabalho vai ser talves mais trabalhoso.. estamos aiiiii

Link para o comentário
Compartilhar em outros sites

Olá pessoal.

Apenas uma informação antes de fechar o tópico....

O offset é necessário para todos os equipamentos onde o controle é do tipo "on-off". No caso da geladeira, a temperatura é controlada somente ligando e desligando o compressor, ela é do tipo controle on-off.

O motivo é o seguinte: O compressor não pode ser religada em curto intervalo de tempo, tem muitos fatores mecânicos, elétricos e de refrigeração envolvidos aí.

Se colocar na lógica: desliga se T< Tsetada e liga se T> Tsetada, sendo T um número Real, já que T foi definido como floating, qualquer valor de T > Tsetada irá ligar e em seguida, qualquer valor de T < Tsetada irá desligar, lembrando que T é um valor no campo dos números Reais, vai acabar prejudicando o equipamento acionado.

Em equipamentos com controle on-off não tem outro jeito, sempre vai ter um valor para ligar e um outro valor para desligar, e a diferença entre eles é o valor de offset.

Se diminuir muito o valor de offset, pode comprometer o componente acionado, se aumentar muito o valor de offset, a oscilação da variável controlada (temperatura no caso) aumenta, então, tem que buscar um ajuste próximo do ideal e que concilie as duas.

Abraço.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...