ADS1115 com Arduino, ESP8366 etc

ads1115
ads1115

ADS1115 com Arduino

Dessa vez vamos ver algo sobre o ADS1115,  introduzindo o artigo do ADS1115 com Arduino, depois com ESP8266 e Raspberry. Primeiramente com Arduino porque é o mais simples, já tem biblioteca pronta e não há muito o que se pensar.

O que é o ADS1115

O ADS1115 é um ADC (conversor analógico-digital) de alta resolução. Esse modelo possui 16 bits de resolução, abrindo um leque de 65536 valores possíveis em uma leitura, contra 8 bits do Arduino UNO. Ou seja, esse conversor pode lhe dar muito mais precisão do que o ADC do Arduino, mas ele é muito mais útil ainda para interfacear com o ESP8266 que só tem 1 entrada analógica (que suporta no máximo 1V no pino) e muito mais útil ainda no Raspberry, que não possui conversor ADC.




Ele opera entre 2 e 5V, de modo que é compatível com Arduino, ESP8266, Raspberry, MSP432, Onion Omega, Carambola, etc.

Barramento I²C

O barramento de comunicação desse dispositivo é I²C, possibilitando assim uma rede com mais dispositivos do mesmo tipo ou com outros, como por Exemplo, o PCF8574, exibido em 2 artigos anteriores. Com ambos, você consegue expandir tanto as portas analógicas quanto as portas digitais, facilitando a integração com ambientes mais complexos.

Dispositivo endereçável

O ADS1115 é endereçável, e isso lhe permite agregar mais dispositivos do mesmo tipo no barramento I²C e assim expandir ainda mais as leituras analógicas.

Seu endereçamento tem 7 bits de comprimento e você pode selecionar qual endereço utilizar da seguinte maneira:

Hex bin conect
0x48 1001000 ADR ao GND
0x49 1001001 ADR ao VDD
0x4A 1001010 ADR ao SDA
0x4B 1001011  ADR ao SCL

A apresentação da Adafruit mostra o wiring, se errar com isso, nada mais o fará acertar nessa vida:

ads1115 cascade
ads1115 com Arduino

Além disso, nesse documento você tem o link para a biblioteca e exemplos de uso. A biblioteca é bastante completa e sem dúvida satisfará suas expectativas. Como o documento é completo e tem inclusive exemplo de código, não vou me repetir, deixo apenas a referência e parto agora para o ADS1115 com ESP8266.

ADS1115 com ESP8266

As informações detalhadas você encontra no datasheet (como sempre).

A leitura da word vem invertida, isto é, se você leu um valor 0x3412, isso é 0x1234. Sabendo disso previamente, podemos criar uma função que coloque o valor na devida ordem:

Configuração inicial

O primeiro byte enviado pelo master deve ser o endereço do ADS1115. O endereço pode ser obtido através de um scan no barramento:

i2c scan
i2c scan

Seguidamente, deve ser enviado o segundo byte, que é o ponteiro para o registrador (que pode ser observado no datasheet supracitado).
Eu sei que isso pode parecer complicado, mas servirá como referência quando tudo estiver claro. Adiante, o terceiro e o quarto byte
são escritos no registrador indicado no segundo byte. Todas as transações entre o master e o ADS1115 devem ser precedidas pela condição
de start e finalizada com a condição de stop.




Vamos iniciar com a primeira configuração, que é a conversão em modo continuo; isto é, tão logo uma conversão esteja pronta, outra é inicidada.
Seu outro modo de operação é ler e dormir em intervalos, mas vou me ater ao mais breve possível.

Escrever no registrador de configuração

Primeiro byte: 144

Se refere aos 7 bits do endereço I²C seguido pelo bit de low para read/write.

Segundo byte:  1

Apontamento para o registrador de configuração.

Terceiro byte: 132

MSB do registrador de configuração s ser escrito.

Quarto byte: 131

LSB do registrador de configuração a ser escrito.

Escrever para o registrador ponteiro

Primeiro byte: 144

O mesmo que a primeira escrita do processo anterior.

Segundo byte: 0

Apontamento para o registrador de conversão.

Ler do registrador de configuração

Primeiro byte: 145

Os 7 bits do endereço I²C seguidos pelo bit de leitura/escrita em high agora.

Segundo byte: O ADS responde com a conversão contida no registrador MSB.

Terceiro byte: O ADS respondo com o valor de conversão do registrador LSB.

Isso é o que consta no datasheet, o que parece bastante simples. Em casa não tenho nada conectado ao ADS1115, mas nada me impediu de escrever esses comandos:

ads1115 reading
ads1115 reading

Se está correto o procedimento? Bem, você pode escrever em hexa ou binário, não importa. Os primeiros 2 bytes de retorno dessa longa string repletas de 255 são referentes ao valor que supostamente seria lido se tivesse algo pendurado no ADS1115. O caso é que ao ler, passa-se o tamanho desejado de bytes lidos e eu passei 145, mas apenas 2 formavam a word. A questão mesmo é que não consigo comprovar se o processo está certo no ESP8266, mas faça o teste também. Já no Raspberry a história é outra, pois tive que utilizá-lo na empresa.

ADS1115 com Raspberry Pi

No Raspberry Pi utiliza-se a tradicional lib SMBus. Também escrito em python, mas com as respectivas diferenças entre o ESP8266 com a machine.I2C e qualquer Linux com SMBus.

Para ficar claríssimo, esse código estou utilizando para medir a tensão de 2 bancos de baterias, através de um divisor resistivo, aplicando então as devidas proporções. Mantenha o foco na leitura do dispositivo, o restante é pertinente ao meu trabalho:

Esse processo para o Raspberry Pi está devidamente homologado, portanto assino embaixo. Já no ESP8266 foi um experimento cheio de suposições, mas se eu tiver algum tempo extra tento fazer algo pro ESP que também possa assinar embaixo!

Inscreva-se no nosso newsletter, alí em cima à direita e receba novos posts por email.

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Nossos grupos:

Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte – https://www.facebook.com/groups/dobitaobyte/

Próximo post a caminho!

Agregador de Links - Loucuras da Net

Comments

comments

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.