Tarifa Branca pode reduzir significativamente o valor mensal da conta contrato de energia elétrica, valores que podem impactar diretamente no funcionamento do estabelecimento para conseguir direcionar a outras necessidades, ou até mesmo ter um consumo mais consciente.
Por exigir grande investimento financeiro, devido a quantidade existente, os medidores de energia elétricas instalados em cada estabelecimento atendido pelas concessionárias, em geral possuem sua versão mais simples, proporcionar a medição do consumo, potência em kWh, dificultando uma análise mais detalhada do consumo durante um determinado período do dia ou por um dia do mês. Essa limitação gera receio no consumidor que não consegue ter noção do seu gasto no período com valor mais elevado, provocando assim uma redução da adesão desse tipo de tarifação.
Os sistemas embarcados aqui apresentados foram trabalhados justamente para atender a essa necessidade, não só entender o consumo geral do local, bem como fazer uma análise de um equipamento específico que não possa ser desligado durante períodos de pico. O seu custo financeiro baixo e a sua fácil implementação para medição, proporcionam ao usuário uma segurança maior ao cogitar a mudança de sua tarifação, principalmente pelo custo de implementação.
O Arduino permite uma personalização extensa devido ao conceito de Hardware Livre, que fica limitada apenas à sua quantidade de portas, o que proporciona uma vasta possibilidade de ideias a serem implementadas, mesmo com as suas limitações de processamento e portas de conexão, que não foram problema para todas as implementações citadas.
O benefício de ambos os circuitos se prova ao visualizar os resultados obtidos em valores de reais, o que torna a análise mais palpável para o usuário final, porque a mudança para a tarifa branca prejudicaria financeiramente a residência escolhida, mesmo os habitantes imaginando que seu consumo durante os períodos de valores elevados fosse menor, que mesmo sendo, ainda provocam um impacto negativo, financeiramente falando.
As possibilidades de entendimento do comportamento em horários de Ponta ou Intermediário não se limitam a apenas analisar o quão vantajoso financeiramente seria a mudança de tarifa, mas proporciona também uma noção de consumo dos
equipamentos ligados durante aquele período, bem como estabelecer cenários onde o usuário possa escolher a situação que faça sentido para o mesmo, seja o desligamento total ou parcial dos equipamentos durante esses momentos, o importante é entender que ele tem liberdade de controle através de um monitoramento detalhado de seu consumo.
A implantação de ambos os sistemas não se limita apenas a residências, é importante avaliar as limitações físicas dos módulos de corrente e tensão, uma vez sendo respeitadas, o tipo de estabelecimento não se torna um problema.
Proporcionando uma gama enorme de locais para aplicação, podendo reduzir drasticamente a conta de energia dos consumidores, bem como o uso de equipamentos elétricos durante horários que hoje exigem uma demanda maior.
Os sistemas não foram construídos com o objetivo de repassar um veredito aos consumidores, mas sim, proporcionarem uma análise detalhada do consumo que pode ajudar na tomada de decisão. As análises se mostraram promissores para a implementação, promovendo uma economia de aproximadamente 18% a cada 7 dias de consumo.
REFERÊNCIAS
COMO MEDIR corrente com Arduino?. [S. l.], 14 out. 2014. Disponível em:
https://www.filipeflop.com/blog/efeito-hall-acs714-corrente-com-arduino/.
Acesso em: 1 fev. 2022.
APÊNDICE
ALGORÍTIMOS
ALGORÍTMO PARA MEDIÇÃO GERAL
//########### PARTE 1 ###########
#include "EmonLib.h" //BIBLIOTECA PARA MEDIÇÃO DE CORRENTE
#include <SPI.h> //BIBLIOTECA PARA CONEXÃO SD
#include <SD.h> //BIBLIOTECA PARA CONEXÃO SD
#include "RTClib.h" //BIBLIOTECA PARA CONEXÃO RTC int pinoRed = 2; //VARIAVEL LED
RTC_DS3231 rtc; //INICIAR RTC
char daysOfTheWeek[7][12] = {"Domingo", "Segunda", "Terça", "Quarta",
"Quinta", "Sexta", "Sábado"}; // CLASSIFICAR OS DIAS File myFile; //INICIAR SD
EnergyMonitor emon1; //INICIAR BIBLIOTECA PARA MEDIÇÃO DE CORRENTE int pino_sct1 = A0; //PINO DE MEDIÇÃO FASE 1
int pino_sct2 = A1; //PINO DE MEDIÇÃO FASE 2
//########### PARTE 2 ###########
void setup() {
pinMode(pinoRed, OUTPUT); //SAIDA PRA O LED
if (! rtc.begin()) { //LOOP QUE TRAVA SE RTC NÃO INICIAR while (1);
}
if (rtc.lostPower()) { //AJUSTAR HORA SE RTC ESTIVER SEM BATERIA //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
if (!SD.begin(10)) { //LOOP QUE TRAVA SE SD NÃO INICIAR digitalWrite(pinoRed, HIGH);
while (1);
}
digitalWrite(pinoRed, LOW); //LED DESLIGADO }
//########### PARTE 3 ###########
void loop() {
if (!SD.begin(10)) {//LOOP QUE TRAVA SE SD FOR DESCONECTADO
digitalWrite(pinoRed, HIGH);
while (1);
}
digitalWrite(pinoRed, HIGH); //PISCAR LED SINALIZANDO PROSSEGUIMENTO NO CÓDIGO
delay(10);
digitalWrite(pinoRed, LOW);
delay(10);
DateTime now = rtc.now(); //CAPTURA DATA DA HORA
myFile = SD.open("registro.txt", FILE_WRITE); //ABRE OU CRIA ARQUIVO
emon1.current(pino_sct1, 60); //CALIBRAÇÃO DE CORRENTE DA FASE 1 double Irms = emon1.calcIrms(1500); //CÁLCULO DA FASE 1
emon1.current(pino_sct2, 60); //CALIBRAÇÃO DE CORRENTE DA FASE 2 double Irms2 = emon1.calcIrms(1500); //CÁLCULO DA FASE 2
//########### PARTE 4 ###########
if (daysOfTheWeek[now.dayOfTheWeek()] == "Sábado" ||
daysOfTheWeek[now.dayOfTheWeek()] == "Domingo") {
myFile.print("Fora de Ponta,"); //FUNÇÃO PARA IMPRIMIR NO ARQUIVO TXT myFile.print(Irms);
myFile.print(",");
myFile.print(Irms2);
myFile.print(",");
myFile.print(now.day());
myFile.print("/");
myFile.print(now.month());
myFile.print("/");
myFile.print(now.year());
myFile.print(",");
myFile.print(now.hour());
myFile.print(":");
myFile.print(now.minute());
myFile.print(":");
myFile.print("00");
myFile.print(",");
myFile.println(daysOfTheWeek[now.dayOfTheWeek()]);
myFile.close(); //FECHA O ARQUIVO TXT }
else if (now.hour() == 17 && now.minute() < 30) { myFile.print("Fora de Ponta");
}
else if (now.hour() == 17 && now.minute() == 30) { myFile.print("Ponta");
}
else if (now.hour() < 17) { myFile.print("Fora de Ponta");
}
else if (now.hour() == 18 && now.minute() == 30) { myFile.print("Ponta");
}
else if (now.hour() == 18 && now.minute() < 30) { myFile.print("Intermediário");
}
else if (now.hour() < 18) { myFile.print("Intermediário");
}
else if (now.hour() == 21 && now.minute() == 30) { myFile.print("Intermediário");
}
else if (now.hour() == 21 && now.minute() < 30) { myFile.print("Ponta");
}
else if (now.hour() < 21) { myFile.print("Ponta");
}
else if (now.hour() == 22 && now.minute() == 30) { myFile.print("Fora de Ponta");
}
else if (now.hour() == 22 && now.minute() < 30) { myFile.print("Intermediário");
}
else if (now.hour() < 22) { myFile.print("Intermediário");
}
else if (now.hour() < 23 && now.minute() < 59 && now.second() < 59) { myFile.print("Intermediário");
}
//########### PARTE 5 ###########
myFile.print(","); //FUNÇÃO PARA IMPRIMIR NO ARQUIVO TXT myFile.print(Irms);
myFile.print(",");
myFile.print(Irms2);
myFile.print(",");
myFile.print(now.day());
myFile.print("/");
myFile.print(now.month());
myFile.print("/");
myFile.print(now.year());
myFile.print(",");
myFile.print(now.hour());
myFile.print(":");
myFile.print(now.minute());
myFile.print(":");
myFile.print("00");
myFile.print(",");
myFile.println(daysOfTheWeek[now.dayOfTheWeek()]);
digitalWrite(pinoRed, HIGH);
myFile.close(); //FECHA O ARQUIVO TXT
delay(100);
}
ALGORÍTMO PARA MEDIÇÃO ESPECÍFICA
//########### PARTE 1 ###########
#include "EmonLib.h" //BIBLIOTECA PARA MEDIÇÃO DE CORRENTE
#include <SPI.h> //BIBLIOTECA PARA CONEXÃO SD
#include <LiquidCrystal_I2C.h> //BIBLIOTECA PARA DISPLAY LCD
#include <Wire.h> //BIBLIOTECA PARA DISPLAY LCD
#include <SD.h> //BIBLIOTECA PARA CONEXÃO SD
#include "RTClib.h" //BIBLIOTECA PARA CONEXÃO RTC
#define VOLT_CAL 211.6 //VARIÁVEL DE DEFINIÇÃO PARA CÁLCULO DE TENSÃO
RTC_DS3231 rtc; //INICIAR RTC
char daysOfTheWeek[7][12] = {"Domingo", "Segunda", "Terça", "Quarta",
"Quinta", "Sexta", "Sábado"}; // CLASSIFICAR OS DIAS File myFile; //INICIAR SD
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //INICIAR LCD EnergyMonitor emon1; //INICIAR BIBLIOTECA PARA MEDIÇÃO DE CORRENTE
int pino_sct = A1; //PINO DE MEDIÇÃO DE CORRENTE int pinoRed = 2; //PINO PARA RGB
int pinoGreen = 5; //PINO PARA RGB int pinoBlue = 6; //PINO PARA RGB int val; //PINO PARA RGB
int buzzer = 7; //PINO PARA BUZZER
//########### PARTE 2 ###########
void setup() {
pinMode(buzzer, OUTPUT); //SAIDA PRA O BUZZER pinMode(pinoRed, OUTPUT); //SAIDA PRA O LED pinMode(pinoBlue, OUTPUT); //SAIDA PRA O LED pinMode(pinoGreen, OUTPUT); //SAIDA PRA O LED
if(! rtc.begin()) { //LOOP QUE TRAVA SE RTC NÃO INICIAR while(1);
}
if(rtc.lostPower()){ //AJUSTAR HORA SE RTC ESTIVER SEM BATERIA //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
if (!SD.begin(10)) { //LOOP QUE TRAVA SE SD NÃO INICIAR while (1);
}
emon1.current(pino_sct, 60); //CALIBRAÇÃO DE CORRENTE emon1.voltage(2, VOLT_CAL, 1.7); //CALIBRAÇÃO DE TENSÃO
lcd.begin (16, 2); //INICIA LCD
lcd.setBacklight(HIGH); //LIGA BACK LIGHT LCD }
//########### PARTE 3 ###########
void loop() {
if (!SD.begin(10)) { //LOOP QUE TRAVA SE SD NÃO INICIAR analogWrite(pinoGreen, val);
analogWrite(pinoBlue, val);
analogWrite(pinoRed, 150 - val);
while (1);
}
DateTime now = rtc.now(); //CAPTURA DATA DA HORA
emon1.calcVI(17, 2000); //CÁLCULO DE TENSÃO
double Irms = emon1.calcIrms(1500); //CÁLCULO DE CORRENTE
double supplyVoltage = emon1.Vrms; //ARMAZENANDO VALORES double WAT = supplyVoltage * Irms; //ARMAZENANDO VALORES
myFile = SD.open("registro.txt", FILE_WRITE); //ABRE OU CRIA ARQUIVO
//########### PARTE 4 ###########
if (daysOfTheWeek[now.dayOfTheWeek()] == "Sábado" ||
daysOfTheWeek[now.dayOfTheWeek()] == "Domingo") {
analogWrite(pinoGreen, 128 - val); //FUNÇÃO PARA IMPRIMIR NO ARQUIVO TXT analogWrite(pinoRed, val);
analogWrite(pinoBlue, val);
myFile.print("Fora de Ponta,");
myFile.print(Irms);
myFile.print(',');
myFile.print(supplyVoltage);
myFile.print(',');
myFile.print(WAT);
myFile.print(',');
myFile.print(now.day());
myFile.print('/');
myFile.print(now.month());
myFile.print('/');
myFile.print(now.year());
myFile.print(',');
myFile.print(now.hour());
myFile.print(':');
myFile.print(now.minute());
myFile.print(':');
myFile.print("00");
myFile.print(',');
myFile.println(daysOfTheWeek[now.dayOfTheWeek()]);
myFile.close(); //FECHA O ARQUIVO TXT }
else if (now.hour() == 17 && now.minute() < 30) { analogWrite(pinoGreen, 128 - val);
analogWrite(pinoRed, val);
analogWrite(pinoBlue, val);
myFile.print("Fora de Ponta");
}
else if (now.hour() == 17 && now.minute() == 30 && now.second() < 30) { digitalWrite(buzzer, HIGH);
delay(20);
digitalWrite(buzzer, LOW);
analogWrite(pinoGreen, val);
analogWrite(pinoBlue, val);
analogWrite(pinoRed, 150 - val);
myFile.print("Intermediário");
}
else if (now.hour() < 17) {
analogWrite(pinoGreen, 128 - val);
analogWrite(pinoRed, val);
analogWrite(pinoBlue, val);
myFile.print("Fora de Ponta");
}
else if (now.hour() == 18 && now.minute() == 30) { analogWrite(pinoGreen, val);
analogWrite(pinoBlue, val);
analogWrite(pinoRed, 150 - val);
myFile.print("Ponta");
digitalWrite(buzzer, HIGH);
delay(20);
digitalWrite(buzzer, LOW);
}
else if (now.hour() == 18 && now.minute() < 30) { analogWrite(pinoGreen, val);
analogWrite(pinoRed, val);
analogWrite(pinoBlue, 255 - val);
myFile.print("Intermediário");
}
else if (now.hour() < 18) { analogWrite(pinoGreen, val);
analogWrite(pinoRed, val);
analogWrite(pinoBlue, 255 - val);
myFile.print("Intermediário");
}
else if (now.hour() == 21 && now.minute() == 30) { analogWrite(pinoGreen, val);
analogWrite(pinoRed, val);
analogWrite(pinoBlue, 255 - val);
myFile.print("Intermediário");
digitalWrite(buzzer, HIGH);
delay(20);
digitalWrite(buzzer, LOW);
}
else if (now.hour() == 21 && now.minute() < 30) { analogWrite(pinoGreen, val);
analogWrite(pinoBlue, val);
analogWrite(pinoRed, 150 - val);
myFile.print("Ponta");
}
else if (now.hour() < 21) {
analogWrite(pinoGreen, val);
analogWrite(pinoBlue, val);
analogWrite(pinoRed, 150 - val);
myFile.print("Ponta");
}
else if (now.hour() == 22 && now.minute() == 30) { analogWrite(pinoGreen, 128 - val);
analogWrite(pinoRed, val);
analogWrite(pinoBlue, val);
myFile.print("Fora de Ponta");
digitalWrite(buzzer, HIGH);
delay(20);
digitalWrite(buzzer, LOW);
}
else if (now.hour() == 22 && now.minute() < 30) { analogWrite(pinoGreen, val);
analogWrite(pinoRed, val);
analogWrite(pinoBlue, 255 - val);
myFile.print("Intermediário");
}
else if (now.hour() < 22) { analogWrite(pinoGreen, val);
analogWrite(pinoRed, val);
analogWrite(pinoBlue, 255 - val);
myFile.print("Intermediário");
}
else if (now.hour() == 23 && now.minute() < 59 && now.second() < 59) { analogWrite(pinoGreen, 128 - val);
analogWrite(pinoRed, val);
analogWrite(pinoBlue, val);
myFile.print("Fora de Ponta");
}
//########### PARTE 5 ###########
myFile.print(','); //FUNÇÃO PARA IMPRIMIR NO ARQUIVO TXT myFile.print(Irms);
myFile.print(',');
myFile.print(supplyVoltage);
myFile.print(',');
myFile.print(WAT);
myFile.print(',');
myFile.print(now.day());
myFile.print('/');
myFile.print(now.month());
myFile.print('/');