Encontrar a posição física de sensores DS18B20 em uma rede 1-wire

Olá Pessoal!
Gente, estou com problemas com a posição física dos sensores DS18B20 em uma rede 1-wire.
Tenho uma rede com 15 sensores, coletei os endereços físicos deles usando um script que coletava essa informação de todos de uma vez e me lista os ROMs sucessivamente. Com essa ordenação fornecida, ai então, inicia a coleta de temperatura, com a ideia de respeitar a ordenação dos sessores fornecidos pelo script.

Até ai tudo bem, o sistema funciona perfeito, o problema é a posição fisica de cada sensor, não bate com a sequencia fornecida pelo sistema.

Reparei isso ao aquecer um sensor na posição física 1 mas no sistema os dados de temperatura foram apresentados em um outra posição.

Seria fácil identificar onde eles estão se eu pudesse aquecer um a um e testar, mas o problema é que eles estão em um local de difícil acesso, e gostaria de saber se teria uma forma de localizar eles via software.

Exibições: 741

Responder esta

Respostas a este tópico

Então, eu tive um problema parecido. Eu notei que dependendo da forma como você chama a string lida (dependendo do seu loop de leitura) existe uma falha. Eu nao consegui entender o por que disso ocorrer, mas consegui resolver.

Eu estava usando 7 sensores, depois fui reduzindo para 3 e notei que o problema se manteve. Cada vez que o programa rodava denovo, o endereço que antes estava armazenado no vetor endereço[i] agora encontrava-se em endereço[i+1]. E notei que a cada x sensores o vetor voltava a se organizar.

Ou seja, se usasse 2 sensores, a cada duas iterações os endereços voltavam a coincidir como antes. Se usasse  7 sensores, a cada 7 iterações os valores voltavam a coincidir. Eu notei que uma string nula era printada no lugar da string original.

Basicamente corrigi da seguinte forma:

void loop()
{
  String address[7];                               //sensores
  int i;
 
  for (i=0; i<7; i++)                                 //realiza leitura dos sensores
   {
    address[i] = Discovery();               //chama a funcao Discovery() que retorna uma string com o endereço.


    if(address[i] == "")                           //o pulo do gato!!! se a string vier 'vazia' diga que i = -1 e saia do for. Senao, continue;
      i=-1;
      }
     else
      {      
       Serial.print("Sensor ");
       Serial.print(i+1);
       Serial.print(": ");
       Serial.print(address[i]);
       Serial.print("Temperature: ");
       Serial.println(Temperature(address[i]);
       }      
   }//end for      
   Serial.println("*********************************");   
   
}//end main


Boa Tarde! tentei este código, mas não conseguiu que a leitura dos sensores fosse na mesma posição física. Alguém conseguiu?

Boa noite R2B,

você fez uma postagem cruzada, 

"https://labdegaragem.com/forum/topics/posi-o-f-sica-dos-sensores-ds18b20", 

não respondi no seu tópico pois recuso ajudar que não ajuda nem fazendo o mínimo pra facilitar a

vida de que ajuda, ou seja não postar o sketch na área de texto do tópico.

Neste caso do autor deste tópico também não ajudei pela mesma razão.

Mas como neste tópico você não postou sketch, vou dizer o que ei sobre 1wire.

Existem duas maneiras de se comunicar com o protocolo 1wire.  DB18B20 é um dispositivo 1wire.

A primeira e mais fácil é deixar a biblioteca usar o recurso de descobrir o endereço do 1wire

no bus.

Mas neste caso o ucontrolador vai executar um "search sequence" procurando por endereços no bus.

Este processo faz uma pesquisa sequencial, procurando de 1 em 1 e assim que encontra um dispositivo

ele lê os dados e vai para o próximo na sequência numérica, e não na sequencia física.

A segunda é um pouco mais complexa, mas você consegue fazer a leitura na sequencia física.

Para isto você precisa saber o endereço de cada dispositivo 1wire, e enviar o comando de leitura dos dados para o endereço que você quiser, na ordem que você quiser.

Espero ter ajudado.

RV mineirin

Boa tarde Marcio,

Não tenho muito conhecimento sobre isso, mas acredito que é impossível fazer com que os sensores sejam lidos de forma linear de acordo com a instalação física,  pois lembro que uma vez usando quatro sensores nas mesmas posições físicas nem sempre eles eram descobertos ordenadamente.

Acredito que a melhor opção seria criar uma estrutura onde você associe a posição com o endereço do sensor, dessa forma você teria um controle mais preciso... Mas como você tem eles em local de difícil acesso também fica complicado.

De qualquer forma, vou seguir seu tópico, vai que alguém saiba como.

Abraço!

Sua pergunta foi especificamente com um método via software. 

Minha resposta não irá ajudar para esta exigência, mas caso esteja em fase de desenvolvimento, utilizar um multiplexador seria uma ótima opção.

RSS

© 2021   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço