Taxa de amostragem ADS1115 - Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)2024-03-28T22:32:05Zhttps://labdegaragem.com/forum/topics/taxa-de-amostragem-ads1115?commentId=6223006%3AComment%3A879897&xg_source=activity&feed=yes&xn_auth=nook Leonardo.
Já prepar…tag:labdegaragem.com,2022-02-11:6223006:Comment:8811202022-02-11T15:26:09.861ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">ok Leonardo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Já preparei todo o código, e inclusive já testei.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Agora só vou preparar umas figuras para poder instruir sobre como usar o Sistema implementado (Hardware e código), e então já publicarei aqui.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Alguns comentários sobre seu post:…</span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;">ok Leonardo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Já preparei todo o código, e inclusive já testei.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Agora só vou preparar umas figuras para poder instruir sobre como usar o Sistema implementado (Hardware e código), e então já publicarei aqui.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Alguns comentários sobre seu post:</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <span style="font-size: 14pt;"><strong>-</strong></span> evite a todo custo, usar a função <strong><em>"delay"</em></strong> no <strong><em>"loop"</em></strong> do <em><strong>Arduino</strong> </em>e em qualquer função que seja chamada a partir do <em>"loop"</em>. Sempre é possível fazer isso, e até hoje eu nunca encontrei um caso onde não fosse possível.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <span style="font-size: 14pt;"><strong>-</strong></span> sobre os erros no <strong><em>divisor de tensão</em></strong>, depois eu te explicarei porque eles estavam ocorrendo no seu Sistema.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <span style="font-size: 14pt;"><strong>-</strong></span> o código que implementei é totalmente flexível, configurável, e vc pode fazer isso facilmente, conforme vc perceberá. E nem precisa fazer aqueles cálculos que vc disse que fez (o código faz isso "automaticamente"). Assim só precisa inserir nele alguns parâmetros, como aqueles do <strong><em>Sensor de Pressão</em></strong>, ou valores setados no Hardware (por exemplo o valor do <strong><em>"R1"</em></strong> do <strong><em>divisor de tensão</em></strong>).</span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> </span><span style="font-size: 12pt;">Abrçs,</span></p>
<p><span style="font-size: 12pt;"> Elcids</span></p> Apenas retificando...
a fre…tag:labdegaragem.com,2022-02-11:6223006:Comment:8809382022-02-11T15:00:14.996ZJosé Leonardohttps://labdegaragem.com/profile/JoseLeonardo
<p>Apenas retificando... </p>
<p></p>
<p>a frequencia que apareceu quando medio o sensor com o ociloscopio foi "<10 Hz".</p>
<p>Apenas retificando... </p>
<p></p>
<p>a frequencia que apareceu quando medio o sensor com o ociloscopio foi "<10 Hz".</p> Olá Elcids,
Então para que e…tag:labdegaragem.com,2022-02-09:6223006:Comment:8808522022-02-09T19:18:52.787ZJosé Leonardohttps://labdegaragem.com/profile/JoseLeonardo
<p><span style="font-weight: 400; font-size: 12pt;">Olá Elcids,</span></p>
<p></p>
<p><span style="font-weight: 400; font-size: 12pt;">Então para que eu faça a leitura de forma certa eu devo então colocar um “delay” para definir quantas medições eu quero que o sensor faça por segundo certo?</span></p>
<p></p>
<p><span style="font-weight: 400; font-size: 12pt;">Referente ao divisor de tensão, o único problema que estou encontrando é uma diferença entre o valor lido no multímetro de bancada e o…</span></p>
<p><span style="font-weight: 400; font-size: 12pt;">Olá Elcids,</span></p>
<p></p>
<p><span style="font-weight: 400; font-size: 12pt;">Então para que eu faça a leitura de forma certa eu devo então colocar um “delay” para definir quantas medições eu quero que o sensor faça por segundo certo?</span></p>
<p></p>
<p><span style="font-weight: 400; font-size: 12pt;">Referente ao divisor de tensão, o único problema que estou encontrando é uma diferença entre o valor lido no multímetro de bancada e o resultado dado pelo arduino ( é uma diferença considerável), tentei usar algumas equações para corrigir isso mas como a diferença não segue uma linearidade não funcionou muito bem. Além disso, a resistência obtida não é instável e fica oscilando um pouco ( geralmente 0.3 Ohms).</span></p>
<p></p>
<p><span style="font-weight: 400; font-size: 12pt;">O sensor que está no arquivo que eu mandei é um de -1 a 10 bar com o sinal de saída de 0 a 10V. Para calcular a pressão do sensor eu tentei usar a função “Map” do arduino, porem ela so me retornava números inteiros, então usei sua equação que encontrei no fórum do arduino:</span></p>
<p><span style="font-weight: 400;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/10084208071?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/10084208071?profile=RESIZE_710x" class="align-full" width="1108" height="112"/></a></span></p>
<p><span style="font-weight: 400; font-size: 12pt;">Então peguei o valor em tensão que dava no 0 Bar ( 0.871 V) e o valor que deveria dar em -1 Bar ( 0 V) e joguei na fórmula.</span></p>
<p><span style="font-weight: 400; font-size: 12pt;"> </span></p>
<p><span style="font-weight: 400; font-size: 12pt;">O sensor de pressão que planejo usar no projeto final é um diferente do que estou usando para fazer os testes. O que estou usando é mais barato e tem uma precisão menor do que o outro. </span></p>
<p><span style="font-weight: 400; font-size: 12pt;"> </span></p>
<p><span style="font-weight: 400; font-size: 12pt;">Aqui estão algumas informações do sensor que estou usando:</span></p>
<p><span style="font-weight: 400; font-size: 12pt;">Alimentação: 10 a 30 VDC;</span></p>
<p><span style="font-weight: 400; font-size: 12pt;">Faixa de medição: -1 a 10 BAR;</span></p>
<p><span style="font-weight: 400; font-size: 12pt;">Sinal de saída: 0 a 10V;</span></p>
<p><span style="font-weight: 400; font-size: 12pt;">Impedância de saída: 4,207 KOhms;</span></p>
<p><span style="font-weight: 400; font-size: 12pt;">Precisão: 1% do fundo de escala.</span></p>
<p><span style="font-weight: 400; font-size: 12pt;">(Tentei medir a frequência dele com o osciloscópio e o que apareceu foi “< 100 Hz”).</span></p>
<p><span style="font-weight: 400; font-size: 12pt;"><br/><br/></span></p>
<p><span style="font-weight: 400; font-size: 12pt;">Agora referente ao experimento que você propôs, ficou bem clara a função dos dois diodos no circuito e o porque não posso utilizar uma capacitância muito alta. Vou me atentar bastante a esses pontos que você citou de agora em diante.</span></p>
<p></p>
<p><span style="font-size: 16px;">Obrigado e aguardo seu retorno.</span></p>
<p></p>
<p></p> exato Leonardo.
Essa B…tag:labdegaragem.com,2022-02-09:6223006:Comment:8811042022-02-09T03:26:16.348ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 16px;">exato Leonardo.</span></p>
<p></p>
<p><span style="font-size: 16px;"> Essa <strong>Biblioteca</strong> que vc está usando para o <strong>ADS1115</strong>, já seleciona automaticamente o modo <em><strong>"single-shot"</strong></em> para o ADS. Logo, quando vc requisita uma conversão via função <span><em><strong>"<span style="font-size: 10pt;">readADC_SingleEnded"</span></strong></em></span>, o ADS1115 faz a conversão e então fica quietinho. Ele fará a…</span></p>
<p><span style="font-size: 16px;">exato Leonardo.</span></p>
<p></p>
<p><span style="font-size: 16px;"> Essa <strong>Biblioteca</strong> que vc está usando para o <strong>ADS1115</strong>, já seleciona automaticamente o modo <em><strong>"single-shot"</strong></em> para o ADS. Logo, quando vc requisita uma conversão via função <span><em><strong>"<span style="font-size: 10pt;">readADC_SingleEnded"</span></strong></em></span>, o ADS1115 faz a conversão e então fica quietinho. Ele fará a próxima conversão <span style="text-decoration: underline;"><em>apenas quando</em></span> vc solicitar novamente <span style="font-size: 10pt;"><em>(</em>através da mesma função <em><strong>"readADC_SingleEnded"</strong></em><em>)</em></span>. E o tempo que o ADS1115 leva para fazer uma conversão solicitada é exatamente o inverso da <em><strong>Taxa de Amostragem</strong></em> que vc selecionar via <span style="font-size: 10pt;"><em><strong>"setDataRate"</strong></em></span>.</span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Sobre o item <em><strong>"4)"</strong></em>, ficou claro o seu circuito. Então eu equacionei o <em><strong>divisor de tensão</strong></em> no sentido de calcular <strong>R2</strong> <em>(Resistência do Vacuostato)</em>, e vi que está correto o cálculo do mesmo no seu código. Apenas precisa melhorar a "formatação" e organização do seu código (como já mencionei antes).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Num post seguinte, também colocarei um questionamento sobre os dados do <em><strong>Sensor de Pressão</strong></em>, e sobre como vc está usando estes dados (no seu código está bem confuso, e <em>talvez</em> incorreto).</span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Sobre a questão de não aumentar demais o valor do <strong>Capacitor C2</strong> no circuito que postei anteriormente, vamos ao motivo.</span></p>
<p><span style="font-size: 12pt;"> Vc deve se recordar que me referi ao <em><strong>datasheet</strong></em> do <em><strong>ADS1115</strong></em>, especificamente o </span><span style="font-size: 12pt;"><em><strong>item </strong><strong>"9.3"</strong></em><span> na </span><strong><em>página 15</em></strong><span>, o qual estou reproduzindo na figura a seguir:</span></span></p>
<p></p>
<p style="text-align: center;"><span style="font-size: 8pt;"><strong><em>(clique na figura para "zoom")</em></strong></span></p>
<p><span style="font-size: 12pt;"><span><a href="https://storage.ning.com/topology/rest/1.0/file/get/10082403671?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/10082403671?profile=RESIZE_710x" class="align-center" width="394" height="396"/></a></span></span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"><span> Conforme vc pode ver na </span></span><span style="font-size: 12pt;"><em><strong>figura 25</strong></em><span> naquela página do datasheet, as <em><strong>entradas analógicas</strong></em> do <strong><em>ADS1115</em></strong> tem <em><strong>Diodos internos de Proteção</strong></em>. Cada entrada tem um par de Diodos. Note que quando o ADS está alimentado, todos estes Diodos estão cortados ("OFF"), pois a tensão na entrada analógica sempre deverá ser <strong><em>maior ou igual a zero volts</em></strong> (o "GND") <em><strong>e menor ou igual a VDD</strong></em> (a tensão de alimentação do ADS). Ou seja: sempre que a entrada analógica estiver dentro da faixa esperada de tensão, os Diodos estarão OFF, e portanto é como se eles nem estivessem ali no circuito (a não ser pela capacitância "parasita" que eles representam).</span></span></p>
<p></p>
<p><span style="font-size: 12pt;"> Mas veja na figura a seguir, o que ocorre se vc <strong><em>desliga a alimentação</em></strong> do ADS1115:</span></p>
<p></p>
<p style="text-align: center;"><span style="font-size: 8pt;"><strong><em>(clique na figura para "zoom")</em></strong></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/10082404074?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/10082404074?profile=RESIZE_710x" class="align-center" width="424" height="189"/></a></span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Note que simplifiquei o circuito, mostrando apenas uma entrada analógica do ADS1115. Também é mostrado o circuito em questão, onde o valor do <em><strong>Capacitor C2</strong></em> pode ser um problema. Vejamos porque.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Como vc pode ver na figura anterior, não há muito o que dizer. Quando vc desliga a alimentação (<strong>VCC</strong>), cai a tensão no <strong>pino VDD</strong> do <strong>ADS1115</strong>. Estando <strong>C2</strong> carregado com uma <em><strong>tensão "X"</strong></em>, o <em>Diodo interno</em> ao ADS (ligado entre a entrada analógica e o VDD) passa a conduzir assim que a tensão no VDD fica ligeiramente abaixo da <strong><em>tensão "X"</em></strong>, provocando o fluxo da <em><strong>corrente <span style="font-size: 14pt;">"i"</span></strong></em> <em>(setas na cor "rosa" na figura),</em> no sentido de descarregar <strong>C2</strong> (e também C1).</span></p>
<p><span style="font-size: 12pt;"> Assim, essa corrente circula, entrando no pino analógico e passando pelo Diodo interno de Proteção. Como há outros circuitos ligados na linha de Alimentação, estes circuitos representam uma Impedância, e assim a <em><strong>corrente <span style="font-size: 14pt;">"i"</span></strong></em> passa por essa Impedância e alcança o "GND", retornando ao <strong>Capacitor C2</strong> pelo seu terminal negativo.</span></p>
<p><span style="font-size: 12pt;"> Claro que C1 também fornece parte dessa corrente, mas essa parcela é pequena se comparada à contribuição de C2.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> E o que isso provoca? Depende. Se <strong>C2</strong> tiver um valor não muito alto, a dissipação de potência sobre o <strong><em>Diodo interno</em></strong> (e portanto sobre o ADS), poderá ser ignorada. Mas se C2 tiver um valor muito alto, então a dissipação de potência sobre o Diodo interno irá aumentar na mesma proporção. Sob condições de liga/desliga rotineiros, isso vai "forçando" o "substrato" físico do ADS devido a picos de dissipação de energia na forma de calor, e eventualmente poderá em algum momento danificar o Chip permanentemente (lembre-se que fisicamente o chip é minúsculo). Sob condições muito severas, com valores altíssimos de <strong>C2</strong> (o que muita gente adora fazer), poderá ocorrer um dano permanente ao ADS num curto espaço de tempo (após alguns poucos ciclos de liga/desliga).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <strong><em><span style="text-decoration: underline;">Nota Importante</span>:</em></strong> praticamente todos os Chips (99,99% deles), tem esses Diodos internos de Proteção ligados aos pinos, sejam estes pinos <strong><em>analógicos</em></strong> ou <strong><em>digitais</em></strong>, e não somente nos pinos de entrada, mas também nos pinos de saída. Então muita atenção ao que vc liga ali naqueles pinos, pra não ter uma surpresa desagradável. Por exemplo: pense que vc alimenta um circuito com uma Bateria, e em determinado momento partes desse circuito são desligadas para economizar a energia da Bateria. Adivinha o que pode ocorrer se a tensão dessa Bateria está presente em um pino de um C.I. cuja alimentação foi desligada (e mesmo que a tensão chegue ao pino através de um Resistor). Fácil concluir, né? Além de dissipar energia no Diodo interno do tal C.I., a corrente que fluirá por ele proveniente da Bateria, irá alimentar <span>(ainda que "meia boca") </span>os circuitos desligados, fazendo-os funcionar de forma imprevista, e também consumindo energia da Bateria (quando deveria economizar, já que os circuitos foram desligados com essa intenção).</span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Como disse antes, num post seguinte (pois este ficou muito grande), irei colocar alguns pontos importantes sobre o <em><strong>Sensor de Pressão</strong></em> e sobre como vc está usando os dados relacionados no seu código.</span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Abrçs,</span></p>
<p><span style="font-size: 12pt;"> Elcids</span></p> Olá Elcids,
Desculpe pela de…tag:labdegaragem.com,2022-02-07:6223006:Comment:8806952022-02-07T19:59:04.876ZJosé Leonardohttps://labdegaragem.com/profile/JoseLeonardo
<p><span style="font-weight: 400; font-size: 12pt;">Olá Elcids,</span></p>
<p></p>
<p><span style="font-weight: 400; font-size: 12pt;">Desculpe pela demora!</span></p>
<p></p>
<p><span style="font-weight: 400; font-size: 12pt;">Acho que essa parte da taxa de amostragem ficou bem clara, então o ADS1115 só irá realizar uma amostra quando eu solicitar e ela faz isso através da função “readADC_SingleEnded ” e a função “setDataRate” define apenas o tempo que vai demorar pro ADS1115 realizar a…</span></p>
<p><span style="font-weight: 400; font-size: 12pt;">Olá Elcids,</span></p>
<p></p>
<p><span style="font-weight: 400; font-size: 12pt;">Desculpe pela demora!</span></p>
<p></p>
<p><span style="font-weight: 400; font-size: 12pt;">Acho que essa parte da taxa de amostragem ficou bem clara, então o ADS1115 só irá realizar uma amostra quando eu solicitar e ela faz isso através da função “readADC_SingleEnded ” e a função “setDataRate” define apenas o tempo que vai demorar pro ADS1115 realizar a leitura certo ?</span></p>
<p><br/><br/></p>
<p><span style="font-weight: 400; font-size: 12pt;">3) OK</span></p>
<p></p>
<p><span style="font-weight: 400; font-size: 12pt;">4) Abaixo está o circuito que estou usando, estou alimentando o sensor e o arduino com uma fonte de 12V.</span></p>
<p></p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/10079214657?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/10079214657?profile=RESIZE_710x" class="align-full" width="1327" height="757"/></a></p>
<p></p>
<p><span style="font-weight: 400; font-size: 12pt;">5) Sim tenho um protótipo faltando apenas acrescentar o Filtro que você mencionou anteriormente e os LED’s de sinalização.</span></p>
<p></p>
<p><span style="font-weight: 400; font-size: 12pt;">Tentei pesquisar pra ver se conseguia identificar o problema de aumentar demais o valor do Capacitor Eletrolítico C2 no circuito que você postou e cheguei em alguns estudos sobre Capacitância de Junção e difusão seria esse o problema ?</span></p>
<p></p>
<p><span style="font-size: 16px;">Agradeço a explicação e aguardo seu retorno.</span></p> olá J. Leonardo.
Vamos…tag:labdegaragem.com,2022-02-03:6223006:Comment:8805762022-02-03T19:55:17.680ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">olá J. Leonardo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Vamos a cada um dos pontos:</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <strong><em>1)</em></strong> o tal "desligamento", é automático, se o modo <em><strong>"single-shot"</strong></em> estiver programado no <strong><em>ADS1115</em></strong>. Mas vc não precisa se preocupar com isso, pois a <strong><em>Biblioteca</em> </strong>que vc está usando sempre seleciona o…</span></p>
<p><span style="font-size: 12pt;">olá J. Leonardo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Vamos a cada um dos pontos:</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <strong><em>1)</em></strong> o tal "desligamento", é automático, se o modo <em><strong>"single-shot"</strong></em> estiver programado no <strong><em>ADS1115</em></strong>. Mas vc não precisa se preocupar com isso, pois a <strong><em>Biblioteca</em> </strong>que vc está usando sempre seleciona o modo <em><strong>"single-shot"</strong></em>. Neste modo, não é o ADS1115 que determina a "real" <em><strong>Taxa de Amostragem</strong></em>, mas sim vc mesmo. Ou seja, quando vc requisita uma conversão, o ADS1115 inicia esta conversão imediatamente e após terminar a mesma ele apenas fica aguardando (ou seja, ele faz apenas aquela conversão que vc requisitou). Assim as conversões ocorrerão na Taxa que vc as requisitar.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Mas é importante entender uma coisa: o tempo que o ADS1115 leva para completar uma conversão solicitada, depende da <strong><em>Taxa de Amostragem</em></strong> que vc programou nele. Assim se por exemplo vc programou 860 Samples/seg, então o ADS levará cerca de 1.2 ms pra fazer a conversão completa. Por que isso é importante? porque quando vc requisita uma conversão e em seguida lê o valor convertido via função <span style="font-size: 10pt;"><em><strong>"readADC_SingleEnded"</strong></em></span>, esta função só retorna quando o ADS tiver concluído a conversão solicitada. Então se por exemplo vc programou no ADS1115 uma taxa de 8 Samples/seg (via função <span style="font-size: 10pt;"><em><strong>"setDataRate"</strong></em></span> com o valor <span style="font-size: 10pt;"><strong><em>"RATE_ADS1115_8SPS"</em></strong></span>), o ADS levará <strong>125 ms</strong> (1/8 de segundo) para concluir uma conversão solicitada. Assim, vc fica "preso" a essa temporização, e o efeito disso é como se seu código executasse mais lentamente, pois nenhuma outra coisa será executada até que o ADS tenha "liberado" a conversão.</span></p>
<p><span style="font-size: 12pt;"> Logo, no modo <strong>"single-shot"</strong>, é interessante programar a taxa de 860 Samples/seg, pois o ADS levará apenas 1.2 ms pra converter e também já irá liberar seu código pra ler o resultado e executar outras coisas.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Mas há uma outra implicação muito importante caso vc use Taxas muito baixas, pois como o ADS1115 não possui <strong><em>"Sample & Hold"</em></strong> interno (não confundir com os <em>"Capacitores chaveados"</em> dentro do ADS1115), há a possibilidade de que ocorra um problema. Suponha que vc programe no ADS1115 uma taxa muito baixa, por exemplo de 8 Samples/seg, e que vc esteja usando mais de um canal no ADS, e que os sinais aplicados nestes canais tenham relação entre si. Agora suponha que vc vá fazer a conversão de dois canais relacionados entre si. Então vc faz a conversão do primeiro canal e em seguida faz a conversão do segundo canal. Com os dois valores convertidos, vc pode fazer os cálculos que relacionam os dois canais. Mas aí poderá ocorrer um problema: quando vc concluiu a conversão e leu o resultado do primeiro canal, <span>como a conversão é bem lenta (125ms), o segundo canal já poderá ter mudado de valor, e assim quando vc fizer a conversão deste segundo canal, o valor resultante já não corresponderá ao valor relacionado ao primeiro canal no momento da conversão do mesmo. Ou seja, vc acaba introduzindo um "deslocamento de fase artificial", e provavelmente seus cálculos resultarão em algo que vc não espera como correto. Assim, usar Taxas mais altas para o ADS1115, evita esse problema.</span></span></p>
<p><span style="font-size: 12pt;"><span> Outro problema com Taxas muito baixas no ADS1115, é que durante a lenta conversão (<span style="font-size: 10pt;">exemplo 125ms @ 8 Samples/seg</span>), o próprio sinal sendo atualmente convertido pode mudar, e aí a conversão deste sinal ficará comprometida.</span></span></p>
<p></p>
<p><span style="font-size: 12pt;"><span> Sobre o <em>modo de operação</em> do ADS1115, vc pode conferir a descrição completa no item <em><strong>"9.4"</strong></em> na <strong><em>página 21</em></strong> do <em>Datasheet, </em>aqui neste Link: <span style="font-size: 10pt;"><strong><em><a href="https://storage.ning.com/topology/rest/1.0/file/get/10069164091?profile=original" target="_blank" rel="noopener">"<span style="text-decoration: underline;">ADS1115 - datasheet.pdf</span>"</a></em></strong></span></span></span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"><span> <strong><em>2)</em></strong> Ok. Ficou claro.</span></span></p>
<p></p>
<p><span style="font-size: 12pt;"> <em><strong>3)</strong></em> não é preciso incluir a Biblioteca <strong><em>"wire.h"</em></strong>, pois a LIB do ADS1115 já faz isso (a LIB do Display LCD também já faz isso).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <strong><em>4)</em></strong> seu código "novo" ainda tem os mesmos problemas que descrevi. Mas a partir dele, eu fiz uma adequação a fim de "corrigir" estes problemas. Eu postarei o código aqui, logo depois que vc esclarecer algumas <em>dúvidas de Hardware</em> relativas aos sinais que vc está medindo (pois assim posso ajustar qualquer ponto relacionado).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <strong><em>5)</em></strong> ok, eu imaginava mesmo que era o UNO que vc estava usando. Mas aí, vc está "comendo bola" em um aspecto que não mencionarei neste momento (porque vc já está com todo seu setup de Hardware montado).</span></p>
<p></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Sobre vc ter alimentado com <strong>3.3V</strong> e essa ter sido a causa do problema, note que no final do meu post anterior eu adverti pra garantir que o ADS estivesse alimentado com <strong>5V</strong>, devido às faixas de sinal que vc está convertendo (atenção também à questão do <strong>Ganho</strong>, pra evitar saturação de sinal na saída do PGA interno ao ADS1115). Dê uma olhada no item <em><strong>"9.3"</strong></em> na <strong><em>página 15</em></strong> do Datasheet, e atente à descrição no texto e à <em><strong>figura 25</strong></em>, e então vc vai entender exatamente o que ocorreu. Mas eu não considerei que no seu teste vc tivesse alimentado com 3.3V, pois realmente achei que seu circuito estava alimentado corretamente (embora eu sempre faça a advertência como de rotina). Mas nunca ignore a questão da <strong><em>"Injeção de Carga"</em></strong>, pois como eu disse antes, ela sempre ocorre.</span></p>
<p><span style="font-size: 12pt;"> Uma dica: lembra-se sobre não aumentar demais o valor do Capacitor Eletrolítico <strong>C2</strong> no circuito que postei ? Então, isto também tem a ver com aqueles <strong><em>Diodos</em></strong> que vc vê na <strong><em>figura 25</em></strong> do Datasheet. Dê uma analisada e veja se vc descobre o motivo (não é algo muito evidente).</span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Mas eu tenho uma desconfiança que vc pode estar usando um setup de Hardware inadequado para medir os sinais, especificamente em relação à medição da <strong><em>Resistência</em></strong>. Para que eu possa verificar isso, por favor, post aqui um desenho ou diagrama mostrando os detalhes de como vc está ligando os sinais a serem convertidos pelo <em><strong>ADS1115</strong></em>. Mas faça isso de forma clara, que não deixe dúvidas de como estão as ligações elétricas.</span></p>
<p><span style="font-size: 12pt;"> Assim que vc postar essa informação da ligação detalhada dos sinais, eu postarei o código onde fiz a adequação conforme mencionei neste post.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Fico no aguardo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Abrçs,</span></p>
<p><span style="font-size: 12pt;"> Elcids</span></p> Fiz esse desenho apenas para…tag:labdegaragem.com,2022-02-02:6223006:Comment:8808182022-02-02T13:25:03.379ZJosé Leonardohttps://labdegaragem.com/profile/JoseLeonardo
<p><span style="font-size: 12pt;">Fiz esse desenho apenas para ilustrar o que estava entendendo, mas não sei se minha linha de raciocinio está correta, aguardo sua resposta para confirmar.</span></p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/10065296075?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/10065296075?profile=RESIZE_710x" class="align-full"/></a></p>
<p><span style="font-size: 12pt;">Fiz esse desenho apenas para ilustrar o que estava entendendo, mas não sei se minha linha de raciocinio está correta, aguardo sua resposta para confirmar.</span></p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/10065296075?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/10065296075?profile=RESIZE_710x" class="align-full"/></a></p> Bom dia Elcids,
1) Pelo que…tag:labdegaragem.com,2022-02-02:6223006:Comment:8805742022-02-02T13:22:35.331ZJosé Leonardohttps://labdegaragem.com/profile/JoseLeonardo
<p><span style="font-size: 12pt;">Bom dia Elcids,</span></p>
<p></p>
<p><span style="font-weight: 400; font-size: 12pt;"><strong>1)</strong> Pelo que eu entendi o ADS1115 vai estar realizando 860 medições por segundo, ou seja, ele irá realizar 1 medição a cada 1,2 ms. Então quando definir que ele deve fazer 8 medições por segundo o que leva 125 ms o ADS1115 realizará a medição em 1,2ms e passará o restante do tempo desligado.</span></p>
<p><span style="font-size: 12pt;"> …</span></p>
<p></p>
<p><span style="font-size: 12pt;">Bom dia Elcids,</span></p>
<p></p>
<p><span style="font-weight: 400; font-size: 12pt;"><strong>1)</strong> Pelo que eu entendi o ADS1115 vai estar realizando 860 medições por segundo, ou seja, ele irá realizar 1 medição a cada 1,2 ms. Então quando definir que ele deve fazer 8 medições por segundo o que leva 125 ms o ADS1115 realizará a medição em 1,2ms e passará o restante do tempo desligado.</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-weight: 400; font-size: 12pt;">Então no caso eu deveria programar esse desligamento dele certo ? isso não é feito quando chamo a função “SetDataRate” ? o que essa função faz especificamente ?</span></p>
<p></p>
<p><span style="font-size: 12pt;"><strong>2) </strong>Sim após o teste eu faço o reset e faço uma nova medição.</span></p>
<p></p>
<p><span style="font-size: 12pt;"><strong>3)</strong> Anteriormente eu havia tido um problema com a biblioteca pois não estava compilando o codigo, então dei uma pesquisada e vi em um forum que era necessario outras bibliotecas para eliminar aquele erro e foi assim que surgiram todas essas bibliotecas. Mas não estou ultizando elas e ja as removi do meu programa, abaixo está ele um pouco mais organizado e semas bibliotecas em questão.</span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/10065236095?profile=original" target="_blank" rel="noopener">Atualizado.ino</a></span></p>
<p></p>
<p><span style="font-size: 12pt;"><strong>4)</strong> Tentei dar uma melhorada no codigo pra deixar mais claro o que está sendo feito, como eu disse estou realizando a medição da resistencia de um vacuostato e ao mesmo tempo verificando a pressão de descida e subida do mesmo. Estou vendo se os contatos estão fechados ou abertos pelo valor da resistencia obtida. </span></p>
<p></p>
<p><span style="font-size: 12pt;"><strong>5)</strong> Estou ultilizando um Arduino Uno, Apenas coloquei o Esp32 no esquema por que era o microcontrolador que estava ultilizando antes, mas ele acabou queimando.</span></p>
<p></p>
<p><span style="font-size: 16px;">Referente ao experimento que você propos irei realizar assim que tiver os componentes necessarios e assim que testar eu trago aqui o resultado.</span></p>
<p></p>
<p><span style="font-size: 16px;">Acabei resolvendo o problema que estava tendo, o que estava acontecendo é que eu estava alimentando o ADS1115 com 3.3V e não com 5V.</span></p>
<p></p>
<p><span style="font-size: 16px;">Obrigado pela explicação e aguardo seu retorno.</span></p>
<p></p>
<p></p> esqueci de dizer:
no ci…tag:labdegaragem.com,2022-02-02:6223006:Comment:8806542022-02-02T04:50:14.551ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">esqueci de dizer:</span></p>
<p><span style="font-size: 12pt;"> no circuito de adequação que postei, <span>caso vc resolva fazer experiências</span>, <span style="text-decoration: underline;"><em>não aumente</em></span> o valor do <em><strong>Capacitor Eletrolítico C2</strong></em> para além de <strong>10 uF</strong> (no circuito que postei, o valor é de <strong>1uF</strong>), senão vc poderá ter surpresas desagradáveis. O motivo disso explico…</span></p>
<p><span style="font-size: 12pt;">esqueci de dizer:</span></p>
<p><span style="font-size: 12pt;"> no circuito de adequação que postei, <span>caso vc resolva fazer experiências</span>, <span style="text-decoration: underline;"><em>não aumente</em></span> o valor do <em><strong>Capacitor Eletrolítico C2</strong></em> para além de <strong>10 uF</strong> (no circuito que postei, o valor é de <strong>1uF</strong>), senão vc poderá ter surpresas desagradáveis. O motivo disso explico depois.</span></p>
<p></p> olá J. Leonardo.
Sim,…tag:labdegaragem.com,2022-02-02:6223006:Comment:8807702022-02-02T04:13:19.943ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">olá J. Leonardo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Sim, eu posso dizer por que isso ocorre, e como vc pode resolver.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Mas antes gostaria de fazer alguns comentários sobre seu Sistema, e também fazer alguns questionamentos.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> E finalmente analisei o <em><strong>código</strong></em> que vc postou aqui (o…</span></p>
<p><span style="font-size: 12pt;">olá J. Leonardo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Sim, eu posso dizer por que isso ocorre, e como vc pode resolver.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Mas antes gostaria de fazer alguns comentários sobre seu Sistema, e também fazer alguns questionamentos.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> E finalmente analisei o <em><strong>código</strong></em> que vc postou aqui (o <strong><em>"ADS1115.ino"</em></strong>), e encontrei diversos problemas nele.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Seguem considerações e questionamentos:</span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> <em><strong>1)</strong></em> no código <span style="text-decoration: underline;"><em>não há</em></span> uma <strong><em>Taxa de Amostragem</em></strong> funcional. Ou seja: vc não está fazendo as Amostragens como deveria para se obter a melhor qualidade do sinal sendo aquisitado (na realidade, lamento em dizer que a forma que vc está fazendo a amostragem naquele código, está completamente incorreta).</span></p>
<p><span style="font-size: 12pt;"> <strong><em>Obs.:</em></strong> não adianta vc simplesmente acrescentar no seu código o comando que eu informei (o <strong><em>"setDataRate"</em></strong>), porque sem entender os detalhes de como a amostragem funciona no <strong><em>ADS1115</em></strong>, não é possível obter um resultado consistente.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Para se conseguir um resultado realmente efetivo, vc deve programar a <strong><em>Taxa de Amostragem</em></strong> no <strong><em>ADS1115</em></strong>, e então escolher a forma como vc usará isto. Para o seu caso, que está medindo sinais de frequência muito baixa, eu acredito que a melhor opção é usar a técnica descrita na figura a seguir, no texto que marquei </span><span style="font-size: 12pt;">em azul:</span></p>
<p style="text-align: center;"><span style="font-size: 8pt;"><strong><em>(clique na figura para "zoom")</em></strong></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/10064199501?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/10064199501?profile=RESIZE_710x" class="align-center" width="302" height="275"/></a></span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Se vc não souber como fazer esta implementação, me avise que mostrarei como.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <strong><em>2)</em></strong> no seu código, quando um <strong><em>LED indicador de Tolerância</em></strong> é ligado, ele não mais é desligado em nenhum momento. Por que esse comportamento?</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Por acaso, vc sempre Reseta o Arduino após um teste de tolerância, para poder iniciar o próximo teste?</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <strong><em>3)</em></strong> no código, há diversas Bibliotecas que não estão sendo usadas. Vc realmente vai usá-las em algum momento?</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <strong><em>4)</em></strong> há diversos problemas de organização funcional no seu código. Algumas funções estão misturadas, e algumas tem nomes que não refletem o que realmente está sendo feito naquelas funções. Isto não é bom, principalmente se vc pretende ir evoluindo e atualizando este código.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <strong><em>5)</em></strong> um <em><strong>ESP32</strong> </em>está na imagem que vc postou das conexões no Hardware. Mas afinal, qual Placa de <strong><em>Arduino</em></strong> vc está realmente usando no Hardware?</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <strong><em>Dica</em></strong>: toda vez que vc postar questões no <strong><em>LDG</em></strong>, certifique-se de que vc disse claramente qual placa Arduino vc está usando.</span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Se vc esclarecer as questões que coloquei, eu posso alterar o seu código postado (ou outro que vc designar), de forma que realmente funcione a Amostragem, obtendo os melhores resultados possíveis, e também organizar e comentar o código de forma que ele realmente seja manuseável e faça sentido.</span></p>
<p></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Agora falando sobre seu último teste.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> O problema ali é que suas conversões estão sofrendo do efeito da <strong><em>"Injeção de Carga"</em></strong> nos <strong><em>circuitos internos do ADS1115</em></strong>, e esse efeito ocorre quando vc troca o canal no <em><strong>Multiplexador</strong></em> <em>interno</em> do Conversor (o ADS1115). <em><span style="text-decoration: underline;">Veja</span>:</em> a <strong><em>"Injeção de Carga"</em></strong> <span style="text-decoration: underline;"><em>sempre existe</em></span> em todos os <strong><em>Conversores A/D</em></strong> que tem um Multiplexador para seleção do canal a ser convertido. <em><span style="text-decoration: underline;">Mas a questão é</span>:</em> quanto desse efeito chegará até vc? Ou seja: é preciso usar a técnica correta para minimizar aquele efeito nocivo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Veja: por motivos um tanto óbvios, os <em><strong>Fabricantes de Chips</strong></em> odeiam falar nesse assunto: <em><strong>"Injeção de Carga"</strong></em> (a maioria nem toca no assunto). Então vc jamais pode esquecer disso e de usar o tratamento adequado para minimizar o efeito.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Vc não informou quais são as <em><strong>Impedâncias de Saída</strong></em> dos seus Sensores (seja o <em><strong>"Vacuostato"</strong></em>, seja o próprio <strong><em>divisor de tensão</em></strong> pois vc não informou exatamente quais são os Resistores ali usados - e é possível que vc esteja usando valores inadequados). Veja: c</span><span style="font-size: 12pt;">onhecer a faixa de valor dessas Impedâncias, é crucial para se obter bons resultados na Amostragem.</span></p>
<p><span style="font-size: 12pt;"> Mas mesmo sem ter informação dessas Impedâncias, irei postar uma adequação para seu sinal. Esta adequação é mostrada na figura a seguir:</span></p>
<p></p>
<p style="text-align: center;"><span style="font-size: 8pt;"><strong><em>(clique na figura para "zoom")</em></strong></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/10064200069?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/10064200069?profile=RESIZE_710x" class="align-center" width="525" height="443"/></a></span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> A figura é clara sobre como usar a adequação. Simplesmente seu sinal deve ser conectado ao circuito mostrado, e então a saída deste circuito vai à entrada do <em><strong>ADS1115</strong></em>. Eu calculei os valores dos componentes, baseado no fato de que vc está aquisitando sinais de baixa frequência (Pressão e derivados). <strong><em>Importante:</em></strong> no circuito, <em><strong>C1</strong></em> deve ser obrigatoriamente do tipo <strong><em>Cerâmico</em> </strong>(<span style="text-decoration: underline;"><em>não serve</em></span> o tipo <em>Poliéster Metalizado </em>!!!).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <em><span style="text-decoration: underline;">Note</span>:</em> a figura mostra o circuito para uma entrada do <strong><em>ADS1115</em></strong>. Se vc usar outras entradas, replique o mesmo circuito para cada uma dessas entradas. Se a frequência dos demais sinais for outra completamente diferente, então o circuito deve ser recalculado (ou até modificado).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Para um teste semelhante ao que vc descreveu no seu último post, aplique o circuito a <span style="text-decoration: underline;"><em>apenas uma das entradas</em></span> do ADS1115, e então aplique a tensão de <strong>3.3V</strong> à entrada deste circuito. Também aplique <strong>3.3V</strong> diretamente a outras duas entradas do ADS1115. Na quarta entrada aplique diretamente <strong>5V</strong>. Então simplesmente rode seu código para poder ver os valores convertidos.</span></p>
<p><span style="font-size: 12pt;"> <strong><em><span style="text-decoration: underline;">Muito Importante</span>:</em></strong> neste teste, a <strong><em>tensão de alimentação</em></strong> do <em><strong>ADS1115</strong> <span style="text-decoration: underline;">deve ser</span></em> de <strong>5V</strong>. Também garanta que o seu código esteja selecionando <em><strong>Ganho</strong></em> igual a <strong>1</strong> para o <strong><em>ADS1115</em></strong> (pois se o ganho for maior que "1", ocorrerá saturação no sinal dentro do ADS, comprometendo o teste e resultados).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Fico no aguardo, para poder contribuir na evolução do seu Sistema.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Abrçs,</span></p>
<p><span style="font-size: 12pt;"> Elcids</span></p>