Boa noite pessoal!

Peço socorro! Hehe não tenho mais nenhum alternativa que eu saiba para um problema que talvez seja comum. 

Atualmente estou usando um ESP32, preciso fazer leituras do sensor de temperatura DS18b20, consigo fazer as leituras usando as lib da Dallas (DallasTemperature) e uso o protocolo 1-wire.

Funciona praticamente 100% usando o cabo original que tem em torno de 1 metro de comprimento, no entanto preciso levar esse sensor ha uns 40m, usei um cabo LAN CFTV e os resultados foram péssimos, tenho como retorno quando requisito as temperaturas valor como -127.00 ºC ou 85.00 ºC e raramente valores que não são os reais como por exemplo uns 20 graus a mais da temperatura real.

Então decidi usar o CAT5 Blindado, já que esse cabo deve passar junto e/ou próximo a fios elétricos, usando esse cabo eu tive uma pequena melhora mas não resolveu, ainda recebo muuuitos erros ao ler as temperaturas. Esse cabo blindado estou usando da seguinte forma:

Pares verdes para o fio de dados; Pares azuis para o neutro; Pares marrom para o fase (3.3v); a blindagem capa metálica está devidamente aterrada.

Como pull-up estou usando um resistor 4k7 que fica ao lado do ESP. Já testei usando o resistor próximo ao DS18b20 e o resultado foi o mesmo.

Eu acredito que seja interferência da rede elétrica, ou impedância do cabo mas não faço a mínima ideia de como melhoras essas leituras. 

Alguém já passou por essa situação ou possui alguma ideia de como resolver, algum tipo de filtro talvez?

EDIT:

Conclusão, pessoal, acabei de testar com 43 unidades ESP32.

Para realizar as leituras do sensor ds18b20 enquanto a wifi do ESP está ativa é necessário que a rotina de leitura esteja sendo executada no Core1 do ESP.

Sendo assim, nas 43 unidades testadas, TODAS tem leitura livre de erros quando executadas no Core1.

Quando as leituras ocorrem no Core0, ao usar a wifi, o ESP consegue ler o sensor somente as vezes. 

Dispenso a ideia de ter vindo um lote de ESP com problema, pois meus ESP's foram adquiridos de diferentes estados/locais.

Em outros fórum este problema já foi relatado e resolvido da mesma maneira, então deixo aqui a conclusão para quem busca um resultado rápido, talvez não seja a melhor forma mas resolveu.

Se alguém tiver outra sugestão, estou disposto a testar.

Um grande abraço, e obrigado à todos pelas sugestões!

Exibições: 300

Responder esta

Respostas a este tópico

Olá matheus, tudo bem?

Já verificou a resistência deste cabo para os 40m?

Bom dia, tudo certo e com você?

Tiago, já medi sim, da algo em torno de 0 a 1 ohm, acredito que esteja em excelentes condições o cabo.

Tenho um multímetro dt-830b (bem comum) e tenho essa leitura ali. Então como a resistência desse cabo esta baixíssima acredito estar em perfeitas condições.

Bom dia MD, (se não gosta que te chame pelas iniciais, avise),

como você está usando ESPxxx, a voltagem é 3,3V. Certo.

Se for só um 18B20, então use um resistor de 3K3 ao invés de 4K7.

RV mineirin

Olá RV mineirin,

Pode me chamar pelas iniciais sim, sem problema algum. 

Certo, poderei testar com esse resistor, e sim no fim do cabo há apenas um DS18b20. 

No entanto, com o cabo curto (mais ou menos 1 metro) próximo ao ESP funciona muito bem mesmo estando com o resistor 4k7.

Já testei com um 2k2 e obtive os mesmos erros.

 MD.

Se os erros aconteceram com 2K2, então vão ocorrer também com 3K3.

Da forma que você está usando o cabo, o efeito de par trançado está zerado.

"  Pares verdes para o fio de dados; Pares azuis para o neutro; Pares marrom para o fase (3.3v);

    a blindagem capa metálica está devidamente aterrada. "

Minha sugestão de ligação:

Use o resistor de 3K3.  

Ligue o cabo assim:

Verde  -----------------> Data

Branco do  verde  ----> Gnd

Marrom ----------------> +V

Branco do marrom ---> Gnd  --->  Só ligue este GND do lado do ESP e deixe a ponta do lado

                                           do 18B20 Desligada.

Blindagem ligada em GND também só do lado do ESP. Do outro lado fica desligada.

Depois conta o resultado pra gente.

RV mineirin

Bom dia RV,

Vou testar essas configuração que você me passou para ver se ajuda.

No entanto me surgiu uma duvida, você sugeriu para que eu ligasse a blindagem do cabo ao GND então devo remover essa blindagem do terra? Pois onde utilizo realmente tem aterramento, com haste de aterramento, dessa forma eu devo interromper o aterramento e ligar a blindagem no gnd?

Boa noite MD,

Todo aterramento deve-se ligar de um lado só para evitar ground-loop.

RV mineirin

Boa tarde Mateus,

Antes de desenvolver um projeto com esse sensor DS18B20, recomendo que estude todas as informações sobre o mesmo. 

Datasheet do DS18B20:

https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf

É muito importante que leia esse documento. Aqui poderá encontrar todas a recomendações para resolver o seu problema.

GUIDELINES FOR RELIABLE LONG LINE 1-WIRE NETWORKS

https://www.maximintegrated.com/en/design/technical-documents/tutor...

Bom dia José,

Eu já tinha conhecimento desses documentos, os quais enquanto fazia aqui no fórum a postagem, estava lendo em paralelo. 

O que mais me indigna é que nesses documentos ali o pessoal descreve que seria facilmente possível criar uma rede com uns 200 metros de cabo... E eu, com no máximo 40 metros não consigo ter boas leituras.

No entanto vejo que eles construíram um "driver" utilizando vários componentes elétricos (capacitores, resistores) vi os termos pull-up e pull-down ativos, o que eu não possuo na minha atual configuração. Como não sou muito adepto a eletrônica utilizei apenas o resistor de pull-up conforme alguns exemplos que encontrei.

Será que seriam essas as soluções para esses problemas que estou enfrentando?

Será que há algum outro sensor de temperatura que eu possa utilizar que seja a prova d'agua, compacto, de fácil manipulação e que dê "menos dor de cabeça"?

Já tentei utilizar sensores NTC de 10k, mas as leituras do ESP32 variam demais então o abandonei.

Boa tarde. 

Será que seriam essas as soluções para esses problemas que estou enfrentando?

Com certeza! Você deverá seguir as recomendações do fabricante. 

Boa tarde MD.

recentemente em ajuda a outro amigo com sensores DS18B20, durante vários dias realizamos teste de diversas formas.

O projeto dele usa 16 sensores DS18B20 ligados em Cabo CAT5E.

Os teste davam erros variados.

Resolvemos colocar todos o mais perto possível do ESP usando sem o cabo. Ligamos todos no protoboard.

Os erros continuaram ocorrendo.

Combinamos grupos de 6 ou 7 sensores. Mesmo assim os erros eram variados.

Ele disse que comprou estes sensores no mercado livre.

Aí ficou resolvido que ele compraria novos sensores, mas de um fornecedor que garantisse que os sensores foram fabricados pela Maxim.

Os sensores novos não deram erro nenhum.

Para ter certeza do teste ele ligou os novos sensores em um cabo CAT5E mas a partir de 150m e com espaçamento de 3m cada.

Não deu nenhum erro mais e já tem uma semana que está rodando sem erro.

O resistor que ele usou é de 1K.

Talvez os seus sensores podem ser genéricos e com problemas.

RV mineirim

olá Mateus.

      Quando usamos cabos de longo comprimento em comunicações com sinais puramente digitais,  alguns cuidados devem ser observados, e destes há dois principais:

      1)  primeiro,  deve-se garantir que os Níveis Lógicos  sejam corretamente interpretados em cada ponta do cabo, e isso se refere tanto aos níveis de tensão, quanto às transições dos sinais digitais  de LOW pra HIGH  e de HIGH pra LOW (onde os tempos são chamados de "rise time" e "fall time" respectivamente) e os tempos mínimos que os sinais ficam em "LOW" ou em "HIGH".

      No caso da Interface "One Wire", especificamente no caso Sensor DS18B20, isto pode ser resumido na figura mostrada a seguir que capturei do datasheet do sensor:

(clique na figura para "zoom")

      O ponto fundamental a observar nesta figura, são os tempos de "slot", que nada mais são do que intervalos de tempo usados para sincronizar e garantir a correta interpretação dos bits usados na comunicação entre o DS18B20  e quem está se comunicando com sensor. E como se vê na figura anterior, são uma série de parâmetros, a maioria da ordem de algumas dezenas de micro-segundos.

      Na figura anterior, a parte marcada na área na cor azul, é quando o estamos enviando um comando para o DS18B20. Já na área marcada na cor verde, é quando estamos lendo os dados fornecidos pelo DS18B20.

      Especificamente, quando se está lendo os dados do DS18B20, o datasheet do mesmo faz algumas considerações a serem seguidas, e isto pode ser visto na figura a seguir:

(clique na figura para "zoom")

      Na figura anterior, os pontos mais críticos eu marquei em rosa e em amarelo (são intervalos de tempo).  Basicamente, a responsabilidade de seguir estas especificações, é da Biblioteca que vc está usando. Então acredita-se que esta Biblioteca siga isto corretamente.  Mas como eu disse no início, os sinais digitais em cabos de longa distância, podem se degradar, tanto em termos de tensão quanto em termos de tempo, e aí reside a maioria dos problemas, pois é muito comum que as áreas que marquei em rosa e amarelo, se degradem causando a interpretação errada dos bits.

      A recomendação, está em uma página do datasheet do DS18B20 que eu marquei na cor amarela mostrado na figura a seguir:

(clique na figura para "zoom")

      Caso vc queira saber mais sobre as temporizações mostradas nas figuras, basta perguntar aqui no tópico.

      2)  segundo, deve-se prover a proteção adequada para os circuitos, em cada ponta do cabo.  Ocorre que devido ao grande comprimento do cabo, aparecem "spikes" de tensão nas pontas (e claro, ao longo do cabo também).  Estes "spikes" podem ter amplitudes muito maiores que as tensões de trabalho dos circuitos que estão conectados às pontas dos cabos.  Por exemplo, se os sinais digitais usados são de 5V, facilmente podem aparecerem "spikes" de mais de 50V nas pontas. E aí já viu, né?  Mesmo que estes "spikes" durem alguns micro-segundos  ou nano-segundos,  eles podem ser suficientes para danificar permanentemente os circuitos conectados às pontas dos cabos (e isto é bem fácil de ocorrer).  Às vezes os "spikes" não danificam os circuitos de imediato, mas já viu o ditado: "água mole em pedra dura, tanto bate até que fura" (e acredite, neste caso ocorre mesmo um "furo" no componente eletrônico, claro, um furo microscópico que só é possível ver através de processos e instrumentos adequados).

      Assim, para seu caso, proceda como no diagrama mostrado na figura a seguir:

(clique na figura para "zoom")

      Vou fazer algumas considerações sobre alguns pontos desse circuito:

      1)  a tensão de alimentação  enviada pelo cabo, é de 5V. Como vc está usando o ESP32, a melhor forma de se obter essa tensão, vai depender de como vc está alimentado a placa do ESP32. Por exemplo: se vc está alimentando via conector USB, então vc pode obter essa tensão a partir do pino "VIN" da plaquinha do ESP,  pois embora a tensão ali presente seja um pouco menor que 5V (será algo próximo a 4.7V), ainda assim está dentro de uma margem aceitável para o Sistema. Mas se vc estiver alimentando a plaquinha do ESP justamente pelo pino "VIN", e esta tensão for de 5V, então pode usar este pino da mesma forma.

      Observe no diagrama, que a tensão de alimentação, é enviada através de um "par trançado" do cabo CAT5 (no diagrama, é o par "laranja - branco/laranja"). O uso do "par trançado" para enviar a alimentação, é essencial,  pois diversos ruídos de alta frequência serão filtrados com isso.  Mas cuidado para não trocar o 5V com o GND  em cada ponta do cabo (senão já sabe o que ocorre).

      2)  na região marcada com linha tracejada na cor azul, que fica do lado do ESP32, está o circuito que filtra o sinal digital "vindo" do DS18B20, e protege o pino do ESP32 contra "spikes" de alta-tensão existentes no cabo (que aparecem quando os sinais digitais mudam de estado). Este circuito não interfere quando é o ESP32 quem envia bits para o DS18B20.  A proteção, é implementada tanto com o Resistor R1, quanto pelos Diodos D1 e D2.  Observe que o Katodo de D1 está ligado aos 3.3V, ou seja, ligado à tensão de alimentação do ESP32.

      O Resistor R2 (de valor 2k2), faz o papel do pullpup  do Barramento "One Wire", mas do lado do ESP32. Ele é essencial para o funcionamento correto do Sistema (e haverá outro, já no lado do Sensor).

      Observe que como marcado na figura, esta região em azul tracejado, deverá ficar o mais próxima possível da plaquinha do ESP32 (evite passar de 30 centímetros).

      E veja que para o sinal de comunicação, é usado um fio simples (no diagrama, é o fio "branco/verde"). Ou seja:  não use  um "par trançado" com as pontas curto-circuitadas. Isso é para não aumentar a Capacitância entre este sinal e os demais fios (Alimentação e Blindagem). Assim escolha um fio e use apenas ele para o sinal de comunicação do "One Wire".

      3)  dentro da região tracejada na cor verde no lado do Sensor, temos uma área também na cor verde, onde estão os componentes R3, C2, e C3.  Estes constituem um filtro para a alimentação do DS18B20. Este filtro é fundamental.  Nele, R3 e C2  filtram oscilações de baixa frequência, enquanto que R3 e C3  filtram as de alta-frequência. Sem este filtro, não é possível garantir a estabilidade primária do sinal digital fornecido pelo DS18B20, quando estamos lendo os dados do mesmo.

      Atenção à polaridade do Capacitor Eletrolítico  C2 (o positivo está marcado na figura com um "+" na cor vermelha). A tensão de trabalho desse Capacitor deve ser acima de 16V, mas evite que seja muito alta (até 100V está de bom tamanho).

      4)  sobre R4, C4, D3e D4, estes fazem a mesma coisa que aqueles componentes de mesmo valor fazem no lado do ESP32. Então não é preciso dizer mais nada sobre eles. Apenas notar que aqui, o Katodo de D3 está ligado aos 5V (no lado do ESP, o Katodo de D1 vai aos 3.3V).

      E o Resistor R5  faz o mesmo que R2  faz do lado do ESP32. E estes dois Resistores são fundamentais.

      5)  notar que todo o circuito dentro da região tracejada na cor verde, deve ficar o mais próximo possível do Sensor DS18B20. Por isso, se possível, corte o cabo original  que vem com o Sensor de forma a reduzir a distância em questão. Se a princípio vc não quiser fazer isso, tudo bem, pode manter o cabo do Sensor com o comprimento original, mas claro, se vc manter o cabo assim, faça vários testes pra ver se está tudo funcionando corretamente (ou seja, se o comprimento do cabo original não está afetando o funcionamento do Sistema) e de forma estável.

      6)  se o cabo CAT5  tiver malha de blindagem, NÃO  ligue esta blindagem. Deixe desconectada nas duas extremidades do cabo. Embora a blindagem possa até eliminar algumas interferências, este benefício não compensa neste Sistema. Isto porque se vc ligar a blindagem ao GND,  irá aumentar a Capacitância distribuída no cabo, especificamente entre o sinal do fio de comunicação e o GND, o que será péssimo para aquele sinal. Não queremos que esta Capacitância aumente, porque ela degrada o sinal de comunicação. Então deixe desligada a blindagem.

      7)  se existir um TERRA (da instalação da rede elétrica) no lado do DS18B20, não ligue este TERRA ao GND do circuito do DS18B20. Este tipo de ligação, tem alguns benefícios, mas não é necessário no seu Sistema, pois há também "malefícios" e por isso a princípio não compensa.

      8)  finalmente, atente para os tipos de alguns componentes. Especificamente, C1, C3, e C4, devem ser obrigatoriamente  do tipo "Cerâmico" (NÃO serve  de poliéster metalizado !!!). Atenção aos valores de C1 e C4,  que são de 100pF  (100 pico Farad).  Não aumente além disso. Já C3  pode ter outro valor, desde que maior que 100nF  (100 nano Farad, ou 100 kpF).

      Já os Diodos D1 a D4, use preferencialmente do tipo "Schottky" (pode ser BAT85, BAT82, ou similares). Mas pode tentar também com o famigerado 1N4148.  Já os 1N400x (os 1N4001, 1N4002, 1N4007, etc), nem pensar, pois são inadequados para esta aplicação.

      Para detalhes do circuito, use o PDF que imprimi:  "DS18B20_longa_distancia_01.pdf"

      Ah sim: se possível use no seu código, o método de "leitura assíncrona" para o DS18B20. É muito mais eficiente em termos de tempo de processamento, e praticamente não bloqueia seu código. Mas isso é apenas uma recomendação. Se tiver alguma dúvida de como implementar isso, pergunte aqui (mas há exemplo na própria Biblioteca do Sensor). 

      Espero ter ajudado.

      Abrçs,

      Elcids

RSS

© 2021   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço