Como rapidamente e sem chips desnecessários contornar a imutabilidade do endereço do sensor HTU21

Saudações a todos os moradores de Habr!


Quero falar sobre uma maneira nova e inesperada de conectar vários sensores HTU21 através do barramento I2C sem usar chips adicionais.


Este sensor ainda é popular entre vários mestres de bricolage e é merecido: é mais preciso que o seu antecessor e pequeno em tamanho (o que é conveniente para a incorporação em dispositivos).


Mais recentemente, eu, como muitos usuários, fiquei intrigado com a falta de capacidade de alterar o endereço desse sensor. O Google, é claro, publicou vários artigos sobre todos os tipos de multiplexadores para o barramento I2C de "compre na conhecida loja online chinesa" para "faça você mesmo". Em nenhum lugar havia opções sem ferro de soldar e custos adicionais. Isso não poderia deixar de ser perturbado, pois era necessário resolver o problema aqui e agora (os clientes são esses clientes). Quero falar sobre uma maneira mais fácil, descontraída e muito simples de sair dessa situação. Intrigado? Então eu te digo.


Dados iniciais: Arduino mega e 4 sensores HTU21.


Tarefa: é necessário conectar todos os sensores htu através do barramento I2C e ler os valores. Além disso, esses sensores não são os únicos dispositivos escravos neste barramento (os planos também incluem uma tela LCD e outros sensores).


O que sabemos? O sensor HTU21 tem um endereço fixo no barramento - 0x40 1 . Como, tendo um microcontrolador e 4 sensores com os mesmos endereços no barramento, como acessar um dispositivo específico sem chips extras?


Tudo acaba sendo bem simples:


  1. conecte o terra, scl e sda ​​como de costume (não se esqueça dos resistores pull-up para a linha de dados e a sincronização);
  2. conectamos o cabo de alimentação de cada sensor a uma entrada digital no Arduino (você provavelmente já entende para onde estou levando)
  3. aplique alternadamente HIGH a cada entrada digital que alimenta um sensor separado e, após um atraso, leia o valor do sensor energizado.
  4. dê um sinal de BAIXA para este sensor e repita o ciclo para outros sensores.

Obviamente, esse método também apresenta desvantagens, por exemplo, o número necessário de saídas digitais ou analógicas gratuitas pode simplesmente não estar disponível. Mas, para uso em projetos, esse princípio funciona e funciona a distâncias suficientes do microcontrolador. Espero que este artigo ajude você a economizar seus nervos, dinheiro e tempo.


Não é à toa que se diz que tudo engenhoso é simples!


Listagem em anexo:


/* ,        HTU21   BME280 */ void greenhouseHT() { delay(30); rooms[3].TempA = bme.readTemperature(); delay(30); rooms[3].HumA = bme.readHumidity(); delay(30); for (int i=0; i<3; i++) { digitalWrite(HTU21_pins[i], HIGH); delay(30); rooms[i].HumA = myGreenhouseHumidity.readHumidity(); rooms[i].TempA = myGreenhouseHumidity.readTemperature(); delay(30); digitalWrite(HTU21_pins[i], LOW); delay(30); } digitalWrite(pin_HTU21_1, HIGH); } 

Source: https://habr.com/ru/post/pt425541/


All Articles