#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Endereço do display LCD 16x2 tipo I2C
const int pinZMPT101B = 32; // Pino analógico para o sensor ZMPT101B (GPIO36)
const int pinSCT13 = 33; // Pino analógico para o sensor SCT13 (GPIO39)
const float voltageConversionFactor = 0.707; // Fator de conversão para a tensão (para converter de pico para RMS)
const float currentConversionFactor = 0.1; // Fator de conversão para a corrente (100A = 1V)
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
}
void loop() {
// Leitura da tensão
int rawVoltage = analogRead(pinZMPT101B);
float voltage = rawVoltage * (5.0 / 1023.0) * 220.0 / 5.0 * voltageConversionFactor; // Conversão para tensão RMS
// Leitura da corrente
int rawCurrent = analogRead(pinSCT13);
float current = rawCurrent * (5.0 / 1023.0) * 10.0 / 5.0 * currentConversionFactor; // Conversão para corrente em Ampères
// Cálculo da potência
float power = voltage * current;
// Mostra os valores no display LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("V:");
lcd.print(voltage, 1); // Exibe a tensão com 2 casas decimais
lcd.print("V ");
lcd.setCursor(0, 1);
lcd.print("I:");
lcd.print(current, 2); // Exibe a corrente com 2 casas decimais
lcd.print("A ");
// Mostra a potência no segundo linha do display
lcd.setCursor(9, 1); // Posição para começar a exibir a potência
lcd.print("P:");
lcd.print(power, 0); // Exibe a potência com 2 casas decimais
lcd.print("W");
// Mostra os valores no Monitor Serial
Serial.print("Voltage: ");
Serial.print(voltage, 2);
Serial.println(" V");
Serial.print("Current: ");
Serial.print(current, 2);
Serial.println(" A");
Serial.print("Power: ");
Serial.print(power, 2);
Serial.println(" W");
delay(1000); // Aguarda 1 segundo antes de ler novamente os valores
}