Hola
Quiero con un ADS1115 medir 2 cosas, pinza SCT013 y pinza WCS1800.
Necesito cambiar el modo de medición, de diferencial a entrada simple.
Usando la libreria de adafruit #include <Adafruit_ADS1X15.h>
Alguna idea de como reconfigurar tras el .begin?
Saludos
Busca ADS1115 modo simple y modo diferencial, hay muchos tutoriales al respecto.
Hola
Completo el tutorial q mandaste.
He visto unos cuantos, pero ninguno q hable de usar 2 pines para medir un diferencial y los otros dos como modo simple, cambiando la configuración.
Porque
The ADS1115 features an input multiplexer (MUX) that allows two differential or four single-ended input measurements.
Fuente: Hoja de datos del ADS1115.
O sea
El ADS1115 cuenta con un multiplexor de entrada (MUX) que permite realizar dos mediciones de entrada diferencial o cuatro de un solo extremo.
La clave es la letra "O", es exclusiva no inclusiva.
En resumen, trabaja de un modo o del otro pero no ambos a la vez.
Por eso hay q reprogramarlo para cambiar de modo de medición
He juntado los dos modos y va midiendo de los dos modos.
En diferencial tengo pinza ac SCT013 y en single, sensor DC WCS1800
#include <Wire.h>
#include <Adafruit_ADS1X15.h>
// Crear objeto de la clase
Adafruit_ADS1115 ads;
float factorEscalaDiferencial = 0.1875F;
void setup(void)
{ Serial.begin(9600);
delay(200);
// Iniciar el ADS1115
ads.begin();
}
void loop(void)
{ LeerSingle();
LeerDiferencial();
delay(1000);}
void LeerSingle()
{ // Obtener datos del A0 del ADS1115
short adc3 = ads.readADC_SingleEnded(3);
Serial.print("LeerSingle A3: ");
Serial.println(adc3);
delay(100);
ads.begin();}
void LeerDiferencial()
{ ads.setGain(GAIN_TWOTHIRDS);
delay(100);
ads.begin();
short diferencia_0_1 = ads.readADC_Differential_0_1();
// Convertir en voltios
float voltios = (diferencia_0_1 * factorEscalaDiferencial)/1000.0;
Serial.print("Diferencia 0-1 = ");
Serial.print(diferencia_0_1);
Serial.print(" Voltage = ");
Serial.println(voltios,4);
Serial.println();}
Serial:
LeerSingle A3: 13374
Diferencia 0-1 = -3 Voltage = -0.0006
Sigo trabajando el código...
Funcionando:
#include <Wire.h>
#include <Adafruit_ADS1X15.h>
// Crear objeto de la clase
Adafruit_ADS1115 ads;
const float factorMultiplierSingle = 0.125; //GAIN_ONE 4,096V 0,1250mV
const float FACTOR = 20; //20A/1V pinza SCT013
const float multiplier = 0.091F; //ajustando con tester, original: 0.0625F;
//const float factorEscalaDiferencial = 0.1875F;
void setup(void)
{ Serial.begin(9600);delay(200);
ads.begin();}
void loop(void)
{ LeerDiferencial();
LeerSingle();
Serial.println("");
delay(1000);}
void LeerSingle()
{ ads.setGain(GAIN_ONE); // +/- 4.096V 1 bit = 0.125mV
//ads.begin();
delay(50);
int16_t adc3 = ads.readADC_SingleEnded(3);Serial.print("adc3 DC: "); Serial.print(adc3);
double AmpDC = ((double)adc3 - 20000 ) * factorMultiplierSingle; //20000 adc Medición sin carga, 0.125mv por cada adc
Serial.print(" AmpDC: ");Serial.print(AmpDC/66);//Serial.print("AIN3: "); Serial.println(adc3 * multiplierSingle);
Serial.println("A");
delay(100);}
void LeerDiferencial()
{ ads.setGain(GAIN_TWO); // ±2.048V 1 bit = 0.0625mV
delay(50);
float voltage, corriente;
float sum = 0;
long tiempo = millis();
int counter = 0;
while (millis() - tiempo < 1000)
{ voltage = ads.readADC_Differential_0_1() * multiplier;
corriente = voltage * FACTOR;
corriente /= 1000.0;
sum += sq(corriente);
counter = counter + 1;}
corriente = sqrt(sum / counter);
float power = 230 * corriente; //230V
float floatCurrentRMS = ((int)(corriente*100))/100.0; //2 decimales
Serial.print("Corriente220V: "); Serial.print(floatCurrentRMS);
/* int intParte = (int)(currentRMS * 100);
float numRedondeado = (float)intParte / 100.0;
Serial.println(numRedondeado); // Imprime 3.14*/
//Serial.print("-Potencia: ");Serial.println(power); // 2 decimales
//Serial.print("-Potencia: ");Serial.println((int)power); //sin decimales
int intPotencia=(int)power; Serial.print("A Potencia220V: "); Serial.print(intPotencia);
Serial.println("W");
delay(100);}
Corriente220V: 2.26A Potencia220V: 520W
adc3 DC: 20589 AmpDC: 1.12A
Solo es un comentario el que sigue a continuación:
Has visto el dispositivo TUYA que mide potencia?
Tensión, corriente, Energía y sus históricos. Sencillamente excelente, el problema es que lo usas con la App TUYA y si quieres usar otra cosa solo con Python con el SDK de TUYA probé Con Arduino no pude hasta ahora.
Hay otros similares.