Boa tarde a todos!!!! Montei recentemente um circuito dimmer para efetuar o controle PID de temperatura usando um sensor ds18b20 e uma resistência de 25w. Tive dificuldade com relação a fazer funcionar a biblioteca PID, mas com ajuda do Sr. José Gustavo consegui instalar. Agora estou tendo dificuldade em fazer de fato funcionar este projetinho. Estou tentando utilizar o codigo do colega Mauro do link AutomatoBR. Li sobre o codigo e biblioteca mas de fato não estou conseguindo entender, principalmente a parte onde pega o valor medido para aplicar os pulso e chegar até o setpoint.

Montei todo o circuito mas até agora não funcionou. O sensor ds18b20 está indicando a temperatura, mas não ha pulsos saindo da porta para chegar a temperatura setada (Não sei se o valor de set se refere a temperatura). Gostaria de ver se alguém daria uma "luz", uma ajudinha!! Ja faz tres dias que estou martelando e  não saio do lugar.

Exibições: 391

Anexos

Responder esta

Respostas a este tópico

Juliano,

Olha, tem muito tempo que eu publiquei esse circuito, mas o fato é que ele funcionou. Os valores exibidos estão fazendo sentido?

Obrigado pelo retorno. Então,não sei exatamente pois coloquei o valor do set point em 30 e a indicação de temperatura do ds18b20 indica 23 C e não varia. Se aumento o valor do setpoint, nada altera. Eu removi do seu sketch a parte do lm35. Não sei se pode ser isso. Testei separadamente cada circuito, usando sketch distintos para testar  a passagem por zero e acionamento o triac e ambos estão ok. Já quando uso o sketch juntando os dois aí não vejo alterações. Mediando a tensão na resistência, não ha tensão. 

Olá, estou fazendo testes no circuito detector de zero e o unico sketch que funcionou, que leu a passagem de zero foi este :

#define SECONDS 2.0  
int count = 0;
void setup()
{
Serial.begin(9600);
Serial.println("Zero Cross Test");
attachInterrupt(0, cross, RISING);
}
void loop()
{
delay(SECONDS * 1000);
noInterrupts();
float hz = count / SECONDS / 2;
count = 0;
interrupts();
Serial.print(hz);
Serial.println("Hz");
}
void cross()
{ count++;
}

Estou achando que a função attachinterrupt está travando o programa

Olá.

  Veja em:

https://www.arduino.cc/reference/en/language/functions/external-int...

O 0 inicial se refere ao pino. O pino 0 está disponível apenas em alguns microcontroladores. Veja se usa a mesma placa usada no exemplo.

Como tem só um "count++" dentro dela não deveria travar. Trava mesmo, sem dó, se vc usa float, chama bibliotecas, usa delay, etc. Aí é pedir pra travar.

Olá Eduardo, Bom dia, na verdade estou tendo problema com o code que esta em anexo ao post onde ele deveria fazer a detecção do zero para atuar no triac e fazer o controle de temperatura. Uma coisa que percebi é que parece que ele não está fazendo a detecção de zero.  Aparentemente o unico codeigo que fez essa detecção foi este que postei. Esse tem alem do attachInterrupt tem nointerrupts() e interrupts(). Então no codigo que coloquei em anexo acho que o programa sofre a interrupçao e não retorna o loop. Não sei se é isso mas é oque parece.

Também para um controle de temperatura já comecei ficar em duvida se realmente precisaria um dimmer ou somente um circuito tipo ssr

Bom, começando pelo fim: controles de temperatura ambiente normalente não precisam de dimmer, dá pra fazer perfeitamente só com relé, usando PID, claro.

Porque vc não testou com a rotina de detecção de zero do meu blog? Essa que vc postou não funciona e um dos motivos é que vc não colocou volatile antes da definição do contador.

Teste com a minha, que funciona. Se não funcionar a questão tá no hardware.

Esse 0 não tem a ver com "pino 0", mas com interrupção 0. A que pino está associada depende do controlador, confore descrito aqui: https://www.arduino.cc/reference/en/language/functions/external-int...

Olá mauro, testei com o contapulsos do seu blog e funcionou. Usei o seu sketch para temperatura no post V, mas aí não a variação. poderia dar uma olhada no code?

controle_pid_ds18b20_2.ino

Não há variação do que? A variável ManipulatedValue não muda, mesmo que a temperatura varie?

O problema que não liga a resistência. Coloquei o sensor ds18b20 em cima da resistência. a temperatura medida fica em torno de 23 graus. Ai coloco o set point em 40, mas a temperatura continua em 23. Medindo com multímetro, não ha tensão nenhuma na resistência. Ai mudo o set point pra 100 e a temperatura continua nos 23 graus e medindo a resistência  continua sem tensão. Mudo  então o set point para 10 e a temperatura continua 23 graus e a tensão sobre a resistencia continua 0.  

Vc tem que analisar os resultados produzidos pelo algoritmo, a saída dos parâmetros para ver se fazem sentido.

Vc deve tb fazer um programa que envie dados certos pro seu circuito pra ver se ele responde direito. 

Em circuitos programáveis essa é a regra de ouro: tem que separar a análise de software da de hardware.

Boa tarde JW,

Tem um erro neste ultimo sketch que vc postou.

A variável "powertime"vda linha 112 não foi definida como global, e sim como local para a função "void zero_crosss_int() "  linha 62.

RV

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2019   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço