Índice:
- Etapa 1: Obtenha uma biblioteca MS5611
- Etapa 2: conectar o sensor ao Arduino e testar
- Etapa 3: torná-lo autônomo
- Etapa 4: adicionar código para altitude e o LCD
Vídeo: Fita métrica atmosférica Arduino / MS5611 GY63 GY86 Demonstração: 4 etapas (com fotos)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
Este é realmente um barômetro / altímetro, mas você verá o motivo do título olhando para o vídeo.
O sensor de pressão MS5611, encontrado nas placas breakout Arduino GY63 e GY86, oferece um desempenho incrível. Em um dia calmo, ele medirá sua altura dentro de 0,2 m. Isso é efetivamente medir a distância de sua cabeça ao espaço sideral e subtraí-la da distância de seus pés ao espaço sideral (medindo a pressão - ou seja, o peso do ar acima). Este dispositivo espetacular tem um alcance que mede confortavelmente a altura do Everest - e também pode medir até alguns centímetros.
Este projeto teve como objetivo: um projeto de escolas, um exemplo de modificação do código do Arduino e um bom ponto de partida para explorar usando o sensor MS5611. Há muitas perguntas no fórum de quem tem dificuldades com este sensor. A abordagem aqui torna seu uso muito simples. Depois de fazer este projeto, você estará bem equipado para desenvolver outras aplicações relacionadas à pressão.
Cada sensor tem suas próprias constantes de calibração que precisam ser lidas e usadas para corrigir os dados. Há uma biblioteca disponível para ajudar a conduzi-los. O código mostrado aqui usa a biblioteca para fazer leituras e depois as converte em altura e as exibe em um escudo LCD.
Primeiro, enviaremos os dados para o monitor serial no PC / laptop para os testes iniciais. Eles mostram algum ruído, então adicionamos um filtro para suavizá-los. Em seguida, adicionaremos um display LCD para que a unidade possa funcionar de forma independente e você possa tentar medir sua altura - ou qualquer outra coisa.
Observe que a placa GY63 tem apenas o sensor de pressão MS5611. O GY86 é chamado de placa de 10 graus de liberdade e também inclui um acelerômetro de 3 eixos, um giroscópio de 3 eixos e um magnetômetro de 3 eixos por apenas alguns $ a mais.
Você vai precisar de:
1. Arduino UNO (ou outro com pinagem padrão) e seu cabo USB
2. Placa de breakout GY63 ou GY86
3. 4 condutores Dupont macho-fêmea - ou fio de conexão
4. Blindagem do teclado LCD Arduino
5. bateria de 9v e chumbo
6. Tira de soquete de 2,54 mm (opcional, mas recomendado)
Preparação
Baixe o Arduino IDE (ambiente de desenvolvimento integrado) em:
Alguns detalhes técnicos de interesse
O MS5611 oferece excelente desempenho ao calcular a média de um grande número de medições. Ele pode fazer 4096 medições analógicas de 3 bytes (24 bits) em apenas 8 ms e fornecer o valor médio. Ele deve medir a pressão e a temperatura para que os dados de pressão possam ser corrigidos para a temperatura interna. Portanto, ele pode fornecer cerca de 60 pares de leituras de pressão e temperatura por segundo.
A folha de dados está disponível em:
As comunicações são via I2C. Portanto, outros sensores I2C podem compartilhar o barramento (como é o caso da placa GY86 10DOF onde todos os chips estão em I2C).
Etapa 1: Obtenha uma biblioteca MS5611
Muitos dos sensores do Arduino usam uma biblioteca padrão incluída com o IDE do Arduino ou são fornecidos com um arquivo zip com uma biblioteca que pode ser facilmente instalada. Isso tende a não ser o caso dos sensores MS5611. Porém uma pesquisa encontrada: https://github.com/gronat/MS5611 que possui uma biblioteca para o MS5611, incluindo a realização de correção de temperatura.
Opção 1
Vá para o site acima, clique em ‘Clonar ou baixar’ e selecione ‘Baixar ZIP’. Isso deve entregar o MS5611-master.zip ao seu diretório de downloads. Agora, se desejar, mova-o para uma pasta onde poderá encontrá-lo no futuro. Eu uso um diretório chamado ‘dados’ adicionado às minhas pastas do Arduino.
Infelizmente, o arquivo.zip baixado não inclui nenhum esboço de exemplo e seria bom adicionar a biblioteca e os exemplos ao IDE do Arduino. Há um exemplo mínimo no arquivo README.md que pode ser copiado e colado em um esboço e salvo. Esta é uma maneira de começar.
opção 2
Para facilitar a execução do código neste instrutível, adicionei o exemplo mínimo acima e os exemplos mostrados aqui à biblioteca e anexei um arquivo.zip abaixo que será instalado no IDE do Arduino.
Baixe o arquivo zip abaixo. Mova-o para uma pasta melhor, se desejar.
Inicie o IDE Arduino. Clique em Esboço> Incluir biblioteca> Adicionar arquivo zip e selecione o arquivo. Reinicie o IDE. O IDE agora terá a biblioteca instalada e todos os exemplos mostrados aqui. Verifique clicando em Arquivo> exemplos >> MS5611-mestre. Três esboços devem ser listados.
Etapa 2: conectar o sensor ao Arduino e testar
As placas GY63 / GY86 geralmente vêm com conectores, mas não soldadas. Portanto, é sua escolha soldar os conectores no lugar e usar cabos Dupont macho-fêmea ou (como eu decidi) soldar os cabos diretamente na placa e adicionar pinos ao cabo para conectar ao Arduino. A última opção é melhor se você acha que pode querer soldar a placa em um projeto mais tarde. O primeiro é melhor se você quiser usar a placa para experimentação. Desoldar cabos é muito mais fácil do que um cabeçalho de pino.
As conexões necessárias são:
GY63 / GY86 Arduino
VCC - energia 5v GND - terra GND SCL - relógio A5 I2C> SDA - dados A4 I2C
Anexe a placa do sensor ao Arduino como acima e conecte o Arduino ao PC / laptop por meio de seu cabo USB. Cubra também o sensor com algum material opaco / preto. O sensor é sensível à luz (como é o caso da maioria desse tipo de sensor).
Inicie o IDE Arduino. Clique:
Arquivo> exemplos >> MS5611-master> MS5611data2serial.
Uma nova instância do IDE aparecerá com o esboço. Clique no botão de upload (seta para a direita).
Em seguida, inicie a plotadora serial - clique em Ferramentas> Plotadora serial e, se necessário, defina a taxa de transmissão para 9600. Os dados enviados são a pressão em Pascals. Depois de um segundo ou mais, ele será redimensionado e elevar e abaixar o sensor em, digamos, 0,3 m deve mostrar como abaixar e elevar o traço (altura mais baixa é pressão mais alta).
Os dados têm algum ruído. Veja o primeiro gráfico acima. Isso pode ser suavizado usando um filtro digital (uma ferramenta muito útil).
A equação do filtro é:
valor = valor + K (novo valor)
onde ‘valor’ são os dados filtrados e ‘novo’ são os últimos medidos. Se K = 1 não há filtragem. Para valores mais baixos de K, os dados são suavizados com uma constante de tempo de T / K, onde T é o tempo entre as amostras. Aqui, T está em torno de 17ms, portanto, um valor de 0,1 dá uma constante de tempo de 170ms ou cerca de 1 / 6s.
O filtro pode ser adicionado por:
Adicione uma variável para os dados filtrados antes da configuração ():
flutuador filtrado = 0;
Em seguida, adicione a equação do filtro após a pressão =…. linha.
filtrado = filtrado + 0,1 * (filtrado por pressão);
É uma boa ideia inicializar o valor filtrado para a primeira leitura. Portanto, adicione uma instrução 'if' ao redor da linha acima para que tenha a seguinte aparência:
if (filtrado! = 0) {
filtrado = filtrado + 0,1 * (filtrado por pressão); } else {filtrado = pressão; // primeira leitura, portanto, defina filtrada para leitura}
O teste ‘! =’ É ‘diferente’. Portanto, se ‘filtrado’ não for igual a 0, a equação do filtro é executada, mas se for, é definida para a leitura de pressão.
Por último, precisamos alterar "pressão" para "filtrada" na instrução Serial.println para que possamos ver o valor filtrado.
O melhor aprendizado é obtido fazendo as alterações acima manualmente. No entanto, incluí-os no exemplo MS5611data2serialWfilter. Portanto, se houver problemas, o exemplo pode ser carregado.
Agora faça o upload do código para o Arduino e veja a melhoria. Veja o segundo gráfico acima e observe que a escala Y é expandida x2.
Tente um valor mais baixo para a constante do filtro, digamos 0,02 em vez de 0,1, e veja a diferença. Os dados são mais suaves, mas com uma resposta mais lenta. Este é um compromisso que deve ser buscado ao usar este filtro simples. A característica é a mesma de um filtro RC (resistência e capacitância) amplamente utilizado em circuitos eletrônicos.
Etapa 3: torná-lo autônomo
Agora vamos adicionar um escudo de teclado LCD, converter a pressão em altura em metros e mostrá-la no visor. Também adicionaremos a capacidade de zerar o valor pressionando o botão ‘Selecionar’ do teclado.
Com a blindagem do LCD no Arduino, o sensor deverá ser conectado à blindagem do LCD. Infelizmente, os protetores de LCD geralmente vêm sem os soquetes apropriados. Portanto, as opções são fazer conexões de solda ou obter algumas réguas de soquete. A tira de soquete está disponível no ebay por não muito mais do que o custo da postagem. Faça uma pesquisa por 'tira de soquete de 2,54 mm' e procure por aqueles que são semelhantes aos do Arduino. Eles geralmente vêm em comprimentos de 36 ou 40 pinos. Eu evitaria os pinos girados, pois eles não são profundos o suficiente para os cabos padrão da Dupont.
A tira de encaixe deve ser cortada no comprimento certo e o corte deve ser feito no mesmo lugar que um alfinete. Portanto, para uma tira de 6 pinos - remova o sétimo pino com um alicate fino e, em seguida, corte nesse local usando uma serra de metal júnior. Eu lixo as pontas para deixá-las bem organizadas.
Certifique-se de que não haja pontes de solda ao soldá-los na placa.
Com a decisão apropriada de conectar o sensor, conecte a blindagem do LCD no Arduino e conecte o sensor com os mesmos pinos - mas agora na blindagem do LCD.
Prepare também a bateria e o cabo. Eu criei meu chumbo com peças na minha lixeira, mas elas também estão disponíveis no ebay - incluindo uma boa opção que inclui uma caixa de bateria e um interruptor. Pesquise por ‘PP3 cabo de 2,1 mm’.
O consumo atual está em torno de 80ma. Portanto, se você quiser funcionar por mais do que alguns minutos, considere uma bateria de 9v maior do que a PP3.
Etapa 4: adicionar código para altitude e o LCD
Precisamos fazer um pouco mais de codificação para converter a pressão em altura e direcionar a tela.
No início do esboço, adicione a biblioteca de exibição e diga quais pinos são usados:
#incluir
// inicializa a biblioteca com os números dos pinos da interface LiquidCrystal lcd (8, 9, 4, 5, 6, 7);
Em seguida, precisamos de algumas variáveis e uma função para ler os botões do teclado. Todos estão conectados à entrada analógica A0. Cada botão fornece uma voltagem diferente para A0. Uma pesquisa em "código de botões de escudo lcd arduino" encontrou um bom código em:
www.dfrobot.com/wiki/index.php/Arduino_LCD_KeyPad_Shield_(SKU:_DFR0009)#Sample_Code
Adicione este código antes de configurar ():
// define alguns valores usados pelo painel e botões
int lcd_key = 0; int adc_key_in = 0; #define btnRIGHT 0 #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #define btnNONE 5 // leia os botões int read_LCD_buttons () {adc_key_in = analogRead (0); // ler o valor do sensor // meus botões quando lidos estão centralizados nestes valores: 0, 144, 329, 504, 741 // adicionamos aproximadamente 50 a esses valores e verificamos se estamos próximos se (adc_key_in> 1000) return btnNONE; // Tornamos esta a primeira opção por motivos de velocidade, pois será o resultado mais provável if (adc_key_in <50) return btnRIGHT; if (adc_key_in <250) return btnUP; if (adc_key_in <450) return btnDOWN; if (adc_key_in <650) return btnLEFT; if (adc_key_in <850) return btnSELECT; return btnNONE; // quando todos os outros falharem, retorne isso …}
A altitude geralmente é zerada no ponto inicial. Portanto, precisamos de variáveis para altura e referência. Adicione-os antes de setup () e a função acima:
float mtr;
float ref = 0;
A conversão de pressão em Pascals para metros é quase exatamente uma divisão por 12 no nível do mar. Esta fórmula é adequada para a maioria das medições baseadas no solo. Existem fórmulas mais precisas que são mais apropriadas para conversão em grandes altitudes. Use-os se for usar para registrar a altitude de um voo de balão.
A referência deve ser definida para a primeira leitura de pressão para que comecemos na altura zero e quando o botão SELECIONAR for pressionado. Adicione, após o código do filtro e antes da instrução Serial.println:
if (ref == 0) {
ref = filtrado / 12,0; } if (read_LCD_buttons () == btnSELECT) {ref = filtrado / 12,0; }
Depois disso, adicione o cálculo da altura:
mtr = ref - filtrado / 12,0;
Por último, altere a instrução Serial.println para enviar 'mtr' em vez de 'filtrado' e adicione o código para enviar 'mtr' ao LCD:
Serial.println (mtr); // Enviar pressão via serial (UART)
lcd.setCursor (0, 1); // linha 2 lcd.print (mtr);
Todas as alterações aqui estão incluídas no exemplo MS5611data2lcd. Carregue como na etapa 2.
Existe um último mod que é útil. O display é difícil de ler quando está sendo atualizado 60 vezes por segundo. Nosso filtro está suavizando os dados com uma constante de tempo em torno de 0,8 s. Portanto, atualizar a tela a cada 0,3s parece suficiente.
Portanto, adicione um contador após todas as outras definições de variáveis no início do esboço (por exemplo, após float ref = 0;):
int i = 0;
Em seguida, adicione o código para incrementar 'i' e uma instrução 'if' para executar quando chegar a 20 e, em seguida, defina-o de volta para zero e mova os comandos Serial e LCD dentro da instrução 'if' para que sejam executados apenas a cada 20 leituras:
i + = 1;
if (i> = 20) {Serial.println (mtr); // Enviar pressão via serial (UART) lcd.setCursor (0, 1); // linha 2 lcd.print (mtr); i = 0; }
Não incluí um exemplo com esta última modificação para encorajar a digitação manual do código, o que ajuda no aprendizado.
Este projeto deve fornecer um bom ponto de partida, por exemplo, para um barômetro digital. Para aqueles que podem querer considerar o uso em modelos RC - procure OpenXvario para o código que habilita um altímetro e variômetro para sistemas de telemetria Frsky e Turnigy 9x.
Recomendado:
Medida de tempo (relógio de fita métrica): 5 etapas (com fotos)
Medida de tempo (relógio com fita métrica): para este projeto, nós (Alex Fiel e Anna Lynton) pegamos uma ferramenta de medição do dia a dia e a transformamos em um relógio! O plano original era motorizar uma fita métrica existente. Ao fazer isso, decidimos que seria mais fácil criar nossa própria concha para acompanhar
Fita métrica de distanciamento social de 1,50 m: 3 etapas (com fotos)
Fita métrica para distanciamento social de 1,50 m: Nesta versão, adapto uma fita métrica normal para medir quando uma distância de 1,5 m foi percorrida. Direi então " um metro e meio ". Ele também indicará com uma luz verde ou vermelha se você está acima ou abaixo desta distância. Este projeto
Demonstração de motor elétrico: 5 etapas (com fotos)
Demonstração do motor elétrico: Este motor elétrico demonstra os princípios básicos do eletromagnetismo. Esta demonstração é simples de construir e leva apenas um fim de semana para fazer isso. Lista de peças: Impressora 3DCortador de laser Fio elétrico FioMagnet (1) Lixa de grão médio de ímã de cerâmica (2) Corne
Fita métrica de fones de ouvido para iPod: 4 etapas
Fita métrica de fones de ouvido IPod: Você já precisou medir algo, mas não tinha uma fita métrica à mão? Da próxima vez, use os fones de ouvido do seu iPod! Basta adicionar marcas de polegada ao cabo dos fones de ouvido e você terá uma fita métrica de 31 "que está sempre com você, sem peso extra ou c
Alto-falante de fita métrica: 7 etapas
Palestrante da fita métrica: Ok pessoal, este é meu primeiro instrutível, por favor, comente. Bem, eu estava entediado e tinha uma fita métrica quebrada por aí e decidi fazer uma caixa de alto-falante com ela. Este é um projeto divertido e simples. Isso também é muito bom se o seu novo vendido