Advertisement
RuiViana

Power_C_Interrupt

Oct 23rd, 2015
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.60 KB | None | 0 0
  1.  
  2. // http://pastebin.com/nzTRYqSs#
  3. ///////////////////////////////////////////
  4. // TCC - USF Campinas/SP - Eng. Elétrica //
  5. // Qualidade de Energia //
  6. //---------------------------------------//
  7. // Denis Eduardo Donadon Torres //
  8. // Murillo Fischer Macedo //
  9. // Vinícius Roberto Ribeiro //
  10. ///////////////////////////////////////////
  11.  
  12. //////////////////////////////////////////////////////////////////////////////
  13. // Chamado das bibliotecas, instâncias e setando os pinos utilizados de I/O //
  14. //////////////////////////////////////////////////////////////////////////////
  15. #include <Arduino.h>
  16. #include "EmonLibPro.h"
  17. #include "Wire.h"
  18. #define DS1307_ADDRESS 0x68
  19. #include <SdFat.h>
  20. #include "TimerOne.h"
  21.  
  22. // CLK - pin 13
  23. // MISO - pin 12
  24. // MOSI - pin 11
  25. // CS - pin 10
  26.  
  27.  
  28. SdFat sdCard;
  29. SdFile meuArquivo;
  30.  
  31. float Q; // Potência Reativa
  32. float PRAtiva;
  33. float Acumulado;
  34. unsigned long Tempo1 =0;
  35.  
  36. byte i;
  37. byte zero = 0x00;
  38. byte gravadados = 0;
  39. const int chipSelect = 4; // Pino ligado ao CS do modulo SD
  40. EmonLibPro Emon ;
  41.  
  42. void setup()
  43. {
  44. Wire.begin();
  45. Serial.begin(9600);
  46. Emon = EmonLibPro(); // Required
  47. Emon.begin(); // Required
  48.  
  49. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  50. // A linha abaixo só serve para acertar a data e a hora, ela pode ser retirada após acertar a primeira vez!!! //
  51. //SelecionaDataeHora(); //
  52. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  53.  
  54. if(!sdCard.begin(chipSelect,SPI_HALF_SPEED))sdCard.initErrorHalt(); // Inicializa o modulo SD
  55. if (!meuArquivo.open("Dados.txt", O_RDWR | O_CREAT | O_AT_END)) // Cria o arquivo no cartão
  56. {
  57. sdCard.errorHalt("Erro ao criar o arquivo!");
  58. }
  59. Timer1.initialize(500000); // Inicializa timer1, e set 1/2 segundo por periodo
  60. Timer1.attachInterrupt(Acumular); // Define Acumular() como uma rotina de timer overflow interrupt
  61. }
  62. //-----------------------------------------------------------
  63. void Acumular()
  64. {
  65. Acumulado = Acumulado + (PRAtiva * 0.5);
  66. Tempo1 = Tempo1+5;
  67. if (Tempo1 > 7200) // Periodo de 1 hora
  68. {
  69. Serial.println(Acumulado);
  70. Tempo1 = 0;
  71. Acumulado = 0;
  72. }
  73. }
  74. //-----------------------------------------------------------
  75. void loop()
  76. {
  77. meuArquivo.open("Dados.txt", FILE_WRITE );
  78. 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² ).
  79.  
  80. Emon.calculateResult();
  81. Mostrarelogio();
  82. Gravasd();
  83.  
  84. Serial.print("FP:\t");
  85. Serial.print("Freq: (Hz)\t");
  86. Serial.print("Volts: (V)\t");
  87. Serial.print("Corrente: (A)\t");
  88. Serial.print("Pot Ativa: (W)\t");
  89. Serial.print("Pot Aparente: (VA)\t");
  90. Serial.println("Pot Reativa: (var)\t");
  91. Serial.print(Emon.ResultP[i].F);
  92. Serial.print("\t");
  93. Serial.print(Emon.ResultV[0].HZ);
  94. Serial.print("\t");
  95. Serial.print(Emon.ResultV[0].U);
  96. Serial.print("\t");
  97. Serial.print(Emon.ResultP[i].I);
  98. Serial.print("\t");
  99. Serial.print(Emon.ResultP[i].P);
  100. Serial.print("\t");
  101.  
  102. PRAtiva = (Emon.ResultP[i].S);
  103. Serial.print(PRAtiva);
  104. Serial.print("\t");
  105. Serial.print(Q);
  106. Serial.println();
  107.  
  108. delay (50); // <<--------------------------------------
  109. }
  110.  
  111. void SelecionaDataeHora() //Seta a data e a hora do DS1307
  112. {
  113. byte segundos = 00; //Valores de 0 a 59
  114. byte minutos = 03; //Valores de 0 a 59
  115. byte horas = 18; //Valores de 0 a 23
  116. byte diadasemana = 0; //Valores de 0 a 6, (0=Domingo, 1 = Segunda, etc...)
  117. byte diadomes = 18; //Valores de 1 a 31
  118. byte mes = 10; //Valores de 1 a 12
  119. byte ano = 15; //Valores de 0 a 99
  120. Wire.beginTransmission(DS1307_ADDRESS);
  121. Wire.write(zero); //Stop no CI para que o mesmo possa receber os dados
  122.  
  123. //As linhas abaixo escrevem no CI os valores de data e hora que foram colocados nas variaveis acima
  124. Wire.write(ConverteParaBCD(segundos));
  125. Wire.write(ConverteParaBCD(minutos));
  126. Wire.write(ConverteParaBCD(horas));
  127. Wire.write(ConverteParaBCD(diadasemana));
  128. Wire.write(ConverteParaBCD(diadomes));
  129. Wire.write(ConverteParaBCD(mes));
  130. Wire.write(ConverteParaBCD(ano));
  131. Wire.write(zero); //Start no CI
  132. Wire.endTransmission();
  133. }
  134.  
  135. byte ConverteParaBCD(byte val) //Converte o número de decimal para BCD
  136. {
  137. return ( (val/10*16) + (val%10) );
  138. }
  139.  
  140. byte ConverteparaDecimal(byte val) //Converte de BCD para decimal
  141. {
  142. return ( (val/16*10) + (val%16) );
  143. }
  144.  
  145. void Mostrarelogio()
  146. {
  147. Wire.beginTransmission(DS1307_ADDRESS);
  148. Wire.write(zero);
  149. Wire.endTransmission();
  150. Wire.requestFrom(DS1307_ADDRESS, 7);
  151. int segundos = ConverteparaDecimal(Wire.read());
  152. int minutos = ConverteparaDecimal(Wire.read());
  153. int horas = ConverteparaDecimal(Wire.read() & 0b111111);
  154. int diadasemana = ConverteparaDecimal(Wire.read());
  155. int diadomes = ConverteparaDecimal(Wire.read());
  156. int mes = ConverteparaDecimal(Wire.read());
  157. int ano = ConverteparaDecimal(Wire.read());
  158.  
  159. //Mostra a data no Serial Monitor
  160. switch(diadasemana)
  161. {
  162. case 0:
  163. Serial.println();
  164. Serial.print("Domingo - ");
  165. meuArquivo.print("Domingo - ");
  166. break;
  167. case 1:
  168. Serial.println();
  169. Serial.print("Segunda - ");
  170. meuArquivo.print("Segunda - ");
  171. break;
  172. case 2:
  173. Serial.println();
  174. Serial.print("Terca - ");
  175. meuArquivo.print("Terca - ");
  176. break;
  177. case 3:
  178. Serial.println();
  179. Serial.print("Quarta - ");
  180. meuArquivo.print("Quarta - ");
  181. break;
  182. case 4:
  183. Serial.println();
  184. Serial.print("Quinta - ");
  185. meuArquivo.print("Quinta - ");
  186. break;
  187. case 5:
  188. Serial.println();
  189. Serial.print("Sexta - ");
  190. meuArquivo.print("Sexta - ");
  191. break;
  192. case 6:
  193. Serial.println();
  194. Serial.print("Sabado - ");
  195. meuArquivo.print("Sabado - ");
  196. }
  197. Serial.print(diadomes);
  198. meuArquivo.print(diadomes);
  199. Serial.print("/");
  200. meuArquivo.print("/");
  201. Serial.print(mes);
  202. meuArquivo.print(mes);
  203. Serial.print("/");
  204. meuArquivo.print("/");
  205. Serial.print(ano);
  206. meuArquivo.print(ano);
  207. Serial.print(" as: ");
  208. meuArquivo.print(" as: ");
  209. Serial.print(horas);
  210. meuArquivo.print(horas);
  211. Serial.print(":");
  212. meuArquivo.print(":");
  213. Serial.print(minutos);
  214. meuArquivo.print(minutos);
  215. Serial.print(":");
  216. meuArquivo.print(":");
  217. Serial.print(segundos);
  218. meuArquivo.print(segundos);
  219. Serial.println();
  220. meuArquivo.println();
  221. }
  222.  
  223. void Gravasd() // Grava dados de leitura no arquivo criado no cartão SD.
  224. {
  225. switch(gravadados)
  226. {
  227. case 0:
  228. meuArquivo.print("FP:\t");
  229. meuArquivo.print("Freq: (Hz)\t");
  230. meuArquivo.print("Volts: (V)\t");
  231. meuArquivo.print("Corrente: (A)\t");
  232. meuArquivo.print("Pot Ativa: (W)\t");
  233. meuArquivo.print("Pot Aparente: (VA)\t");
  234. meuArquivo.println("Pot Reativa: (var)\t");
  235.  
  236. meuArquivo.print(Emon.ResultP[i].F);
  237. meuArquivo.print("\t");
  238. meuArquivo.print(Emon.ResultV[0].HZ);
  239. meuArquivo.print("\t");
  240. meuArquivo.print(Emon.ResultV[0].U);
  241. meuArquivo.print("\t");
  242. meuArquivo.print(Emon.ResultP[i].I);
  243. meuArquivo.print("\t");
  244. meuArquivo.print(Emon.ResultP[i].P);
  245. meuArquivo.print("\t");
  246. meuArquivo.print(Emon.ResultP[i].S);
  247. meuArquivo.print("\t");
  248. meuArquivo.print(Q);
  249. meuArquivo.println();
  250.  
  251. meuArquivo.close();
  252. break;
  253. }
  254. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement