Je te reponds par MP pour ne pas polluer le forum.
Variomètre maison à base d'Arduino
Bonsoir à tous
Je viens de finir mon vario ! ( sur la breadboard)
il est à base de BMP280/MPU9250/écran i2c 0.96’ /arduino minipro 3.3V /buzzer / 3 boutons pour régler la hauteur de référence et obtenir la hauteur min et max du vol
Il s’inspire beaucoup de ceci : http://www.instructables.com/id/Standalone-Arduino-Altimeter/?ALLSTEPS
et il intègre les améliorations de Sinseman et Prunkdump.
Il me reste à modéliser et imprimer le boîtier en 3D
Merci beaucoup à Prunkdump
J’espère un petit soaring demain matin pour fêter ça :ppte:
Bravo pour ton vario ! karma+
Des photos !!! Des videos !!!
En tout cas tu progresses vite en programmation. Il faut vite monter tout ça pour tester en vol.
C’est ambitieux le boitier en imprimante 3D ! Tu en a une à la maison ? Tu as un FabLab près de chez toi ? Je serais curieux de la qualité que l’on peut obtenir avec ces machines. C’est sur qu’avec ça tu peux essayer de minimiser ton boitier au maximum.
Bonne continuation à toi en tout cas.
Moi je travaille également sur une version plus petite ( avec un boiter Szomk AK-H-13 ) avant de passer à une version très petite en CMS.
A+
Bonsoir
Des photos,… des que j’aurais fini. Le plus long c’est d’attendre ce fichu colis d’Asie avec le mini pro à l’intérieur. 25 jours qu’il est bloqué à roissy ! Pour le boitier avec l’imprimante 3d c’est pas très compliqué, j’en ai effectivement une ( c’est pas la plus évoluée, mais on arrive à des choses très acceptables. Et comme pour l’arduino, le plus long c’est pas d’assembler les composants, mais de modéliser pour l’impression
Pour l’instant j’en imprime un à la taille de la batterie que j’ai à disposition
Bonjour, est ce que la liste de course sur Github est toujours d’actualité, ou il y a des upgrade à faire (autre que le prix) pour avoir quelque amelioration?
la liste :
Matériel et coût
Le but de ce projet est de fabriquer un variomètre à faible coût pour une utilisation en vol libre (dans mon cas la pratique du parapente). Voici à titre indicatif le matériel utilisé et leur prix d’achat sur eBay international (prix de janvier 2014) :
- Arduino nano V3.0 | 5,10€
- Nokia LCD 5110 | 2€
- BMP085 Digital Barometric Pressure Sensor | 2,90€
- Digital Push Button Switch Rotary Encoder | 4,20€
- Mini USB Battery Charging Board 5V | 0,90€
- Buzzer 8 ohm | 0,20€
- DC-DC Converter Step Up 1-5V 500mA | 1,15€
- 3,7V 600mAh LiPo Battery | 3,25€
- RTC Module for Arduino | 1,55€
- 3x 10k Ohm resistor + 1x 120 Ohm resistor | 0,10€
- Right Angle Mini Slide Switch | 0,10€
- Cables | 3€
- Plastic Electronics Project Box Enclosure DIY 27x60x100mm | 2,40€
Merci
C’est pour une commande au pere noel…
Salut.
Ca dépend de quel projet tu veux partir. Il y en a deux :
https://github.com/sinseman/DIY-Arduino-variometer
C’est le projet initial. Le vario affiche l’altitude et le vario, et il est capable de mémoriser des stats de vol. Il y a également la possibilité d’intéragir avec le vario à l’aide d’un bouton.
https://github.com/prunkdump/arduino-variometer
Mon projet. Pas de boutons. Donc tous les réglages se font en amont dans le programme. Pas de stats non plus. Par contre il y a la possibilité d’ajouter au besoin :
-> un accéléromètre (pour une meilleure précision est plus de réactivité)
-> un GPS (affichage de la vitesse sol et de la finesse sol)
-> un lecteur de carte SD (pour l’enregistrement des traces GPS)
Donc la liste de course dépend du projet et des fonctionnalité que tu veux.
En tout cas de façon générale :
-
Moi je ne prendrais pas un arduino nano car il est en 5V. Je prendrais plustôt un arduino pro mini 3.3V. Attention il y a deux versions (5V et 3.3V) et il faut acheter un adaptateur série pour le programmer. Mais du coup ton vario consomera moins et tu n’aura pas besoin du booster. Autrement si tu veux le plus pratique possible tu as le sparkfun pro micro 3.3v ou tout est intégré (surement le meilleur choix mais un peu plus cher).
-
Pour l’écran pas de doute prends le Nokia 5110
-
Pour le baromètre. Tu as maintenant le BMP180 pour le low cost et le ms5611 pour la précision (moi à moins de vouloir vraiment le moins cher je partirai plutôt sur le ms5611)
-
A toi de voir si tu veux l’accéléromètre. Tu peux le trouver déjà monté avec le baromètre ( tape “ms5611 mpu9250” sur google ou “BMP180 mpu9250” selon ton choix de baromètre).
-
Une barrerie lipo 600 est suffisante.
-
Dans le cas de mon projet tu peux ajouter un GPS (Ublox neo-6m) ou un lecteur de carte SD.
-
Pour le projet de Sinseman il te faut le module RTC et les bouton rotatif.
-
Fait attention de prendre un module de charge avec une sortie (où il y a des pattes out+ et out-)
-
Moi je trouve que c’est bien de monter le projet sur un circuit imprimé. Donc j’achèterai une plaque de prototypage (stripboard) avec des lignes (pas les points).
Voilà.
Dans le cas de mon projet j’ai mis une liste de course dans la page précédente de ce fil. Il faut changer le speaker qui est trop petit (par un buzzer ou un plus gros speaker). Et au lieu d’une plaque de cuivre il faut une stripboard.
Amuse toi bien.
Alors voila, mon vario est monté !! :forum:
Après quelques :bang: :bang: et
j’ai reussi à en faire quelque chose.
J’upload une video , le lien va suivre.
Je pense encore faire une petite amélioration pour garder la correction d’altitude en eeprom,
améliorer le boîtier imprimé en 3D pour y intégrer un système de fixation…
On verra pour la suite
Pas mal du tout ! 
J’espere que le chat a survécu …
C’est quand même super sympa ces boitiers en imprimante 3D ! Tu obtiens quelque chose de très compact vu que c’est pile poil ajusté à ton projet ! Il faut te mettre a faire des PCB avec des stripboard et tu pourra avoir quelque chose de très propre.
http://www.selectronic.fr/plaque-bakelite-a-bandes-50x100mm.html
Autrement une remarque. Lorsque tu ajuste ton altitude le vario “bippe” à cause du changement d’altitude. Si tu veux éviter ça tu peux, lorsque tu modifies l’altitude, recaler le filtre de kalman avec la fonction :
kalmanvert.resetPosition( newalti )
Ensuite il est surement possible d’améliorer grandement la réactivité de ton vario. Il faudrait que tu me renvois ton code si tu veux quelques conseils.
Allez ! il faut une video en vol maintenant ! 
Le chat survit ( c’est bien le problème
) …
Je me suis rendu compte d’un autre problème, j’ai une légère dérive de l’altitude . Pourtant j’ai calibré l’accéléromètre ( mal sans doute) je vais le refaire. A ce propos, comment travaille le filtre de Kalman ? est ce que l’orientation du boîtier est importante ? Je pensait insérer un compteur pour recalibrer toute les 5 minutes ? une autre solution ?
A l’allumage du vario, il doit aussi se" calibrer " : l’altitude initiale est totalement farfelue, et elle s’ajuste en une dizaine de seconde ( en bipant bien sur ). Je cherche aussi à améliorer ce point. Je devrais peut être aussi utiliser ta fonction kalmanvert.resetPosition( nouvelle hauteur) dans le void setup()
voila le code "important "
void setup() {
pinMode(bouton1, INPUT_PULLUP); //pour afficher hauteur max, min et T°
pinMode(bouton2, INPUT_PULLUP); //corriger l'altitude -1m
pinMode(bouton3, INPUT_PULLUP); // corriger l'altitude +1m
u8g.firstPage();
do {
draw3();
} while( u8g.nextPage() );
u8g.setFont(u8g_font_gdr14n);
vertaccel_init();
vertaccel_dataReady();
bmp.begin();
vertaccel_updateData();
kalmanvert.init(bmp.altitude(P ,1015) + correction, vertaccel_getValue(), 0.1, 0.3, millis() );
bmp.setOversampling(4);
delay(2000);
}
void loop(void) {
double T,P;
char result = bmp.startMeasurment();
result = bmp.getTemperatureAndPressure(T, P);
double A = bmp.altitude(P, 1015) + correction;
vertaccel_updateData();
kalmanvert.update( A, vertaccel_getValue(), millis() );
A = kalmanvert.getPosition();
double V = kalmanvert.getVelocity();
beeper.setVelocity( kalmanvert.getVelocity() );
beeper.update();
if ( A > A_MAX) {
A_MAX = A;
}
if ( A < A_MIN || A_MIN == 0) {
A_MIN = A;
}
u8g.firstPage();
do {
draw( A,V);
} while ( u8g.nextPage() );
u8g.firstPage();
if ( digitalRead(bouton1) == 0)
{ do {
draw2(T, A_MIN, A_MAX);
} while ( u8g.nextPage() );
u8g.firstPage();
delay(4000);
}
if ( digitalRead(bouton2) == 0)
{ correction--;
A_MAX = 0;
}
if ( digitalRead(bouton3) == 0)
{ correction++;
A_MIN = 0;
}
}
Pour ce qui est de voler, j’espère cette après midi ou peut être demain matin, wait and see
Salut !
Alors d’abord pour la stabilité de l’altitude. Ca peut effectivement venir du calibrage de l’acceleromètre. Mais ça peut aussi venir du BMP qui met un peu de temps à “chauffer”. Il faut voir si cela fini par se stabiliser au bout d’un moment.
Pour le filtre de kalman il n’y a pas à se soucier de l’orientation du vario. C’est la bibliothèque “vertaccel” qui s’occupe de ça. Mais la encore il faut que l’acceleromètre soit bien qualibré.
Pour l’altitude farfelue, il faut que j’explique un point de programmation important.
Je pense que tu as compris que les fonctions en C++ peuvent pendre des paramètres (ex : bmp.altitude(P, 1015) on donne deux pression à la fonction, P et 1015 ) et qu’elles peuvent retourner des valeurs ( ex : A = bmp.altitude(P, 1015) , la fonction retourne l’altitude avec les deux pressions et on la place dans A ).
Donc il y a une première erreur importante :
char result = bmp.startMeasurment();
Cette fonction retourne une valeur dans “result”. Selon la doc de la fonction. Le résultat est 0 en cas d’erreur et autrement c’est le nombre de millisecondes qu’il faut attendre avant de lire la pression. Dans ton cas tu n’attends pas et donc tu n’obtient pas la bonne valeur.
Il faut faire aussi attention à l’ordre des fonctions. Dans ta fonction setup :
kalmanvert.init(bmp.altitude(P ,1015) + correction, vertaccel_getValue(), 0.1, 0.3, millis() );
bmp.setOversampling(4);
Tu lis l’altitude "bmp.altitude(P ,1015) " sans avoir lancé une mesure “bmp.startMeasurment()”. Et tu règle la précision “bmp.setOversampling(4)” après avoir lu la première altitude “bmp.altitude(P ,1015)”.
Donc déjà dans la fonction setup, avant de s’occuper de kalman il faut :
bmp.begin(); //initialiser le BMP
bmp.setOversampling(4); //régler la précision maximale
char wt = bmp.startMeasurment(); //lancer un première mesure
delay(wt); //attendre, normalement il faudrait vérifier que wt n'est pas 0
bmp.getTemperatureAndPressure(T,P); //lire la mesure
double alti = bmp.altitude(P ,1015); //calculer une première altitude
Le deuxième erreur est un peu la même. Pour l’acceleration, il faut vérifier qu’il y a une valeur qui est prête à être lue. Cela se fait avec la fonction :
vertaccel_dataReady();
Dans ton cas tu lance cette fonction sans regarder ce qu’elle retourne. Donc en fait cela ne sert à rien puisque l’objectif de cette fonction c’est de savoir si une “donnée” est prête a être lue. Cette fonction retourne un “boolean” (vrai ou faux). Donc il faut tester ce qu’elle donne.
boolean accelReady = vertaccel_dataReady(); // dans accelReady il y a vrai ou faux
if( accelReady ) {
// ce code n'est executé que si il y a une valeur d'acceleration à lire
...
}
... // le programme continue
Tu peux abrégé ça en :
if( vertaccel_dataReady() ) {
// ce code n'est executé que si il y a une valeur d'acceleration à lire
...
}
Du coup pour attendre qu’une valeur accélération est prête pour ensuite la lire il faut faire :
while( ! vertaccel_dataReady() ) { //tant que l'acceleromètre n'est pas prêt
// on fait rien
}
/* maintenant on peut lire une valeur */
vertaccel_updateData();
double accel = vertaccel_getValue();
Donc dejà avec ça tu pourra initialiser le filtre de kalman avec de bonnes valeurs (alti, accel). Il restera le problème de “chauffe” des instruments. Mais c’est plus marginal.
Voilà pour la fonction setup. Malheureusement pour la fonction loop ça se complique :? . Pourquoi ? Par que dans un boucle qui gère plein de choses (l’accelerateur, l’alti, le speaker) on ne peut pas se permettre d’attendre sans rien faire que les valeur de l’alti et de l’accel arrivent. Il faut s’arrenger pour pouvoir continuer à travailler pendant mes mesures.
Mais c’est justement l’interêt de des fonctions “bmp.startMeasurment()” et “vertaccel_dataReady()”. Elle permettre de savoir si on est pret à lire une valeur.
Alors la il faut bien suivre :
Il faut que ton alti soit en permanence en train de faire une mesure. Et il te faut une variable pour stocker le temps à partir duquel tu pourra lire la valeur :
Donc en dehors de toutes les fonctions tu créé une variable :
unsigned long altiReadyTime;
Ensuite dès la fin de ta fonction setup il faut relancer un “bmp.startMeasurment()”. Et enregistrer ce temps :
char wt = bmp.startMeasurment(); //wt c'est pour "wait time"
altiReadyTime = millis() + wt; // milli donne le temps actuel et on ajoute le delai
Maintenant dans la boocle loop. Pour savoir si tu peux lire une alti tu fait :
if( millis() > altiReadyTime ) {
//le temps actuel est supérieur au temps "ready"
}
Pour savoir si tu peux lire une valeur d’acceleration tu fait :
if( vertaccel_dataReady() ) {
//l'accel est prêt
}
Tu peux combiner les deux ainsi :
if( millis() > altiReadyTime && vertaccel_dataReady() ) {
// les deux sont prêt
}
Dans c’est dans ce “if” que :
-> tu lis les valeurs alti et accel
-> tu met à jour kalman
-> tu lis les valeurs de kalman
-> tu relance une mesure d’alti en enregistrant le temps “ready”
Un peu comme dans la fonction setup en fait.
Ensuite par contre le code du beeper tu peux l’executer autant que tu veux (c’est très rapide).
Pour l’écran. Ce n’est pas la peine de toucher à l’affichage si tu n’a pas de nouvelle mesure où si tu n’a pas touché de boutons.
Mais là c’est encore du travail …
Mais l’essenciel c’est de comprendre cette gestion du temps.
Amuse toi bien.
Alors là, merci beaucoup pour ces précisions. je vais me pencher la dessus ce week-end . Petit vol en soaring cette après midi, le vario répond bien. Pas de video, j’ai pas pris de camera, et le vario bipait du fond de ma poche.
Bonjour, et tout d’abord merci pour votre travail !
Je m’embarque également dans la (petite) aventure du vario maison.
J’ai pioché dans vos travaux pour récupérer une base de travail.
La plus grande différence entre nos projet et l’écran : pour ma part je suis parti sur une écran couleur tactile, 3,2" : http://www.banggood.com/3_2-Inch-Nextion-HMI-Intelligent-Smart-USART-UART-Serial-Touch-TFT-LCD-Screen-Module-p-1105286.html?rmmds=myorder
L’avantage de ces écrans réside dans leur intelligence : on conçoit l’interface sur son PC et on la transfert dans l’écran. L’arduino ne doit alors gérer que la mise à jour des champs. Il existe également des objets graphique évolué (type courbe) qui peuvent être intéressant. Il faut ajouter que le tactile est résistif : il fonctionne avec des gants !
Je suis donc partie sur une interface à 3 écrans pour le vol :
Classique :
- vario analogique
- vario numérique
- alti
- vitesse sol
- cap
Thermique :
- vario analogique
- vario numérique
- vario sur 30s
- alti
- graphe des vario sur 2minutes
Transition (reste à développer)
- finesse sol
- vitesse
- cap
- vario numérique
- graphe des finesses sur 2 minutes
Plus un écran de réglage (à dévlopper).
Etant équipé d’une imprimante 3D, je vais commencer le boitier cet apres midi, avec l’idée de réaliser un boitier compact, vertical (pour clisper sur l’élévateur), tout en courbes.
Cordialement
Bonjour,
Voila une première version du boitier :
La bosse sur le dessus permet de loger le GPS, le buzzer, l’alti. Les boules en bas permettent de protéger l’écran en cas de chute.
Taille de l’ensemble : 120x60mm
A suivre …
Superbe !!
Pas mal ton boitier. Sur ton écran tu pourrais afficher une carte ? (juste par curiosité car je ne connais pas de PCB sous android, mais avec les modules vario externe, un petit PCB sous android, un écran pouvant afficher une carte, et zou, un appareil complet genre oudie
Si on veux faire un vario avec cartographie, il faut abandonner les arduinos : pas assez de capacité. Avec un arduino, et ce type d’écran on doit pouvoir gérer des way-points avec affichage de la distance et la direction du way point.
La solution pour la cartographie serait de faire un appareil avec un rasbery Pi et un écran tactile. mais la batterie va être plus grosse et le vario va sérieusement prendre de l’embonpoint. Un autre solution : utiliser un smartphone.
Cordialement
Salut !
Très bonne idée cet écran ! C’est très interessant de pouvoir décharger l’arduino des bibliothèques graphiques qui sont très gourmandes en mémoire. J’avais moi même cherché un écran LCD noir et blanc qui embarquait un jeu de polices pour pouvoir afficher au moins du texte sans difficulté. Mais je n’ai pas trouvé mon bonheur.
Chapeau pour la modélisation 3D. Décidement ça fait déjà deux personnes qui montrent leur réalisation, ça prends bien ces petites machines ! Il va falloir que je pense à m’équiper.
Tu as mis ton code en ligne ? Je serais interessé de voir le matos que tu prévois d’embarquer dans ton vario et comment tu le fais tourner.
Il faut vraiment que je me motive a finir ma deuxième version 3,5V pour pouvoir retravailler sur le code.
A+
Bonsoir,
Mon code se termine, ne manque que le lecteur de carte microsd (pour la trace) et son code. Je viens de terminer l’écran de calage de l’alti et la sauvegarde du calage dans l’eeprom pour ne pas avoir à la ressaisir à chaque fois. J’utilise 75% de l’espace programme de l’arduino, donc il reste un peu de place.
Dés qu’il est finalisé et testé en vol (je vol pas trop actuellement …) je vous le communique, mais il n’y a vraiment rien exceptionnel.
Les composants (port compris):
Ecran couleur tactile : http://www.banggood.com/3_2-Inch-Nextion-HMI-Intelligent-Smart-USART-UART-Serial-Touch-TFT-LCD-Screen-Module-p-1105286.html 24€
Arduino nano : http://www.banggood.com/ATmega328P-Nano-V3-Controller-Board-Compatible-Arduino-p-940937.html 3€
GPS : http://www.banggood.com/1-5Hz-VK2828U7G5LF-TTL-Ublox-GPS-Module-With-Antenna-p-965540.html 9€
Alti : http://www.banggood.com/CJMCU-BME280-Embedded-High-Precision-Atmospheric-Pressure-Altitude-Sensor-Module-For-Arduino-p-1103112.html 7€
Stepup : http://www.banggood.com/DC-DC-3_7V-to-5V-Step-Up-Voltage-Booster-Regulator-Micro-Power-Module-For-Brushed-Racing-Quadcopter-p-1092602.html 2€
Buzzer : http://www.banggood.com/3_3-5V-Passive-Buzzer-Alarm-Module-For-Arduino-p-985131.html 1,6€
Pas d’accu ou de chargeur usb dans ma commande, je pratique l’aéromodélisme et j’en ais plein le garage …
Budget total : 46€ , très raisonnable.
Cordialement
Salut,
c’est une bonne option, cet écran, par contre j’ai des doutes sur la visibilité en plein soleil.
Peux tu nous dire ce qu’il en est (si tu arrive a avoir du soleil a cette époque de l’année
)
Bonsoir,
Voila le projet se termine.
Je ais enfin pus tester l’écran en plein soleil. Il est très lumineux (plus qu’un téléphone) et il faut vraiment être dans l’axe du soleil pour ne pas le voir.
L’interface est composée de 5 écrans :
Ecran principale :
- Vario graphique
- Vario numérique
- Alti
- Vitesse
- Cap
Plus des boutons pour accéder aux autres écrans.
Ecran Thermique :
- Vario graphique
- Vario numérique
- Vario sur 30s
- Alti
- Graphique des Alti sur les dernières minutes
Ecran Réglage :
- Réglage de l’alti par 50 et 10m
Ecran carnet de vol :
Les 200 derniers vols avec pour chacun :
- Alti max
- Vario Max
- Temps de vol
Ecran météo :
- Température
- Hygrométrie (pour le moment … plante le capteur d’altitude)
- Latitude
- Longitude
Tous ça occupe 80% de la mémoire, il doit donc rester de quoi gérer un lecteur de microSD pour les traces GPS, dès que je l’aurais reçus.
Les copies d’écran (faite sur le logiciel de développement), sont jointes.