Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // http://pastebin.com/nzTRYqSs#
- ///////////////////////////////////////////
- // TCC - USF Campinas/SP - Eng. Elétrica //
- // Qualidade de Energia //
- //---------------------------------------//
- // Denis Eduardo Donadon Torres //
- // Murillo Fischer Macedo //
- // Vinícius Roberto Ribeiro //
- ///////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- // Chamado das bibliotecas, instâncias e setando os pinos utilizados de I/O //
- //////////////////////////////////////////////////////////////////////////////
- #include <Arduino.h>
- #include "EmonLibPro.h"
- #include "Wire.h"
- #define DS1307_ADDRESS 0x68
- #include <SdFat.h>
- // CLK - pin 13
- // MISO - pin 12
- // MOSI - pin 11
- // CS - pin 10
- SdFat sdCard;
- SdFile meuArquivo;
- float Q; // Potência Reativa
- byte i;
- byte zero = 0x00;
- byte gravadados = 0;
- const int chipSelect = 4; // Pino ligado ao CS do modulo SD
- EmonLibPro Emon ;
- void setup()
- {
- Wire.begin();
- Serial.begin(9600);
- Emon = EmonLibPro(); // Required
- Emon.begin(); // Required
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // A linha abaixo só serve para acertar a data e a hora, ela pode ser retirada após acertar a primeira vez!!! //
- //SelecionaDataeHora(); //
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- if(!sdCard.begin(chipSelect,SPI_HALF_SPEED))sdCard.initErrorHalt(); // Inicializa o modulo SD
- if (!meuArquivo.open("Dados.txt", O_RDWR | O_CREAT | O_AT_END)) // Cria o arquivo no cartão
- {
- sdCard.errorHalt("Erro ao criar o arquivo!");
- }
- }
- void loop()
- {
- meuArquivo.open("Dados.txt", FILE_WRITE );
- Q = sqrt(Emon.ResultP[i].P * Emon.ResultP[i].P + Emon.ResultP[i].S * Emon.ResultP[i].S); // Calcula a Potêcia Reativa ( Q = RAIZ(Potência Ativa² + Potência Aparente² ).
- Emon.calculateResult();
- Mostrarelogio();
- Gravasd();
- Serial.print("FP:\t");
- Serial.print("Freq: (Hz)\t");
- Serial.print("Volts: (V)\t");
- Serial.print("Corrente: (A)\t");
- Serial.print("Pot Ativa: (W)\t");
- Serial.print("Pot Aparente: (VA)\t");
- Serial.println("Pot Reativa: (var)\t");
- Serial.print(Emon.ResultP[i].F);
- Serial.print("\t");
- Serial.print(Emon.ResultV[0].HZ);
- Serial.print("\t");
- Serial.print(Emon.ResultV[0].U);
- Serial.print("\t");
- Serial.print(Emon.ResultP[i].I);
- Serial.print("\t");
- Serial.print(Emon.ResultP[i].P);
- Serial.print("\t");
- Serial.print(Emon.ResultP[i].S);
- Serial.print("\t");
- Serial.print(Q);
- Serial.println();
- delay (5000);
- }
- void SelecionaDataeHora() //Seta a data e a hora do DS1307
- {
- byte segundos = 00; //Valores de 0 a 59
- byte minutos = 03; //Valores de 0 a 59
- byte horas = 18; //Valores de 0 a 23
- byte diadasemana = 0; //Valores de 0 a 6, (0=Domingo, 1 = Segunda, etc...)
- byte diadomes = 18; //Valores de 1 a 31
- byte mes = 10; //Valores de 1 a 12
- byte ano = 15; //Valores de 0 a 99
- Wire.beginTransmission(DS1307_ADDRESS);
- Wire.write(zero); //Stop no CI para que o mesmo possa receber os dados
- //As linhas abaixo escrevem no CI os valores de data e hora que foram colocados nas variaveis acima
- Wire.write(ConverteParaBCD(segundos));
- Wire.write(ConverteParaBCD(minutos));
- Wire.write(ConverteParaBCD(horas));
- Wire.write(ConverteParaBCD(diadasemana));
- Wire.write(ConverteParaBCD(diadomes));
- Wire.write(ConverteParaBCD(mes));
- Wire.write(ConverteParaBCD(ano));
- Wire.write(zero); //Start no CI
- Wire.endTransmission();
- }
- byte ConverteParaBCD(byte val) //Converte o número de decimal para BCD
- {
- return ( (val/10*16) + (val%10) );
- }
- byte ConverteparaDecimal(byte val) //Converte de BCD para decimal
- {
- return ( (val/16*10) + (val%16) );
- }
- void Mostrarelogio()
- {
- Wire.beginTransmission(DS1307_ADDRESS);
- Wire.write(zero);
- Wire.endTransmission();
- Wire.requestFrom(DS1307_ADDRESS, 7);
- int segundos = ConverteparaDecimal(Wire.read());
- int minutos = ConverteparaDecimal(Wire.read());
- int horas = ConverteparaDecimal(Wire.read() & 0b111111);
- int diadasemana = ConverteparaDecimal(Wire.read());
- int diadomes = ConverteparaDecimal(Wire.read());
- int mes = ConverteparaDecimal(Wire.read());
- int ano = ConverteparaDecimal(Wire.read());
- //Mostra a data no Serial Monitor
- switch(diadasemana)
- {
- case 0:
- Serial.println();
- Serial.print("Domingo - ");
- meuArquivo.print("Domingo - ");
- break;
- case 1:
- Serial.println();
- Serial.print("Segunda - ");
- meuArquivo.print("Segunda - ");
- break;
- case 2:
- Serial.println();
- Serial.print("Terca - ");
- meuArquivo.print("Terca - ");
- break;
- case 3:
- Serial.println();
- Serial.print("Quarta - ");
- meuArquivo.print("Quarta - ");
- break;
- case 4:
- Serial.println();
- Serial.print("Quinta - ");
- meuArquivo.print("Quinta - ");
- break;
- case 5:
- Serial.println();
- Serial.print("Sexta - ");
- meuArquivo.print("Sexta - ");
- break;
- case 6:
- Serial.println();
- Serial.print("Sabado - ");
- meuArquivo.print("Sabado - ");
- }
- Serial.print(diadomes);
- meuArquivo.print(diadomes);
- Serial.print("/");
- meuArquivo.print("/");
- Serial.print(mes);
- meuArquivo.print(mes);
- Serial.print("/");
- meuArquivo.print("/");
- Serial.print(ano);
- meuArquivo.print(ano);
- Serial.print(" as: ");
- meuArquivo.print(" as: ");
- Serial.print(horas);
- meuArquivo.print(horas);
- Serial.print(":");
- meuArquivo.print(":");
- Serial.print(minutos);
- meuArquivo.print(minutos);
- Serial.print(":");
- meuArquivo.print(":");
- Serial.print(segundos);
- meuArquivo.print(segundos);
- Serial.println();
- meuArquivo.println();
- }
- void Gravasd() // Grava dados de leitura no arquivo criado no cartão SD.
- {
- switch(gravadados)
- {
- case 0:
- meuArquivo.print("FP:\t");
- meuArquivo.print("Freq: (Hz)\t");
- meuArquivo.print("Volts: (V)\t");
- meuArquivo.print("Corrente: (A)\t");
- meuArquivo.print("Pot Ativa: (W)\t");
- meuArquivo.print("Pot Aparente: (VA)\t");
- meuArquivo.println("Pot Reativa: (var)\t");
- meuArquivo.print(Emon.ResultP[i].F);
- meuArquivo.print("\t");
- meuArquivo.print(Emon.ResultV[0].HZ);
- meuArquivo.print("\t");
- meuArquivo.print(Emon.ResultV[0].U);
- meuArquivo.print("\t");
- meuArquivo.print(Emon.ResultP[i].I);
- meuArquivo.print("\t");
- meuArquivo.print(Emon.ResultP[i].P);
- meuArquivo.print("\t");
- meuArquivo.print(Emon.ResultP[i].S);
- meuArquivo.print("\t");
- meuArquivo.print(Q);
- meuArquivo.println();
- meuArquivo.close();
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement