Olá, garagistas! Montei uma estação meteorológica com arduíno e um shield datalogger para meu projeto de pesquisa. Aparentemente ela funciona perfeitamente, programei para ela gravar os dados obtidos em um cartão SD a cada 30 minutos, porém quando deixei ela funcionando em campo por um tempo, percebi que do nada os dados começaram a ser gravados a cada minuto, depois voltavam a ser gravados a cada 30 minutos e assim ia. Constei também que os dados param de ser gravados do nada, por exemplo, com as medidas a cada meia hora, deveria ter aproximadamente 12 gravações durante o dia completo, porém em muitos dias só haviam 5 ou 6 gravações. Retirei o cartão SD dia 3 de março e percebi que desde o dia 18 de fevereiro não havia novas gravações. Estou um pouco perdido no que pode estar acontecendo.

Segue o código:

CODIGOMESTRE.ino

Exibições: 1074

Responder esta

Respostas a este tópico

Bom dia, Elcids. Primeiramente, depois de tanto tempo eu gostaria de agradecer pela sua disposição, o código é maravilhoso. Apenas tenho um problema, os dados só ficam guardados no cartão SD se eu estiver na IDE do arduino e com o monitor serial aberto. Por exemplo, quando está funcionando na tomada normal, fora do computador, os dados não são salvos!

Muito obrigado, Gabriel.

olá Gabriel.

      Vou tentar elucidar alguns pontos para vc:

      1)  analisei o código novamente, e não encontrei dependência da Serial, muito menos da IDE do Arduino,  e que pudesse impedir o Processo de Gravação. O código está hiper-organizado e fácil de acompanhar, ou seja, se vc fizer uma análise (inicie pelo "loop" do Arduino), irá chegar a esta mesma conclusão.  Inclusive, veja que fiz a Simulação no Proteus, e embora exista um Terminal do Arduino conectado lá, o código só está enviando reports por ali, e nada recebe via Serial. E claro, o funcionamento pleno da Simulação demonstra a não-dependência que mencionei.

         Pode até ser que exista no código algo "escondido" que cause o problema, mas até aqui não encontrei.

      2)  como de costume,  vc não deu detalhe algum sobre seu Sistema. Veja que na implementação que eu publiquei há muitos detalhes, Há também implementações adicionais, como o LED "Alive" e uma Chave para habilitar o Debug pela Serial (e sendo implementada ou não,  este "feature" não  tem relação com o Processo de Gravação no Cartão).  Assim se possível, coloque aqui detalhes sobre sua implementação, a fim de ajudar a elucidar seu problema.

      3) sobre os detalhes que mencionei em 2),  um deles é relativamente significativo:  qual é o modelo do Shield com SD Card que vc está usando. Há alguns modelos no mercado, e cada um deve ser conectado de forma adequada no Hardware.  Pode parecer impossível, mas posso garantir que dependendo do seu Shield e de como ele está ligado no HW, pode ser que estando alimentado de uma forma ou outra, poderá impactar no acesso ao Cartão (problemas de Niveis Lógicos  e  Alimentação).

        Pode ajudar muito se vc postar aqui uma foto do seu Shield do SD Card, e também mostrar como está conectando o mesmo ao Arduino (ou seja, como estão as conexões no Hardware).

      4)  recentemente  auxiliei aqui no LDG,  em elucidar um problema crônico relacionado ao Arduino Mega.

         É este descrito neste tópico:   "problema dos !!! no Mega"   (se possível, leia o tópico todo, pois é relativamente importante).

         Ocorre, que assim que vi este seu post, me lembrei que vc está usando o Mega, e no código que postei aqui,  tem a ocorrência dos "!!!" (sequência de três "!").  Ou seja,  dependendo do Bootloader do seu Mega, irá dar zica. Talvez não seja o caso do seu Mega, afinal parece que vc deu a entender que conseguiu gravar o código no Mega.

          De qualquer forma,  como este é um problema "amplo" no Mega,  irei alterar os "!!!"  que existem no código e publicar aqui novamente, alertando para a questão.  Talvez eu faça alguns "improvements" no código também.

     Fico no aguardo de suas considerações.

     Abrçs,

     Elcids

Boa tarde, Elcids, agradeço sua disposição! O shield datalogger que uso é este aqui: https://www.filipeflop.com/produto/data-logger-shield-para-arduino/.

IMG-0971.jpg

IMG-0970.jpg

SD para MEGA:  
10 a 53
11 a 51
12 a 50
13 a 52
A4 a 20
A5 a 21.

E dobrei os pinos A4 e A5 para que eles não se
conectassem ao mega.
Só os deixei assim depois de fazer as ligações
10,11,12 e 13. Então não posso
afirmar se é realmente necessário.


Estou nessa luta para entender o que está levando a isso,
não vejo sentido em os dados só serem gravados quando
aparecem no monitor serial.

olá Gabriel.

      Analisei as conexões que vc descreveu entre o Mega e o Shield, inclusive olhando também as fotos que vc disponibilizou.

      Me parece que suas conexões estão corretas. Porém seguem algumas considerações:

      1) sobre o "A4" e o "A5" que vc "dobrou" os pinos no Shield, tudo bem, pode ficar assim (isso não tem relação com os demais sinais do SD Card, e sim do RTC I2C que está no Shield).  Note no entanto que vc poderia até deixar conectado aos respectivos pinos do Mega (ou seja, não precisaria dobrar),  MAS  para isso,  o "A4" e o "A5"  não podem  ser utilizados no código para outras funções (sejam Analógicas ou Digitais), e devem ser obrigatoriamente configurados como INPUT ou INPUT_PULLUP antes de qualquer configuração ou acesso ao I2C (no caso, o RTC do Shield).

      2) sobre os demais pinos do Shield ( pinos 10, 11, 12, e 13), se vc não "dobrou" os pinos no Shield,  então estes pinos  não podem  ser utilizados no código para uso de qualquer outra coisa, e devem ser  obrigatoriamente configurados como INPUT  antes de qualquer configuração ou acesso (via SPI) ao SD Card.

      3) não tive como analisar nada a respeito da alimentação do Sistema, uma vez que vc não disse nada sobre como está sendo feita.

      4) este Shield com RTC e SD Card, já possui Regulador de 3.3V para o SD Card, e também os Conversores de Nível Lógico para 3.3V para a Interface de Hardware com o Cartão (alguns Shields não possuem Conversores de Nível, mas este seu possui).

      Ainda não sabemos o que está ocorrendo com seu Sistema, mas acredito que em breve teremos alguma pista. Se possível, post mais detalhes,  assim fica mais fácil diagnosticar.  Se preferir, posso te auxiliar via Skype, o que pode ser mais efetivo.

      Uma coisa que pode ajudar muito, é ver o código exato que vc está usando. Se preferir não postar ele aqui no tópico, me envie ele pelo email aqui do LDG. De repente é alguma alteração que vc fez e que está causando o problema.

      Atente para a questão dos três "!" (ou seja, "!!!"), que mencionei no post anterior (item 4), pois o código que postei aqui,  tem strings com essa característica. Irei postar novamente eliminando os "!!!", mas se vc puder, já delete estes "!!!" das strings no código (pelo que me lembro, lá tem 5 strings assim).

      Abrçs,

      Elcids

Boa noite, Elcids! Mais uma vez agradeço sua disposição.

1) Tudo nos conformes.

2) Realmente não utilizo os pinos 10, 11, 12 e 13. Sobre essa parte "e devem ser  obrigatoriamente configurados como INPUT  antes de qualquer configuração ou acesso (via SPI) ao SD Card.". Não sei como faço essa configuração, agradeceria mais uma vez sua ajuda!

3) A alimentação fora do computador é feita com um cabo fonte 12v para arduino.

4) Okay!

Quanto ao código, estou usando exatamente o código que você me enviou, o que eu estava usando antes possuía diversos erros.

Aceito sua ajuda pelo Skype ou qualquer outra plataforma de sua preferência, fico agradecido!

Retirei todos os três "!" do código que você me mandou!

Abraços, Gabriel.

Bom dia Gabriel, 

O seu Data Logger Shield parece ser um clone do Data logger da Adafruit. Mas existem dois modelos. 

Parece que o seu é modelo antigo. 

https://learn.adafruit.com/adafruit-data-logger-shield

Older Shield Pinouts

On the older shields, the pinout was fixed to be:

  • Digital #13 - SPI clock
  • Digital #12 - SPI MISO
  • Digital #11 - SPI MOSI
  • Digital #10 - SD Card chip select (can cut a trace to re-assign)
  • SDA connected to A4
  • SCL connected to A5

The RTC (DS1307) I2C logic level was fixed to 5V

Rev B Shield Pinouts
  • ICSP SCK - SPI clock
  • ICSP MISO - SPI MISO
  • ICSP MOSI - SPI MOSI
  • Digital #10 - SD Card chip select (can cut a trace to re-assign)
  • SDA not connected to A4
  • SCL not connected to A5

The RTC (PCF8523) logic level can be 3V or 5V

Boa noite, trago novidades! Testei meu código antigo no arduino e percebi que ele também não está mais gravando os dados no cartão de memória quando fora da IDE, porém antes funcionava normalmente. Isso só me deixa com a opção de ser algum problema no hardware. Porém sigo sem identifica-lo!

Bom dia, mais novidades. O problema foi resolvido, simplesmente troquei por um Arduino uno e agora está salvando perfeitamente, continuo sem saber o problema.

Porém, mesmo antes disso percebi que não estava recebendo dados do DHT e continuo sem receber! 

olá Gabriel.

      Certamente vc tem problemas com seu Hardware.

      Para que eu possa te ajudar de forma mais eficiente, veja seu email aqui no LDG, pois te enviei contato via Skype.

      Sobre o uso do UNO,  para testes não vejo problema. Porém como seu Sistema é relativamente "denso" (tem vários elementos), e provavelmente vc ainda vai "expandí-lo",  eu aconselho continuar a usar o Mega,  devido à Memória disponível ser bem maior, além da maior quantidade de recursos de I/O  via Hardware.  Se usar o UNO, a flexibilidade de alterações/melhorias que vc pode futuramente fazer, será menor.

       Para verificar o funcionamento, e ver a questão da "Serial" que vc mencionou, além da Simulação que eu já tinha feito anteriormente,  também montei o Sistema usando um Mega, Sensor DHT11,  e Sensor DS18B20. Nesta montagem, usei um Shield para SD Card  do mesmo modelo que o seu, que inclui também o RTC. As únicas coisas que não inseri foram os demais sensores, mas já avaliei e constatei que isso não muda o resultado.

      Vc pode ver essa montagem na foto a seguir:

(clique na foto para "zoom")

      Observe que está alimentado por Fonte externa.  As ligações do Shield  são as mesmas que vc fez (mas há duas curiosidades sobre isso que falo mais a frente).

      Para esse teste, mudei o Intervalo de Gravação (parâmetro logo no início do código) para 1 minuto, de forma a obter mais gravações num menor tempo. Deixei gravando por pouco mais de uma hora, implicando assim em mais de 60 registros no SD Card, o que seria equivalente a mais de 1 dia de gravação caso o intervalo fosse o original (a cada meia hora).

      O resultado completo da gravação está neste arquivo:  "METEOR-1.TXT"

      e também parcialmente mostrado na figura a seguir:

(clique na figura para "zoom")

      A temperatura/humidade do ar e temperatura do solo, são as dos dois Sensores (DHT e DS18B20 respectivamente).  A velocidade do vento e acumulado de chuva ficam em zero, uma vez que estes sensores não estavam conectados. Já o CO2 e humidade do solo, são valores aleatórios, uma vez que as entradas "A0e "A1" do Mega ficaram desconectadas ("flutuantes").

      Duas curiosidades sobre a montagem e teste:

      1)  note que o sinal "CSN" (Chip Select do SD Card, ativo em "0"), não está conectado do Shield  para o "53" do Mega. Para o "CSN", usei o "10" do Shield, apenas alterando o número do pino no código, e assim dispensando fazer uma ligação via fio.  Observe que isto só pode ser feito para o sinal "CSN", ou seja,  não  pode fazer para os demais sinais porque estes são do Hardware SPI do Mega.

      2) para obter o "Alive", usei um dos dois LEDs existentes no Shield. Vc pode ver isso via fio na cor marrom clara saindo do "5" do Shield e indo para um ponto bem próximo na placa. No código este LED "Alive" além de sinalizar que o Sistema está operando, também indica o status da chave "Debug", que neste caso não estava conectada, e nesta condição o "Debug" fica habilitado (ou seja, o "Alive" pisca rápido, duas vezes por segundo).

      Após o teste apenas com a Fonte externa,  conectei também ao Computador via USB, com o Terminal do Arduino  operando, e deixei gravando por pouco mais de uma hora também. O resultado foi o mesmo, comprovando o funcionamento.

      Após confirmar o funcionamento com a montagem, acrescentei alguns "features" no código, que acredito vc irá apreciar. Irei em breve publicar esse "upgrade" aqui no LDG.

      Aguardo seu contato para poder ajudar no seu problema de Hardware (embora muita gente aqui ache que minha especialidade é software, eu sou especialista em Hardware e Eletrônica, com mais de 35 anos de experiência).

      Abrçs,

      Elcids

olá novamente Gabriel.

      Deixei o Sistema operando apenas na Fonte externa,  gravando de ontem para hoje, e retirei o Cartão agora a pouco.

      Para este "novo" teste, alterei o ciclo de Gravação para 20 segundos, de forma que a cada minuto seriam 3 registros no SD Card.

      No Cartão haviam 3321 registros. Fazendo as contas se obtém 18.45 horas (resultado de 3321 / 3 / 60 ). Ou seja, aproximadamente 18 horas e meia.

      Isto condiz com o horário dos registros inicial e final  no arquivo no Cartão (inicial foi 22:22:13 de 03/09/2020, e final foi 16:58:33 de 04/09/2020), onde pode-se ver que também representam um período de cerca de 18 horas e meia.

      Apenas para curiosidade,  segue o arquivo:   "METEOR-2.TXT"

      Ainda aguardo seu contato, de forma que eu possa te ajudar com seu Hardware.

      Abrçs,

      Elcids

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço