Proyecto Medidor de Voltaje Alterno en arduino con alarma GSM

Buenos días y saludos de antemano. Necesito un par de consejos.
El proyecto es el siguiente:

Tengo una señal de entrada alterna sinusoidal de 60VAC el cual debo poner en algún pin del arduino y avisarme por SMS si supera 63VAC o baja 57VAC (el rango es ese). La parte de enviar el SMS lo hago con un módulo GSM y un chip de móvil, no hay problema con eso.

Obviamente no puedo meterle tal voltaje al arduino por lo cual debo dismunir la señal (supongamos a 3VAC). Esta señal al ser alterna tiene voltaje peak positivo y negativo y por lo que leí el negativo no lo toma.

El problema es: Cómo puedo medir la amplitud del voltaje al ser sinusoidal y en qué pin coloco esa señal??
Gracias de antemano.

Esto resuelve tu problema y lo lees usando esta librería y programa que encuentras en esta página.

lo que necesitas es convertir la tension alterna a continua con un rectificador como este

donde se ve el condensador poner un condensador electrolitico de 100uF/150v y otro en paralelo de poliester de 100nF/150v. CUIDADO HAY 80V ES PELIGROSO TENER MUCHO CUIDADO
esto te dara en continua un voltaje de: vcc = vca x 1,41 (es decir 60v x 1,41=84,6)
ahora con debemos bajar el voltaje con un divisor resistivo:

si dividimos 84,6 entre 20 nos queda 4,23 perfecto para medir con arduino, para eso R1 debe valer 200k y R2 10k
ahora une las masas y pones el vout a una entrada analogica, si mides 4,23 es que hay 60v.
4,4v = 63v , 4,01 = 57v, por tanto si baja de 4,01 o sube de 4,4 mandas el sms

Otra cosa este circuito es el mas simple pero no esta aislado electricamente de los 80v, lleva cuidado si no sabes lo que estas haciendo. Lo ideal seria poner un transformador de desacoplo 1:1 entre los 60vac y la entrada del puente de diodos

lo que te ha puesto arriba surbyte es algo similar, reduce el voltaje pero sigue estan en alterna y es un tremendo lio medir la tension asi

por dios Uargo, como dices que es un tremendo lio, sin haberlo experimentado?

Esta la libreria de OpenEnergy que te permite medir el Vrms sin problemas.
Yo lo hago en un equipo que pone en marcha un Grupo Electrógeno.
Si lo sugiero es porque lo he probado.

Mira que tremendo lío

// EmonLibrary examples openenergymonitor.org, Licence GNU GPL V3

#include "EmonLib.h"             // Include Emon Library
EnergyMonitor emon1;             // Create an instance

void setup()
{  
  Serial.begin(9600);
  
  emon1.voltage(0, 6.0, 0);  // Voltage: input pin, calibration, phase_shift
  //emon1.current(1, 111.1);       // Current: input pin, calibration.
}

void loop()
{
  emon1.calcVI(20,2000);         // Calculate all. No.of half wavelengths (crossings), time-out
  //emon1.serialprint();           // Print out all variables (realpower, apparent power, Vrms, Irms, power factor)
  
  float supplyVoltage   = emon1.Vrms;             //extract Vrms into Variable
  Serial.println(emon1.Vrms);

}

No me pidan ahora la librería, ya puse el link en el post anterior.
Eso te da el valor Vrms directamente y funciona perfecto.

El circuito anterior no puede ser mas simple.
Transformador, divisor de tensión, desplazador de la tensión a 2.5V para que arduino pueda leer una tensión sinusoidal, con toda su distrosión si la trae?
Porque si la señal esta distorsionada, y armas un medidor de valor pico luego tu ASUMES que es esto o lo otro, pero la mayor parte del tiempo no es asi.

Esa librería de OpenEnergy funciona perfectamente.

A ver Surbyte no es un lio para el usuario, pues todo lo hace la libreria eso es cierto, pero la libreria para poder medir con minimo de precision una señal senoidal necesita hacer unas 10 medidas por semiciclo como minimo o sea 20 por ciclo... como la señal es de 50hz en total ha de hacer 20x50 = 1000 lecturas del ADC por segundo!
Y luego hacer los calculos pertinentes de esas 1000 medidas por segundo. Es un consumo enorme de recursos del microprocesador.
Como yo te digo en continua haces 1 lectura por segundo.

1 lectura vs 1000 lecturas en 1 segundo.

Ahora bien si a ti no solo te importa la tension, si no que quieres comprobar que su forma sea senoidal entonces si. Pero ojo con 10 lecturas por semiciclo se te van a escapar los posibles micropicos de tension y ruidos EMI, con lo cual solo detectaras deformaciones muy grabes de la forma de honda.

Aunque de todas formas si solo utilizas el arduino para eso te da igual gastar tantos recursos del micro en medir la señal

Bueno tenemos un punto de vista diferente uargo, pero en lo que estoy de acuerdo contigo es que es elección del usuario una u otra opción.

Por los recursos estoy de acuerdo hasta ahi nomás, porque el Arduino esta para hacer tareas, me da igual que este al 90% o al 30% si en ambos casos las hace bien.

Ademas la librería OpenEnergy maneja todo por timers asi que la carga del CPU no es tal como la imaginas.

Si esta claro que el decidira lo que quiera o necesite
Si va con baterias si importa la carga del procesador que repercute en mas consumo, si no, mientras que no lo satures da igual.
Y lo de que la carga por interrupciones es menos carga... :astonished: jajaja ... es igual de carga y no solo eso si no que si metes mucha carga en las interrupciones probocaras un desbordamiento de la pila y zas... micro colgado.
Pero vamos que no es el caso si solo va a utilizar el arduino para monitorizar la señal no creo que se sature.

Uargo, has visto el desarrollo de OpenEnergy? No se satura nada. Esta muy bien hecho.
Como dije, no es para justificar mi forma de verlo porque la tuya también es una opción. Solo que por esa razón yo no estoy lleno de dinero y es porque me gustan las cosas no digo que complicadas pero si demasiado detallistas y eso lleva tiempo y no siempre lo haces en el tiempo que previste.
Arduino y sus librerias vienen a ayudarme en esa idea, me permiten "USAR" cosas bien hechas y solo hay que juntar módulos (aunque ambos sabemos que no es tan fácil).

Esta claro Surbyte se que eres un gran conocedor de este mundo y que te gusta ser concienzudo.
Yo solo exponia la otra posibilidad.
:wink: