Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SPI.h>
- #include <SD.h>
- #define N 5 //Dimensão do vetor tomado para o filtro digital (média móvel)
- #define CS_pin 4 //Comunicação SPI, CS_pin no digital 4 para o cartão SD
- // -------------------------------------- cartão SD ---------------------------------------------------------------
- Sd2Card SDcard;
- SdVolume volume;
- File myFile; //Arquivo para salvar dados
- // ----------------------------------------------------------------------------------------------------------------
- int photocellPin = A0; // sensor ldr 01
- int photocellPin1 = A2; // sendor ldr 02
- int lux; // Variavel obter medida de sol pelo sensor 01
- int lux_1; // Variavel obter medida de sol pelo sensor 02
- float mediax(0); // Variavel obter media de sol pelos sensores 01 e 02
- float mmovel(0); // Variavel obter media móvel das leituras
- unsigned long tempo(0); // Variavel para medir intervalos de tempo de sol
- unsigned long anterior(0); // Variavel para salvar tempo de inicio de contagem
- unsigned long sol(0); // Variavel para acumular tempo de sol
- bool contador(0); // Variavel para controle de contagem
- int vals[N]; // vetor de leituras
- // ---------------------------------------- iniciar programa ------------------------------------------------------
- void setup(void)
- {
- Serial.begin(9600); // Inicialise serial em 9600 bps
- anterior = millis(); // Atualize tempo atual
- pinMode(CS_pin, OUTPUT); //Configura o pino CS como saída
- // ---------------------------------------- iniciar cartão sd -----------------------------------------------------
- if (!SD.begin(CS_pin)) //Teste da presença do cartão
- {
- Serial.println("Falha ao acessar o cartao !");
- Serial.println("Verifique o cartao/conexoes e reinicie o Arduino...");
- Serial.println();
- return;
- }
- Serial.println("Cartao iniciado corretamente !");
- Serial.println();
- // -------------------------- salvar os dados obtidos no cartão sd ------------------------------------------------
- File myFile = SD.open("logger.csv", FILE_WRITE); // Abre o arquivo arquivo.txt do cartao SD
- if (myFile) // Grava os dados no arquivo
- {
- myFile.println(" , , ");
- String header = "LUX, time, minutos";
- myFile.println(header);
- myFile.close();
- Serial.println (header);
- }
- else // Mensagem de erro para problemas na abertura do arquivo
- {
- Serial.println("Erro ao abrir arquivo.txt !");
- }
- // ------------------------------------ teste de sensores ---------------------------------------------------------
- if (lux = 0)
- {
- Serial.println ("Defeito eminente no LDR 01 "); //Teste do LDR 01
- Serial.println (" ");
- }
- else if (lux_1 = 0)
- {
- Serial.println ("Defeito eminente no LDR 02 "); //Teste do LDR 02
- Serial.println (" ");
- }
- else
- {
- Serial.println ("Sensores OK, iniciando funcionamento ");
- Serial.println (" ");
- }
- }
- // ---------------------------------------- processamento ---------------------------------------------------------
- void loop(void)
- {// ------------------------------- sensores LDR operando em conjunto ----------------------------------------------
- lux = analogRead(photocellPin); // faz a leitura analógica do LDR 1
- lux_1 = analogRead(photocellPin1); // faz a leitura analógica do LDR 2
- mediax = (lux + lux_1)/2; // faz a méida das leituras analógica
- // --------------------------------- Filtro Digital (média Móvel) -------------------------------------------------
- for (int i = N-1; i > 0; i--)
- {
- vals [i] = vals[i-1];
- }
- vals [0] = mediax;
- // -------------------------------------- Contador regressivo -----------------------------------------------------
- long sum = 0;
- for (int i = 0; i<N; i++)
- {
- sum = sum + vals[i];
- }
- // ----------------------------------------- Valor da média móvel -------------------------------------------------
- mmovel = sum/N;
- // ------------------------------- contador de tempo para o sistema -----------------------------------------------
- if ( mmovel < 950) // Se a média for menor que 900
- {
- sol = (sol + tempo); // Acumule tempo de sol
- tempo = 0; // Zera o tempo medido
- contador = 0; // Desabilite contagem
- anterior = millis(); // Atualize tempo atual
- }
- else // Se for maior que 800
- {
- contador = 1; // Habilite contagem
- }
- if (contador == 1) // Se contagem habilitada
- {
- tempo = (millis() - anterior); // tempo igual tempo de sol
- }
- // ------------------------------------ impressão dos dados ------------------------------------------------------
- String dataString = String(mmovel) + ", " + String((sol/1000/60) %60);
- File myFile = SD.open("logger.csv", FILE_WRITE);
- if(myFile)
- {
- myFile.println(dataString);
- myFile.close();
- Serial.println(dataString);
- }
- else
- {
- Serial.println("Erro ao abrir arquivo para escrita final");
- }
- //Serial.print("LUX "); // Imprime o termo luminosidade
- //Serial.print(mmovel); // Imprime a média acumulada dos dois sensorers
- //Serial.print("\t"); // Imprime um espaço entre a luminosidade média e o tempo
- //Serial.print(" time "); // Imprime o termo "tempo"
- //Serial.print((sol/1000/60) %60); // Imprime acumulado de tempo de sol em minutos
- //Serial.println(" minutos"); // Imprime a unidade de tempo minutos
- // ------------------------------- imprimir os dados a cada... ----------------------------------------------------
- delay (2000);
- }
- //---------------------------------------------------- fim do programa -------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement