Projeto de microcontrolador: sensor de toque com Arduino e ADS1115
Metas
- Conheça as características técnicas do conversor ADC ADS1115
- Saiba como configurar o ganho e a frequência de amostra do conversor ADS1115
- Saiba como programar o conversor com Arduino
- Saiba como usar o conversor como sensor de toque
- Etc.
Conteudo
As características técnicas do conversor ADS1115 A/D
Os componentes ADS1113, ADS1114 e ADS1115 (ADS111x) são conversores analógico-digital (ADC) ou (ADC) de alta precisão com resolução de 16 bits compatíveis com a interface I2C. O conversor incorpora uma referência de baixa tensão de desvio e um oscilador. O ADS1114 e o ADS1115 também incorporam um amplificador de ganho programável (PGA) e um comparador digital. Esses dois amplos recursos de aplicação tornam o ADS111x bem adequado para aplicações de sensores com restrições de energia e espaço.
O ADS111x realiza conversões com taxas de dados superiores a 860 amostras por segundo (SPS). A tensão na entrada do PGA variou de ± 256 mV a ± 6,144 V, o que permite a medição de sinais de grandes ou pequenas amplitudes. O ADS1115 também está equipado com um multiplexador de entrada (MUX) que permite ter 2 entradas diferenciais ou 4 em modo simples. Abaixo estão as características técnicas do componente em seu DataSheet.
- Pacote: X2QFN: 2 mm × 1,5 mm × 0,4 mm
- Resolução binária: 16 bits
- Amplificador de ganho programável integrado PGA (8 ganhos)
- Tensão de alimentação: 2,0 V a 5,5 V
- Corrente nominal: 150 μA (modo de conversão contínua)
- Taxa de dados programável: 8 SPS a 860 SPS
- Liquidação de ciclo único
- Referência de baixa tensão interna
- Oscilador interno
- Interface I2C: endereços selecionáveis de quatro pinos
- Quatro entradas não balanceadas ou duas entradas diferenciais (ADS1115)
- Comparador programável (ADS1114 e ADS1115)
- Temperatura de operação: –40 ° C a + 125 ° C
- Outros: Veja o datasheet
Amplificador de ganho programável (PGA)
O circuito tem três bits de controle dedicados a configurar o ganho do amplificador a jusante do conversor A / D interno do circuito. O PGA permite aumentar a precisão da medição. Na verdade, graças ao uso do PGA, o conversor pode medir tensões da ordem de 7,8125 μV (alto ganho). Abaixo está a tabela de resumo da precisão e dinâmica da medição de acordo com o estado dos bits.
GANHO Vs Dinâmico da medição:
- 000: FSR = ±6,144 V(1)
- 001: FSR = ±4,096 V(1)
- 010: FSR = ±2,048 V(padrão)
- 011: FSR = ±1,024 V
- 100: FSR = ±0,512 V
- 101: FSR = ±0,256 V
- 110: FSR = ±0,256 V
- 111: FSR = ±0,256 V
Precisão Vs Dinâmica
Operação
Notamos para um alto ganho que o conversor pode medir uma tensão da ordem de 7,8µC, o que não é viável para os conversores A/D do Arduino (resolução de 10 bits, precisão de cerca de 50mV). De fato, graças ao ADS1115, é possível detectar tensões de valores muito baixos que podem ser manifestados quando um usuário toca uma entrada analógica. Após o teste, descobrimos que a tensão de entrada realmente aumenta ao tocar a entrada. A variação é da ordem de 70-110mV ao conectar um resistor entre a entrada analógica (A0) e o terra, mas de valor estável. Por outro lado, o valor medido é importante quando a entrada está no ar, por outro lado, o valor flutua. Abaixo estão as duas configurações:
Programação Arduino
Bibliotecas Arduino
Programa principal comentado
#include <I2Cdev.h> /* ----------------------------------------------- Bibliotecas Arduino ----------------------------------------------- I2C: https://github.com/jrowberg/i2cdevlib ADS1115: https://github.com/addicore/ADS1115 ----------------------------------------------- Conexão Arduino-ADS1115: ----------------------------------------------- ADS1115 --> UNO VDD 5V GND GND SCL A5 (or SCL) SDA A4 (or SDA) ALRT 2 ----------------------------------------------- Parâmetros de ganho: ----------------------------------------------- ADS1115_PGA_6P144 0x00 ADS1115_PGA_4P096 0x01 ADS1115_PGA_2P048 0x02 // default ADS1115_PGA_1P024 0x03 ADS1115_PGA_0P512 0x04 ADS1115_PGA_0P256 0x05 ADS1115_PGA_0P256B 0x06 0 : FSR = ±6.144 V(1) 1 : FSR = ±4.096 V(1) 2 : FSR = ±2.048 V (default) 3 : FSR = ±1.024 V 4 : FSR = ±0.512 V 5 : FSR = ±0.256 V 6 : FSR = ±0.256 V 7 : FSR = ±0.256 V ----------------------------------------------- Parâmetros da frequência de medição: ----------------------------------------------- ADS1115_RATE_8 0x00 ADS1115_RATE_16 0x01 ADS1115_RATE_32 0x02 ADS1115_RATE_64 0x03 ADS1115_RATE_128 0x04 // default ADS1115_RATE_250 0x05 ADS1115_RATE_475 0x06 ADS1115_RATE_860 0x07 */ #include "ADS1115.h" ADS1115 adc0(ADS1115_DEFAULT_ADDRESS); // Configurações const int alertReadyPin = 2; const int AlarmePin=3; double ADC_mV=0.0; double Seuil_Alarme_mV=50.0; void setup() { // Conexão do barramento I2C Wire.begin(); // Init interface série Serial.begin(115200); // Teste de conectividade Serial.println("Testando conexões do dispositivo ..."); Serial.println(adc0.testConnection() ? "ADS1115 conexão bem-sucedida" : "Conexão ADS1115 não estabelecida"); // Iniciação do conversor ADS1115 adc0.initialize(); // Modo: leitura única (há modo contínuo!) adc0.setMode(ADS1115_MODE_SINGLESHOT); // Alocação da frequência de amostragem (16SPS) adc0.setRate(ADS1115_RATE_16); // Ganhar alocação adc0.setGain(ADS1115_PGA_0P512); // Connexion de l'indicateur de fin de conversion pinMode(alertReadyPin,INPUT); adc0.setConversionReadyPinMode(); // Alarme pinMode(AlarmePin,OUTPUT); } void loop() { // Sélection de l'entrée (A0) adc0.setMultiplexer(ADS1115_MUX_P0_NG); // Comece a conversão adc0.triggerConversion(); // Teste o final da conversão pollAlertReadyPin(); // Leia o conversor em mV ADC_mV=abs(adc0.getMilliVolts(false)); // Mostra o valor adquirido Serial.print("A0: "); Serial.print(ADC_mV); Serial.println("mV"); // Aciona o alarme if (ADC_mV > Seuil_Alarme_mV) { digitalWrite(AlarmePin, HIGH); } else { digitalWrite(AlarmePin, LOW); } // Aguarde (preste atenção à frequência da medição!) delay(250); } // Função de exibição do status de conversão após 100.000 tentativas void pollAlertReadyPin() { for (uint32_t i = 0; i<100000; i++) if (!digitalRead(alertReadyPin)) return; Serial.println("Falha ao esperar por AlertReadyPin, ele está preso no alto!"); }
Foto do projeto
Conclusão
Neste artigo, mostrei como usar um ADS1115 com o Arduino Nano. Espero que você tenha achado útil e informativo. Se sim, compartilhe com um amigo que também gosta de eletrônica e de fazer coisas!
Eu adoraria saber quais projetos você planeja construir (ou já construiu) com esse ADS11115. Se você tiver alguma dúvida, sugestão ou se achar que falta algo neste tutorial, por favor, deixe um comentário abaixo.
ótimo artigo. parabéns
Estou desenvolvendo um projeto com o ADS1115 e um ESP32.Mas travei quando fui estruturar o código pra enviar os dados das 4 entradas analogicas pra plataforma iot cloud arduino.Nao estou conseguindo vincular os sinais lidos com as Dashboard q deveriam mostrar a variação do sinal .Quando crio uma Dashboad como fica a linha de código pra q eu direcione os valores lidos para serem mostrados..?