gravador de pressão (data logger)
Fui convidado para ajudar a desenvolver um programa que controlava a pressão e iria gravar em arquivo.
O projeto é uma montagem de forma alguma arduino para demonstrar o resultado correcto programa, come riperguntou.
descrição
Isto não pretende ser comp projetoano, Eu diria que apenas um teste de um programa. Eu coloquei quatro módulos que pode ser relacionado um Arduino Nano ou um Arduino UNO, como a do meu amigo.
Eu módulos são um ecrã de cristais líquidos, um leitor de memória SD, um módulo de relógio com DS3231 e um para Bluetooth. O programa também proporciona uma configuração diferente, com uma blindagem que contém o leitor de cartão de SD e o DS1307 RTC.
Eulém disso, inclui um divisor para o’ entrada comunicação módulo de HC-06, para compatibilidade com 3,3 Volts usado pelo módulo Bluetooth.
O programa permite um elevado grau de configurabilidade, que for determinado no 'início da fonte para as linhas de #define, Vou explicar os detalhes abaixo.
Tem havido várias dificuldades, um muito especial era entender por que ele não gravar o arquivo para a memória. Na verdade, como citado a partir do site, o nome permaneceu no formato 8.3. Para isso, o nome do arquivo é um número sequencial marcado no formato ggmmaEuii, que
gg Eu sou o dia da data
milímetros ele relatou um mês
uma é para o 'ano
iiEu é um número sequencial, se existe um arquivosse já Ele adiciona um novo
O projeto inclui algumas características especiais:
-
O controle automático do brilho da tela.
-
A gravação de arquivos fornece um período programável, para ambas as amostras de escrita intervalo de tempo e também a frequência da mudança do nome do arquivo.
-
Lendo o relatório via serial ou via bluetooth. Obviamente que depende de ligações dispostas.
-
Os arquivos são mantidos e não são substituídos. Isso é para evitar a perda de gravações anteriores.
-
O programa permite que duas versões de hardware, uma para a exibição ligados em paralelo e um para a ligação através de I2C. Este último porque o meu amigo tem esse tipo e um escudo que contém o 'leitor relógio e SD. como Picture.

-
implementação simples via de comunicação serial. tipo clássico com Arduino ou TX monitores de perna com níveis de 5 V, ou com um partiore conectar o módulo Bluetooth.
![]() |
Como pode ser visto aqui ao lado com um conexão via smartphones, com o programa Terminal série Bluetooth. bem, a data não é aquele que envia o programa, É bastante incluídos no programa Android. |
Esquema elétrico

O diagrama descreve a ligação à perna do controlo de brilho que é conectado ao pino 15 del exibição. Desde a biblioteca de exibição não tem essa representação fiz alguma conta. Mesmo com a interface 'I2C conectado ao pino 15 É tomado por este regime. A biblioteca para a exibição, Ele fornece apenas um controle simples ou desligar a luz de fundo.
Descrição do programa
O programa foi compilado com a versão Arduino IDE 1.8.7. O arquivo também contém as bibliotecas, para evitar mal-entendidos e possíveis alterações em futuras versões.
As variáveis que são usadas para configurar o seguinte:
#definir RS 7
#definido 6
#definir D7 2
#definir D6 3
#definir D5 4
#definir D4 5
definições normais para conexões paralelas do tipo de exibição.
#definir CH1 9
Leg atribuída para ajustar o brilho.
#definir SENSOR A1
Ele permite que você escolha o canal analógico a leitura do sensor.
#definir LDR A3
Definisce il canal análogo de onde se pode tomar o sinal photoresistor.
#definir PARMODEL
Isto permite escolher a compilação dependendo da configuração do hardware disponível.
Ao remover a marca de comentário, umallora você optar pelo modelo paralelo (compatibEuo com motorista Hitachi HD44780) eo relógio' é aquele com o DS3231. No caso oposto a ele utiliza uma interface I2C com um PCF8574 para o mesmo tipo de visor, muito a pinos de conserva para outras funções. com estepara construir usando uma borda relógio DS1307 de um escudo acima mencionado.
#definir DEBUG 0~ 1 ~2
Você define se você deseja utilizar a comunicação serial. Pode haver 2 níveis de depuração que dão a 'oportunidade para determinar quais mensagens para apresentar à série e exibição.
Se fosse escrito 0 em vez de um, em seguida, toda a série não está incluído na compilação do programa.
#definir LCD_ROWS 2
#definir LCD_COLUMNS 16
Ele define o tamanho do visor. Variando esta implicaria também outras mudanças no programa que prevê apenas a representação no tamanho real definido por estas duas linhas.
#definir LOG_INTERVAL 10
Este determina a frequência de amostragem do sensor, expressa em segundos. O que o programa faz em cada 10 segundos.
#definir chipselect 10
Ele determina onde l para ser apagada 'ativação do cartão SD. Embora as alegações de biblioteca para ter a perna 10 como uma saída. Assim, alterando isso não implica que você tem a perna 10 Freed.
#definir VMIN 102
#definir VMAX 921
#definir MINSCALE 0
#definir MAXSCALE 160
Buscae definições determinar os valores de leitura e conversão do canal. Neste caso, o sensor Ele tem o valor de 0,5 V a zero e 4,5 V pés para medida máxima.
Quindi converte aos pontos ADC com a fórmula
V / 5 * 1024 para o mínimo seria 102 e para o máximo 921, arredondado
tais como aqueles acima conjunto.
G-lhes outros dois são os valores a serem apresentados para o visor, após a conversão com a função Arduino mapa(). Mínimo e máximo, respectivamente,.
#definir CHANGEFILE (14400 - LOG_INTERVAL)
Buscaou define o período de muitos segundos para gravação para um único arquivo. No caso quebra de poder, o programa não irá substituir um arquivo existente. Para isso, há uma rotina que verifica se existem arquivos presentes.
Eun desta forma ele calcula as horas corretamente em múltiplos de 3600.
#definir BGTVMIN 0
#definir BGTVMAX 1024
#definir BGTMINSCALE 20
#definir BGTMAXSCALE 255
Buscae linhas, determinar qual do controlo PWM dos valores de brilho de exibição. Sempre com a conversão da função mapa(). Que é o valor lido a partir 'de entrada analógica do divisor de tensão é convertida para uma escala de PWM a partir de um mínimo de 20 uma 255. Querendo fazer as coisas mais finas, você pode fazer o teste quando o photoresistor é completamente obscurecida e colocar o que um BGTVMAX, também vice-versa para quando é fortemente iluminada for detectado que o valor seja BGTVMIN put.
Uma breve descrição da função sprintf():
%0?d Ele está determinado a escrever um número decimal com o preenchimento com zeros aos dígitos ausentes. com ? Ele determina o número de dígitos para representar.
a função novo arquivo() verifica se já existe um ficheiro, e em seguida, aumentar o contador.
Para isso, você experimentar uma nova e ocorre se esse nome já foi atribuído a um arquivo. Por exemplo, se o sistema for reiniciado com frequência, último arquivo' l não é substituído, mas acrescenta um com um aumento no valor de 0 uma 255. Eu queria colocar o número em hexadecimal, mas talvez eu ainda não entendi como escrever para sprintf(), porque se torna mais complicado para interpretar.
Eu considerei a usar apenas uma figura para a descivere período anual, de modo a garantir os dados de gravação 10 idade, sem remover os arquivos da memória.
No programa há duas condições que restringem a representação dentro de seus extremos:
sensorVal = (sensorVal > VMIN) ? sensorVal : VMIN;
sensorVal = (sensorVal < VMAX) ? sensorVal : VMAX;
O que afeta a representação para além dos limites. Isso significa que os valores para além dos limites não são aceitos e é, portanto, apenas representou o mínimo ou o máximo, dependendo do caso.
Última nota:
Quando o programa encontra um erro no SD detecção ou de 'relógio, então não procede e acidentes. Apenas no caso do número de série que ele não ativou mensagens aviso pode.
Quando ele detecta que a forma' de tempo foi perdido, com a conexão serial você pode ter um melhor controle, a fim de definir diretamente um tempo ou para permitir carregar o computador conectado.
Esta opção apresenta um pedido com 3 escolhas:
e Ele permite que você insira a data e hora no formato AA MM / hh / dd:milímetros:ss. não existe
uma verdadeira restrição no formato, um ou 2 figuras não faz diferença, única digna de respeito
delimitadores de campos que são / : e um espaço entre a data e 'agora.
com irá ignorar o 'esperar e continuar o programa com o' calendário inalterada.
H Ele permite que você parar o processo programa. De modo a facilitar o reinício com o botão de reset.
Qualquer outra tecla ou de espera para 3 segundos, Ele permite que você carregue o 'tempo de
computador.
Por esta razão, a escolha deve ser realizada no período 3 segundo, caso contrário, o programa automaticamente decidir para atualizar o 'tempo. Considerando que o monitor serial do IDE também deve entrar no d 'botão Enviar, para assumir o comando.
Portanto, você deve habilitá-lo para este ou ser capaz de ver a causa de uma avaria. Assim, gostaria de aconselhar para manter a série ativo durante os testes iniciais e só quando é uma certeza da operação, em seguida, desactivar esta opção se desejar. Afinal, ele não ocupa grande parte do período de trabalho Arduino.
O display é atualizado uma vez por segundo, porque até mesmo o processo de escrita dos retornos de amostra para o limite de frequência mínima. Del descanso para períodos de escrever usando a função dell 'RTC que me lembra o valor mínimo em segundos.
A amostra tem uma função para tomar pelo menos 10 leituras e média. A máxima pode ser 64, mas deve intervir diretamente para a linha de origem. Uma vez que utiliza uma variável 2 então bytes 64 É o limite superior.
O programa é aqui utilizado para a conversão de pressão, no entanto, não se limita a esse caso específico. Na verdade, os valores que podem ser configurados permitir a leitura de diversos tipos de sensores, que têm uma tensão analógica em resposta que pode ser lida com o Arduino conversor ADC.
O pacote que você pode baixar do meu dirigir.
Eu coloquei um vídeo no Youtube.


Bluetooth está ligado diretamente à série do hardware Arduicoso, que é conhecido no diagrama. Você poderia fazer um pouco de barulho quando você quer escrever um novo firmware. Para o que é aconselhável colocar um jumper removível ao escrever um esboço.
Não estou muito convencido ou talvez eu descaracterizou: que administra os bluetooh ? No esboço que eu não parecem vê-lo.
Para o resto eu pretendo ler melhor esboço: a primeira leitura não estava convencido.
saudações