Advertisement
RuiViana

Power_Write_SD

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