Ir ao conteúdo
  • Cadastre-se

PID - Controle de temperatura por luminosidade.


Posts recomendados

Galera, estou fazendo meu tcc na parte de controle PID, utilizando arduino e processing.. Estou aplicando em uma chocadeira, aquecendo ela com uma lâmpada e coletando temperatura por um LM35.

Fiz um dimmer PWM, a ideia é setar a temperatura e o PID controla-la a partir da luminosidade da lâmpada.

 

 

Eu fui fazer o teste com um LM35dz e ta gerando um sinal muito estranho, primeiro achei q era ruido, mas estou achando que é o tempo de medida, não sei, ta muito estranho o sinal, até estou achando que pode está danificado.

 

 

O que acontece é o seguinte, eu liguei o dimmer pwm e o DZ na saída A0.

O sinal parece uma onda senoidal, que chega a um pico, que eu acredito que esse pico seja o valor da temperatura, quando eu aproximei a lâmpada pra aquecer o DZ ele deu uma oscilada mas esse pico aumentou, os 3 primeiros pontos máximos foram as medidas sem aproximar a lâmpada.

PID simple code.docx

Sinal lm35dz.jpg

adicionado 9 minutos depois

Eu precisava de um sinal constante. To pensando agora em mudar para um DHT. Dai eu precisaria mudar a programação, pois o código colhe o sinal de um sensor analógico.

Eu tenho um HTU21D, que é de precisão. Porém eu não sei como iria alterar a programação para implementar ele ao PID, ele comunica i2C com o arduino.

Link para o comentário
Compartilhar em outros sites

14 horas atrás, solanocaiano disse:

[...] O sinal parece uma onda senoidal, que chega a um pico, que eu acredito que esse pico seja o valor da temperatura[...]

 

Não consegui entender o que você disse aqui.

 

14 horas atrás, solanocaiano disse:

[...] To pensando agora em mudar para um DHT. Dai eu precisaria mudar a programação, pois o código colhe o sinal de um sensor analógico. [...]

 

O sinal enviado pelo LM35 está com ruído, daí você quer usar outro sensor para tentar eliminá-lo, é isso?

 

14 horas atrás, solanocaiano disse:

[...] Eu precisava de um sinal constante. [...]

 

O sinal representa a temperatura, se ele está variando (grandes variações) significa que a temperatura está variando também... Ele será constante se a temperatura também o for.

 

Não seria a parametrização do controlador PID que está muito fora? Proporcional muito baixo se comparado ao integral...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Se este sinal for o da saída do lm35, claro está 100% sujo. Pode ser: simples maucontato - pode estar em protoboard- , falta de filtro (capacitor), falta otimizar o layout pci, etc

 

Boa ideia usar um sensor digital ao invés do analógico. No entanto não vejo "conexão que desconecta" isso e o pid pois os dados de temperatura seriam os mesmos.

abç

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Eu tentei implementar o HTU21D na programação e não consegui, não aparece a leitura na interface.

Eu não sou bom com programação, se conseguisse implementar o HTU21D que faz comunicação via i2c no lugar do lm35 com saída analógica, que é justo o tipo de saída que vem no PID Front End, eu seria muito mais muito feliz.

 

Sobre o LM35, eu fiz um filtro com capacitor que encontrei aqui na minha cidade de 1uF..  Fiz dois testes de ligação que seguem em anexo, e os resultados das duas.

Com a ligação utilizando um resistor de 68Ohms o resultado foi da linha constante e ele não variava a tensão conforme ia aumentando a temperatura.

 

 

ligações.jpg

Teste 1.jpg

sinal 1.jpg

Link para o comentário
Compartilhar em outros sites

No circuito do lado esquerdo a entrada analógica do Arduino deveria ser conectada entre o resistor e o capacitor.

 

Cara isso não está parecendo ruído do LM35, há algo de errado em algum lugar. Ruído de 35% do total da leitura (1023)... Isso está muito estranho.

 

Repare a saída (variável manipulada) do PID, ela não está modulando coisa alguma... Ela está tabalhando em 0 ou 100% basicamente como um controlador ON / OFF.

 

Mas enfim, poste o código do Arduino para que nós possamos analisar e tentar encaixar o HTU21D  nele.

 

----

Uma coisa meio que off topic, você possui o LabVIEW? Se sim, instale o labVIEW Interface for Arduino (LIFA) abra o exemplo PID auto tuning, adicione o Arduino ao código do LabVIEW e veja o ajuste que o auto tuning fará...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Então amigo, a montagem da esquerda eu tentei seguir o exemplo que achei na internet 

Caso faça a montagem da forma que você falou, continuo com o resistor de 68ohms ou muda o valor? isso nos 5v do arduino.

Eu pensei em comprar uma bateria 5v e ver como fica o sinal.

 

O código PID segue em anexo..

O código do HTU21D é o cactus, desse link: http://cactus.io/hookups/sensors/temperature-humidity/htu21d/hookup-arduino-to-htu21d-temp-humidity-sensor

 

Se conseguirmos juntar os 2 códigos eu dou 3 mortal pra trás. 

 

lm35-damping.jpg

Codigo.docx

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Amigo ainda não defini se o sinal é o do lm35, se é resultado da matemática do pid, se é real ou simulado. Vou focar na parte hard (que não é soft não). Seu filtro deve ser: capacitor duns 100nF...10uF na saída do lm. Entre pino 2 e 3. De fato este deve estar na entrada analógica do seu mc: no pino an e gnd dele. E claro, sua alimentação deve ser bem estável.

 

Há pessoas que colocam até resistor em série formando um meio que filtro RC

6266.Capture.PNG

10K...100K

E, como disse, atenção ao gnd que deve ser exclusivo entre-terras mc-lm35

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Eu testei com bateria de 9v sem filtro e segue em anexo o sinal doido..

testei com filtro da forma da imagem que você postou iza, utilizei um resistor de 10k e capacitor de 1uF e depois 10uF.. Não me deram sinais precisos também. Acho que ou o LM35 ta danificado, ou ele n ta funcionando no PID mesmo.

IMG_1017.JPG

IMG_1018.JPG

adicionado 30 minutos depois

Acho que acabei danificando o LM35 ou a matemática do pid não funciona com ele..Minha situação é a seguinte, ou eu espero o LM35 novo que eu pedi pela net chegar e faço novamente os testes. Ou faço a implementação do HTU21D (de precisão e eu ja tenho aqui) ou o DHT11 que está chegando com o lm35.

Eu tentei já implementar o HTU21D mas não consegui, ele utiliza comunicação i2C e eu precisaria fazer um jogo de variaveis talvez, e não tenho ideia de como fazer isso..

Preciso muito ter o sinal preciso de temperatura, o dimmer PWM já está ajustado e funcionando bem.. Só falta isso pra testar a chocadeira e ver como ela se sai.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Em 01/08/2017 às 10:03, Isadora Ferraz disse:

simples maucontato - pode estar em protoboard-

suspeitei desde o princípio. Além disso...

7 horas atrás, Isadora Ferraz disse:

ainda não defini se o sinal é o do lm35, se é resultado da matemática do pid

somando ao fato  de não saber os pontos origem, o gnd (é importante)  onde você coleta este sinal ou até mesmo se isso é um osciloscópio e claro minha burrice. E nem vou mencionar que não consegui ver se está ligado corretamente. E desculpa mas não vi o esquema completo pra avaliar alguma eventual interação intercircuitos.

Tente usar a bateria APENAS no lm mantendo outra fonte no mc só pra teste pois isso não é interessante.

Link para o comentário
Compartilhar em outros sites

Acho que é neste trecho que o PID é executado:

//pid-related code
Input = analogRead(inputPin);
myPID.Compute();
analogWrite(outputPin,Output); 

Assim você precisa adicionar o código do sensor digital ai.
Usando a biblioteca da fonte que você postou ficaria mais ou menos assim:

//Declaração de variáveis
float TemperaturaCelsius;
:
:
// Lendo a temperatura do HTU
TemperaturaCelsius = htu.getTemperature_C();

// O PID reconhece os valores de 0 para 0% e 1023 para 100% (correto?) 
// assim é necessário adequar a temperatura para essa faixa
//
//  0°C -> 0
// 50°c -> 1023
//
// Assim:
//
// TemperaturaCelsius -> Input
//               50°C -> 1023
//
// Input = (TemperaturaCelsius * 1023) / 50;
// Input = (TemperaturaCelsius * 20,46;
//
// Aqui vem o código para o PID

Input = TemperaturaCelsius * 20.46; // Adaptando a temperatura lida para a faixa do PID 0 -> 1023
Input = analogRead(inputPin);
myPID.Compute();
analogWrite(outputPin,Output); 

Existe a possibilidade de você desenvolver seu próprio PID, daí você pode imprimir os valores no serial monitor do Arduino mesmo, ficaria bem baca e você entenderia realmente como o PID funciona, se estiver disposto te passo um código esqueleto...

Link para o comentário
Compartilhar em outros sites

Entendi. Estou desenvolvendo um projeto de TCC, meu orientador nao esta me ajudando nada nessa parte, apenas vai revisar meu trabalho.

Por isso estou com essas dificuldades.

 

Entendi, acho que assim vai funcionar, só tem que adicionar uma linha no loop. O "htu.readSensor();" pois essa função precisa ser executada sempre que ele chamar a função getTemp e no caso remover a linha Input = analogRead(inputPin); do seu código certo? Porque eu não vou mais estar fazendo leitura analógica do sensor e sim via I2C (A4 e A5) no meu arduino.

Link para o comentário
Compartilhar em outros sites

Sim esqueci de remover o antigo input. Eu acho que essas seriam as modificações.

Para faixa de 0 a 50°C conforme comentários.

Você também pode colocar um delay para o Arduino não ficar calculando o PID direto...

//Declaração de variáveis
float TemperaturaCelsius;
:
:
// Lendo a temperatura do HTU
TemperaturaCelsius = htu.getTemperature_C();

// O PID reconhece os valores de 0 para 0% e 1023 para 100% (correto?) 
// assim é necessário adequar a temperatura para essa faixa
//
//  0°C -> 0
// 50°c -> 1023
//
// Assim:
//
// TemperaturaCelsius -> Input
//               50°C -> 1023
//
// Input = (TemperaturaCelsius * 1023) / 50;
// Input = (TemperaturaCelsius * 20,46;
//
// Aqui vem o código para o PID

Input = TemperaturaCelsius * 20.46; // Adaptando a temperatura lida para a faixa do PID 0 -> 1023
//Input = analogRead(inputPin);
myPID.Compute();
analogWrite(outputPin,Output); 

// Delay para calcula o PID a cada 250mS, isso influencia na parametrização
delay(300);

 

Link para o comentário
Compartilhar em outros sites

Eu testei o código e não deu certo, não aparece nenhuma entrada. EU tentei fazer algumas modificações:

No void setup eu troquei "Input = analogRead(inputPin);" por    Input = TemperaturaCelsius * 20.46;

não funcionou também.

reparei que na linha "PID myPID(&Input, &Output, &Setpoint,0.01,0.2,0, DIRECT);" havia um Input e tentei trocar pela variavel TemperaturaCelsius. deu o seguinte erro:

 

 

A esguera.jpg

adicionado 1 minuto depois

Pag1.jpg

Pag2.jpg

Codigo (1).docx

Link para o comentário
Compartilhar em outros sites

Em 02/08/2017 às 19:01, solanocaiano disse:

Entendi. Estou desenvolvendo um projeto de TCC, meu orientador nao esta me ajudando nada nessa parte, apenas vai revisar meu trabalho.

 

Meu amigo, não leve a mal o que vou escrever... mas eu denunciaria esse "orientador" para a diretoria de sua escola !

 

Todo TCC  tem um orientador justamente para te ajudar em suas dúvidas ! Se não ajuda, peça para trocar por um que realmente faça o trabalho para o qual é pago.

 

Isso de apenas revisar eu nunca ouví falar de nada parecido. É um absurdo !

 

Paulo

 

Link para o comentário
Compartilhar em outros sites

Amigo, na verdade sou eu o culpado.

Eu não consegui orientador pro meu projeto, consegui de ultima hora e um orientador que ja estava com muito trabalho.. Então não culpo ele, apesar de ele poder se preocupar um pouco mais só.

Porém não é esse meu problema, é de obter sinais de temperatura pro PID.

Eu consegui outro lm35 para teste e deu a mesma *****.

Para testes eu acrescentei um delay de 50ms no loop. Olha o que o sinal virou!

Captura de tela 2017-08-03 22.28.25.png

Sinal com 50ms.png

Link para o comentário
Compartilhar em outros sites

Eu não sei o que está acontecendo. Normalmente nesses projetos você começa do básico e vai evoluindo, quando você pega tudo pronto e aparece um problema fica difícil resolver...

 

O bacana seria, 1° passo: Apenas ler o LM35; 2° passo: Converter a leitura para temperatura; 3° passo: Fazer o PWM controlar o brilho do LED; 4° passo: Controlar o aquecimento do resistor com o PWM... E assim por diante até o PID ter sido implementado.

 

Ainda acho que seria bacana você fazer o seu do zero, sem bibliotecas, do zero mesmo...

Link para o comentário
Compartilhar em outros sites

Então amigo, boa ideia em.. É exatamente o que eu vou fazer!

Eu comecei assim, LDR e LED.. Depois parti pro dimmer, quebrei a cabeça com dimmer feito com disparador triac e moc4021, foi um fracasso no PID também porque ele controlava o tempo de disparo e não era PWM. Achei outro dimmer, um PWM deu muito certo.

Dai do LDR foi pro LM35 e to me ferrando. Achei que era só implementar o LM35 q era analógico e GGWP..

Mas ta ai uma boa ideia para tentar solucionar o problema =>1° passo: Apenas ler o LM35; 2° passo: Converter a leitura para temperatura;

3° passo: Fazer o PWM controlar o brilho do LED; 4° passo: Controlar o aquecimento do resistor com o PWM (esses passos ja estão executados e funcionando perfeito).

 

Link para o comentário
Compartilhar em outros sites

Gente vou desistir do LM35 e vou partir pro DS18b20

Com ele eu acho que consigo as medidas..

Eu tentei fazer o que o amigo test man falou e não deu certo.

double Temperatura; (tentei com double, tentei com int, float)


void loop()
{
  Temperatura = (5.0 * analogRead(tempPin) * 100.0) / 1024;
  Input = Temperatura;
  myPID.Compute();
  analogWrite(outputPin,Output);
  
  if(millis()>serialTime)
  {
    SerialReceive();
    SerialSend();
    serialTime+=500;
  }  
}

 

Captura de tela 2017-08-04 17.59.26.png

Captura de tela 2017-08-04 18.07.20.png

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!