sábado, 23 de dezembro de 2017

Variometro Arduino com Oled e BMP280

Depois de um longo tempo apanhando e ainda apanhando resolvi postar esse projeto.

Cansei de ver esses variometros caros e convenhamos e esta merda só serve pra apitar, então resolvi montar o meu e da forma mais barata possível, e mesmo assim conseguindo um ótimo resultado.

O variometro esta super simples, apita nas ascendentes selecionável entre 0.3 0.5 e 0.8 metros por segundo, além disso mostra altitude, tempo de voo, temperatura, variação em metros por segundo e nível de bateria.

Falta algumas coisas que gostaria de fazer, mas estou um pouco limitado nos meu conhecimentos de códigos e tal (to estudando...).

Falta fazer um menu com:
Calibragem de altitude,
Calibragem mais flexível dos parâmetros do vario (subida e descida)
Gravação dos dados dos vôos... (esse ta foda de fazer mas está funcioando relativamente bem!!!)...
Versão teste com gravação de altitude (17/01/2018):

CODIGO E BIBLIOTECA AQUI:
(as bibliotecas estão no arquivo zip completo)


clique rápido no botão muda a sensibilidade;
manter segurando por 3 segundos entra no menu de voos;
manter segurando por 9 segundos ele vai alternar entre as telas e depois resetar todas as gravações de voos.


Acabei fazendo uma placa simples com oled I2C, mas descobri que se fosse com o outro modelo com mais pinos ficaria mais rápido e preciso (tem que alterar a quantidade mínima de samples para 40 para funcionar com outro oled).



Esse variometro é baseado em arduino com o microcontrolador Atmega 328.
Então pode ser montado com os arduinos Uno, Nano, Pro Mini, Lilipad...

A pinagem você pode encontrar na imagem.



I2C que seria o SDA no pino 4 e SCK(ou scl) no pino 5. (oled e sensor bmp280 em paralelo).
Botão digital 4 e GND.
Buzzer no pino digital 8 e GND.

Material necessário:
- Arduino Nano, Pro Mini ou Uno;
- Sensor Bmp280;
- Oled i2C 96" 128x64;
- 1 push button;
- 1 Buzzer;
- 1 botão de liga / desliga;
- TP4056 (carregador de Lipo opcional);
- 1 Bateria de Lipo 1s (opcional)
- fios para conexões.

Você também pode usar uma bateria 9 volts, mas não esqueça de sempre conectar no pino VIN. Pois se conectado em outro pino pode queimar o arduino.

Vou fazer uma observação aqui sobre o TP4056:
Ele vem projetado para carregar baterias de 1000mah, para usar baterias menores, você deve fazer um pequena alteração na placa.
Tem que trocar o resistor indicado que originalmente é 1200ohms ou 1.2kohms ou no código SMD(122).






E como tenho tido muitas reclamações do volume baixo do variometro, você pode conectar um mini amplificador de 3w no lugar do buzzer. Ai você pode usar o buzzer ou um alto-falante pequeno.

Seque ligação abaixo.
Preste atenção nas voltagens:

Oled e Sensor BMP 280 3.3V;
Amplificador 5V;
Bateria 9V no pino VIN.


ou para ter o controle do volume, você pode colocar esse amplificador abaixo.



Se for fazer o variometro a partir da placa, segue algumas dicas.
Componentes, encontrei todos na Aliexpress, demora um pouco mas sai mais barato, mas pode comprar também na mouser ou digikey.

Bom, vou começar com o link para o código e bibliotecas necessárias:

Se for montar com as placas arduino isso ja é o suficiente. Agora se for fazer o projeto completo... vamos lá... que a Treta começa agora.

Vamos começar com a placa em si.


Esse é o esquema de ligação dos componentes e não o fiz aleatoriamente. Estudei bastante os datasheets, e mesmo assim acabei fazendo varias cagadas.... Mas é fazendo merda que se aduba o projeto....



Umas observação que já faço de cara, é que ser for usar um Oscilador modelo CSTCE16M0v53-R0
não existe necessidade de colocar os capacitores C1 e C2, se fizer da pau... mas pode usar cristal e ai sim precisa dos capacitores.

Se for soldar com pasta de solda, facilita muito pq os componentes são minúsculos e precisa de perícia e muita paciência.




É possível fazer a placa em casa? Acho bem difícil, principalmente por ser tão pequena e dual layer.
Aonde mandar fabricar a placa? 
Eu estou mandando para o site: https://www.oshpark.com/

Sai super barato, 20 reais por 3 exemplares da placa.
OBS: pra ficar mais legal, selecione a opção de espessura da placa "thickness" 2oz Copper with
0.8mm FR4. (pra ficar mais fininha)


É só entrar no site e mandar este arquivo ZIP:

Placa com os capacitores do cristal:

Placa Atualizada sem os capacitores para oscilador:

Ok mandamos fazer a placa, agora vem os componentes....
Tenho esse arquivo em excel com fotos e modelos específicos q usei: https://github.com/tlbenedetti/variometer_thiagogo/blob/main/Bill%20Of%20Materials.xlsx

Essa parte é bem trabalhosa e chatinha... encontrar tudo essas pecinhas e o pior de tudo, esperar chegar. Mas chega! (pelo menos todas as minhas vieram direitinho).
Ahhh!! prestar a atenção ao comprar o oled na ordem dos conectores GND VCC SCL SDA.

A bateria estou usando de Lipo uma célula. A de 100mah dura 4 horas... a carga se quiser colocar mais fica a escolha de vocês... so lembrando que a placa tem um ci responsável por carregar a bateria e esta configurado "por intermédio de um resistor R5" em 100mah por hora (resistor 10k). Possível alterar pra até 500mah por hora (limite do ci) (se não me engano resistor de 2.2k). 

Se tudo der certo até aqui e tivermos em mãos alguma coisa parecida com isso.



Os componentes são realmente muito pequenos, comece a soldar pelo sensor se for fazer com ferro de solda.



comparando a placa com uma moeda... 27mm por 27mm...


Se você observar soldei os capacitores C1 e C2... mas não deveria pois estou usando o oscilador q já possui embutido... Tive que retirar...




Acabou ficando assim:


Sem os capacitores C1 e C2

Usei esse mapa tosco pra montar e anotei a ordem pra facilitar a solda com ferro:


Mas da pra usar a imagem da Placa junto com  esquema elétrico ou lista de materiais que tem todas as descrições:





Bom se chegou até aqui já foi uma luta kkkk.... Mas os problemas ainda não acabaram...

É preciso programar a bagaça!!! e pra isso deixei preparado uma porta icsp embaixo da placa.

Mas você vai precisar comprar um gravador ARV modelo USBASP. (serve os ching-ling mesmo).

Você pode baixar os drives aqui: http://www.fischl.de/usbasp/
mas se estiver usando Mac não precisa, reconhece automatico.
e no programador do arduino use a opção carregar usando o programador (usbasp).




Adaptador com os pogopin. A ideia é fazer algo desse tipo pra facilitar:


E acabou ficando assim pogo pin de 0.68mm:



E Finalmente:












O video abaixo mostra a ultima versão do código com gravação dos parâmetros. São 20 memórias, não sendo possível mais por conta da memória disponível no atmega328. 

Para apagar a memória toda é só segurar o botão por 10 segundos.



Além disso fiz um case na impressora 3d! Uma versão tosquinha e outra com o botão que ainda não finalizei, mas a ideia é que o botão fica no proprio case evitando peças soltas:

Esse abaixo é o que imprimi e testei, mas precisa de alguns ajustes:https://drive.google.com/open?id=1mYSW6wT-5I9HbR46S_FaDg_HidtICWGu





E este abaixo com umas melhorias (praticamente finalizado):  https://3dwarehouse.sketchup.com/model/909bfa09-a8f8-4740-9803-f62881d0b31d/Case-Vario-Thiagog%C3%B3


Segue link do arquivo STL pronto para impressão 3D: https://github.com/tlbenedetti/variometer_thiagogo/blob/main/case%20variometro_para%20impress%C3%A3o.stl





Esse Laranja foi impresso em impressora SLA em Resina.
Hoje é o que eu uso pra voar.


Esse amarelo era um backup que eu tinha, faltava a case e bateria.
acabei montando e vendendo. Ficou muito bom pra pender no tirante do parapente.


Tenho recebido um Feedback de muita gente de varios lugares pelo mundo!
Muito obrigado por montar e compartilhar as experiências comigo.

Fica ai algumas fotos dos projetos do pessoal.








Nuttech Flybox 1 - Mercadolivre - Argentina


Nuttech Flybox 2 - Mercado livre - Argentina




Parasna - instagran: @iranparaglidingg

Variometro Level Up



Raven Flight Equipament - Mercadolivre Brasil


Quem puder compartilhar e me ajudar a finalizar esse projetinho, Seja bem vindo, quem não quiser seja bem vindo também!


Para quem não sabe programar, vou deixar abaixo das fotos, alguns variometros com modificações que podem ser comprados na internet.







Valew!!!

#variometer #variometro #vario #arduino #makers #DIY #paraglider #parapente #thiagogo #Thiagogó #variomètre 

66 comentários:

  1. Parabéns Thiago pela tua disponibilidade. Já fiz o meu baseado no teu código e está funcionando muito bem. Simples e confiável....Forte Abraço parceiro.

    ResponderExcluir
  2. Boa tarde Thiago cara gostei muito do seu projeto, estava querendo fazer um que comunicasse via bluetooth com o xcsoar consegui fazer o xc ler o bluetooth mas não estou consequindo enviar os dados do BMP280, de repente vc pode me dar uma ideia obrigado e parabens pelo projeto não deixe de postar o finalmente, abraços.

    ResponderExcluir
    Respostas
    1. Opa tudo bom?! Então, chutando eu acho que o xcsoar recebe a informação do Bluetooth através do serial monitor... aí teria que colocar as variáveis das informações naquele serialprint... acho q é isso...

      Excluir
    2. Ne caso precisaria de um módulo Bluetooth?

      Excluir
  3. super my friend ... i want connect greater oled ...

    ResponderExcluir
  4. Thiago blz uma curiosidade vc utilizou um arduino 5v e esta alimentando o mesmo com 3,7v,não teria uma tendencia a funcionamento meio deficitario? Podendo sofrer atrasos? abraços !

    ResponderExcluir
  5. Com certeza com a voltagem mais baixa ele ficaria mais lento, mas a diferença é imperceptível pois a lipo carregada fica com 4,2volts... o que deixaria mais rápido seria a conexão do oled e sensor em SPI ou invés de I2C

    ResponderExcluir
  6. Este comentário foi removido pelo autor.

    ResponderExcluir
  7. Bom dia Thiago blz, confeccionei 2 modelos de vario um so o apto e outro com o oled cara ficou bom demais agora notei uma coisa, ele le e grava o ganho de altitude em cima do pouso, nao seria enteressante em cima da decolagem abracos.

    ResponderExcluir
  8. Opa tudo bom?!
    Minha ideia era pegar a altura e excluir a altura do pouso( pensando sempre q o pouso fosse mais baixo), mas pode ser q tenha me com fundido é feito alguma bobagem na programação.... obrigado pelo toque, vou verificar....

    ResponderExcluir
    Respostas
    1. Thanks for the great device. I have implemented height from start

      Excluir
  9. Hola, Thiago, agradezco enormemente que gente como tu comparata este tipo proyectos que llevan tanto trabajo sin fines de lucro. Gracias hice un variometro para volar que de otra forma me costaria demasiado dinero y posiblemente nisiquiera tendria uno. Un abrazo desde URUGUAY.

    ResponderExcluir
  10. hello;
    I applied progy.I like it and very beautiful and very sensitive.I have a problem.The sound is too low.I have a small box my variometer so voice is too low.I am using small buzzer.
    I want to raise the voice.How can ı do it?
    p.s. I dont want to use big buzzer.
    Iam waiting your answer.Thank you

    ResponderExcluir
    Respostas
    1. Use a 3w amplifier module and a speaker in place of the buzzer will greatly improve the sound.

      Excluir
  11. Obrigado Thiagogo...
    Eu vou mantê-lo atualizado sobre a operação!!

    ResponderExcluir
  12. Respostas
    1. https://drive.google.com/open?id=1vPsMePv_DHzuqNviZ7B89mRKi-gVlM3P

      or

      https://drive.google.com/open?id=1as27CFyAZq_Izczv55A9q6QVncg2wK8x

      Excluir
    2. Thank you, Whats the difference between first file and the file with capasitors?

      Excluir
  13. the difference is for the use of either an oscillator or a crystal.
    the oscillator does not need the 0.22uf capacitors the crystal needs.

    ResponderExcluir
  14. Bom dia, Onde consigo as peças para fabricar um desse para mim??

    ResponderExcluir
  15. Se for montar com a placa do arduino e as shields, pode comprar pelo mercado livre ou tem uma loja muito boa chamada Mamute eletronica, ou Baú da eletrônica. agora se for montar a placa vc pode ou comprar os componentes soltos ou na digikey.com ou mouser.com, ou até mesmo soltar os componetes dos shields com soprador quente.

    ResponderExcluir
    Respostas
    1. Good afternoon. You made a very nice vario! I have a problem. After inserting the codes into the program, I can not upload it to the arduino nano .. The problem is in the 4th line "Adafruit_sensor.h: No such file or directory ". What else is missing?

      Excluir
  16. is missing installing the libraries in the arduino libraries folder.

    ResponderExcluir
  17. Which library is not installed? Bmp280 is installed.

    ResponderExcluir
  18. All is done. Everything work perfectly!

    ResponderExcluir
  19. Chapeau! continuez et merci pour le partage.

    ResponderExcluir
  20. Greetings!

    I have built this variometer but I have one problem. The variometer works really slow, it seems like its working on 1MHz.
    I think that the problem is FUSE BITS on atmega328p (they are set wrong).
    Can someone please post me correct fuse bits for this shematic. My fuse bits right now are

    extended 0XFF
    high 0Xd9
    Low 0X62

    I have bricked about 4 ATMEGA328P's by setting the wrong fuse bits :-(.

    ResponderExcluir
    Respostas
    1. I used the fuses of own ide. I bootloaded on ide.
      And to be honest in a little naive in this regard.

      Excluir
  21. Hello,
    I uploaded version 1.1 code and soldered all parts like in the picture but the menu does not appear when i push the push button. Any suggestions?
    Thanks

    ResponderExcluir
  22. quick clicking the button changes the sensitivity;
    hold for 3 seconds enters the flight menu;
    Keep holding for 9 seconds it will switch between screens and then reset all flight recordings.

    ResponderExcluir
  23. muchas gracias ahora tengo mi vario, funciona muy bien.. gran trabajo!!!

    ResponderExcluir
  24. Já vou tentar criar o meu vário , grande ajuda amigo parabéns Deus abençoe . Brigado

    ResponderExcluir
  25. Olá Thiago ! Eu vivo na Rússia, eu gosto de voar, eu gostaria de fabricar um instrumento de sua instrução. Eu posso fazer isso, muito obrigado, mas há um problema, eu realmente preciso para o dispositivo mostrou a 0 no instante em que eu, hoje, eu sou muito ruim sei de programação, você poderia me ajudar, mudar a sua firmware para que a altura era igual a 0 quando se liga o aparelho. Eu realmente espero que você possa me ajudar, obrigado, atenciosamente Andrey.

    ResponderExcluir
  26. Parabens Thiago. Sensacional. Gostaria de entrar em contato com vc te explicar uma situação e quem sabe vc poderá me ajudar. Desde já fico Grato. Allan 35 98877-2121

    ResponderExcluir
  27. Eu fiz aqui e deu super certo! Só tive que incluir o endereço na variável que inicializa o BMP, pois não carregava na tela as informações de temperatura e tal. Na variável sensor_bmp.begin() alterei para sensor_bmp.begin(0x76) tá funcionando lindamente no Arduino uno. Agora vou montar o projeto todo. Muito obrigada por compartilhar seu trabalho! Parabéns!

    ResponderExcluir
  28. Eu fiz aqui e deu super certo! Só tive que incluir o endereço na variável que inicializa o BMP, pois não carregava na tela as informações de temperatura e tal. Na variável sensor_bmp.begin() alterei para sensor_bmp.begin(0x76) tá funcionando lindamente no Arduino uno. Agora vou montar o projeto todo. Muito obrigada por compartilhar seu trabalho! Parabéns!

    ResponderExcluir
  29. Eu fiz aqui e deu super certo! Só tive que incluir o endereço na variável que inicializa o BMP, pois não carregava na tela as informações de temperatura e tal. Na variável sensor_bmp.begin() alterei para sensor_bmp.begin(0x76) tá funcionando lindamente no Arduino uno. Agora vou montar o projeto todo. Muito obrigada por compartilhar seu trabalho! Parabéns!

    ResponderExcluir
  30. Fala Thiago blz me tira uma dúvida, vc chegou a comercializar este vario?

    ResponderExcluir
  31. Excelente, um forte abraço e e igual sucesso nos proximos

    ResponderExcluir
  32. Top... meu primeiro arduino.. deu certo... agora queria incluir o modulo bluetooth... alguem tem o codigo para eu acrescentar neste projeto... to começando agora em arduino.

    ResponderExcluir
    Respostas
    1. Infelizmente não manjo muito do modulo bluetooth, ia ficar show.

      Excluir
  33. boa noite thiago estou querendo fazer um vario desses , mas nao se nada de programacao...
    vi alguns videos sobre arduino e os codigos. onde e como devo me informar para conseguir fazer esse projeto?

    ResponderExcluir
  34. genial código, he hecho una pequeña funcion para que se acople con xctrack

    la he probado y funciona bien, espero les sirva.

    void sentToUSB(float* temperature, float* pressure){

    if(true){

    String str_out = String("LK8EX1,")
    +String(*pressure)
    +String(",0,9999,")
    +String(*temperature/10)
    +String(",999,");

    unsigned int checksum_end, ai, bi; // Calculating checksum for data string
    for (checksum_end = 0, ai = 0; ai < str_out.length(); ai++)
    {
    bi = (unsigned char)str_out[ai];
    checksum_end ^= bi;
    }

    Serial.print("$");
    Serial.print(str_out);
    Serial.print("*");
    Serial.println(checksum_end, HEX);
    }
    }

    ResponderExcluir
    Respostas
    1. Estoy probándolo para usarlo con xc track pero todo el rato me devuelve el siguiente error.
      2022-01-12 09:53:10.166 ERROR [org.xcontest.XCTrack.z$b:c()18] USB bulk failed: -1
      A que puede ser?
      Muchas gracias

      Excluir
  35. Podrías subirlo a github, he hecho algunas modificaciones que pienso servirían como incluir módulo bluetooth, ahora estoy intentando migrar el código a esp32.

    ResponderExcluir
    Respostas
    1. Teria essas modificações para usar com bluetooth para compartilhar conosco? Gracias!

      Excluir
  36. Comparto código para el Bluetooth

    void sendData(int *temperature, long *pressure)
    {

    String str_out = String("LK8EX1,") + String(*pressure) + String(",0,9999,") + String(*temperature) + String(",999,");

    unsigned int checksum_end, ai, bi; // Calculating checksum for data string
    for (checksum_end = 0, ai = 0; ai < str_out.length(); ai++)
    {
    bi = (unsigned char)str_out[ai];
    checksum_end ^= bi;
    }
    str_out = "$" + str_out + "*" + String(checksum_end, HEX);

    if (enableSerial)
    {
    Serial.println(str_out);
    }
    sendDataBluetoothClasic(str_out);
    }

    ResponderExcluir
    Respostas
    1. Olá amigo, você poderia informar em qual parte do programa posso colocar esse código?

      Excluir
  37. vc ja esta comercializando seu vario ?

    ResponderExcluir
    Respostas
    1. Infelizmente não consegui produzir pra venda...

      Excluir
    2. https://articulo.mercadolibre.com.ar/MLA-813870477-flybox-2-variometro-altimetro-parapente-paramotor-aladelta-_JM
      https://nuttech.com.ar/inicio/120-flybox-2-variometro-altimetro-temperatura.html

      Excluir
  38. Sensacional. Alguém implementou o filtro de kalman nesse projeto que possa compartilhar?

    ResponderExcluir
  39. Thank you very much for this great project!

    Can you or somebody else explain the calculation of the climbrate from the sensor readings.

    I get thet you are collecting samples of altitude/time and calculate the climbrate out of the last 10 samples. But i really don't get this formula:

    vario=1000*((samples*N1)-N2*N3)/(samples*D1-D2*D2);

    What kind of fliter is this?

    Thanks, Markus

    ResponderExcluir
  40. Thiago voce não vende??? Eu nao sei nada de programar e estou precisando de um

    ResponderExcluir
  41. Hi Thiago and to all those who follow him.
    I have long been built a variometer and it works very well, but I wanted to include the GPS sensor to have speed and GPS speed.
    I'm going crazy as I can't see the GPS data on the screen,
    Someone could help me, please.
    I attach the sketch below.
    Thank you

    ResponderExcluir
  42. http://www.fileconvoy.com/dfl.php?id=ge31b72541346bc5810004590393472939499a7eb61

    ResponderExcluir
  43. Do you have a code for an arduino nano every, with U8g2??

    ResponderExcluir
  44. E ai pessoal tudo bem , cara que projeto top, estou tentando montar o meu pois estou na duvida se esse programa que está disponível ali no link serve tanto para a placa arduino já comprada pronta, quanto para a que foi mandado fazer a impressão, alguém sabe me disser?

    ResponderExcluir
    Respostas
    1. Opa, tudo Bom Romario, desculpa a demora, não estava conseguindo acessar.
      Sim, da pra usar qualquer placa de arduino para montar o projeto, você só tem que selecionar a placa correta na plataforma de programação. Só se atente a colocar as bibliotecas na pasta correta.

      Excluir
    2. O Tiago valeu por me responder, estou aguardando chegarem as peças q comprei para iniciar a montagem . Quando ficar pronto te envio como ficou.

      Excluir
    3. Montei o meu deu super certo o porém é que a bateria marca sempre zerada usei uma 3.7v de 700 mAh. Alguma dica de como resolvo esse probleminha?

      Excluir
    4. Estranho pq usei uma verificação interna de tensão de entrada do próprio microcontrolador. ou a bateria realmente esta fraca ou pode ter alguma diferença no microcontrolador...
      vc pode adaptar um divisor de tensão e medir em um pino analógico para determinar o nível da bateria.

      Excluir