da equação:
Equação 1
Onde:
P - Potência de RF em Watts
Vpap – Tensão pico a pico do sinal de RF em Volts
Z0 – Impedância característica em Ohms
Figura 1
Com o objetivo de detectar níveis de RF entre -45dBm (31.6nW) à -30dBm (1µW), deve ser levado em conta o fato de que diodos operando com sinais abaixo de -20dBm não seguem a lei da linearidade.
Nesta condição os diodos seguem a Lei do Quadrado (Square Law) que é uma função exponencial da tensão de saída Vo em relação a potência de entrada (P). A tensão de saída do detector deve ser estimada com base na equação . Referência [3]
Equação 2
Onde:
Vo = tensão DC de saída
K – Constante de proporcionalidade
- Coeficiente quadrático.
Glen Leinweber, referência [4] sugere dividir a curva de resposta do diodo detector em tres regiões conforme o nível de potência aplicado:
Linear acima de 20 dBm.
Transição -20 dBm a 20 dBm
Lei do quadrado abaixo de -20 dBm.
Além desta proposição sugere um limite inferior prático para este tipo de detector de -60 dBm (223,6 µV em 50 Ω)
Neste projeto considero somente a operação na região de -30 dBm, região em vermelho no gráfico abaixo.
Figura 2
Estimativa da tensão de saída, baseado na AN 986, da HP referência [3], para o diodo 5082-2824 em 2 GHz, polarizado com uma corrente de 20uA, por analogia podemos esperar algo um pouco melhor com o diodo HSMS2825, que basicamente tem menor capacitância. E o gráfico da tensão estimada de saída do HSMS 282B em 850 MHz, polarizado com uma corrente de 3 uA conforme referência [1]
Figura 3
Conforme referência [3] , pode assumir valores entre 0.8 e 2 , O valor de
(Detection Law) depende da capacitância do diodo da freqüência e resistência da carga do detector.
Figura 4
Conforme orientação contida na referencia [1] , uma maneira de anular a variação da tensão de saída com variação da temperatura, é utilizar um amplificador diferencial conforme figura.
Figura 5
O fato dos diodos serem praticamente idênticos torna o cancelamento da variação térmica efetivo, desde que mantido a mesma corrente DC de polarização (Bias) nos dois diodos, o cancelamento ocorre na subtração que acontece entre VF na entrada + e VF da entrada – do amplificador diferencial, esta variação não pode ser desprezada no projeto conforme pode ser observado na curva IfxVf .Já a variação de Rd x If acarretara em erros de linearidade, ai a correção já é um pouco mais complexa, porém pode ser feita através do uso de microcontroladores.
O circuito
Serão duas topologias analisadas a primeira com compensação térmica e a segunda sem, porém com maior sensitividade.
Escala de operação em vermelho:
Figura 6
Em acordo com estes dados foi projetado o seguinte :
São utilizados os dois diodos que fazem parte do package SOT 143, D2 Retificando o sinal de RF e D1 fornecendo a tensão do ruído térmico proporcional a temperatura e conectado a entrada + do amplificador diferencial. D1 e D2 estão polarizados com uma corrente de aproximadamente 20 uA através de R1/R3
O Amplificador diferencial utilizado é o AD 620, escolhido pela sua excelente relação custo benefício e facilidade de ser encontrado. As características técnicas determinantes são: Baixo ruído, baixo drift, alta precisão e o ganho (G) pode ser “programado” apenas com um resistor (R6) que neste caso esta calculado para um ganho aproximado de 200, para proporcionar uma tensão (Vo) de fundo de escala de 4V, quando o detector estiver sob uma potência de -30dBm. Caso seja necessário um ganho 1 basta omitir R6.
Equação 3
Onde:
K = x1000
G = Ganho
Com este circuito ai na “ bancada” espero obter uma variação de tensão (VO) entre 0.4V e 4 V, dentro da escala de -45dBm a -30dBm, na Banda L, e uma boa estabilidade com relação a variação de temperatura. Usei fonte simétrica por conveniência pois já tenho uma disponível no sistema onde este circuito será parte se houver interesse em usar este circuito com fonte simples sugiro o leitor dar uma olhada na refêrencia [2].
Figura 7
Nesta segunda concepção não há a compensação de temperatura, porém a sensitividade é o dobro da topologia anterior,o sinal de RF tem o semi ciclo positivo e negativo retificados por D1 e D2, foi incluído um ajuste de tensão de offset para ”zerar” o detector quando necessário. O valor de R6 foi dobrado afim de reduzir o ganho para manter o FS (fundo de escala) em 4 Volts. O fato de estarem dois diodos conectados na entrada de RF não altera o desempenho do circuito, observando a curva de Rd X IF,posso prever uma resistência de entrada maior do que 50K.
Certamente será a opção preferida pelos radioastronomos amadores. No caso deste ser utilizado como sensor em um nanowattímetro microcontrolado, a correção térmica e correção de linearidade poderá ser feita através de uma equação de ajuste ou tabela armazenada no firmware. Meu objetivo com este circuito é testar o limite da detecção com esta técnica.
Figura 8
Referências:
[1] Angilent Technologies.
Suface Mont RF Schottky Barrier Diodes, Technical Data
[2] Denton Bramwell, K7OWJ.
The Microwatter, june 1997, QST Magazine. Reprint ARRL Handbook 2003
[3] Hewllet Packard.
Square Law and Linear Detection, Application Note 986
[4] Glen Leinweber
Radio Astronomy Supplies Ap.6, Square Law Diode Detectors in 50 ohm Systems.
…
Adicionado por Joe Nova para RF ao 8:43 em 14 março 2011
no.cc/en/Main/ArduinoBoardUno
Vou traduzir pra voce:
Energia O Arduino Uno pode ser alimentado pela conexão USB ou por uma fonte de alimentação externa. A fonte de energia é detectada automaticamente. Fonte Externa (não-USB) de energia pode vir de um adaptador AC para DC (parede) ou bateria. O adaptador pode ser ligado ao jack da tomada de força da placa através de um plug de 2,1mm com o polo positivo no centro. Os fios da bateria podem ser inseridos nos pinos GND e Vin do conector de alimentação POWER. A placa pode operar em com um fornecimento externo de 6 a 20 volts. Se for fornecido menos de 7V, no entanto, o pino de 5V pode fornecer menos de cinco volts e a placa pode ter um funcionamento instável. Se estiver usando mais de 12V, o regulador de voltagem pode superaquecer e danificar a placa. A gama recomendada é de 7 a 12 volts. Os pinos de alimentação são como se segue:
VIN. A tensão de entrada para a placa Arduino, quando ele está usando uma fonte externa de energia (ao invés dos 5 volts a partir da conexão USB ou outra fonte de alimentação regulada). Você pode fornecer alimentação por este pino, ou, se o fornecimento de tensão através da tomada de força, acessá-lo através deste pino.
5V.Pino de saída de 5V do regulador na placa. A placa pode ser alimentado a partir da tomada de energia DC (7 - 12V), o conector USB (5V), ou o pino VIN da placa (7-12V). Fornecimento de tensão através dos pinos de 5V ou 3.3V ignora o regulador, e pode danificar sua placa. Nós não aconselhamos isso.
3V3. Uma fonte de 3,3 volt gerado pelo regulador on board. A corrente máxima é de 50 mA.
GND. Pinos de terra.
Agora voce entendeu que é possível alimentar a placa pelo VIN com tensões entre 6V e 20V?
Voce deve ter percebido que quando ligou as pilhas pelo jack o circuito não funcionou corretamente, mas quando ligou as pilhas nos pinos VIN e GND funcionou, Isto foi devido a queda de tensão de 0,7V no diodo D1. Quando o ligamos os 6V na entrada do Jack só é entregue 5,3V ao regulador.
Voce também poderia ligar o servo entre o GND e o VIN, ao invés de ligar no GND e 5V.
Abraço.…
o codigo aqui, se alguem puder me ajudar agradeço muito. Obrigado.
#include <SPI.h>#include <String.h>#include <Ethernet.h>//-------------------------------------------------------------------byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };//MAC padrão;IPAddress ip(192, 168, 1, 50);//Define o endereco IPv4(trocar final);IPAddress gateway(192, 168, 1, 1); //Define o gatewayIPAddress subnet(255, 255, 255, 0); //Define a máscara de redeEthernetServer server(80); // Porta de serviço//-------------------------------------------------------------------int AA0 = A0;//Arduino analogica A0;int AA1 = A1;//Arduino analogica A1;int AA2 = A2;//Arduino analogica A2;int AA3 = A3;//Arduino analogica A3;int AA4 = A4;//Arduino analogica A4;//-------------------------------------------------------------------int D2 = 2;//Arduino digital D2;int D3 = 3;//Arduino digital D3;int D4 = 4;//Arduino digital D4;int D5 = 5;//Arduino digital D5;int D6 = 6;//Arduino digital D6;//-------------------------------------------------------------------String readString = String(30); // string para buscar dados de endereçoboolean statusA0 = false; // Variável para o status do led boolean statusA1 = false; // Variável para o status do led boolean statusA2 = false; // Variável para o status do led boolean statusA3 = false; // Variável para o status do led boolean statusA4 = false; // Variável para o status do led boolean statusD2 = false; // Variável para o status do led boolean statusD3 = false; // Variável para o status do led boolean statusD4 = false; // Variável para o status do led boolean statusD5 = false; // Variável para o status do led boolean statusD6 = false; // Variável para o status do led //--------------------------------------------------------------------void setup(){ // Inicia o Ethernet //Ethernet.begin(mac, ip); Ethernet.begin(mac, ip, gateway, subnet); server.begin();//-----------------------Define pino como saída----------------------- pinMode(AA0, OUTPUT); pinMode(AA1, OUTPUT); pinMode(AA2, OUTPUT); pinMode(AA3, OUTPUT); pinMode(AA4, OUTPUT); pinMode(D2, OUTPUT); pinMode(D3, OUTPUT); pinMode(D4, OUTPUT); pinMode(D5, OUTPUT); pinMode(D6, OUTPUT);//--------------------------------------------------------------------- // Inicia a comunicação Serial Serial.begin(9600); }void loop(){ // Criar uma conexão de cliente EthernetClient client = server.available(); if (client) { while (client.connected()) { if (client.available()) { char c = client.read(); // ler caractere por caractere vindo do HTTP if (readString.length() < 30) { // armazena os caracteres para string readString += (c); } //se o pedido HTTP terminou if (c == '\n') {//------------------------------------------------------------------ if(readString.indexOf("a0high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(AA0, HIGH);//Arduino porta digital D2=5V; statusA0 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("a0low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(AA0, LOW);//Arduino porta digital D2=0V; statusA0 = false; }//------------------------------------------------------------------ if(readString.indexOf("a1high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(AA1, HIGH);//Arduino porta digital D2=5V; statusA1 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("a1low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(AA1, LOW);//Arduino porta digital D2=0V; statusA1 = false; }//------------------------------------------------------------------ if(readString.indexOf("a2high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(AA2, HIGH);//Arduino porta digital D2=5V; statusA2 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("a2low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(AA2, LOW);//Arduino porta digital D2=0V; statusA2 = false; }//------------------------------------------------------------------ if(readString.indexOf("a3high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(AA3, HIGH);//Arduino porta digital D2=5V; statusA3 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("a3low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(AA3, LOW);//Arduino porta digital D2=0V; statusA3 = false; }//------------------------------------------------------------------ if(readString.indexOf("a4high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(AA4, HIGH);//Arduino porta digital D2=5V; statusA4 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("a4low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(AA4, LOW);//Arduino porta digital D2=0V; statusA4 = false; }//------------------------------------------------------------------ if(readString.indexOf("d2high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(D2, HIGH);//Arduino porta digital D2=5V; statusD2 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("d2low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(D2, LOW);//Arduino porta digital D2=0V; statusD2 = false; }//------------------------------------------------------------------ if(readString.indexOf("d3high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(D3, HIGH);//Arduino porta digital D2=5V; statusD3 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("d3low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(D3, LOW);//Arduino porta digital D2=0V; statusD3 = false; }//------------------------------------------------------------------ if(readString.indexOf("d4high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(D4, HIGH);//Arduino porta digital D2=5V; statusD4 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("d4low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(D4, LOW);//Arduino porta digital D2=0V; statusD4 = false; }//------------------------------------------------------------------ if(readString.indexOf("d5high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(D5, HIGH);//Arduino porta digital D2=5V; statusD5 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("d5low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(D5, LOW);//Arduino porta digital D2=0V; statusD5 = false; }//------------------------------------------------------------------ if(readString.indexOf("d6high")>=0)//Recebido do Android; { // O Led vai ser ligado digitalWrite(D6, HIGH);//Arduino porta digital D2=5V; statusD6 = true; } // Se a string possui o texto L=Desligar if(readString.indexOf("d6low")>=0)//Recebido do Android; { // O Led vai ser desligado digitalWrite(D6, LOW);//Arduino porta digital D2=0V; statusD6 = false; } //------------------------------------------------------------------ // dados HTML de saída começando com cabeçalho padrão client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); client.print("<font size='20'>");//------------------------------------------------------------------ if (statusA0) { client.print("azeroon");//Ethernet envia para Android; //String apenas letras; } else { client.print("azerooff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusA1) { client.print("aoneon");//Ethernet envia para Android; //String apenas letras; } else { client.print("aoneoff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusA2) { client.print("atwoon");//Ethernet envia para Android; //String apenas letras; } else { client.print("atwooff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusA3) { client.print("athreeon");//Ethernet envia para Android; //String apenas letras; } else { client.print("athreeoff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusA4) { client.print("afouron");//Ethernet envia para Android; //String apenas letras; } else { client.print("afouroff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusD2) { client.print("dtwoon");//Ethernet envia para Android; //String apenas letras; } else { client.print("dtwooff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusD3) { client.print("dthreeon");//Ethernet envia para Android; //String apenas letras; } else { client.print("dthreeoff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusD4) { client.print("dfouron");//Ethernet envia para Android; //String apenas letras; } else { client.print("dfouroff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusD5) { client.print("dfiveon");//Ethernet envia para Android; //String apenas letras; } else { client.print("dfiveoff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ if (statusD6) { client.print("dsixon");//Ethernet envia para Android; //String apenas letras; } else { client.print("dsixoff");//Ethernet envia string para Android; //String apenas letras; }//------------------------------------------------------------------ //limpa string para a próxima leitura readString=""; // parar cliente client.stop(); } } } }}//--------------------------------------------------------------------------------------------------------//…
=7;
int led4=6;
int buzzer=10;
Tone player;
int note[]={NOTE_A3,NOTE_G4};
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// set up the LCD's number of columns and rows:
Serial.begin(9600);
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("Lab de Garagem");
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(buzzer,OUTPUT);
player.begin(10);
}
void loop() {
int reading = analogRead(sensorPin);
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
float voltage = (reading) * 5.0;
voltage /= 1024.0;
// print out the voltage
Serial.print(voltage); Serial.println(" volts");
// now print out the temperature
float temperatureC = (voltage - 0.5) * 10 ; //converting from 10 mv per degree wit 500 mV offset
//to degrees ((volatge - 500mV) times 100)
Serial.print(temperatureC);
Serial.println(" degrees C");
lcd.print(temperatureC);
lcd.print(" Celsius");
// now convert to Fahrenheight
float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;
Serial.print(temperatureF); Serial.println(" degrees F");
if(temperatureC<25)
{
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
}
if((temperatureC>=25) && (temperatureC<30))
{
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
}
if((temperatureC>=30) )
{
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,HIGH);
player.play(note[0]);
delay(200);
player.play(note[1]);
delay(200);
player.stop();
}
delay(500);
}
e está dando erro. Poderiam me ajudar?…
e usar uma ferramenta do yahoo chamada YQL (yahoo Query linguage) que me devolve um json bastante complexo que contem json com arrays de json, tentei fazer com a própria biblioteca que o yahoo mostra em sua documentação <aJSON.h> porem a mesma não oferece em sua documentação como usar arrays de json, a mesma trata apenas de como usar arrays, também tentei a biblioteca encontrada disponível para baixar na própria IDE <ArduinoJson.h> novamente sem sucesso. vou disponibilizar o json devolvido aqui para terem ideia, a parte que preciso extrair é: query.results.quote[x].LastTradePriceOnly.
{
"query":{
"count":4,
"created":"2017-05-11T18:57:34Z",
"lang":"en-US",
"diagnostics":{},
"results":{
"quote":[
{
"symbol":"YHOO",
"AverageDailyVolume":"6696420",
"Change":"+0.12",
"DaysLow":"49.14",
"DaysHigh":"49.56",
"YearLow":"35.05",
"YearHigh":"49.67",
"MarketCapitalization":"47.70B",
"LastTradePriceOnly":"49.52",
"DaysRange":"49.14 - 49.56",
"Name":"Yahoo! Inc.",
"Symbol":"YHOO",
"Volume":"2072218",
"StockExchange":"NMS"
},
{
"symbol":"AAPL",
"AverageDailyVolume":"24352100",
"Change":"-0.805",
"DaysLow":"152.310",
"DaysHigh":"153.560",
"YearLow":"89.470",
"YearHigh":"154.880",
"MarketCapitalization":"794.88B",
"LastTradePriceOnly":"152.455",
"DaysRange":"152.310 - 153.560",
"Name":"Apple Inc.",
"Symbol":"AAPL",
"Volume":"10439447",
"StockExchange":"NMS"
},
{
"symbol":"GOOG",
"AverageDailyVolume":"1419470",
"Change":"-3.04",
"DaysLow":"923.03",
"DaysHigh":"927.76",
"YearLow":"663.28",
"YearHigh":"937.50",
"MarketCapitalization":"640.38B",
"LastTradePriceOnly":"925.74",
"DaysRange":"923.03 - 927.76",
"Name":"Alphabet Inc.",
"Symbol":"GOOG",
"Volume":"254352",
"StockExchange":"NMS"
},
{
"symbol":"MSFT",
"AverageDailyVolume":"21854700",
"Change":"-1.035",
"DaysLow":"68.120",
"DaysHigh":"68.730",
"YearLow":"48.035",
"YearHigh":"69.710",
"MarketCapitalization":"527.12B",
"LastTradePriceOnly":"68.275",
"DaysRange":"68.120 - 68.730",
"Name":"Microsoft Corporation",
"Symbol":"MSFT",
"Volume":"555345",
"StockExchange":"NMS"
}
]
}
}
}
se eu pedir apenas resultado de uma ação o seguinte código funciona porem quando coloco arrays de json não funciona.
char* parseJson(char *jsonString) { char* value; aJsonObject* root = aJson.parse(jsonString);
if (root != NULL) { Serial.println("Parsed successfully 1 " ); aJsonObject* query = aJson.getObjectItem(root, "query");
if (query != NULL) { Serial.println("Parsed successfully 2 " ); aJsonObject* results = aJson.getObjectItem(query, "results");
if (results != NULL) { Serial.println("Parsed successfully 3 " ); aJsonObject* item = aJson.getObjectItem(results, "quote"); aJsonObject* acao = aJson.getObjectItem(item, "LastTradePriceOnly"); Serial.println("Parsed successfully 4 " ); Serial.println(acao->valuestring); // if (title != NULL) { //Serial.println("Parsed successfully 5 " ); // value = title->valuestring; // } } } }…
// Piezo no pino 8const int ldrPin = 0; // LDR no pino analógico 0const int ledPin = 3; // LED no pino digital 3const int LDR = 0;int ValorLido = 0;int ldrValue = 0; // Valor lido do LDRconst int freq = 5; // altera frequencia do sonorizadorvoid setup() {pinMode(ledPin, OUTPUT);pinMode(buzzerPin, OUTPUT);Serial.begin(9600);}void loop() {ValorLido = analogRead(LDR);Serial.print("Valor lido pelo LDR = ");Serial.println(ValorLido);delay(500);ldrValue = analogRead(ldrPin); // lê o valor do LDRtone(buzzerPin,1000); // toca um tom de 1000 Hz do piezodigitalWrite(ledPin, HIGH);delay(25); // espera um pouconoTone(buzzerPin); // interrompe o tomdigitalWrite(ledPin, LOW);delay(ldrValue/freq);if (ldrPin >= 1017) {digitalWrite (ledPin, LOW);digitalWrite (buzzerPin, LOW);
}}
eu consigo fazer ele bipar com a luz acesa porem quando ela se apaga não consigo fazer parar de bipar.
meu monitor da luminosidade acusa:
acesa: 955
apagada: 1017
abraços garagistas…
Adicionado por Pablo Joenck ao 23:06 em 30 maio 2018
.
E finalmente analisei o código que vc postou aqui (o "ADS1115.ino"), e encontrei diversos problemas nele.
Seguem considerações e questionamentos:
1) no código não há uma Taxa de Amostragem 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).
Obs.: não adianta vc simplesmente acrescentar no seu código o comando que eu informei (o "setDataRate"), porque sem entender os detalhes de como a amostragem funciona no ADS1115, não é possível obter um resultado consistente.
Para se conseguir um resultado realmente efetivo, vc deve programar a Taxa de Amostragem no ADS1115, 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 em azul:
(clique na figura para "zoom")
Se vc não souber como fazer esta implementação, me avise que mostrarei como.
2) no seu código, quando um LED indicador de Tolerância é ligado, ele não mais é desligado em nenhum momento. Por que esse comportamento?
Por acaso, vc sempre Reseta o Arduino após um teste de tolerância, para poder iniciar o próximo teste?
3) no código, há diversas Bibliotecas que não estão sendo usadas. Vc realmente vai usá-las em algum momento?
4) 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.
5) um ESP32 está na imagem que vc postou das conexões no Hardware. Mas afinal, qual Placa de Arduino vc está realmente usando no Hardware?
Dica: toda vez que vc postar questões no LDG, certifique-se de que vc disse claramente qual placa Arduino vc está usando.
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.
Agora falando sobre seu último teste.
O problema ali é que suas conversões estão sofrendo do efeito da "Injeção de Carga" nos circuitos internos do ADS1115, e esse efeito ocorre quando vc troca o canal no Multiplexador interno do Conversor (o ADS1115). Veja: a "Injeção de Carga" sempre existe em todos os Conversores A/D que tem um Multiplexador para seleção do canal a ser convertido. Mas a questão é: quanto desse efeito chegará até vc? Ou seja: é preciso usar a técnica correta para minimizar aquele efeito nocivo.
Veja: por motivos um tanto óbvios, os Fabricantes de Chips odeiam falar nesse assunto: "Injeção de Carga" (a maioria nem toca no assunto). Então vc jamais pode esquecer disso e de usar o tratamento adequado para minimizar o efeito.
Vc não informou quais são as Impedâncias de Saída dos seus Sensores (seja o "Vacuostato", seja o próprio divisor de tensão pois vc não informou exatamente quais são os Resistores ali usados - e é possível que vc esteja usando valores inadequados). Veja: conhecer a faixa de valor dessas Impedâncias, é crucial para se obter bons resultados na Amostragem.
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:
(clique na figura para "zoom")
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 ADS1115. Eu calculei os valores dos componentes, baseado no fato de que vc está aquisitando sinais de baixa frequência (Pressão e derivados). Importante: no circuito, C1 deve ser obrigatoriamente do tipo Cerâmico (não serve o tipo Poliéster Metalizado !!!).
Note: a figura mostra o circuito para uma entrada do ADS1115. 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).
Para um teste semelhante ao que vc descreveu no seu último post, aplique o circuito a apenas uma das entradas do ADS1115, e então aplique a tensão de 3.3V à entrada deste circuito. Também aplique 3.3V diretamente a outras duas entradas do ADS1115. Na quarta entrada aplique diretamente 5V. Então simplesmente rode seu código para poder ver os valores convertidos.
Muito Importante: neste teste, a tensão de alimentação do ADS1115 deve ser de 5V. Também garanta que o seu código esteja selecionando Ganho igual a 1 para o ADS1115 (pois se o ganho for maior que "1", ocorrerá saturação no sinal dentro do ADS, comprometendo o teste e resultados).
Fico no aguardo, para poder contribuir na evolução do seu Sistema.
Abrçs,
Elcids…
Adicionado por Elcids Chagas ao 1:13 em 2 fevereiro 2022