Medir tensión pico con arduino en DC

Hola, soy nuevo en el foro, me presento, soy nacho y estoy haciendo un estudio en la universidad, y me gustaría saber como puedo medir la tensión de pico en DC de la salida de un rectificador de media onda.
Este se alimenta en alterna y lo convierte a continua utilizando media onda.

Su publicacion se MUEVE a su ubicacion actual ya que es mas adecuada.

Puedes medirla con el ADC teniendo en cuenta que si la tensión a medir supera los 5V debes hacer un divisor de tensión para poder medirla.

Busca con Google "medir tensión arduino" y encontrarás muchos tutoriales al respecto.

Si, estoy utilizando un divisor de tensión ( FZ0430), pero quiero medir el Valor pico y me da un valor cercano pero no exacto, estoy utilizando un tester de precision para conseguir el valor pico y es diferente al valor pico del arduino.

Estoy utilizando este codigo:

Puede ser culpa del delay que lo tengo a 10ms y tendria que ponerlo a 1ms que es el tiempo de lectura que tiene el tester de precision?

Por favor agrega el código de acuerdo a las normas, nada de capturas de códigos porque va contra las normas.

Si buscas precision cómo vas a usar una rutina que trabaja trucando los números como map.

Imagina que te da 1000 cuentas del adc
1023 ............ 25000
1000 ............ x = 25000/1023*1000 => 25000/1023 = 24 con un truncamiento de 0.43
24 * 1000 = 24000 cuando deberia ser 24430
ahi tienes gran % de tu error

A ver si entiendo.
Estás midiendo una onda rectificada (supongo que onda completa), que imagino es de la red eléctrica, a 50 Hz, o sea con picos cada 10 mseg, y pones un delay de justamente 10 mseg (y esperemos que no sea a 60 HZ que sería más desastroso)
¿Y pretendes precisión?

¡Obvio!

Donde se ve el delay() no hay ningún código posteado.

Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>


Si no puedo usar una rutina, que puedo hacer para tener mas precisión?

La onda rectificada que estoy midiendo es de media onda y trabaja a 50hz, como puedo tener mas precisión, que codigo tendri que utilizar?

La precisión no lo podrás cambiar por código, es la que es los 1024 pasos de ADC del arduino, aunque para esta caso yo no usaría la función " map " como te eplico @Surbyte , usaría la que tienes comentada:

// voltaje = lecturaDigital * 5.0 / 1023;

Y hablando del código dos cosillas:

  • Postéalo bien cómo te dijo el moderador. Si no lo entendiste es fácil, te vas al IDE, seleccionas todo el código, lo copias, luego te vienes aquí , pinchas en las etiquetas " </> " , (ver post #9), y en la línea resaltada en azul que te sale lo pegas, ¿fácil no?.
  • Y en segundo lugar creo que con el código que usas estas midiendo la tensión instantánea no la pico.
const int voltajeMax = 25000; // 25V -> 25000mV
int lecturaDigital; // 1023
float voltaje;

void setup() {
  Serial.begin(9600);
}

void loop() {
  lecturaDigital = analogRead(A0);
  voltaje = (lecturaDigital / 1024) * 5.0;

  imprimirVoltaje(voltaje);
  delay(10);
}

void imprimirVoltaje(float v){ 
  Serial.println(v,4);
}

Como puedo medir la tensión pico en vez de la instantánea?

También me gustaría cambiar el tiempo de lectura a 1ms cada vez, supongo que cambiando el delay de 10 a 1 ese problema se solucionaría.

Prueba este codigo y comentamos resultados.

const int voltajeMax = 25000; // 25v -> 25000 mV
int lecturaDigital; // 1023
float voltaje;
unsigned long marca;

void setup() {
  Serial.begin (9600);
}

void loop() {
  marca = millis();
  lecturaDigital = 0; 
  while (millis() - marca < 500) {
    lecturaDigital = max (analogRead (A0), lecturaDigital);  
  }
  
  voltaje = lecturaDigital * 5.0 / 1023;

  imprimirVoltaje (voltaje);
  //delay (10);
}

Se me ha pasado incluir la función " imprimirVoltaje ", es la misma que tenías.

pero le has puesto 500 mseg para que tome el valor pico.
Un valor pico esta muestreando siempre y me quedo con el máximo dentro de un lapso por si este cambia.

Aca te quedas con el máximo en un lapso de 500mseg y en el código inicial reclamábamos por 10 mseg. Algo no cierra!!
No debe llevar delay, el calculo del máximo.
Si debe llevar algo que lo ponga a 0 y recalcule cada X ciclos lo que es otra cuestión.

Lo que haría yo sería obtener el máximo y llevar una cuenta con millis() de un tiempo transcurrido supererado el cual, reseteo dicho máximo (pongo a 0) e inicio una nueva medición de máximos.
Si una onda rectificada completa ocurre cada 10 mseg entonces digamos me quedo con 20 ciclos de 10 mseg o sea 10 ciclos de la AC de 50Hz.
Sugiero 10 ciclos de la AC pero pueden ser los que elejas.

Entonces como harías el código, porque entiendo tu respuesta pero nose como lo plasmaría en el código.

Muchas gracias por la respuesta, probare el codigo esta semana y intentare cambiar algunas cosas como dice Surbyte