Oscilação em sensor pressão e interferência de envio de SMS no display LCD

Boa noite amigos

gostaria de uma ajuda para resolver um problema que está acontecendo no meu código,

ele é um teste de pressão, onde a pressão é monitorada e se abaixar do limite estipulado envia mensagem sms para o numero programado e tem também um sensor de umidade que detecta a umidade também se estiver fora da faixa também envia mensagem.

ate ai tudo bem funcionando ok porém no momento de enviar a mensagem o display para de ler as pressões e congela no valor lido e só volta a responder após o envio das mensagens.

Gostaria que o envio das mensagens não atrapalhasse o monitoramento das pressões.

Alguém poderia me ajudar a fazer com que um fosse independente do outro?

obrigado.

segue código

Exibições: 231

Responder esta

Respostas a este tópico

olá novamente Cabana.

      Vc solicitou minha ajuda no chat do LDG para este tópico, então aqui estou para ajudar.

      Este seu Projeto parece bem legal, e acho que é uma ótima oportunidade para vc aprender mais, e ir além.

      Sua descrição no texto do tópico está bem clara. Além disso é muito fácil fazer o que vc deseja para tornar seu código "fluido", sem travamentos (claro, desde que se conheça a técnica adequada).

      Mas Cabana, ajude a si mesmo, procurando ter um código organizado e "limpo". Seu código está um tanto bagunçado e algumas coisas estão até duplicadas nele (especificamente as printagens no Display LCD).

      Já organizei todo o código,  já vi como ele funciona, e já deixei "pré-feito"  as partes que vc precisa para que ele seja "fluido" (sem travamentos).

      Mas para que as coisas não sejam feitas "meio às cegas",  por favor, informe os seguintes pontos:

      1)  existem 3 LEDs no seu Sistema.  Qual a função específica de cada um desses LEDs?

      2) qual Sensor de Pressão vc está utilizando?  Pergunto isso porque existem duas conexões relacionadas a isso no seu Sistema. Sabendo disso, poderei definir nomes adequados para cada uma dessas medições de pressão (por que os nomes que vc colocou, pelo amor de Deus, Cabana).

      3) como vc realmente deseja que o Buzzer seja usado?  Ele deveria emitir um som diferente para cada situação?  Pergunto isso porque no seu Sistema, o Buzzer sempre emite o mesmo tipo de som, o que dificulta identificar o motivo exato do "alerta". Uma sugestão:  vc pode emitir o mesmo "tom", mas pode ser mais curto ou longo, para sinalizar alertas diferentes (normalmente os alertas mais importantes são mais longos). Claramente, existem 4 alertas com o Buzzer no seu Sistema, então se vc deseja que sejam alertas diferentes, por favor poderia dizer qual a função de cada um desses alertas, para que possa dar o tratamento mais adequado no código?

      4) e finalmente, sobre as mensagens enviadas via SMS, vc não acha que poderiam ser mais claras?  No seu código existem 5 mensagens, e elas sempre indicam uma situação de falha, mas todas as mensagens são um tanto genéricas ("FALHA", "FALHA1", "FALHA2", etc).  Digo isto, pois aí poderei também deixar no código,  comentários que façam mais sentido (isto é importante para que vc mesmo entenda e use o código, ajustando-o adequadamente, sem confusão).

      Desculpe se fui um pouco duro em alguma momento no texto acima, mas a intenção é ajudar da melhor forma possível.

      Fico no aguardo das suas informações, para poder melhor ajudar. Observe que enumerei cada questão, a fim de não misturar uma com outra. 

      Abrçs,

      Elcids

olá Cabana.

      O importante é que vc parece ter o espírito para seguir em frente e se aprimorar. Mas veja:  posso te dizer que um aspecto fundamental para isso é seguir bons fundamentos e bons exemplos.  Se vc não fizer isso, será uma empreitada difícil e ainda poderá não ter bons resultados. Então dedique-se e observe as coisas com a devida atenção.

      Vamos então falar dos pontos enumerados que postei e vc respondeu. Então, seguindo a mesma enumeração:

      1) ok, acho que ficou claro como os 3 LEDs (verde, vermelho, e amarelo) devem se comportar.

      Mas conferindo se realmente entendi: o "verde"  indica que o Sistema está funcionando e fica piscando indicando isso, mas pára de piscar quando algum problema é detectado (e claro, volta automaticamente a piscar quando o problema deixa de existir).

      O "vermelho" pisca enquanto os Sensores de Pressão indicarem problema.

      E o "amarelo" pisca enquanto o Sensor de Umidade indicar problema.

      Mas ainda tenho uma questão sobre os níveis de Umidade, porém irei falar sobre isso mais à frente.

      Sobre o envio de SMS, no seu código original este envio é feito apenas para problemas nos níveis de Pressão. Mas no post anterior, vc disse que deveria também ser enviado SMS para problemas de Umidade. Então pergunto:  afinal, em que situações um SMS deve ser enviado?

      2) ok, pelo código já tinha visto que era um Sensor de Pressão com saída analógica (eu só não sabia se era um único Sensor com dois sinais ou se eram dois Sensores independentes cada um com seu sinal).  Sobre a parte da aferição, tenho um comentário a fazer, porém só o farei depois que publicar o código (mas não se preocupe porque é tranquilo, e se eu me esquecer disso, por favor me lembre).

      Mas há uma consideração sobre a conexão dos Sensores de Pressão, que tem implicação no código. Vou esclarecer parcialmente (posteriormente darei mais detalhes). Veja este trecho do seu código original, onde vc faz as conversões AD para obter os níveis de pressão indicados pelos sensores, conforme mostro na figura a seguir salientado em amarelo:

(clique na figura para "zoom")

      Observe que existe um "delay" de 80 mili-segundos entre a conversão AD (função "analogRead") do primeiro Sensor  e a conversão do segundo Sensor de Pressão.  A pergunta é:  porque vc inseriu este "delay"?  sem ele vc estava obtendo valores incorretos?  Vou explicar porque estou perguntando sobre isso:

      Ocorre que se vc não fizer a conexão adequada de um sinal analógico ao Arduino,  poderão ocorrer erros nos valores convertidos, especialmente se existir no Sistema mais de um Canal Analógico sendo utilizado (que é o seu caso, pois além dos dois sensores de pressão vc tem também o sensor de Umidade).

      Este problema ocorre porque a "impedância AC" do sinal analógico não é baixa o suficiente para permitir que o Conversor AD faça um sample adequado (o problema pode ocorrer mesmo quando a "impedância DC" é baixa, embora neste caso seja mesmo perceptível). Como consequência aparece um erro no valor convertido, quando se troca de um canal para outro (e também ocorre um problema chamado "Injeção de Carga", que os Fabricantes de Chips não gostam de falar porque nem sempre é fácil eliminar e eles não querem admitir ou evidenciar o problema).

      Existem essencialmente duas técnicas para se eliminar esses erros (ou reduzi-los de forma que não sejam perceptíveis), e uma delas é fazer algo parecido com o que vc fez, acrescentando algo semelhante ao "delay".  A outra forma é conectando adequadamente o sinal analógico, e esta é a forma preferível. Eventualmente inclusive, se utiliza as duas técnicas, se a coisa for muito "braba" (ou por precaução, como sempre faço).

      Assim eu te aconselharia a usar a técnica de conectar de forma adequada o sinal dos seus Sensores ao Arduino.  No entanto isso exige que vc acrescente um Resistor e um Capacitor em cada sinal. Mas isso fica a seu critério, e eu não posso determinar isso. Caso vc decida usar essa técnica, eu calcularei os Resistores e os Capacitores mais adequados, e  mostrarei como vc deve fazer as conexões (é bem simples).

      Então pense sobre isso.  Mas se vc quiser usar apenas a técnica no código, tranquilo, farei isso mas sem usar o "delay" pois não é com ele que se implementa isso. Aproveito para dizer, que por regra geral,  não se deve  usar o "delay" fora da função "setup" do Arduino, e posteriormente explicarei porque.

      Ainda sobre a Pressão, por favor veja a figura a seguir:

(clique na figura para "zoom")

      Na parte marcada em "rosa",  ficou claro que a Pressão é calculada em unidades de "bar", sendo esta a unidade que vc exibe no Display LCD. E portanto também fica claro que é esta unidade de pressão que seu Sistema realmente irá trabalhar depois de obter o valor do Sinal dos Sensores de Pressão.

      Mas na parte em "verde" na figura, vc faz a conversão para uma outra unidade intermediária, antes de finalmente converter para "bar".  Então pergunto:  que unidade intermediária é esta?  Vc faz isso pra facilitar seu sistema de calibração para cada um dos Sensores?  (eu tenho quase certeza que seja isso, mas é melhor perguntar). Pergunto também, porque como eu disse antes, eu irei posteriormente fazer algumas considerações sobre a calibração, e que pode vir a te ajudar nesse processo.

      Sobre o Sensor de Umidade, há uma sugestão que eu gostaria de te fazer.  Vc não acha que seria mais adequado ter o valor da Umidade  sendo diretamente proporcional à Umidade real?   Veja: atualmente no seu Sistema, este valor é inversamente proporcional  à Umidade real, ou seja,  o máximo valor (no caso "1023")  se refere à mínima Umidade, enquanto que o mínimo valor que é "0" (zero)  se refere à máxima Umidade.  Se fosse diretamente proporcional,  este valor resultante poderia ser chamado de "Índice de Umidade", e quando seu valor for "0" indicará também a mínima Umidade. Esta forma me parece ter mais sentido.  O que vc acha?

      Sei que no código vc está usando a forma inversamente proporcional porque é assim que o pessoal usa por aí em blogs e sites na Internet. Eles simplesmente fazem a conversão AD no Arduino sem mais nenhum tratamento e que resulta nesse comportamento.  Como vc disse que obteve pedaços de código aqui e ali na Internet,  por tabela acabou seguindo esta regra "invertida".  Mas pense sobre a sugestão que fiz.

      3) sobre o Buzzer, está bem claro como deverá funcionar.  Mas tenho uma questão sobre o Buzzer em si.  Me parece que vc está usando um "Buzzer passivo", que é aquele que só emite som quando vc gera o sinal de som no Arduino (e seu código faz isso através da função "tone"). Para melhor entender veja a figura a seguir:

(clique na figura para "zoom")

      Observe que marquei em "verde", uma informação na plaquinha do Buzzer que diz qual é o nível lógico que "aciona" o Buzzer.  Este da figura é o mais comum, e vc pode ver que está marcado na placa que ele é acionado por nível lógico "LOW". É importante saber qual é este nível para o "Buzzer passivo",  pois isto permite que efetivamente não seja aplicada tensão sobre o "Buzzer" quando este não está emitindo som.  Veja: quando termina a ação da função "tone" (ou quando se usa a função "noTone"), o nível lógico que fica na saída do Arduino é justamente o nível "LOW", e no caso da plaquinha da figura estaríamos aplicando tensão ao Buzzer, embora este não emita som (pois o sinal aplicado é agora estático). Isto força o "piezzo" do Buzzer, e a médio ou longo prazo poderá danificá-lo. Então é melhor evitar isso. Para tal, basta aplicar-se o nível lógico adequado ao Buzzer logo após parar o sinal do som. Já fiz isso no código, porém não sei qual é o nível lógico que liga seu Buzzer. Então por favor,  verifique qual é, e se possível coloque aqui uma foto da sua plaquinha Buzzer, para deixarmos claro.

      4) sobre as mensagens de SMS, tranquilo, eu imaginava que vc iria ainda ajustar isso adequadamente.  Mas lembre-se que  o bom-senso nos diz: não deixe para depois o que se pode facilmente fazer agora.

      No código irei colocar mensagens que estejam relacionadas a cada alerta, e depois vc altera isso da forma que vc achar mais adequado.  O mesmo se aplica para as mensagens exibidas no Display LCD para as Pressões medidas.

      Sobre a questão do "auto-teste" tanto para os LEDs quanto para os demais elementos (Buzzer, SMS, etc), é tranquilo de implementar. Mas irei fazer isso somente depois que vc disser que todo o restante está funcionando da forma correta, ok?

      Eu ainda tenho uma dúvida sobre as faixas de Umidade  que vc usa para sinalizar os alertas (se vc olhar com cuidado seu código original, talvez vc já descubra que dúvida é esta).  Mas irei perguntar depois, já que isto praticamente não tem impacto no código.

      O código está 99%  pronto.  Falta apenas esclarecer os pontos aqui mencionados.

      Fico no aguardo de um retorno seu sobre estes pontos.

      Ah Cabana,  por favor, mude o título deste tópico para um que tenha realmente sentido sobre o que vc está implementando, porque este nome que vc colocou, pelo amor de Deus.  E ainda é o mesmo nome do seu tópico anterior. Jesus.

      Abrçs,

      Elcids

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço