Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
solanocaiano

Códio PID e Menu juntos (Arduino)

Recommended Posts

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.

Compartilhar este post


Link para o post
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...

Compartilhar este post


Link para o post
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.

Editado por test man*~

Compartilhar este post


Link para o post
Compartilhar em outros sites

@solanocaiano ,

 

Dá sim para fazer isso em um único Arduino. Mas tem de redesenhar o programa.

Não é problema de processamento, e sim de design do programa.

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
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

 

 

Editado por aphawk

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Entendi, obrigado pessoal. Tem coisas que eu tenho que terminar no meu MENU antes de tentar adapta-lo ao PID.

    Quando eu melhorara ele eu já posto aqui pra vocês derem uma olhada no código do menu e no PID para juntarmos os 2.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×