Na última postagem vimos que o UNO não tinha memória suficiente para rodar o software básico corretamente, e se fosse para rodar o software com todas as verificações, serial, lcd e ainda adicionar mais recursos teríamos que necessariamente partir para o MEGA 2560.
Assim foi feito, e agora eu apresento a versão Alpha 0.1, primeira versão funcional do código, se fosse necessário usar o logger agora ele poderia ser usado, com tudo operando. Mas claro que falta vários ajustes no código, e adicionar mais funções. Atualmente o código 10% de armazenamento e 20% de memória, então ainda tem um espaço bem legal para trabalho.
A montagem no MEGA ocorre sem problemas e sem mudanças na protoboard, basta desconectar os fios do UNO e conectar nas portas corretas do MEGA.
Na imagem (clique nela para ampliar) nem todos os fios estão conectados, mas segue a via de regra, fio vermelho é VCC e se conecta na trilha positiva 5V. Fio preto é GND e se conectada na trilha negativa. O resto segue o padrão, o MicroSD segue o padrão SPI (clique aqui), sendo o CS conectado na porta 22.
A nossa tela OLED segue o padrão I2C, SCL na SCL e SDA na SDA. O DHT22 mantém sua montagem, com o pino de dados conectado na energia por meio de um resistor e conectado também na porta 24.
Os DS18B20 manteve a montagem anterior, todos os fios de dados ligados a uma trilha, essa trilha é ligada no 5V com um resistor em série e no pino 23 do Arduino.
ATENÇÃO: O código possui um erro, corrija da seguinte forma. Logo após a linha void setup() adicione a seguinte linha: pinMode(53, OUTPUT); E deixe a porta 53 vazia.
Ao fazer o upload do código no MEGA e as ligações verá que estará tudo funcionando, falando nisso vamos fazer o download do código, clicando aqui.
Esse código está pronto para ser usado, mas para ser possível chamar de alguma versão interessante é preciso mudanças importantes, então não faz muito sentido analisar um código prematuro desse, além dele já estar organizado e ricamente comentado, então é melhor pontuar algumas mudanças urgentes que vejo serem necessárias.
A primeira mudança é referente a primeira verificação, que é feita no setup, a verificação do SD. Acho que poderia modificar a forma de apresentação das informações na serial, apresentando uma única linha, de mais fácil entendimento. A apresentação na OLED também precisa ser melhorada, com uma estruturação em linha, com texto maior, talvez até mesmo com uma imagem. O tempo de leitura também pode ser aumentado, quatro segundos não é bem legível.
Depois existe a abertura do arquivo para criação do cabeçalho, essa verificação não está fazendo tanto sentido, uma vez que o SD está funcionando e ligado corretamente, o arquivo será criado para escrever um cabeçalho, e depois fechado. Esse cabeçalho não é tão interessante e muito menos é indispensável. Pretendo deletar toda essa verificação.
Ao iniciar o loop já temos uma solução, anteriormente tinha dois delays, onde tinha que somar os dois manualmente para chegar no intervalo correto de gravação. Aqui já temos uma variável que é usada em delay duas vezes, ou seja, basta digitar ali metade do tempo desejado. Mas a função delay não é desejável aqui, ela inicia uma nova contagem e trava o arduino, se for para controlar a informações do OLED por um botão o delay será um problema.
A mudança mais importando nesse código é sem dúvida o fim do delay dentro do loop, fazendo o uso da função millis(), que resolverá todos os problemas de tempo, tornando o nosso loop multitarefas.
A parte de gravação no SD está bem posicionada, logo abaixo da análise dos sensores, e está gravando os dados corretamente, mas acredito que possa ser possível melhorar a escrita dessa parte, com menos etapas, algo como concatenação.
A próxima parte também é um problema, ela abre mais uma vez o arquivo e fecha (gostaria de fazer isso apenas no momento da gravação), assim ela apenas verifica se o arquivo abre e fecha para mostrar na oled. Essa parte de verificar se está abrindo poderia ocorrer dentro já da gravação de dados, também fazendo uso das variáveis. Assim eu abro o arquivo apenas uma vez.
Essa parte de verificação poderia ser diferente, ao invés de verificar se o arquivo abre, que foi verificado na serial antes, ele poderia verificar se houve uma gravação de dados nesse arquivo, se o tamanho atual do arquivo for maior do tamanho anterior houve uma gravação. Assim no OLED eu posso saber se o arquivo abriu e se houve uma gravação.
Por último na parte da OLED seria legal umas mudanças, poderia apresentar todos os dados em uma única tela, limpando uma repetição da função lcd.clear(), se for necessário a apresentação de mais telas devido a quantidade de dados essa mudança poderia ocorrer por botão, agora que não teremos mais delay no loop.
Uma mudança que não ocorre nesse código, mas que acho de importante mudança seria o tempo de criação de arquivos, agora possível com o millis, estruturas de condição e de repetição. Tipo: A cada 600 gravações o programa fecha o arquivo e inicia as próximas gravações no próximo arquivo, isso evita problemas de travamento, e se algum arquivo corromper a perda de dados não é total, e sim parcial. Acredito ser importante essa mudança.
Outra modificação poderia ser uma alarme de distância de erro com a gravação, o ideal aqui é um buzzer, mas como não tenho será adicionado leds para indicar os estados do SD, assim não é necessário chegar tão perto e ler um tela menor que um polegar para perceber que algo está errado. (Lembrando que nosso logger ainda não possui conectividade sem fios).
Bom, agora temos um microcontrolador compatível, um código operante e uma lista de mudanças a fazer, nos próximos posts vamos implementar essas mudanças. Até!
Nenhum comentário:
Postar um comentário