Medir dos voltajes en un RC

Hola buen día, estoy trabajando con el código que figura en el tutorial (https://www.arduino.cc/en/Tutorial/Foundations/CapacitanceMeter) para medir la carga y descarga en un capacitor.
El código está apenas modificado, principalmente unas variables, mi duda está en que quisiera medir también el voltaje en la resistencia que permite la carga del capacitor. El voltaje en el capacitor lo mido sin problemas, pero no logro entender cómo poder añadir la lectura de la caída en la resistencia, de forma de poder ver que la suma de ambas resulte de 5V.

Intenté conectarlo luego de la resistencia al A5 y en el código agregarle esa variable donde va a leer, pero obtengo siempre los mismo valores en el capacitor como en la resistencia. El código modificado quedó:

#define cargar 13   
#define descargar 11    // descarga auxiliar
#define mideC 0 
#define mideR 5 // añadido para probar si mide el voltaje en R

unsigned long t0;   // tiempo inicio lecturas
unsigned int valorsensor;
float lecturaR;

void setup () {
  pinMode(cargar, OUTPUT );    // pin de carga  
  pinMode(descargar, OUTPUT ); // pin de descarga auxiliar
  pinMode(mideR, INPUT);
  Serial.begin(9600);          // envio dato serial
}

void loop(){
  /* Descarga capacitor */ 
  digitalWrite(cargar, LOW );
  pinMode(descargar, OUTPUT );               
  digitalWrite(descargar, LOW );
          

  t0 = micros ();                 // tiempo inicial
  valorsensor = analogRead(mideC);
  while (valorsensor> 0) {
    Serial.print ( micros ()-t0); // tiempo transcurrido 
//    Serial.print (( micros ()-t0)*1e-6); // tiempo transcurrido 
    Serial.print ( "," );
    Serial.print (valorsensor*5.0/1023.0);
    Serial.print ( "," );
    Serial.println (lecturaR*5.0/1023.0);
//    Serial.println (valorsensor*5.0/1023.0);
    valorsensor = analogRead(mideC);
    lecturaR = analogRead(mideR);
  }
  
  /* carga capacitor */ 
  digitalWrite (cargar, HIGH ); 
  pinMode(descargar, INPUT );    // pin auxiliar con alta impedancia
  t0 = micros ();                 // tiempo inicial 
  valorsensor = analogRead (mideC); 
  while (valorsensor <1016) {         // valor maximo de carga de 1024 
    Serial.print ( micros ()-t0); // tiempo transcurrido 
//    Serial.print (( micros ()-t0)*1e-6); // tiempo transcurrido 
    Serial.print ( "," );
    Serial.print (valorsensor*5.0/1023.0);
    Serial.print ( "," );
    Serial.print (lecturaR*5.0/1023.0);
    Serial.print ( "," );
    Serial.println ((valorsensor+lecturaR)*5.0/1023.0);
    valorsensor = analogRead (mideC);
    lecturaR = analogRead(mideR);
  }
}

Saludos y gracias!

arduino-py_bb.pdf (566 KB)

Moderador
Por favor edita tu enlace usando etiquetas.
Normas del foro

Hola darioslc,

Las entradas analógicas 0 y 5 miden lo mismo porque en tu curcuíto están conectadas al mismo punto. Debes conectar la entrada analógica 5 al pin 13 (así medirás la tensión de carga directamente antes de la caída de potencial de la resistencia).

Si tienes cualquier duda más estamos para ayudarte!

Hola villab85, gracias por responder.
Modifiqué las conexiones quedando de la manera adjuntada (el cable blanco mediría el voltaje en R), en base a lo que comentas, y sigo obteniendo los mismos valores de voltaje C y en R de carga. Lo cual no sé si interpreté bien tu comentario o estoy haciendo algo mal en el código, básicamente conecté el borne de la resistencia (que debería estar a menor voltaje que el otro) al A5 para así obtener el voltaje. En sí el funcionamiento está bien, pero quisiera tener el voltaje medido en R para comparar con lo teórico a manera didáctica, sería ideal también obtener la corriente pero es otro cantar.
(EDICIÓN: C = 2200 uF, no 1 uF como figura en el esquema)
El código tiene pocas modificaciones a las mostradas antes, el Monitor Serial por ejemplo arroja lo siguiente en la carga:
tiempo V_C V_R V_C+V_R (que debería sumar siempre 5 V)
7.26 s CARGA,1.33 V, 1.33 V, 2.67
7.30 s CARGA,1.34 V, 1.34 V, 2.68
7.34 s CARGA,1.35 V, 1.35 V, 2.70
7.38 s CARGA,1.35 V, 1.35 V, 2.71
7.41 s CARGA,1.36 V, 1.36 V, 2.72

/* carga y descarga de un capacitor, 
 * Para el ejercicio C= 22 microf, Rcarga=10 kOhm, Rdescarga= 5 kOhm
*/

// Pines usados
#define cargar 13   
#define descargar 11    // descarga auxiliar
#define mideC 0 
#define mideRf 5

unsigned long t0;   // tiempo inicio lecturas
unsigned int valorsensor;
float lecturaRf = 0;

float k = 5.0/1023;

void setup () {
  pinMode(cargar, OUTPUT );    // pin de carga  
  pinMode(descargar, OUTPUT ); // pin de descarga auxiliar
  pinMode(mideRf, INPUT);
  Serial.begin(9600);          // envio dato serial
}

void loop(){
  /* Descarga capacitor */ 
  digitalWrite(cargar, LOW );
  pinMode(descargar, OUTPUT );               
  digitalWrite(descargar, LOW );
  
          

  t0 = micros ();                 // tiempo inicial
  valorsensor = analogRead(mideC);
  lecturaRf = analogRead(mideRf);
  while (valorsensor> 0) {
    //Serial.print ( micros ()-t0); // tiempo transcurrido 
//    Serial.print (( micros ()-t0)*1e-6); // tiempo transcurrido 
    //Serial.print ( "\t" );
    //Serial.println (valorsensor);
    //valorsensor = analogRead(mideC);
    Serial.print (( micros ()-t0)*1e-6); Serial.print ( " s descarga," ); // tiempo transcurrido
    Serial.print (valorsensor*k);Serial.print ( " V, " );Serial.print (lecturaRf*k);Serial.print ( " V, \t" );
    Serial.println ((lecturaRf+valorsensor)*k);
    valorsensor = analogRead (mideC);
    lecturaRf = analogRead(mideRf);
  }
  
  /* carga capacitor */ 
  digitalWrite (cargar, HIGH ); 
  pinMode(descargar, INPUT );    // pin auxiliar con alta impedancia
  //lecturaR0 = analogRead(mideR0);
  lecturaRf = analogRead(mideRf);
  t0 = micros ();                 // tiempo inicial 
  valorsensor = analogRead (mideC); 
  while (valorsensor <1016) {         // valor maximo de carga de 1024 
//    Serial.print ( micros ()-t0); 
    Serial.print (( micros ()-t0)*1e-6); Serial.print ( " s CARGA," ); // tiempo transcurrido
    Serial.print (valorsensor*k);Serial.print ( " V, " );Serial.print (lecturaRf*k);Serial.print ( " V, \t" );
    Serial.println ((lecturaRf+valorsensor)*k);
    valorsensor = analogRead (mideC);
    lecturaRf = analogRead(mideRf);
  }
}

Hi,
No puedes usar el puerto del arduino para descargar el consdensador ya que el puerto cuando esta HIGH suple voltage y cuando esta LOW suple el ground. Necesitas un transistor para descargar el condesador y cuando no este activo no supla voltaje. Adjunto un circuito demostrando arriba descripto. Tambien usaria una resistencia maas alta un condesador como de 10uf para probar que el programa trabaja ya que el 1uf
se carga muy rapido.

Hola tauro, gracias por la recomendación, es verdad el capacitor usado en la realidad es de 2200 uF no de 1 uF como figura en el esquema (olvidé cambiar ese valor).
No me queda claro por qué dices que descarga en el puerto de arduino, ¿no estaría descargando en la resistencia de 5kOhm?

Hi,
Yo no digo que se descarga el arduino si quires medir la capacidad tienes que tomar el tiempo que toma el condesador en cargarse. Por lo tanto necesitas descargar el condesador y una vez descargado entonces aplica voltaje y lees el voltaje y el tiempo que toma en cargase. Eso es siguiendo tu idea. Tambien puedes hacerlo usando un puerto analogo conectado a un condesador con una resistencia en paralelo digamos 10k. Configura el puerto analogo como output digital para que cargue el condesador . Una vez cargado el condensador entonces imediatamente configura el puerto como analogo para leer voltaje/tiempo que tarda el condesador a descargarse a zero voltios por la resistencia de 10K.Entonces calcula la capacidad del condensador usando el tiempo y la resistencia de 10k. La formula es time=RC

Adjunto el circuito.

Si mal recuerdo la constante de tiempo T = R*C es el tiempo en el que el capacitor se descarga hasta e^-1 = 0,3678 o sea el 36.78%

Eso surge de que la tensión del capacitor en la descarga es Vcap = V0 * e^-t/T
Si t = T = RC => tienes ese punto.
De lo contrario la tensión de capacitor llega a 0 para t => infinito.
A los fines prácticos creo que se tomaba 5T o sea V0
E^-5 = V0*0,006 que digamos es aprox 0.

Asi que el punto de descarga será de 5*0.3678 = 1.839 V