SHARE
TWEET

Untitled

alvarobarbosa2 Oct 8th, 2017 56 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <SPI.h>
  2. #include <SD.h>
  3. #define N 5                                          //Dimensão do vetor tomado para o filtro digital (média móvel)
  4. #define CS_pin      4                                //Comunicação SPI, CS_pin no digital 4 para o cartão SD
  5. // -------------------------------------- cartão SD ---------------------------------------------------------------
  6. Sd2Card SDcard;
  7. SdVolume volume;
  8. File myFile;                                          //Arquivo para salvar dados
  9. // ----------------------------------------------------------------------------------------------------------------
  10. int photocellPin = A0;                               // sensor ldr 01
  11. int photocellPin1 = A2;                              // sendor ldr 02
  12. int lux;                                             // Variavel obter medida de sol pelo sensor 01
  13. int lux_1;                                           // Variavel obter medida de sol pelo sensor 02
  14. float mediax(0);                                     // Variavel obter media de sol pelos sensores 01 e 02
  15. float mmovel(0);                                     // Variavel obter media móvel das leituras
  16. unsigned long tempo(0);                              // Variavel para medir intervalos de tempo de sol
  17. unsigned long anterior(0);                           // Variavel para salvar tempo de inicio de contagem
  18. unsigned long sol(0);                                // Variavel para acumular tempo de sol
  19. bool contador(0);                                    // Variavel para controle de contagem
  20. int vals[N];                                         // vetor de leituras
  21. // ---------------------------------------- iniciar programa ------------------------------------------------------
  22. void setup(void)
  23. {                                    
  24.   Serial.begin(9600);                                 // Inicialise serial em 9600 bps
  25.     anterior = millis();                              // Atualize tempo atual
  26.     pinMode(CS_pin, OUTPUT);                          //Configura o pino CS como saída
  27. // ---------------------------------------- iniciar cartão sd -----------------------------------------------------
  28.   if (!SD.begin(CS_pin))                                   //Teste da presença do cartão
  29.   {
  30.     Serial.println("Falha ao acessar o cartao !");
  31.     Serial.println("Verifique o cartao/conexoes e reinicie o Arduino...");
  32.     Serial.println();
  33.     return;
  34.   }
  35.   Serial.println("Cartao iniciado corretamente !");
  36.   Serial.println();
  37. // -------------------------- salvar os dados obtidos no cartão sd ------------------------------------------------
  38.     File myFile = SD.open("logger.csv", FILE_WRITE); // Abre o arquivo arquivo.txt do cartao SD
  39.    
  40.       if (myFile)                                  // Grava os dados no arquivo
  41.     {
  42.       myFile.println(" , , ");
  43.       String header = "LUX, time, minutos";
  44.       myFile.println(header);
  45.       myFile.close();
  46.  
  47.       Serial.println (header);
  48.     }  
  49.     else                                             // Mensagem de erro para problemas na abertura do arquivo
  50.     {  
  51.       Serial.println("Erro ao abrir arquivo.txt !");
  52.     }
  53. // ------------------------------------ teste de sensores ---------------------------------------------------------
  54.   if (lux = 0)
  55.   {
  56.     Serial.println ("Defeito eminente no LDR 01 ");  //Teste do LDR 01
  57.     Serial.println (" ");
  58.   }
  59.   else if (lux_1 = 0)
  60.   {
  61.     Serial.println ("Defeito eminente no LDR 02 ");  //Teste do LDR 02
  62.     Serial.println (" ");
  63.   }
  64.   else
  65.   {
  66.     Serial.println ("Sensores OK, iniciando funcionamento ");
  67.     Serial.println (" ");
  68.   }
  69.      }
  70. // ---------------------------------------- processamento ---------------------------------------------------------
  71. void loop(void)
  72. {// ------------------------------- sensores LDR operando em conjunto ----------------------------------------------
  73.   lux = analogRead(photocellPin);                    // faz a leitura analógica do LDR 1
  74.   lux_1 = analogRead(photocellPin1);                 // faz a leitura analógica do LDR 2
  75.   mediax = (lux + lux_1)/2;                          // faz a méida das leituras analógica
  76. // --------------------------------- Filtro Digital (média Móvel) -------------------------------------------------
  77.   for (int i = N-1; i > 0; i--)
  78.   {
  79.       vals [i] = vals[i-1];
  80.     }
  81.     vals [0] = mediax;
  82. // -------------------------------------- Contador regressivo -----------------------------------------------------    
  83.     long sum = 0;
  84.     for (int i = 0; i<N; i++)
  85.     {
  86.       sum = sum + vals[i];
  87.     }
  88. // ----------------------------------------- Valor da média móvel -------------------------------------------------
  89.     mmovel = sum/N;
  90. // ------------------------------- contador de tempo para o sistema -----------------------------------------------
  91. if ( mmovel < 950)                                   // Se a média for menor que 900
  92.   {
  93.     sol = (sol + tempo);                             // Acumule tempo de sol
  94.     tempo = 0;                                       // Zera o tempo medido
  95.     contador = 0;                                    // Desabilite contagem
  96.     anterior = millis();                             // Atualize tempo atual
  97.   }
  98.   else                                               // Se for maior que 800
  99.   {
  100.     contador = 1;                                    // Habilite contagem
  101.   }
  102.   if (contador == 1)                                 // Se contagem habilitada
  103.   {
  104.     tempo =  (millis() - anterior);                  // tempo igual tempo de sol
  105.   }
  106. // ------------------------------------ impressão dos dados ------------------------------------------------------
  107.  String dataString = String(mmovel) + ", " + String((sol/1000/60) %60);
  108.  
  109.  File myFile = SD.open("logger.csv", FILE_WRITE);
  110.   if(myFile)
  111.   {
  112.     myFile.println(dataString);
  113.     myFile.close();
  114.     Serial.println(dataString);
  115.   }
  116.   else
  117.   {
  118.     Serial.println("Erro ao abrir arquivo para escrita final");
  119.   }
  120.  
  121.  
  122.   //Serial.print("LUX ");                              // Imprime o termo luminosidade
  123.   //Serial.print(mmovel);                              // Imprime a média acumulada dos dois sensorers
  124.   //Serial.print("\t");                                // Imprime um espaço entre a luminosidade média e o tempo
  125.   //Serial.print(" time ");                            // Imprime o termo "tempo"
  126.   //Serial.print((sol/1000/60) %60);                   // Imprime acumulado de tempo de sol em minutos
  127.   //Serial.println(" minutos");                          // Imprime a unidade de tempo minutos
  128. // ------------------------------- imprimir os dados a cada... ----------------------------------------------------
  129.       delay (2000);
  130.   }
  131.  //---------------------------------------------------- fim do programa -------------------------------------------
RAW Paste Data
Top