Ir ao conteúdo
  • Cadastre-se

Códio PID e Menu juntos (Arduino)


Posts recomendados

Boa noite!

Estou desenvolvendo uma chocadeira controlada por PID, ela funciona da seguinte maneira:

Desenvolvi um Dimmer PWM que controla a luminosidade da lâmpada incandescente, implementei em um código que utilizava entrada analógia (tipo lm35) porém não consegui boas respostas com esse sensor, modifiquei para digital e implementei o DS18b20 na programação, tive ótimasrespostas.

Problemas:

Rodar o menu e o controle PID em um microcontrolador. 

Eu estou rodando separado, em dois arduinos, um para controle e o outro para menu. Eu tentei implementar em um arduino só e não tive boas respostas por causa dos Delays do menu.

Tem como o arduino rodar as duas funções juntas?

Controle e o menu?

Ou devemos adapta-la para ajustar os Delays?

 

Lembrando que as funções do menu são: Mostrar temperatura, mostrar umidade, controlar relay de motor para rolagem dos ovos, controlar relay de coolers para exaustão e manter a umidade com um umidificador caseiro, iniciar processo de incubação, contando os dias.. Após 18 dias devo mudar o set point pra diminuir a temperatura, já que depois desse tempo o ovo consegue produzir seu próprio calor..

 

O que eu tenho feito do menu é o RTC mostrando data e hora, mostra temperatura e umidade.. Mas preciso implementar essas outras funções ao mesmo.

Link para o comentário
Compartilhar em outros sites

Só colocar um if sem delay para um botão no meio do teu código que vai levar para os menus. Nos menus você pode colocar while e case para ir modificando as opções(cria funções), quando você está dentro do menu neste caso o programa ficaria parado nele dando while e Case e só sair depois de apertar um botão... Assim a verificação no void loop para ver se vai ou nao para o menu dura poucos ms e não vai deixar teu controle devagar.


Se tiver algum problema você pode enquanto tiver dentro do menu mandar a luz desligar em low para evitar super aquecimento durante esse período. Se você procurar no google pro Menu arduino você acha eles sem nenhum delay. Eu fiz sem delay e deve ser feito assim X)

adicionado 1 minuto depois

Quando o programa começa a ficar problemático é bom usar millis em vez de delay. E quando é muito tempo é de colocar um contador de tempo real , um módulo , para poder controlar isso...

Link para o comentário
Compartilhar em outros sites

Use um timer como base de tempo e em vez de usar o delay use o timer para contar os tempos necessários.

Você pode setar um timer para contar o tempo e ir selecionando cada tela a ser exibida:

 

FlagMostrarTemperatura = 1;                           // para iniciar mostando uma das telas
-> Enviar tela de temperatura para o display.
TempoExibicao = 10;                                   // 10 * 100ms = 1000ms = 1s
Timer 100ms
  Contador++;                                         // Variável com base de tempo conta de 100 em 100ms
 
  if((Contador >= TempoExibicao) && (FlagMostrarTemperatura == 1)) {    // Verifica se a temperatura ja foi exibida durante o tempo desejado
    FlagMostrarTemperatura = 0;
    Contador = 0;
    FlagMostrarmidade = 1;                            // Agora é a vez de mostrar a umidade
    TempoExibicao = 20;                               // Por dois segundos
    -> A tela de umidade é enviada para o display no MAIN através do FlagMostrarmidade.
  }
  else if((Contador >= TempoExibicao) && (FlagMostrarUmidade == 1)) {    // Verifica se a umidade ja foi exibida durante o tempo desejado
    FlagMostrarUmidade = 0;
    Contador = 0;
    FlagMostrarHorario = 1;                           // Agora é a vez de mostrar a hora
    TempoExibicao = 5;                                // Por meio segundo
    -> A tela de horário é enviada para o display no MAIN através do FlagMostrarHorario.
  }
  
  :
  :

 

Com os botões dá para fazer algo parecido para obter o mesmo resultado.
Outra solução, que envolveria refazer todo o código... Não sei se existe para Arduíno, mas deve existir pois tudo para o Arduíno existe, seria usar um RTOS como o FreeRTOS. Fazer o código seria bem simples devido ao paralelismo virtual.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Quando Paulão @aphawk responde me dá vontade responder também...

Seguinte... Controle de temperatura geralmente não necessita de resposta rápida e imediata mesmo sendo via pid. Então faça seu controle no loop principal e 'esqueça' o resto. Agora 'lembre-se' que devia ter colocado uma ou mais interrupções via tecla ou timer pro controle dos menus. Que entre e saia o mais rápido possível nelas.

P.ex. pro relógio você pode atualizar no display a cada minuto só. Mostrar temperatura, a cada segundo, Teclado, só se apertar tecla. E por aí vai.

O contrário também é válido: um timer de p.ex. 20Hz interrompe seja lá o que estiver fazendo pro controle do pid.

 

Este seria o princípio multitarefa dos mc's que eu gosto de chamar carinhosamente de coprocessamento e quando tenho mais de duas funções... cocoprocessamento...

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

6 horas atrás, Isadora Ferraz disse:

Este seria o princípio multitarefa dos mc's que eu gosto de chamar carinhosamente de coprocessamento e quando tenho mais de duas funções... cocoprocessamento...

 

Pois é , na verdade não existe um sistema operacional multi-tarefa, e sim um S.O. cujo coprocessamento foi desenhado para agendar tarefas segundo uma base de tempo que é escalonável segundo as prioridades de cada tarefa. Como o processamento é sequencial, as coisas sempre seguem uma ordem, e nunca são simultâneas ...

 

E quase sempre quando tentamos fazer algo parecido sem a experiência adquirida pelo conhecimento do microprocessador e do próprio hardware adicional acontece o que a Isadora falou : cocoprocessamento kkkkkkkkkkkk !

 

Paulo

 

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...