#include <WiFi.h>
//Pinos de entrada utilizados
const uint8_t pinAdcTensao = 32;
const uint8_t pinAdcCorrente = 33;
//Caracter separador dos dados
const char separador = '\t';
//valores de offset de cada sensor (determinados estatisticamente através de capturas)
const float offsetVAC = 0;
const float offsetIAC = 0;
void setup()
{
Serial.begin(9600);
Serial.print("Conectando-se ao Wi-Fi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Conectado!");
}
void loop()
{
//Envio dos códigos convertidos da tensão e corrente RMS
//coeficientes das regressões lineares. Usados para a conversão dos códigos
const float coefA_VAC = 0.2652;
const float coefB_VAC = 0.0;
const float coefA_IAC = 0.1191;
const float coefB_IAC = 0.0;
//Período mínimo de captura de 16,7ms para garantir que ao menos um ciclo seja capturado
const int32_t duracaoDaAmostragem = (int32_t)((1000.0 / 60.0) * 6.0); //6 ciclos de 1000ms/60 (60Hz)
//Variáveis
int32_t tensao = 0;
int32_t corrente = 0;
uint32_t qtdDeAmostras = 0;
float acumuladorTensao = 0.0;
float acumuladorCorrente = 0.0;
//Captura
unsigned long inicio = millis();
do
{
tensao = analogRead(pinAdcTensao) - offsetVAC;
corrente = analogRead(pinAdcCorrente) - offsetIAC;
acumuladorTensao = acumuladorTensao + (tensao * tensao); //Soma dos quadrados
acumuladorCorrente = acumuladorCorrente + (corrente * corrente);//Soma dos quadrados
qtdDeAmostras++;
} while ((millis() - inicio) < duracaoDaAmostragem);
//Cálculo dos valores RMS
acumuladorTensao = acumuladorTensao / float(qtdDeAmostras); //Média dos quadrados
acumuladorCorrente = acumuladorCorrente / float(qtdDeAmostras); //Média dos quadrados
acumuladorTensao = sqrt(acumuladorTensao); //RMS da captura
acumuladorCorrente = sqrt(acumuladorCorrente); //RMS da captura
acumuladorTensao = acumuladorTensao * coefA_VAC + coefB_VAC; //Conversão em volts
acumuladorCorrente = acumuladorCorrente * coefA_IAC + coefB_IAC; //Conversão em ampères
//Transmissão
Serial.print("t");
Serial.print(separador);
Serial.print(micros());
Serial.print(separador);
Serial.print("Vac");
Serial.print(separador);
Serial.print(acumuladorTensao);
Serial.print(separador);
Serial.print("Iac");
Serial.print(separador);
Serial.println(acumuladorCorrente);
}